Практика OData. Пишем проводник по данным

0. 849 11.10.21 11:37 Сейчас в теме
Специалисты, начиная работать с OData, сталкиваются с трудностями с первых шагов - не очевидно какие именно данные может дать источник и какие механики доступны для формирования выборок данных. Так возникла идея написать обработку, которая позволяет проанализировать структуру и содержимое источника OData, а так же станет примером кода для всех тех, кто делает свою интеграцию на платформе 1С:Предприятие 8.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. aspirator23 485 14.10.21 13:55 Сейчас в теме
Можно в ODATA установить отбор по массиву?
В запросе это когда в условии указано "....Где Справочник.Номенлатура.Ссылка в (&Товары)..." ?
2. Dementor 849 14.10.21 14:41 Сейчас в теме
(1) в Odata нет непосредственных операций над множествами. Можно делать только группу ИЛИ, в которой перечислять сравнения с каждым из элементов массива.

Поддерживаются лямбда-функции для фильтров по вложенным множествам (пример - табличная часть документа), но для вашей задачи это не поможет. Если интересно, то там есть две функции:
any - возвращает True, если в подчиненной коллекции есть хоть одна запись, которая удовлетворяет условию из этой функции;
all - возвращает True, если в подчиненной коллекции все записи удовлетворяют условию из функции.

Пример с ИТС: http://host/base/odata/standard.odata/Document_Продажи?$filter=Товары/any(d: d/Цена gt 10000) - отбор всех документов "Продажа", в которых хоть одна позиция продана по цене выше 10000.
3. aspirator23 485 14.10.21 20:35 Сейчас в теме
(2) Спасибо. Попробую так.
4. user1689208 27.10.21 13:46 Сейчас в теме
Добрый день! Интересная статья! Хотел бы задать вопрос! Я на Python через OData хочу осуществить PATCH запрос, для изменения контактной информации в 1С. Я прилагаю такое тело запроса:
{
"Вид": "c2eb441c-4e2a-11ea-2f8e-000c2972e4a3",
"Вид_Type": "StandardODATA.Catalog_ВидыКонтактнойИнформации",
"Объект": "24e3a680-022d-11eb-f583-000c2972e4a3",
"Объект_Type": "StandardODATA.Catalog_ФизическиеЛица",
"Поле3": "87071112233",
"Представление": "87071112233",
"Тип": "Телефон"
},
где Вид - это ref_key вида контактной информации, Объект - это ref_key физического лица.

Также, прилагаю такой URL:
http://host_ip/db_name/odata/standard.odata/InformationRegister_КонтактнаяИнформация(guid'c2eb441c-4e2a-11ea-2f8e-000c2972e4a3')?$format=json,

где guid - это ref_key вида контактной информации.

Когда я отправляю patch запрос, выскакивает ошибка - "The field that specifies type is not found for the Объект property, which has composite or binary type!"

Как я понял, запрос не может найти такой вид контактной информации для физического лица, которого я указал. Но я никак не пойму почему это так, если я всего лишь изменяю Представление и Поле3 телефона в ответе get запроса на ту же самую КонтактнуюИнформацию.
Буду рад любой помощи, объяснении моих ошибок и просто критике!
5. user1717389 20.12.21 09:55 Сейчас в теме
(4)Помимо объекта, в строке URL надо указать тип объекта)
6. PanKir 70 23.12.21 10:36 Сейчас в теме
(0) Я так понимаю данная обработка только для чтения информации. А из предыдущей статьи - для редактирования.
а есть объединенная версия? чтобы сперва получить данные, а потом сформировать запрос для редактирования...
7. Dementor 849 26.12.21 00:58 Сейчас в теме
(6) мысль интересная. Поразмышляю над нею во время новогодних праздников. Изначально я отверг данную возможность, но сейчас думаю, что можно отредактировать те данные, которые получены.
Оставьте свое сообщение
Вакансии
Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 150 000 руб. до 200 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Нижний Новгород
зарплата от 170 000 руб.
Полный день

Администратор 1C
Москва
зарплата до 110 000 руб.
Полный день