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

11.10.21

Интеграция - Внешние источники данных

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

Скачать исходный код

Наименование Файл Версия Размер
Изучение данных через протокол oData
.epf 35,67Kb
37
.epf 1.0 35,67Kb 37 Скачать

Статья продолжает серию статей про возможности доступа в базу 1С посредством протокола OData. Предыдущие работы: "Практика доступа в базу 1С через протокол oData. Чтение данных" и "Практика доступа в базу 1С через протокол oData. Изменение данных".

Но, если мы раньше больше занимались теорией, то сейчас пришло время погрузится в практику. В рамках статьи написана универсальная обработка, которая позволяет подключатся к неизвестным источникам данных, анализировать доступную структуру и позволит сделать произвольные выборки с использованием отборов и сортировок (можно даже не к базам 1С).

 

Зачем?

  1. Количество инструментов для анализа данных доступных в источнике OData ограничено, анализировать "глазами" километры служебной выдачи в формате XML слишком утомительно.
  2. Существующие инструменты по работе с OData не учитывают специфику данных из баз 1С (типы данных платформы, особенности наименований, предопределенные свойства)
  3. Есть желание создать удобный конструктор формирования URL для запроса данных с "предпросмотром" для быстрого анализа результатов.

 

Ограничения при разработке

  • Базовая цель - написать единую обработку для использования в обычном и управляемом интерфейсе;
  • Код должен работать под 8.2 и желательно в 8.1 - в коде не используются новые возможности языка, которые добавлены с версии 8.3.6;
  • Независимость от БСП и прочих библиотек;
  • Отсутствие дублирования кода - вся общая функциональность для обычных и управляемых интерфейсов перенесена в модуль обработки (не смотря на то, что это создает сложности при разработке УФ);
  • Интерфейс форм полностью переведен на русский и украинский языки, что позволяет комфортно использовать обработку в 90% существующих конфигураций (для Казахстана, РБ и прочих стран предлагаю перезапускать базы в русском интерфейсе), но с другой стороны это не коммерческое решение и потому я позволил себе не тратить время на сообщения пользователям, которые вывожу только на русском языке без НСтр();
  • Ограничение типов информации, с которыми допустима работа, до плоских таблиц - это позволяет облегчить алгоритм формирования запросов и упрощает методику вывод полученных данных, но при проектировании решения пришлось отказаться от виртуальных таблиц с параметрами, получения объектов с подчиненными табличными частями и от левых соединений со связанными таблицами (которые делаются с помощью $expand);
  • Возможность по работе с отборами ограничил только до операций над примитивными типами и до работы с булевыми группировками; от функций по работе с датами, строками и привидением типов пришлось отказаться, чтобы иметь возможность применить штатный функционал платформы.

 

Обзор функционала

Подключение

Подключиться к источнику данных OData очень просто - нужно указать путь к публикации базы 1С, логин и пароль. Если это не база 1С, а произвольный источник, то нужно указать URL до части "/standard.odata/". На всякий случай добавил подсказку по формату ввода адреса и пример.

Допускается указание логина и пароля в тексте пути подключения к базе - после ввода значения происходит парсинг и логин с паролем автоматически будут перемещены в нужные поля.

Для удобства многоразовой работы с одним и тем же источником данных, реализовано сохранение пути, логина и пароля между сеансами (в УФ полностью автоматически, а в ОФ необходимо использовать штатные команды формы).

 

Чтобы проверить корректность параметров подключения, можно воспользоваться командой "Проверить подключение".

 

Просмотр модели данных

Выполнив настройки подключения, можно делать запрос структуры доступных данных. Получение данных происходит с помощью GET-запроса с параметром $metadata (подробнее тут).

Все полученные с сервера результаты группируются по типам и будут выведены в виде дерева в левой части формы. Если источником была база 1С, то информация будет показана с указанием привычных типов метаданных платформы.

После выбора в дереве типов строки с данными, в правой части формы будет показана таблица свойств с колонками:

  • Название - привычное для пользователей представление;
  • Имя - настоящее название свойства, по которому следует делать запросы;
  • Тип - тип данных OData

В таблице свойств есть возможность ограничить свойства, которые в будущем попадут в выборку при анализе.

 

Отборы и сортировки

После выбора конкретного типа данных на закладке "Отбор и сортировка" становятся доступными настройки, как вы правильно догадались, для отборов и сортировок. Отборы будут преобразованы в параметр $filter (подробнее тут), а сортировка в параметр $orderby (подробнее тут).

