1 of 70

Объектно-ориентированное программирование и моделирование

База курса:

  • умение писать код на языке программирования 1С
  • умение решать интеграционные задачи
  • умение решать учетные задачи
  • трудолюбие. Мы дадим предмет подробно, от вас старание.

Цель курса:

  • приобретение профессии 1С-разработчика, готовность пройти собеседование на стажера/junior’a
  • Способность решить учетную задачу
  • Способность сделать интеграцию 1С со сторонней системой

Мы даем вам профессию и готовим к реальной работе

2 of 70

Орг-вопросы

  1. Лекции очно, нужно ходить, будет полезно и интересно
  2. Занятия будут вести:
    1. Антонов Виталий Михайлович, руководитель направления 1С-проектов ИНТЕРВОЛГИ
    2. Коллеги из направления 1С-проектов ИНТЕРВОЛГИ

3 of 70

3. Проверьте чтобы вы были записаны тут, допишите свои почтовые ящики (которые вы читаете):

2022.intervolga.ru/imit_2022

Выбрать лист группы, найти ФИО, проверить почту, получить номер темы ЛР

4. Если вы пропустили лекцию, презентации тут

intervolga.ru/school

5. Все задания на ЛР тут

2022.intervolga.ru/volgu-1с-2022

4 of 70

4. Для сдачи лабораторных работ заведите приватный репозиторий на github:

5 of 70

Добавьте antonov@intervolga.ru как collaborator к вашему репозиторию:

6 of 70

Внесите адрес репозитория напротив своей фамилии в таблицу

Если вы все сделали верно, в колонке “Приватный” автоматически загорится слово приватный

Правила ведения репозитория

  1. каждая лабораторная работа = отдельная папка/каталог.�ЛР1 …… ЛР 8�НЕ ВЕТКА, а именно каталог
  2. архивы запрещены
  3. отчет о выполнении работы (если требуется) загружаете в readme как ссылку на гугл-документ с доступом на antonov@intervolga.ru

Советы

  1. учебная платформа 1С
  2. используйте git для управления репозиторием

ПОД ВОПРОСОМ!!!

7 of 70

Лекция 14: Технологии интеграции: Http-запросы, OData

8 of 70

Публикация базы 1С в Apache на Windows

9 of 70

Установка Apache под Windows

Один из сценариев публикации базы 1С — использование веб-сервера Apache на системе Windows. Это может быть актуально, если мы больше доверяем данному веб-серверу, вместо встроенного в Windows IIS. Описанные действия применимы для любой версии Windows от 7 до Server 2019.

Первым делом необходимо скачать и установить веб-сервер. Список доступных реализаций можно найти по ссылке, а в статье будет использован самый первый из списка дистрибутивов. Он поставляется в виде zip-архива без инсталлятора.

Поэтому нужно скачать архив и разархивировать в любую удобную папку, например, C:\Apache24. 24. В названии папки указан номер версии Apache. В данном случае используется версия 2.4. При публикации информационной базы из командной строки стоит обращать на это внимание, так как с платформой поставляются отдельные библиотеки веб-компонент для версий Apache 2.2 и 2.4.

После разархивирования файла архива, откройте командую строку от имени администратора. Самый простой вариант – это открыть меню Пуск и ввести cmd. После того, как приложение будет найдено щелкнуть по нему правой кнопкой мыши и выбрать пункт меню "Запустить от имени Администратора" ("Run as Administrator").

10 of 70

Установка Apache под Windows

В командной строке переходим в директорию распакованного Apache с помощью команды cd. Например: cd C:\Apache24

В директории Apache вводим команду:

httpd.exe -k install

11 of 70

Установка Apache под Windows

Это установит службу Apache, которой можно будет управлять в окне служб.

12 of 70

Установка Apache под Windows через установщик

По каким-то причинам все новые версии Apache перестал выкладывать в виде самораспаковывающегося дистрибутива.

Скачиваем установщик со страницы официального сайта https://archive.apache.org/dist/httpd/binaries/win32/

Выбираем “no ssl” дистрибутив, если базы будут открыты только внутри нашей локальной сети или “ssl” дистрибутив, если база будет открываться в интернете.

13 of 70

Установка Apache под Windows через установщик

Запускаем скачанный установщик

