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

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

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. aspirator23 473 14.10.21 13:55 Сейчас в теме
Можно в ODATA установить отбор по массиву?
В запросе это когда в условии указано "....Где Справочник.Номенлатура.Ссылка в (&Товары)..." ?
2. Dementor 840 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 473 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 840 26.12.21 00:58 Сейчас в теме
(6) мысль интересная. Поразмышляю над нею во время новогодних праздников. Изначально я отверг данную возможность, но сейчас думаю, что можно отредактировать те данные, которые получены.
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Аналитик 1С
Санкт-Петербург
зарплата от 120 000 руб.
Полный день

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

Тестировщик 1С
Санкт-Петербург
зарплата от 60 000 руб. до 120 000 руб.
Полный день

Архитектор НСИ
Москва
зарплата от 250 000 руб. до 300 000 руб.
Полный день