Ввод отборов и сортировок реализован на базе объекта "Компоновщик настроек компоновки данных", который инициируется выбранными свойствами с учетом их типов. Реализована поддержка типов Число, Дата, Булево и Строка. Все остальные типы преобразовываются к Строка.

В отборах поддерживаются все три вида группировки - НЕ, И и ИЛИ с любым уровнем вложенности.

Среди операций поддерживаются только шесть:

  • равно
  • не равно
  • больше
  • больше или равно
  • меньше
  • меньше или равно

Если указать какую-то другую операцию, то она при формировании запроса будет преобразована к "Равно".

 

Строка запроса и просмотр результата

На закладке "Просмотр данных" можно посмотреть результаты предыдущих действий и заняться анализом данных полученных из источника OData.

Для анализа есть табличное поле для вывода результата запроса. Колонки таблицы формируются динамически в то время, когда мы выбираем интересующие данные в дереве типов и ставим галочки рядом с интересными для нас свойствами. Типы колонок соответствуют типам свойств данных. Поддерживаются Число, Дата, Булево или Строка. Все остальные типы приводятся к типу Строка.

Чтобы заполнить таблицу данными, необходимо использовать команду "Прочитать данные из источника". Чтение будет произведено согласно текущему содержимому поля "Строка запроса", которое формируется на основании ранее сделанных действий:

  • выбор типа данных;
  • выбор свойств для выборки;
  • указание отборов;
  • указание сортировки;
  • дополнительные настройки.

Поле "Строка запроса" формируется автоматически, но пользователю дается право ручного редактирования. Хороший пример  - это работа с Комментарием. В типовых конфигурациях у многих объектов поле "Комментарий" безграничной длинны и такие поля нельзя использовать в операциях сравнения в фильтрах. Можно выкрутиться, если воспользоваться строковыми функциями и сравнивать с образцом полученную подстроку. Но поскольку в данной обработке не реализованы формы для ввода формул OData, то ручное редактирование окажется полезным.

Если при редактировании поля "Строка запроса" мы хотим вернуться к первоначальному состоянию, то достаточно выполнить очистку поля и первоначальное значение вернется.

Если есть желание посмотреть на результат вне 1С, то в поле "Строка запроса" можно воспользоваться стандартной командой "Открыть", после чего для выполнения запроса будет открыт браузер.

Для удобства анализа данных добавлены дополнительные параметры:

  • Вывод представления ссылок - позволяет для ссылочных типов выводить их текстовое представление вместо GUID (добавляет для выбранных ссылочных типов служебное свойство ____Presentation)
  • Пропустить записей ___ - позволяет получить выборку не с первой, а после указанной строки. Так, если указываем 10, то в результате получим данные начиная с 11 записи (используется параметр $skip, тут подробнее)
  • Размер выборки ___ - позволяет ограничить размер получаемого пакета указанным количеством записей. Так, если укажем 10, то в выводе получим 10 записей, даже если в базе их миллионы (используется параметр $top, тут подробнее)

 

Пример анализа данных.

Для закрепления давайте решим простую задачу:

Необходимо получить из внешней базы 1С последние 5 курсов для валюты "доллар".

Задача выполняется в три шага:

  1. Подключимся к базе 1С и получим дерево метаданных.
  2. Сделаем запрос к справочнику Валюты, чтобы узнать GUID для доллара.
  3. Настроим фильтр по регистру сведений "Курсы валют" для отбора только доллара, укажем обратную сортировку по Дате и укажем ограничение в 5 записей на результат.

OData REST HTTP доступ анализ

См. также

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22613    19    1    

22

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9303    9    8    

11

Экстрактор данных 1С в BI - выгрузка данных из 1С в BI-аналитику

Внешние источники данных Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

15.11.2022    13630    12    SQV0    47    

28

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    48825    97    163    

86

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

Внешние источники данных Загрузка и выгрузка в Excel Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

24000 руб.

16.11.2018    30078    20    31    

21

Загрузка в БГУ из УРМ "Криста"

Внешние источники данных Банковские операции Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия государственного учреждения Россия Бухгалтерский учет Платные (руб)

Обработки для загрузки данных из УРМ "Криста" в бухгалтерию государственного учреждения редакция 2.0. Есть Демо доступ на вкладке Бесплатные файлы на 1 месяц со дня получения демонстрационного ключа регистрации. Поддерживает ПО "Web-исполнение" от НПО "Криста".

4800 руб.

19.06.2013    38482    137    90    

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