Заполняем Network Domain: Localhost, Server name: Localhost

Нажимает NEXT, Setup type: Typical NEXT, NEXT, INSTALL.

Finish.

14 of 70

Установка Apache под Windows через установщик

Проверяем запустился ли веб сервер

Для этого открываем любой броузер и указываем адрес страницы http://localhost

Мы должны увидеть страничку с надписью It Works !

15 of 70

Публикация базы

Открываем конфигуратор нашей базы (Запуск 1С обязательно от имени администратора)

16 of 70

Публикация базы

Переходим в “Администрирование” - "Публикация на веб-сервере"

Заполняем имя ЛАТИНСКИМИ БУКВАМИ БЕЗ ПРОБЕЛОВ (можно использовать подчеркивание)

Веб-сервер - Apache

Каталог - по сути произвольный каталог с файлами веб-сервера для текущей базы. Желательно название каталога, что бы совпадало с названием базы (для простоты). Остальные флажки оставляем как на картинке.

Нажимаем "Опубликовать". Если при нажатии опубликовать вы видите сообщение

Невозможно записать c:\Program Files (x86)\Apache .... значит вы запустили 1С не от имени администратора.

Вы должны увидеть сообщение "Публикация выполнена"

На вопрос "Перезапустить ли веб-сервер" - всегда соглашаемся.

17 of 70

Диалог публикации. Подробнее

Кнопка Опубликовать выполняет публикацию на веб-сервере. При публикации происходит создание каталога на диске и настройка указанного веб-сервера для работы с «1С:Предприятием».

Кнопка Отключить выполняет удаление приложения из веб-сервера и каталога публикации, если это необходимо.

Кнопка Сохранить выполняет сохранение параметров, указанных в диалоге публикации на веб-сервере, в файл. При сохранении система запрашивает имя и место расположения файла, в который будет выполнено сохранение. Сохранение будет выполнено в формате файла default.vrd.

Кнопка Загрузить позволяет загрузить для редактирования произвольный файл default.vrd.

Кнопка Закрыть выполняется закрытие диалога.

Кнопка Справка открывает окно со справочной информацией о диалоге публикации.

18 of 70

Диалог публикации. Подробнее

На данной закладке можно задать основные параметры публикации.

Имя. Указывает имя публикации.

Веб-сервер. Указывает, для какого веб-сервера выполняется публикация. Веб-сервера Apache добавляются в список в том случае, если они обнаружены на компьютере. При работе в ОС Linux возможна публикация только для Apache.

В том случае, если система не смогла однозначно определить версию установленного на компьютере веб-сервера Apache (2.2 или 2.4), в списке будут присутствовать обе версии веб-сервера. При этом следует учитывать, что для веб-сервера Apache версии 2.2 и 2.4 различаются изменения, выполняемые в конфигурационном файле веб-сервера. Поэтому неверное указание версии веб-сервера приведет к неработоспособности публикации.

19 of 70

Диалог публикации. Подробнее

Каталог. Указывает физический каталог на диске, в котором будет находиться файл default.vrd и куда будет отображен виртуальный каталог веб-сервера. Каталог должен существовать.

Публиковать доступ для клиентских приложений. Если флажок установлен, возможна работа с опубликованной информационной базой с помощью тонкого, мобильного и веб-клиентов.

Публиковать стандартный интерфейс OData. Отвечает за возможность получения доступа к стандартному интерфейсу OData прикладного решения.

Публиковать систему аналитики. Включает возможность взаимодействия сервера системы «1С:Аналитика» и системы «1С:Предприятие». После публикации в интерфейсе клиентского приложения становится доступной команда открытия веб-интерфейса системы «1С:Аналитика».

20 of 70

Диалог публикации. Подробнее

Публиковать дистрибутив тонкого клиента. Определяет возможность получения и установки клиентского приложения (тонкого клиента), если не совпадают версии клиентского приложения и сервера. В качестве дистрибутива используется zip-архив в свойстве Расположение публикуемого дистрибутива:

● Windows x86 ‑ дистрибутив 32-разр. кл. приложения для Windows.

● Windows x86_64 ‑ дистрибутив 64-разр. приложения для Windows.

● MacOS x86_64 ‑ дистрибутив 64-разр. кл приложения для macOS.

