Работа с bitrix rest api

  1. 5 г. назад

    Всем привет!

    Никто не работал случайно с Битрикс rest api? Нужно из 1с http запросом получить список сделок из Битрикс 24. Использую вот этот метод - https://dev.1c-bitrix.ru/rest_help/crm/cdeals/crm_deal_list.php. Нужно получить список сделок с определенным значением поля "DATE_MODIFY". В их статье пример для их фреймворка на js, там все понятно. Но как задать этот фильтр, если я делаю прямой http запрос? В каком формате передать дату? Сделал вот так - "rest/crm.deal.list?auth=МойAccessToken&"DATE_MODIFY">=28.01.2019 0:00:00&"DATE_MODIFY"<=28.01.2019 23:59:59". Нифига, все равно возвращает мне сделки с датой модификации за 29-е число. Техподдрержка их молчит уже второй день, и инфы такой нигде нету.

  2. ты издеваешься?

    дата передается так

    2018-12-01

    Ответы: (7) (10)
  3. Я не работал с битрикс, но из документации очевидно, что тебе нужно сделать POST запрос с одним из параметров
    DATE_MODIFY

  4. Что такое Token?

  5. По ссылке 404. ИМХО надо правильно приготовить дату. В 1С для этого есть XMLСтрока

    Ответы: (5) (6)
  6. (4) Да, напрямую не заходит почему-то... Тогда там в дереве выбираем crm, потом сделки, потом crm.deal.list

  7. (4) Это понятно, что надо правильно ее приготовить... Вопрос в том, в каком именно формате надо ее передать?

    Ответы: (9)
  8. (1) Посмотрел формат, в котором мне возвращает дату Битрикс, сделал также, вот так

    rest/crm.deal.list?auth=МойAccessToken&"DATE_MODIFY">=2019-01-28Т00:00:00&"DATE_MODIFY"<=2019-01-28Т23:59:59

    все равно тоже самое...

    Ответы: (10)
  9. rest/crm.deal.list?auth=МойAccessToken&filter[]={">=DATE_MODIFY":"2019-01-28"}&filter[]={"<=DATE_MODIFY":"2019-01-29"}

    как то так, наверно, с учетом того что все надо заэкранировать (кавычки замегнить на %22 и тд)

    Ответы: (13)
  10. (6) Ты из 1с вызываешь? Тогда: XMLСтрока(ТвояДата)

    Ответы: (14)
  11. Рупор Галактики (1) Посмотрел формат, в котором мне возвращает дату Битрикс, сделал также, вот так

    rest/crm.deal.list?auth=МойAccessToken&"DATE_MODIFY">=2019-01-28Т00:00:00&"DATE_MODIFY"<=2019-01-28Т23:59:59

    все равно тоже самое...

    ты что инвалид? я ж написал как передавать

    Ответы: (12)
  12. Может битрикс не понимает 2 упоминания параметра? Увидел первый раз условие на DATE_MODIFY и второй раз проигнорировал?

  13. (10) Так я тоже уже пробовал, мой прекрасно разбирающийся в форматах передачи дат друг... Не помогло.

  14. (8) Попробовал, не помогло...

  15. (9) Если делаю xmlстрока, вот так получается rest/crm.deal.list?auth=МойAccessToken&"DATE_MODIFY">=2019-01-28T00:00:00&"DATE_MODIFY"<=2019-01-28T23:59:59, я так уже делал сам, все равно не работает...

  16. 30.01.2019 16:47:02 отредактировано Рупор Галактики

    Вот так получилось, правда без времени, но фильтрует верно.

    filter[>DATE_MODIFY]=2019-01-30&filter[<DATE_MODIFY]=2019-01-31

    Такой вот полный запрос

    rest/crm.deal.list?auth=МойAccessToken&filter[>DATE_MODIFY]=2019-01-30&filter[<DATE_MODIFY]=2019-01-31

    Ответы: (20) (22)
  17. А если с временем, вот так

    rest/crm.deal.list?auth=МойAccessToken&filter[>DATE_MODIFY]=2019-01-30Т00:00:00&filter[<DATE_MODIFY]=2019-01-31Т23:59:59

    То не находит ничего... :(

  18. Попробовал двоеточия передать urlecode, вот так

    filter[>DATE_MODIFY]=2019-01-30Т00%3A00%3A00&filter[<DATE_MODIFY]=2019-01-31Т23%3A59%3A59

    Тоже не работает.

    Ответы: (19)
  19. Без времени конечно тоже норм, мне нужно за 1 день, но хотелось все же разобраться...

  20. 30.01.2019 17:31:56 отредактировано sda553

    (17) 2019-01-31T13:28:06.419Z

  21. 31.01.2019 18:06:36 отредактировано Рупор Галактики

    (15) Похоже я вчера где-то ошибся с написанием запроса, сегодня сделал все еще раз, все работает, вот такой рабочий фильтр получился, с датой и временем

    filter[>DATE_MODIFY]=2019-01-31T14:00:00&filter[<DATE_MODIFY]=2019-01-31T17:59:59

    Всем спасибо, кто потел, напрягался.

    Ответы: (22)
  22. Тока увидел ветку, но вспотеть успел

  23. Рупор Галактики (15) Похоже я вчера где-то ошибся с написанием запроса, сегодня сделал все еще раз, все работает, вот такой рабочий фильтр получился, с датой и временем

    filter[>DATE_MODIFY]=2019-01-31T14:00:00&filter[<DATE_MODIFY]=2019-01-31T17:59:59

    Всем спасибо, кто потел, напрягался.

    я те сразу сказал как написать мне спасибки!

    Ответы: (23)
  24. (22) Но про время то ты мне не сказал, только про дату, подлец! Кайся! И спасибки даны будут тебе.

  25. Может и пригодится кому... Вот так делается выборка конкретных полей из списка прямым http запросом в Битриксе:

    &select[0]=ID&select[1]=COMPANY_ID&select[2]=CONTACT_ID&select[3]=OPPORTUNITY&select[4]=CURRENCY_ID&select[5]=CREATED_BY_ID&select[6]=DATE_CREATE

    Опять же, доков нету, пришлось додумывать самому.

  26. 19.02.2019 17:14:11 отредактировано Рупор Галактики

    Не появилось ли тут знатоков работы с Битрикс?

    Как передать для фильтра массив значений?

    Предположим, я делаю запрос на crm.deal.list с таким фильтром для получения одной сделки, у которой ID = 1:

    filter[ID]=1

    но мне нужно получить сделки с ID 1, 2 и 3. Как мне передать этот массив значений в параметре? Опять же, в документации фигу чего написано.

  27. Оказывается, вот так:

    filter[ID][0]=1493&filter[ID][1]=1447

    Сам спросил, сам ответил, называется...

  28. с такими знаниями ты ЕРП не напишешь

    Ответы: (29)
  29. 19.02.2019 18:22:53 отредактировано sda553

    Нельзя знать всех апи. Но надо уметь узнавать. А человек выше продемоестрировал это умение вполне успешно

  30. (27)

  31. 27.02.2019 11:18:41 отредактировано Рупор Галактики

    В процессе всего этого дела возник у меня один вопрос, задам его знатокам 1с:

    предположим, у меня есть структура, вот такая:

    стрДанные = новый структура("данные", "123");

    есть таблица значений, с колонкой "Данные" и произвольным типом значения.

    я в эту колонку для некоторых строк помещаю эту структуру, вот так:

    для каждого строка из таблица цикл
    строка.данные = стрДанные;
    конецЦикла;

    1с для каждой строки копирует эту структуру и помещает в ячейку, или в каждой строке просто ссылается на уже созданную структуру?

    Я думаю, что копирует, но, может, я не прав?

    Ответы: (33)
  32. Проверь экспериментально, какая там мутабельность

  33. (30) По ссылке.

    Ответы: (34)
  34. (33) Спасибо.

  35. 04.04.2019 08:28:09 отредактировано Рупор Галактики

    вот еще вопрос знатокам:

    предположим, у меня отрабатывает функция, вот такая

    Процедура агВыполнитьОбменСБитрикс24() Экспорт
    	dataProcessors.exchangeBitrix.create().executeExchange();
    КонецПроцедуры

    правильно ли я понимаю, что после выполнения dataProcessors.exchangeBitrix.create().executeExchange(); 1с сама удалит из памяти и созданную обработку и все глобальные переменные (таким образом закроет все http соединения, которые создавались) из модуля объекта обработки, которые в процессе выполнения создавались и использовались?

    писать вот так:

    dataProcessor = dataProcessors.exchangeBitrix.create();
    dataProcessor.executeExchange();
    dataProcessor = null;

    вовсе не обязательно, правильно?

    Ответы: (36)
  36. (35) Нет. Где у тебя определяется переменная dataProcessors? Когда она выйдет из области видимости будут вызваны деструкторы тогда ее и ликвидируют.

  37. 04.04.2019 10:17:29 отредактировано Рупор Галактики

    dataProcessors это "Обработки", только на английском. Код аналогичен "Обработки.exchangeBitrix.Создать().executeExchange()". exchangeBitrix - это обработка, встроенная в конфигурацию. То есть, в моем случае, после того, как отработает процедура "агВыполнитьОбменСБитрикс24()" 1с удалит из памяти и созданную обработку exchangeBitrix, и все переменные, которые в процессе ее создания и выполнения executeExchange() были созданы, так?

  38. Блин, пиши 1с код на русском! Да, созданные переменные будут очищены.

  39. Пейсание на английском в 1С - это первый шаг к будущей ЕРП-убийце1С!

  40. 04.04.2019 14:04:32 отредактировано Рупор Галактики

    Вообще, объективно, английский для написания кода подходит лучше. Английский язык компактнее, след-но код быстрее писать, легче читать и проще понимать.

  41. Тебе приходилось что-нибудь слышать про стандарты кодирования? В 1с принято писать по-русски.

    Ответы: (42) (44)
  42. (41) Я уже почти ничего не делаю в 1с, это мой последний клиент, и то я им занимаюсь потому что Битрикс.

    Ответы: (43)
  43. (42) Помнишь правило писать код так, словно его будет после тебя поддерживать психопат с манией убийства? Даже в случае последнего клиента не стоит ваять говнокод. Я много раз убеждался, что наш мир тесен и никогда не знаешь что и с кем будешь делать в будущем. Инструменты разработки меняются - репутация остается.

  44. 05.04.2019 03:04:09 отредактировано ЗлобнийМальчик

    ТеньД Тебе приходилось что-нибудь слышать про стандарты кодирования? В 1с принято писать по-русски.

    поразительно но вы правы
    https://its.1c.ru/db/v8std#content:-2145783191:hdoc

    1. Тексты модулей должны быть написаны на русском языке.

    Ответы: (45)
  45. (44) Что поразительного в том, что разработчик читает стандарты кодирования языка на котором работает? Поразительно ИМХО было бы если бы не читал.

    Ответы: (46)
  46. (45)Не, что читает то понятно
    удивляет другое. зачем 1с переводить свою платформу на английский язык и при этом писать что писать конфигурации надо на русском

    Ответы: (47)
  47. (46) У 1с платформа локализована не только на английский. Задел на захват иностранных рынков. К сожалению, не взлетело.

  48. В продолжении темы:

    вот так можно установить у сделки с нужным ID нужное значение нужного поля:

    &ID=20152&fields[OPPORTUNITY]=1000&fields[DATE_MODIFY]=2019-06-17T14:00:00 (у сделки с ID равным 20152 устанавливаем сумму сделки равной 1000 рублей и дату изменения 17.06.2019 14:00).

    Ответы: (50)
  49. А кто-то мутил загрузку задач в свою базу?

    Бесит меня битриксовский канбан, статусов нет, эпиков и спринтов нет, но, блин - корпоративный стандарт.

    В Джиру никого не загонишь [smile=T_T]

    Ответы: (51)
  50. (48) это при помощи метода crm.deal.update, забыл написать.

  51. 18.06.2019 17:27:38 отредактировано Рупор Галактики

    (49) Все, что в этой теме написано сгодиться для работы с любым объеком в Битриксе, ищи тут https://dev.1c-bitrix.ru/rest_help/index.php метод для нужного объекта, загружай.

  52. 18.06.2019 17:36:12 отредактировано Рупор Галактики

    Также недавно узнал про хорошую штуку в Битриксе - приложение "Документация по REST API". Устанавливаешь его в приложениях в Битриксе, открываешь там нужный метод, копируешь пример из его описания в консоль приложения, выполняешь, и оно показывает тебе, как выглядит http запрос для этого метода. Сразу видно, как и какие параметры/данные, в каком формате, нужно передавать.
    444.jpg.
    Крайне удобная и полезная вещь.

  53. Выборка задач из стадий осуществляется методом task.stages.get. https://dev.1c-bitrix.ru/rest_help/tasks/task/kanban/index.php

    Но при этом в самом методе совсем другое описание (

    Метод получения стадий Канбана / Моего плана.

    Ответы: (54)
  54. (53) Тебе нужны просто задачи или задачи из канбана? Если просто задачи то tasks.task.list с фильтрами и указанием нужных полей. Если именно из Канбана, то все правильно, task.stages.get. Описание, да, там бывает такое, но работает оно правильно...

    Ответы: (56)
  55. 20.06.2019 10:46:15 отредактировано MIK

    Обычные задачи я получил, интересуют канбановские колонки. Во-первых, почему-то именно для этой хрени нужны админские права, во-вторых, ID группы можно получить только отладчиком в браузере ) в самом Битриксе его не посмотреть

  56. (54) а можешь все-таки проверить task.stages.get?

    если вызываешь с фильтром по группе task.stages.get?filter[groupId]=607&isAdmin=true он пишет {"error":"DISPATCHER_ERROR","error_description":"Argument \u0022entityid\u0022 is required

    если entityid=0&filter[groupId]=607&isAdmin=true - то просто список твоих колонок

    а в tasks.task.list по задаче stageId = 0 [smile=:/]

  57. Короче, через роботов пилим заполнение тэга, а он уже считывается норм.

или зарегистрируйтесь чтобы ответить!