Внешняя обработка «Генератор OData запросов» для 1С
Аннотация.
Представляю вашему вниманию внешнюю обработку, значительно упрощающую формирование URL запросов к стандартному интерфейсу OData, встроенному в платформу «1С:Предприятие 8». Обработка позволяет в наглядном режиме выбрать ресурс метаданных, задать фильтры, сортировку, ограничения и прочие параметры, а затем получить готовый URL, пригодный для использования в HTTP клиентах, интеграционных шинах или просто в браузере.
1. Зачем это нужно?
Начиная с версии 8.3.5, платформа 1С поддерживает автоматическую публикацию объектов метаданных через протокол OData. Это открывает широкие возможности для интеграции: получение данных из 1С без написания прямых запросов, работа из любых сред (включая Linux), построение личных кабинетов, выгрузка/загрузка данных и многое другое.
Однако ручное составление корректного URL с учётом всех нюансов синтаксиса (фильтры, функции, лямбда-выражения, суффиксы _Key, _Type и т.п.) требует либо постоянного обращения к документации, либо написания собственных утилит. Данная обработка призвана снять эту рутинную задачу и дать разработчику готовый рабочий инструмент, не требующий внесения изменений в конфигурацию.
2. Основные возможности
Обработка представляет собой внешнюю epf форму, работающую в режиме управляемого приложения. Её ключевые функции:
-
Автоматическое построение дерева ресурсов OData
При запуске обработка анализирует метаданные текущей информационной базы и строит иерархический список всех доступных для публикации объектов, включая:- справочники, документы, журналы документов, планы видов характеристик, планы счетов, планы видов расчёта, планы обмена, константы;
- регистры сведений (записи и срез последних);
- регистры накопления, расчёта, бухгалтерии;
- бизнес процессы и задачи;
- табличные части перечисленных объектов. Для каждого элемента отображается его внутреннее имя и реальное имя ресурса в OData (префикс + имя, например
Catalog_Номенклатура).
-
Задание фильтров ($filter)
Добавлена удобная таблица, где для каждой строки можно выбрать:- поле ресурса (с возможностью выбора из списка свойств выбранного объекта);
- оператор сравнения (
eq,ne,gt,ge,lt,le,substringof,startswith,endswith– полный набор поддерживаемых OData операторов); - значение;
- логическую связку с предыдущим условием (
and/or). Обработчик начала выбора для поля оператора и связки формирует выпадающий список, не допуская ошибок в синтаксисе.
-
Сортировка ($orderby)
Отдельная таблица для указания полей и направления сортировки (asc/desc). Поля также выбираются из состава свойств текущего ресурса. -
Выбираемые поля ($select)
Поле для перечисления через запятую имён свойств, которые необходимо включить в ответ. -
Раскрытие связанных сущностей ($expand)
Зарезервировано для будущей поддержки (в стандартном 1С OData не реализовано, но может пригодиться для кастомных сервисов). -
Ограничение количества записей
Параметры$topи$skipпозволяют управлять размером выборки. -
Выбор формата ответа
Переключательjson/atom(xml). При выбореjsonдобавляется параметр$format=json, дляatomон опускается (поведение по умолчанию). -
Формирование итогового URL
По нажатию кнопки «Сформировать URL» все заданные параметры собираются в корректно закодированную строку, готовую для копирования. -
Сохранение настроек
При закрытии обработки все сделанные установки (адрес сервиса, выбранный ресурс, фильтры, сортировка, параметры) автоматически сохраняются в профиле пользователя и восстанавливаются при следующем открытии. Это избавляет от необходимости каждый раз настраивать рабочее окружение.
3. Интерфейс и работа с обработкой
Внешний вид обработки разбит на несколько логических групп.
-
Параметры сервиса
Поле «Адрес сервиса» – базовый URL до стандартного интерфейса OData, напримерhttp://server/base/odata/standard.odata/. -
Доступные метаданные
Дерево, отображающее все доступные для публикации объекты. При выборе строки автоматически заполняется имя ресурса, очищаются таблицы фильтров и сортировки, а поля для выбора свойств в этих таблицах подстраиваются под выбранный объект. -
Фильтры
Таблица со столбцами «Поле», «Оператор», «Значение», «И/ИЛИ». Предусмотрено автоматическое добавление новых строк. -
Сортировка
Аналогичная таблица с колонками «Поле» и «Направление». -
Параметры запроса
Поля для ввода$select,$expand,$top,$skipи выбора формата. -
Кнопка «Сформировать URL» и поле результата
Итоговый URL появляется в read only поле; его можно скопировать и использовать в любом HTTP клиенте.
4. Как это работает технически
Обработка построена целиком на стандартных механизмах платформы:
- Дерево ресурсов формируется на сервере путём обхода коллекций метаданных (
Метаданные.Справочникии т.д.) и автоматического добавления табличных частей и виртуальных таблиц регистров. - Списки свойств для выбора в фильтрах и сортировке генерируются функцией
ПолучитьСвойстваOData, которая анализирует тип выбранного объекта и возвращает массив допустимых имён (включая суффиксы_Key,_Type). - Сборка URL происходит на клиенте: все непустые параметры объединяются знаком
&, при этом значения$filterи$orderbyпредварительно собираются из соответствующих таблиц. - Сохранение настроек реализовано через
СохранитьЗначение/ВосстановитьЗначение– это штатный способ хранения пользовательских данных в профиле ОС, не требующий прав на запись в базу.
Обработка не требует изменений в конфигурации и может быть запущена в любой типовой или самописной базе на платформе 8.3.5 и выше, где активирован стандартный интерфейс OData для нужных объектов.
5. Пример использования
Допустим, нам необходимо получить список контрагентов, у которых кредит больше 1000, отсортированный по убыванию наименования, только поля «Наименование» и «ИНН», и вернуть результат в формате JSON.
После открытия обработки мы действуем так:
- В поле «Адрес сервиса» вводим
http://localhost/MyBase/odata/standard.odata/. - В дереве раскрываем «Справочники» и выбираем
Контрагенты. Автоматически подставитсяCatalog_Контрагенты. - В таблице фильтров добавляем строку:
- Поле:
Кредит(выбираем из выпадающего списка) - Оператор:
Больше (gt) - Значение:
1000
- Поле:
- В таблице сортировки добавляем:
- Поле:
Наименование - Направление:
По убыванию (desc)
- Поле:
- В поле «Выбираемые поля» пишем:
Наименование, ИНН - Для формата выбираем
json.
Нажимаем «Сформировать URL». В поле результата получим:
http://localhost/MyBase/odata/standard.odata/Catalog_Контрагенты?$format=json&$filter=Кредит gt 1000&$orderby=Наименование desc&$select=Наименование, ИНН
Этот URL можно сразу вставить в адресную строку браузера, использовать в PowerShell, curl или в HTTP соединении из другой учётной системы.
6. Заключение
Представленная обработка существенно ускоряет освоение и повседневное использование OData в проектах на 1С. Она будет полезна как разработчикам, впервые знакомящимся с технологией, так и опытным специалистам, которым надоело вручную вспоминать синтаксис операторов и функций. Инструмент распространяется свободно, может быть доработан под специфические требования (например, добавлена поддержка функций работы с датами;фильтры через коллекции и т.п.).
Буду рад обратной связи и предложениям по развитию.
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.196.21
Вступайте в нашу телеграмм-группу Инфостарт