Использовать аутентификацию операционной системы. Разрешает системе установить возможность аутентификации ОС на веб-сервере IIS.

Адрес перехода при окончании работы веб-клиента позволяет указать URL, на который будет выполняться переход после окончания работы веб-клиента.

21 of 70

Диалог публикации. Закладка Web-сервисы

Публиковать Web-сервисы по умолчанию. Дает возможность использования в данной ИБ Web-сервисов, которые опубликованы без явного указания разрешения использования.

Публиковать Web-сервисы. Установка данного флажка приведет к тому, что будут опубликованы Web-сервисы, созданные в конфигурации и перечисленные в таблице ниже

Если флажок в первой колонке сброшен, то Web-сервис нельзя будет вызвать.

Колонка “Имя” содержит имя Web-сервиса, как при создании.

Колонка “Адрес” содержит псевдоним имени публикуемого Web-сервиса. Обращение к Web-сервису возможно как по имени, так и по псевдониму. Псевдоним Web-сервиса можно редактировать в окне публикации.

Web-сервисы в подключенных расширениях, не отображаются в данной таблицы и могут быть опубликованы только редактированием файла default.vrd вручную. Решается установкой признака Публиковать Web-сервисы расширений по умолчанию.

22 of 70

Диалог публикации. Закладка HTTP-сервисы

Закладка HTTP сервисы предназначена для управления возможностью доступа к прикладному решению с помощью HTTP-сервисов.

Публиковать HTTP сервисы по умолчанию. Установка данного флажка приведет к тому, что будут опубликованы HTTP-сервисы, созданные в конфигурации и перечисленные в таблице, расположенной ниже флажка.

Таблица ниже по умолчанию содержит перечень публикуемых HTTP-сервисов и позволяет управлять публикацией каждого HTTP-сервиса. Первая колонка управляет публикацией конкретного HTTP-сервиса. Если флажок сброшен, то данный HTTP-сервис будет запрещен к использованию (его нельзя будет вызвать).

Вторая колонка “Имя” содержит имя HTTP-сервиса, как оно задано при создании.

HTTP-сервисы в расширениях, не отображаются в данной таблицы и могут быть опубликованы только правкой файла default.vrd вручную.

Публиковать HTTP-сервисы расширений по умолчанию. Отвечает за возможность использования HTTP-сервисов, которые поставляются в расширениях конфигурации.

23 of 70

HTTP-запросы.

24 of 70

HTTP-запросы

В этом блоке рассмотрим, как из системы «1С:Предприятие» можно обратиться к любому произвольному HTTP-сервису, опубликованному в Интернете.

Рассмотрим примеры получения, удаления и добавления данных прикладного решения «1С:Предприятия» с помощью HTTP-сервисов, разработанных нами на прошлой лекции

Для обращения к HTTP-сервисам и REST-интерфейсу (OData) используются такие объекты встроенного языка, как HTTPСоединение, HTTPЗапрос и HTTPОтвет.

  • Объект HTTPСоединение предназначен для взаимодействия с внешними системами по протоколу HTTP. В том числе с помощью объекта HTTPСоединение можно:
    • создать HTTP-соединение;
    • записать, получить и удалить файл;
    • отправить ресурс на указанный адрес для обработки;
    • определить параметры установленного соединения;
    • вызвать произвольный HTTP-метод;
    • передать на сервер заголовки запроса и получить заголовки с сервера;
    • в качестве тела запроса отправить не только файл, но и строку (с автоматическим перекодированием в нужную кодировку), и двоичные данные.

25 of 70

HTTP-запросы

  • Объект HTTPЗапрос предназначен для описания HTTP-запросов, отправляемых через объект HTTPСоединение. Позволяет задать адрес запрашиваемого ресурса, заголовки и тело запроса.
  • Объект HTTPОтвет – предоставляет доступ к содержимому ответа HTTP-сервера на запрос.

Для того чтобы изменить (добавить, удалить, прочитать и т. д.) данные информационной базы через REST-интерфейс, нужно создать HTTP-соединение с сервером (например, "localhost"), на котором опубликованы HTTP-сервисы (как созданные разработчиком, так и составляющие автоматический REST-интерфейс) для прикладного решения. Затем создать HTTP-запрос на основе адреса ресурса данных, которые требуется прочитать или изменить с помощью запроса. После этого нужно записать изменяемые данные в строку JSON/XML (или в файл, откуда будет считано тело запроса при отправке) и установить тело HTTP-запроса из этой строки (или установить имя файла тела запроса). И затем с помощью HTTP-соединения отправить запрос к серверу с соответствующим методом (POST, PUT/PATCH, DELETE и др.).

26 of 70

HTTP-запросы

Чтобы выполнить HTTP-запрос нужного вида, у объекта HTTPСоединение существуют методы:

  • Получить() – отправляет GET-запрос на сервер;
  • ОтправитьДляОбработки() – отправляет POST-запрос на сервер;
  • Изменить() – отправляет PATCH-запрос на сервер;
  • Записать() – отправляет PUT-запрос на сервер;
  • Удалить() – отправляет DELETE-запрос на сервер;
  • с помощью метода ВызватьHTTPМетод() можно отправить на сервер произвольный запрос, выполняющий HTTP-метод, имя которого указано в первом параметре метода ВызватьHTTPМетод().

27 of 70

Обращение к HTTP-сервисам. Получение данных

Сначала рассмотрим пример получения данных при помощи HTTP-запросов к HTTP-сервисам, разработанных нами ранее

Обработчик команды «ПолучитьДанные»

В этом обработчике в переменной АдресРесурса мы запоминаем значение реквизита обработки Адрес, в котором хранится URL для обращения к HTTP-сервису.

Затем вызываем процедуру ВыполнитьЗапрос() и передаем в нее в качестве параметров адрес ресурса и имя метода ("GET"), котoрый надо выполнить на сервере

28 of 70

Обращение к HTTP-сервисам. Получение данных

В этой процедуре в качестве имени сервера мы указываем "localhost", создаем на его основе объект HTTPСоединение и соединяемся с этим сервером.

Далее на основе URL, содержащегося в параметре АдресРесурса, создаем HTTPЗапрос. Затем, в случае если это не DELETE- и не GET-запрос, устанавливаем тело запроса из строки JSON, содержащейся в параметре СтрокаТелаЗапроса.

29 of 70

Обращение к HTTP-сервисам. Получение данных

После этого при помощи метода ВызватьHTTPМетод() объекта HTTPСоединение отправляем на сервер запрос (в данном случае с методом GET) к информационной базе. Ответ сервера в виде объекта HTTPОтвет будет возвращен в переменную Результат. C помощью метода ПолучитьТелоКакСтроку() объекта HTTPОтвет мы получаем тело ответа в виде строки и выводим его в сообщение.

30 of 70

Обращение к HTTP-сервисам. Получение данных

Проверим получение списка всех сотрудников из справочника Сотрудники. Это можно сделать с помощью HTTP-сервиса Сотрудники с корневым URL employees. В поле ввода демонстрационной обработки укажем тот же URL, который мы вводили для этого в браузере, – /REST/hs/employees (только без имени сервера) и нажмем кнопку Получить данные. В результате в окне сообщений мы увидим ответ сервера, содержащий список всех сотрудников

31 of 70

Обращение к HTTP-сервисам. Ограничение

32 of 70

Обращение к HTTP-сервисам. Удаление данных

Чтобы отправить на сервер DELETE-запрос, добавим команду УдалитьСотрудника. Обработчик команды заполним следующим образом

33 of 70

Автоматический REST-интерфейс (OData)

34 of 70

REST-интерфейс (OData)

Платформа «1С:Предприятие» может автоматически создать REST-интерфейс для любого прикладного решения. Благодаря своей универсальности и кроссплатформенности REST-интерфейс является очень удобным инструментом для интеграции прикладного решения со сторонними системами.

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

Автоматический REST-интерфейс может использоваться следующих задач:

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

35 of 70

REST-интерфейс (OData)

Доступ к данным приложения через REST-интерфейс позволяет выполнять следующие типичные операции:

  • получение списка документов, справочников, записей регистра сведений и т. п., возможно, с фильтром;
  • получение данных элемента справочника, документа (по ссылке), данных записи независимого регистра сведений (по ключу), данных набора записей подчиненного регистра (по регистратору);
  • редактирование данных одного элемента справочника, документа и другого ссылочного объекта;
  • создание нового элемента справочника, документа, набора записей;
  • проведение одного документа, старт бизнес-процесса.

