1С и протокол OData по REST интерфейсу

В 1С:Предприятие, начиная с версии 8.3.5, платформа автоматически может генерировать REST интерфейс для всей конфигурации. Он работает по протоколу OData и он позволяет работать со справочниками, документами и регистрами через web-сервер. В целом скорость получения данных на несколько порядков быстрее чем через COM или файлы, что не может не радовать.

Для разных операций используются разные запросы:

  • GET – используется для получения данных;
  • POST – используется для создания объектов;
  • PATCH – модификация существующего объекта;
  • DELETE – удаление объекта.

Для доступа к различным объектам используются префиксы:

  • Справочник — Catalog;
  • Документ — Document;
  • Журнал документов — DocumentJournal;
  • Константа — Constant;
  • План обмена — ExchangePlan;
  • План счетов — ChartOfAccounts
  • План видов расчета — ChartOfCalculationTypes;
  • План видов характеристик — ChartOfCharacteristicTypes;
  • Регистр сведений — InformationRegister;
  • Регистр накопления — AccumulationRegister;
  • Регистр расчета — CalculationRegister;
  • Регистр бухгалтерии — AccountingRegister;
  • Бизнес-процесс — BusinessProcess;
  • Задача — Task.

Используя протокол ODATA можно использовать так же и встроенные методы объектов, выполняя POST запросы.

  • Для документа – Post() и Unpost();
  • Для задачи – ExecuteTask();
  • Для бизнес-процесса – Start();
  • Для регистра сведений – SliceLast() и SliceFirst();
  • Для регистра накопления и регистра бухгалтерии – Balance(), Turnovers() и BalanceAndTurnovers();
  • Для регистра расчета – ScheduleData(), ActualActionPeriod(), <ИмяПерерасчета>() и Base<Имя базового регистра расчета>().

Чтобы начать работать с этим интерфейсом нужно его опубликовать. Делается это через меню конфигуратора “Администрирование” – “Публикация на веб-сервере”, ставим галку “Публиковать стандартный интерфейс OData” и нажимаем “Опубликовать”.

После публикации работу протокола можно проверить по адресу http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata. В ответе мы должны получить весь состав опубликованных таблиц. Он должен быть похож на рисунок ниже.

Результат запроса в 1С по протоколу OData
Результат запроса в 1С по протоколу OData

Если после публикации REST интерфейса состав опубликованных данных пустой, то нужно воспользоваться методом УстановитьСоставСтандартногоИнтерфейсаOData. На входе у него 1 параметр типа “массив”. В массив нужно добавить метаданные, которые нужно опубликовать.

Состав = новый Массив;
Состав.Добавить(Метаданные.Справочники.Контрагенты);
УстановитьСоставСтандартногоИнтерфейсаOData(Состав);

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

http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata/Catalog_<ИмяСправочника>

При запросе можно использовать следующие параметры:

select – в этом параметре указываем нужные нам поля;

format – задаём формат, в котором мы хотим получить ответ (XML или JSON), по умолчанию XML

odata – если нам в ответе не нужно описание метаданных, то пишем “odata=nometadata”

filter – тут указываем отборы.

Как я и писал выше, мы можем получить ответ в двух форматах XML или JSON, по умолчанию используется XML. Для того чтобы получить данные в формате JSON нужно к URL адресу добавить “?$format=application/json”.

http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata/Catalog_<ИмяСправочника>?$format=application/json

В основном нам нужно получать конкретный элемент справочника, а не все его записи. Для этого используем волшебное слово “filter”.

http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata/Catalog_<ИмяСправочника>?$format=application/json&$filter=Ref_Key eq guid’УИД’

Если вы обратили внимание, в URL-адресе указано два параметра $format и $filter, располагаться они могут в любом порядке, главное чтобы перед первым параметром был знак “?“, а перед вторым “&“. Логика тут такая, мы указываем адрес справочника в первой части, а параметры во второй. Эти части разделяются знаком “?“, а вот сами параметры между собой разделяются знаком “&“. Если изобразить схематически, то выглядит это так

АдресТаблицы?$Параметр1=ЗначениеПараметра1&$Параметр2=ЗначениеПараметра2

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

%d такие блоггеры, как: