Автоматический REST-сервис в «1С:Предприятии». Пример работы из Jscript/AJAX

Общая информация

REST (сокр. от англ. Representational State Transfer — «передача  репрезентативного состояния») — метод взаимодействия компонентов распределённого приложения в сети Интернет, при котором вызов удаленной процедуры представляет собой обычный HTTP-запрос (обычно GET или POST; такой запрос называют REST-запрос), а необходимые данные передаются в качестве параметров запроса. Этот способ является альтернативой более сложным методам, таким как SOAP, CORBA и RPC.

Open Data Protocol (OData) — это открытый веб-протокол для запроса и обновления данных. Протокол позволяет выполнять операции с ресурсами, используя в качестве запросов HTTP-команды, и получать ответы в форматах Atom, JSON или XML.

Ajax (от англ. Asynchronous Javascript and XML — «асинхронный JavaScript и XML») — подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате, при обновлении данных веб-страница не перезагружается полностью, и веб-приложения становятся быстрее и удобнее.

В 1С Предприятие 8.3 появилась поддержка автоматического REST-сервиса. Для доступа к данным используется протокол OData версии 3. Поддерживается единственный формат представления данных: atom-xml. Для доступа к данным, при публикации, автоматически генерируется REST-сервис, который позволяет читать данные «1С:Предприятия», изменять их, создавать новые объекты данных и удалять существующие. Прикладное решение на базе «1С:Предприятия» может выступать как клиентом, так и сервером при работе с REST-сервисами. Для работы сервером практически никаких дополнительных действий осуществлять не надо (эта возможность предоставляется автоматически), для того, чтобы стать клиентом REST-сервиса, необходимо в прикладном решении реализовать программный слой, который будет использовать данные сервера REST с использованием стандартных интерфейсов «1С:Предприятия», например объекта HTTPСоединение.

В публикации рассмотрен механизм работы c REST-сервером 1С:Предприятия из внешнего приложения – веб-страницы с использованием языка JavaScript и технологии AJAX.

Теория и подробное описание – по ссылкам ниже.

REST-сервер

В качестве сервера будет выступать опубликованная на веб-сервере БД (Демо-база “Управление торговлей 11”)

В режиме “Конфигуратор” переходим по меню “Администрирование” – “Публикация на веб-сервере…”

Теперь прикладное решение выступает как REST-сервер и мы можем получать и изменять данные, отправляя http-запросы, сформированные соответствующим образом.

Проверим работу сервиса. Для обращения REST-сервису используется последовательность
http://{АдресВебСервера}/{ИмяПубликации}/odata/standard.odata/{Ресурс}?{Параметры},где

АдресВебСервера – адрес веб-сервера, на котором опубликован сервис

ИмяПубликации – имя, указанное при публикации решения

Ресурс – идентификатор ресурса или предопределенные ресурсы. Например, $metadata – метаданные решения,

Catalog_Организации – справочник Организации.

Параметры – параметры ресурса. Используются, например, для отбора, в принятом для HTTP-запросов: ?ключ=значение&ключ2=значение2

В зависимости от того, какая операция выполняется, используется соответствующий HTTP-метод:

  •  Получение данных – метод GET;
  •  Создание объекта – метод POST;
  •  Обновление данных:
  •  метод PATCH – в этом случае можно указывать только те свойств, которые необходимо обновить;
  •  метод PUT – в этом случае необходимо указывать все свойства сущности;
  •  Удаление данных – метод DELETE.

Итак, получим список организаций
http://localhost/DemoTrd/odata/standard.odata/Catalog_Организации

$filter – описание отбора

Получим список накладных с отбором по организации

http://localhost/DemoTrd/odata/standard.odata/Document_РеализацияТоваровУслуг?$filter=Организация_Key eq guid’87ec13fb-f611-11df-aeca-0015e9b8c48d

Как видно из предыдущего изображения, отбор начинается с ключевого слова $filter, а для использования в отборе ссылочного реквизита к имени реквизита добавлен суффикс _Key

Логические операции отбора

  • Равно eq
  • Не равно ne
  • Больше gt
  • Больше или равно ge
  • Меньше lt
  • Меньше или равно le
  • Логическое ИЛИ or
  • Логическое И and
  • Отрицание not

Чтение объекта

Для чтения объекта необходимо отправить сформированный определенным способом запрос к сервису(URL сущности), используя метод GET
http://mysite/DemoTrd/odata/standard.odata/Document_РеализацияТоваровУслуг(guid’c019c02d-5462-11e0-af18-0015e9b8c48d’)

Гет можем отправить и из браузера – посмотрим на XML-документ из Chrome, введя соответствующий URL в адресной строке:

Обновление объекта

Для обновления объекта необходимо выполнить PUT-/PATCH-запрос с использованием канонического URL сущности (аналогично запросу GET для получения сущности), передав в теле запроса XML-документ (в формате atom), который содержит значения свойств сущности.

В случае PATCH-запроса пропущенные свойства сущности будут проигнорированы, т. е. будут изменены только те свойства, которые переданы в запросе на изменение. Для PUT-запроса необходимо указывать значения всех свойств обновляемой сущности. 

PUT-/PATCH-запрос просто так из строки браузера отправить не получиться, поэтому приступим к написанию мини-клиента для REST-сервиса

REST-Клиент

Клиент будет представлять собой обычную html-страницу, с подключенными к ней js-скриптами. Это в первую очередь библиотека JQuery, также пригодятся скрипты для удобной работы с форматами дат и календарем

На странице реализуем следующие функции:

  • получение списка организаций
  • отбор РТиУ по выбранной организации за заданный период
  • изменение реквизита “Комментарий” у выбранного документа

Листинг js-процедур.

 

В результате наш мини-клиент выглядит так:

Изменим несколько документов и проверим результат в УТ:

Объекты конфигурации

В нашем простом примере рассмотрено чтение коллекций справочников и документов, запись реквизита документа.
На самом деле список объектов, к котором можно получить доступ через REST-сервис, намного шире:

  • Справочник
  • Документ
  • Журнал документов
  • Константа
  • План обмена
  • План счетов
  • План видов расчета
  • План видов характеристик
  • Регистр сведений
  • Регистр накопления
  • Регистр расчета
  • Регистр бухгалтерии
  • Бизнес-процесс
  • Задача

Механизм позволяет читать и записывать данные, работать с виртуальными таблицами (например, срезы регистров), выполнять функции и действия описанные в конфигурации с передачей параметров.

Ссылки

http://its.1c.ru/  – в первую очередь изучаем руководство разработчика на ИТС

http://www.odata.org/ – страничка протокола OData, там же есть ссылки на готовые библиотеки, для работы с одата на разных языках

Что в архиве

В архиве сам REST-клиент: html страница, js-скрипты, файл стилей css

Как настроить

  1. Опубликовать демо-базу УТ 11 (как на первом скрине)
  2. Настроить доступ – запустить web-сервер под пользователем ОС, настроить в конфигураторе ОС-аутентификацию пользователя(админа) 
  3. Разместить в корневом каталоге веб-сервера файлы из архива (ajax в дефолте не поддерживает кроссдоменные запросы, поэтому скрипты должны быть в одном домене с REST-сервисом)
  4. Открыть главную страницу сайта в браузере.

PS

Как работает клиент? При открытии страницы загружается список организаций в список выбора.

После загрузки выбираем для отбора организацию, интервал дат, жмем кнопку “Обновить”. На страницу выводится список документов, одновременно заполняется список выбора внизу страницы.
Выбираем документ из списка, заполняем поле “Комментарий”, жмем кнопку “Сохранить”. После сохранения список документов обновится и изменения документа станут видны в нем:)
Подгрузка данных в страницу бывает работает не очень быстро (особенно в файловой версии, и/или при первом запуске 🙂 )
Поэтому  список организаций при открытии страницы в браузере заплняется спустя некоторое время. По хорошему, можно сделать, чтобы отображались картинка ожидания во время подгрузки ajax (часики или крутился кружок). Этот прием даёт пользователю понять, что страница не просто висит, а нужно немного подождать. Он используется на многих сайтах, в т.ч. на Инфостарте 🙂


UPD 

 

Из Заметок из зазеркалья стало ясно, что автоматический REST скоро будет доступен в формате JSON, но ajax и его умеет

 

 

В КАТАЛОГ »