В качестве протокола доступа платформа использует протокол OData версии 3.0. Это открытый веб-протокол для запроса и обновления данных. Он позволяет оперировать данными, используя в качестве запросов HTTP-команды. Получать ответы можно в формате Atom/XML или JSON.

36 of 70

REST-интерфейс (OData)

Клиенты OData существуют практически для всех значимых платформ:

  • мобильные: iOS, Windows Phone, Android;
  • серверные/настольные: .NET, Java, PHP, Objective-C, Ruby, JavaScript;
  • поддержка в системах управления содержимым (CMS): Drupal, Joomla.

Рассмотрим для простоты работу с автоматическим REST-интерфейсом на примере обращения к нему (клиентская часть) из этой же самой информационной базы. В реальной жизни такая задача вряд ли встретится, но взаимодействие одной базы «1С:Предприятия» с другой базой «1С:Предприятия» через REST-интерфейс – это довольно частая задача. И решается она точно такими же средствами.

Для обращения к REST-интерфейсу используются такие объекты встроенного языка, как HTTPСоединение, HTTPЗапрос и HTTPОтвет

37 of 70

REST-интерфейс (OData)

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

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

  • для документа – проведение и отмена проведения;
  • для задачи – выполнение;
  • для бизнес-процесса – старт;
  • для регистра сведений – получение среза первых и среза последних;
  • для регистра накопления и регистра бухгалтерии – получение остатков, оборотов, остатков и оборотов;
  • для регистра расчета – получение данных графика, фактического периода действия, перерасчета и базы.

При чтении и записи данных с помощью REST-интерфейса платформа выполняет все обычные проверки прав и вызывает обработчики событий.

38 of 70

OData. Правила формирования URL запроса

Обращение к стандартному интерфейсу OData выполняется с помощью HTTP-запроса по определенному URL. URL формируется специальным образом и состоит из следующих частей:

  1. Адрес информационной базы.
  2. Признак обращения к стандартному интерфейсу OData.
  3. Имя ресурса, к которому выполняется обращение.
  4. Параметры запроса обращения к ресурсу.

Адрес информационной базы – это обычный URL, по которому выполняется доступ, например, к информационной базе с помощью веб-клиента. Например, http://localhost/base или http://host.server.zone/data-base.

Признак обращения к стандартному интерфейсу Odata – это последовательность символов в URL: /odata/standard.odata.

Имя ресурса, к которому выполняется обращение – это особым образом сформированный идентификатор ресурса (возможно, с параметром) или предопределенные ресурсы. Например, $metadata или Catalog_Контрагент(guid'value').

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

39 of 70

OData. Правила формирования URL запроса

При обращении к ресурсу могут использоваться специальные ключевые слова, имеющие специальное назначение:

  • $format – указывает, в каком формате необходимо получить данные. Если ключевое слово не указано, данные получаются в формате atom-xml:
    • $format=atom – возвращает данные в формате atom-xml;
    • $format=json – возвращает данные в формате json. При обращении к REST-интерфейсу из других внешних платформ для указания того, что данные должны возвращаться в формате json, можно указать MIME-тип application/json в заголовке Accept HTTP-запроса на получение данных.
  • $metadata – указывает, что требуется получить описание стандартного интерфейса OData.
  • $filter – описывает отбор, применяемый при получении данных.
  • $select – описывает перечень свойств сущности (объектных типов, наборов записей регистров и строк табличных частей объектных типов), которые нужно получить при обращении к стандартному интерфейсу OData.

40 of 70

OData. Правила формирования URL запроса

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

  • Получение данных – метод GET. В платформе «1С:Предприятие» этому методу соответствует метод Получить() объекта HTTP-соединение.
  • Создание объекта – метод POST. В платформе «1С:Предприятие» этому методу соответствует метод ОтправитьДляОбработки() объекта HTTP-соединение.
  • Обновление данных:
    • метод PATCH – в этом случае можно указывать только те свойства сущности, которые необходимо обновить. В платформе «1С:Предприятие» этому методу соответствует метод Изменить() объекта HTTP-соединение;
    • метод PUT – в этом случае необходимо указывать все свойства сущности. В платформе «1С:Предприятие» этому методу соответствует метод Записать() объекта HTTP-соединение.
  • Удаление данных – метод DELETE. В платформе «1С:Предприятие» этому методу соответствует метод Удалить() объекта HTTP-соединение.

В результате выполнения запроса клиентское приложение получает ответ сервера, который кроме кода состояния может содержать различные данные, предоставленные сервером, в виде XML- или JSON-документа.

41 of 70

OData. Правила формирования имени ресурса

При обращении к какому-либо ресурсу его идентификатор формируется по следующему принципу: ПрефиксИмени_ИмяОбъектаКонфигурации_СуффиксИмени. С помощью стандартного интерфейса OData можно получить доступ к следующим объектам

42 of 70

OData. Правила формирования имени ресурса

ИмяОбъектаКонфигурации – имя объекта конфигурации, как оно задано при разработке прикладного решения в конфигураторе.

СуффиксИмени – предназначен для уточнения имени ресурса и является необязательной частью имени. В качестве суффикса имени могут выступать следующие выражения:

  • имя табличной части объекта;
  • имя реквизита табличной части или набора записей;
  • имя виртуальной таблицы регистра;
  • RowType;
  • RecordType.

Если объект обладает табличной частью, то для получения доступа ко всем записям этой табличной части необходимо добавить имя табличной части после имени самого объекта. Например, для получения всех строк табличной части Товары всех документов РасходТовара будет необходимо выполнить GET-запрос по следующему адресу: http://localhost/base/odata/standard.odata/Document_РасходТовара_Товары.

43 of 70

OData. Правила формирования условий отбора

При получении данных можно отфильтровать их, если это требуется. Для этого предназначен специальный язык, позволяющий описывать условия, которым должны соответствовать данные, которые возвращает стандартный интерфейс OData. Описание отбора начинается с ключевого слова $filter, после которого следует собственно условие. Поддерживаются следующие операции

44 of 70

OData. Правила формирования условий отбора

Например, используя следующее условие, можно получить товары из справочника Товары с именем Молоко и ценой менее 2500: http://localhost/odata/standard.odata/Catalog_Товары?$filter=Имя eq 'Молоко' and Цена lt 2500.

Для группировки условий и указания приоритета операций их можно заключить в скобки. Например: http://localhost/odata/standard.odata/Catalog_Товары?$filter=(Цена add 5) gt 10.

При формировании условий запроса или формировании реквизита, по которому выполняется упорядочивание, могут применяться функции для работы со строками (substring (), startswith(), endswith() и др.), с датами (year(), dateadd(), dayofyear() и др.) и некоторые другие.

45 of 70

OData. Примеры использования

Прежде всего, чтобы прикладное решение стало доступно через REST-интерфейс, опубликуем интерфейс OData для этого решения на веб-сервере.

Затем, для того чтобы объекты конфигурации стали доступны через стандартный интерфейс OData, необходимо разрешить это с помощью метода глобального контекста УстановитьСоставСтандартногоИнтерфейсаOData().

Для примера с помощью команды сделаем доступными справочники Поставщики, Должности, Сотрудники и Товары, документ ПоступлениеТоваров и регистр сведений ЦеныТоваров

46 of 70

OData. Пример получения всех данных справочника

В демо базе существует справочник Поставщики. Это справочник содержит следующие данные.

Задача: нужно получить все данные из этого справочника.

Следует иметь в виду, что REST-интерфейс по умолчанию возвращает данные в формате atom-xml. Это «наследие» стандарта. По современным же представлениям приоритетным форматом является JSON. Поэтому во всех примерах в списке параметров запроса мы укажем, что данные должны быть возвращены именно в этом формате – $format=json.

47 of 70

OData. Пример получения всех данных справочника

В качестве имени сервера мы просто указываем "localhost" и создаем на его основе объект HTTPСоединение.

Затем в переменной АдресРесурса мы формируем URL запроса для обращения к данным нашего справочника (…/Catalog_Поставщики?…). Поскольку нам нужно получить все данные справочника, мы просто указываем для этого префикс Catalog_ и имя справочника.

Далее на основе этого URL создаем HTTPЗапрос

48 of 70

OData. Пример получения всех данных справочника

…и выполняем GET-запрос к информационной базе при помощи метода Получить() объекта HTTPСоединение. Ответ сервера в виде объекта HTTPОтвет будет возвращен в переменную Результат. После этого с помощью метода ПолучитьТелоКакСтроку() объекта HTTPОтвет мы получаем тело ответа в виде строки и выводим его в сообщение. Если при получении ответа сервера возникнут ошибки, будет вызвано исключение.

49 of 70

OData. Пример получения всех данных справочника

50 of 70

OData. Пример получения выборочных данных и сортировка

Задача: существует справочник Должности. Этот справочник содержит следующие данные.

Нужно получить только значения полей справочника Ref_Key (ссылка) и Description и отсортировать их по возрастанию кодов должностей

51 of 70

OData. Пример данных по ссылке

Задача: необходимо получить все данные из справочника Должности для конкретной должности с известным идентификатором.

Поскольку справочник – это ссылочный объект конфигурации, каждая запись справочника обладает уникальным идентификатором – ссылкой. Эта ссылка содержится в поле Ref_Key. Получив предыдущий ответ, можно узнать из него Ref_Key нужного элемента и в следующих запросах использовать его, указав значение идентификатора в скобках после имени ресурса – (guid'…').

Поскольку у справочника ключевое поле одно, то можно не указывать его имя, а сразу писать в скобках после имени справочника guid'…'. Если же ключевых полей несколько, то имена всех этих полей вместе с их значениями надо перечислять в скобках после имени ресурса: (Ref_Key=guid'…', LineNumber=…)

52 of 70

OData. Отбор записей по условию

Задача: Требуется отфильтровать записи справочника Поставщики так, чтобы из списка поставщиков отбирались те, чье наименование начинается на «ООО». Для описания условия отбора воспользуемся функцией startswith()

В результате в ответ сервера будут включены только данные двух из трех поставщиков, удовлетворяющих условию отбора.

Задача: требуется отфильтровать записи справочника Сотрудники так, чтобы из списка сотрудников отбирались родившиеся в 1980 году. Для описания условия отбора воспользуемся функцией year()

53 of 70

OData. Получение данных связанных сущностей (ссылок)

Параметр $expand позволяет вместе с результатами основного запроса получать значения связанных сущностей, что позволит не запрашивать каждую сущность отдельно.

54 of 70

OData. Условие отбора по реквизитам табличных частей

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

  • any – применяет логическое выражение к каждому элементу коллекции и возвращает значение true, если хоть один элемент коллекции удовлетворяет этому условию. Лямбда-функция any без аргументов возвращает true, если коллекция не пуста;
  • all – применяет логическое выражение к каждому элементу коллекции и возвращает значение true, если все элементы коллекции ему удовлетворяют.

Задача: нужно получить список документов ПоступлениеТоваров, у которых цена хотя бы одного поступившего товара (значение реквизита Цена табличной части Товары) больше 3000.

В результате в ответе сервера будут содержаться данные двух из трех документов (Number: 000000001, 000000002), в состав которых входит хотя бы одна строка табличной части, удовлетворяющая условию

55 of 70

OData. Условие отбора по реквизитам табличных частей

Задача: нужно получить список документов ПоступлениеТоваров, у которых цена каждого поступившего товара (значение реквизита Цена табличной части Товары) больше 3000.

В результате в ответе сервера будут содержаться данные только одного документа (Number: 000000002), в составе которого все строки табличной части удовлетворяют заданному условию

56 of 70

OData. Получение данных регистра сведений

В базе есть регистр сведений ЦеныТоваров.

Задача: требуется получить срез последних записей регистра сведений ЦеныТоваров, то есть получить последние актуальные цены товаров на текущую дату. Для этого воспользуемся функцией SliceLast().

57 of 70

OData. Получение данных регистра сведений

Для наглядности мы получили связанные данные из справочника товаров с помощью параметра $expand и вывели название товара (Товар/Description) в списке полей.

58 of 70

OData. Модификация данных прикладного решения

Мы рассматривали примеры получения данных через REST-интерфейс, то есть чтения данных с сервера методом GET. Теперь посмотрим как можно изменять, добавлять и удалять данные информационной базы.

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

Для этого нужно записать изменяемые или добавляемые данные в строку JSON, затем установить HTTP-соединение с сервером, на котором опубликован интерфейс OData для прикладного решения. После этого создать HTTP-запрос на основе URL модифицируемых данных, установить тело HTTP-запроса из строки JSON и отправить запрос к серверу с соответствующим методом (POST, PUT/PATCH, DELETE).

59 of 70

OData. Добавление данных

Задача: нужно добавить новую запись в справочник Должности.

Обработчик команды, добавляющей данные:

В этом обработчике в переменной АдресРесурса мы формируем URL запроса для обращения к данным нашего справочника.

Затем с помощью функции СформироватьДобавляемыеДанные(), которая будет рассмотрена ниже, мы записываем добавляемые данные в строку JSON и возвращаем ее в переменную СтрокаТелаЗапроса.

После этого вызываем процедуру ВыполнитьЗапрос() и передаем в нее в качестве параметров адрес ресурса, строку тела запроса и имя метода ("POST"), котoрый надо выполнить на сервере.

60 of 70

OData. Добавление данных

При помощи метода ВызватьHTTPМетод() объекта HTTPСоединение отправляем на сервер POST-запрос к информационной базе. Ответ сервера в виде объекта HTTPОтвет будет возвращен в переменную Результат. C помощью метода ПолучитьТелоКакСтроку() объекта HTTPОтвет мы получаем тело ответа в виде строки и выводим его в сообщение.

В результате в справочник будут добавлены новые данные, записанные в строку JSON в функции СформироватьДобавляемыеДанные()

61 of 70

OData. Добавление данных

В этой функции методом потоковой записи с помощью объекта ЗаписьJSON мы записываем в строку JSON наименование (свойство Description) новой должности, которую мы хотим добавить в справочник Должности.

В результате при выполнении команды по добавлению данных на сервер будет отправлен POST-запрос к информационной базе. Ответ сервера в виде строки будет содержать данные нового элемента, добавленного в справочник.

62 of 70

OData. Изменение данных

Задача: необходимо изменить некоторые поля (Код, ДатаРождения и Должность) у конкретного элемента справочника Сотрудники. Поскольку нужно изменить не все, а только часть полей записи справочника, для этого нужно обратиться к элементу справочника с конкретной ссылкой и отправить на сервер PATCH-запрос с изменяемыми данными.

63 of 70

OData. Изменение данных

Поле Должность – это ссылочное поле, которое ссылается на справочник Должности, поэтому указываем для него имя свойства как "Должность@odata.bind", а значение – "Catalog_Должности(guid'524ffe8a-789f-11e9-babb-642737df2048')".

64 of 70

OData. Удаление данных

Задача: нужно удалить конкретную запись из справочника Должности. Для этого нужно обратиться к элементу справочника с конкретной ссылкой и отправить на сервер DELETE-запрос.

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

65 of 70

OData. Типичные ошибки

Рассмотрим типичные ошибки, возникающие при обращении к REST-интерфейсу прикладного решения. Ошибки могут возникать как на стороне клиентского приложения, так и на стороне сервера. В случае возникновения ошибки на клиенте сервер пытается уточнить причину ошибки и может передать клиентскому приложению дополнительный внутренний код ошибки и информационное сообщение в теле ответа.

В первую очередь нужно понять, работает ли вообще REST-интерфейс с интересующей нас информационной базой. Для этого достаточно в браузере просто набрать URL: <путь публикации базы>/odata/standard.odata. Должен вернуться следующий ответ сервера

Этот ответ говорит о том, что интерфейс работает, но для интерфейса OData недоступны никакие объекты конфигурации.

66 of 70

OData. Типичные ошибки

Пример: при указании адреса ресурса ошиблись в имени объекта конфигурации

Ответ сервера

67 of 70

OData. Типичные ошибки

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

Ответ сервера

68 of 70

OData. Типичные ошибки

Пример: при указании выражения фильтра ошиблись, например, при написании функции отбора

Ответ сервера

69 of 70

OData. Типичные ошибки

Пример: при указании адреса ресурса ошиблись, например, в имени параметра

Ответ сервера

70 of 70

Задавайте вопросы.

Антонов Виталий Михайлович,

руководитель направления 1С-проектов

ИА ИНТЕРВОЛГА

вертикальная оцифровка бизнеса