Настройка оборудования и программного обеспечения

Стандартный интерфейс odata.

Печать (Ctrl+P)

Вторая часть можно посмотреть

Общие сведения

В версии платформы 8.3.5.1068 , опубликованной в сентябре 2015 появился механизм интеграции 1С с внешними программами через технологию REST интерфейс . В качестве протокола доступа платформа использует протокол OData . Это открытый веб-протокол для запроса и обновления данных. Он позволяет оперировать данными, используя в качестве запросов HTTP-команды. Получать ответы в версии 8.3.5.1068 можно было только в формате Atom/XML . Однако, начиная с релиза 8.3.8.1652 в августе 2017 г. появился второй вариант получения данных в формате JSON(англ. JavaScript Object Notation) . По сравнению с XML он легко читается людьми занимает меньше места. Кроме этого все браузеры имеют встроенные средства для работы с JSON.

Работу с протоколом OData на платформе 1С: предприятие можно посмотреть в книге 1С: Руководства разработчика в главе 17 Механизмы интернет-сервисов , параграф 17.2.1 Cтандартный интерфейс OData. Можно также посмотреть примеры расширения поддержки протокола OData ,

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

Публикация стандартного интерфейса OData выполняется с помощью диалога публикации на веб-сервере (Администрирование – Публикация на веб- сервере) и описано в книге 1С:Предприятие 8.3. “Руководство администратора”.
Важно! Для того чтобы объекты конфигурации стали доступны через стандартный интерфейс OData, необходимо разрешить это с помощью метода глобального контекста УстановитьСоставСтандартногоИнтерфейсаOData() .
Механизм установки состава объектов, доступных с помощью стандартного интерфейса OData, можно выполнить в виде внешней обработки. Для этого не требуется модифицировать прикладное решение.

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

В этой цикле статьей я буду показывать примеры типовых операций, использующих соответствующий HTTP-метод;

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

1. Примеры получения данных. HTTP-метод GET

В качестве сервера будет выступать опубликованная на веб-сервере БД с именем WebBuh (Демо-база “Бухгалтерия Предприятия 3.0”). В качестве формата обмена данных я буду использовать формат JSON. Подробнее о работе с JSON написано в документации, доступной . Для получения данных из сервера HTTP-методом GET требуется создать объект ЧтениеJSON для последовательного чтения JSON-данных из файла или строки. Для организации последовательной записи объектов и текстов на сервере HTTP-методом POST PATCH PUT требуется создать объект ЗаписьJSON. Отметим, для метода DELETE не требуется JSON.

В качестве иллюстрации потокового чтения и записи JSON при обращении к REST интерфейсу я буду вызывать следующую пользовательскую функцию общего назначения ВызватьHTTPМетодНаСервере :

&НаСервере // <Описание функции> // // Параметры: // - Строка, содержащая имя HTTP-метода для запроса ("POST"."PATCH", "PUT" ,"GET","DELETE" // - объект HTTPСоединение // <АдресРесурса> - Строка http-ресурса, к которому будет отправлен HTTP запрос. // <ОтправляемыеДанные> - Структура или соответствие, содержащие данные, отправляемые на указанный адрес для обработки // на сервер с использованием указанного HTTP-метода "POST" или "PATCH" или "PUT" // Возвращаемое значение: // Структура ответа сервера в зависимости от HTTPМетод // Функция ВызватьHTTPМетодНаСервере(HTTPМетод,HTTPСоединение,АдресРесурса,ОтправляемыеДанные = Неопределено ) // Создание HTTPЗапрос Заголовки = Новый Соответствие (); Заголовки.Вставить ("Content-Type", "application/json"); ЗапросHTTP = Новый HTTPЗапрос (АдресРесурса, Заголовки ); // ЗаписьJson толка для создания и обновление данных Если HTTPМетод = "POST" или HTTPМетод ="PATCH" или HTTPМетод ="PUT" Тогда ЗаписьJSON = Новый ЗаписьJSON ; ПараметрыJSON = Новый ПараметрыЗаписиJSON (ПереносСтрокJSON.Авто,"",Истина ); ЗаписьJSON.УстановитьСтроку (ПараметрыJSON ); ЗаписатьJSON(ЗаписьJSON , ОтправляемыеДанные ); // ОтправляемыеДанные обязательны в этом случае СтрокаДляТела = ЗаписьJSON.Закрыть (); ЗапросHTTP.УстановитьТелоИзСтроки (СтрокаДляТела ,КодировкаТекста.UTF8 , ИспользованиеByteOrderMark.НеИспользовать ); КонецЕсли; // Вызов Метода HTTPСоединение ОтветHTTP = HTTPСоединение.ВызватьHTTPМетод(HTTPМетод, ЗапросHTTP) ; СтруктураОтвета = Новый Структура ; СтруктураОтвета .Вставить ("КодСостояния ", ОтветHTTP.КодСостояния ); // ЧтениеJSON только для метода GET Если HTTPМетод= "GET" Тогда Попытка ЧтениеJSON = Новый ЧтениеJSON ; ОтветСервера = ОтветHTTP.ПолучитьТелоКакСтроку ("UTF-8"); ЧтениеJSON.УстановитьСтроку(ОтветСервера) ; Соответствие = ПрочитатьJSON(ЧтениеJSON ,Истина ); СтруктураОтвета.Вставить("ОтветСервера ", Соответствие ) ; СтруктураОтвета .Вставить ("ОтветСервераНеРасшифрованный ", ОтветСервера ); Исключение Сообщить(ОписаниеОшибки()) ; Возврат Неопределено; КонецПопытки; Конецесли ; Возврат СтруктураОтвета ; КонецФункции // ВызватьHTTPМетодНаСервере()

Для получения от сервера в формате JSON при обращении к REST интерфейсу прикладного решения нужно в адресе ресурса указать $format=json. Либо указать MIME тип “application/json” в заголовке:

Заголовки = Новый Соответствие (); Заголовки.Вставить("Content-Type", "application/json") ; АдресРесурса ="WebBuh /odata/standard.odata/?$format=json " ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса, Заголовки) ;

Особенность глобального контекста ПрочитатьJSON(ЧтениеJSON, Истина )

  • Если значение второго параметра установлено Истина , чтение объекта JSON будет выполнено в Соответствие .Если установлено Ложь , объекты будут считываться в объект типа Структура .
  • При десериализации объектов JSON в структуру необходимо помнить о требованиях к ключам структуры. Если при десериализации объекта будет найдено имя свойства, недопустимое для ключа структуры, то будет вызвано исключение.

1. 1 Настройка параметров HTTP соединения

Для организации клиентской части взаимодействия с внешним REST- веб-сервер, я создал “с нуля” конфигурацию клиента на базе БСП. На этой конфигурации я создал справочник настройки параметров подключения (см Рис 1)

Рис 1 Справочник настройки параметров HTTP соединения к внешней ИБ через rest интерфейс

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

&НаКлиенте Процедура ПроверитьПодключение(Команда) Адрес = Объект.АдресСервера ; Пользователь = Объект.Пользователь ; Пароль = Объект.Пароль; ИмяБазы = Объект.Наименование ; Порт = ?(Объект.Порт <> 0,Объект.Порт,80) ; HTTPСоединение = Новый HTTPСоединение(Адрес,Порт,Пользователь, Пароль) ; АдресРесурса = ИмяБазы + "/odata/standard.odata/$metadata "; //Вызов пользовательской функции СтруктураОтвета = ВызватьHTTPМетодНаСервере ("GET" ,HTTPСоединение,АдресРесурса ) ; Если СтруктураОтвета <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Код состояния "+СтруктураОтвета.КодСостояния) ; Конецесли; КонецПроцедуры

Цель этой процедуры – Это проверка работы сервиса и правильно ли пользователь ввел параметры соединения. Для этого достаточно выполнить GET-запрос:
HTTPСоединение.ВызватьHTTPМетод(“GET” , ЗапросHTTP) ;
с использованием адреса ресурса:
АдресРесурса = ИмяБазы + /odata/standard.odata/ “;
Проверить работы сервиса можно также в браузере с использованием
URL
http://host/WebBuh/odata/standard.odata. В результате такого запроса получается только список сущностей. Для получения полного описания стандартного интерфейса OData (список доступных сущностей, их атрибутов и функций в виде XML-
документа.) необходимо выполнить GET-запрос с использованием параметра $metadata. URL http://host/WebBuh/odata/standard.odata/$metadata. Подробное описание документа можно получить по адресу http://www.odata.org/documentation/ (на английском языке).
Получать ответы можно в формате Atom/XML или JSON . Коды статусов ответа по протоколу HTTP можно посмотреть Ответы в диапазонах:

  • 100-199 – информационные ответы, показывающие, что запрос клиента принят и обрабатывается.
  • 200-299 – означают, что запрос клиента обработан успешно.
  • 300-399 означает, что запрос не выполнен и клиенту нужно предпринять некоторые действия для удовлетворения запроса.
  • 400-499 – информирует об ошибках на стороне клиентского приложения. Эти коды могут также означать, что от клиента требуется дополнительная информация.
  • 500-599 – информирует об ошибке на стороне сервера, показывают, что сервер столкнулся с ошибкой и, вероятно, не сможет выполнить запрос клиента.

1.2 Поиск объекта по идентификатору

Следующая функция предназначена для поиска справочника или документа по уникальному идентификатора на сервере. Если объект найден, то функция возвращает строковое значение идентификатора (Ref_Key) , иначе возвращает неопределено. В функцию передаются следующие параметры:

  • HTTPСоединение – Объект типа HTTPСоединение
  • ИмяПубликации – Имя опубликованной базы базы данных сервера
  • Элемент – идентификатор сущности объекта, например, Catalog_Организации или Document_- справочник Организации.
  • Идентификатор – Идентификатор объекта, который нужно искать на сервере, например, Организация.УникальныйИдентификатор()
&НаСервере Функция ПоискОбъектПоGUID (HTTPСоединение,ИмяПубликации,Элемент,УникальныйИдентификатор ) GUID = Строка(УникальныйИдентификатор ); // преобразуем в строку АдресРесурса = + Элемент+ "(guid""+ GUID+ "")?$format=json " ; СтруктураОтвета = В ызватьHTTPМетодНаСервере ("GET" , HTTPСоединение,АдресРесурса ) ; Если СтруктураОтвета .КодСостояния >= 400 Тогда //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Элемент+ " Ошибка "+СтруктураОтвета.КодСостояния+ //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтруктураОтвета.ОтветСервераНеРасшифрованный); Возврат неопределено ; КонецЕсли ; Соответствие = СтруктураОтвета. ОтветСервер а; Массив = Соответствие["value"] ; Если Массив = Неопределено Тогда Возврат Соответствие ["Ref_Key"] Иначе Возврат Массив ["Ref_Key"]; КонецЕсли; КонецФункции

Параметр АдресРесурса используется для обращения к REST-сервису. Для проверки работы сервиса можно указать ресурс в браузере таким образом

http://{АдресВебСервера}/{ИмяПубликации}/odata/standard.odata/{Элемент}?{Параметры} ,где

  • АдресВебСервера – Адрес веб-сервера, на котором опубликован сервис, например Localhost
  • ИмяПубликации – имя информационной базы указанное при публикации решения
  • /odata/standard.odata/ – Признак обращения к стандартному интерфейсу OData
  • Элемент – идентификатор ресурса или предопределенные ресурсы. Например, Catalog_Контрагент(guid’value’).
  • Параметры – параметры ресурса. Используются, например, для отбора, в принятом для HTTP-запросов: ?ключ=значение&ключ2=значение2

1.3 Поиск объекта по полям поиска

Следующая пользовательская функция предназначена для поиска объекта по полям поиска в том случае, когда объект по идентификационному номеру. Функция возражает строку Ref_Key – идентификационный номер.

&НаСервере Функция П оискОбъектПоПолямПоиска(HTTPСоединение,ИмяПубликации, Элемент,ПоляПоиска) Условие = "" ; Для Каждого КлючЗначение из ПоляПоиска Цикл Условие = Условие + КлючЗначение.Ключ + " eq "" + КлючЗначение.Значение + "" and "; КонецЦикла; ТекстЗапроса = Лев(Условие, СтрДлина(Условие)-5) ; // удаляем последние 5 символов АдресРесурса = ИмяПубликации+ "/odata/standard.odata/" +Элемент+ "?$filter=" + ТекстЗапроса + "&$format=json&$select=Ref_Key " ; //Вызов моей пользовательской функции СтруктураОтвета = ВызватьHTTPМетодНаСервере("GET " ,HTTPСоединение,АдресРесурса); Если СтруктураОтвета .КодСостояния >= 400 Тогда //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Элемент+ " Ошибка "+СтруктураОтвета.КодСостояния); //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтруктураОтвета.ОтветСервераНеРасшифрованный); Возврат неопределено; КонецЕсли; Соответствие = СтруктураОтвета. ОтветСервер а; Массив = Соответствие["value" ] ; Если Массив = Неопределено Тогда Возврат Соответствие ["Ref_Key" ] Иначе Возврат Массив ["Ref_Key" ]; КонецЕсли; КонецФункции

Как видно из тела процедуры П оискОбъектПоПолямПоиска , отбор начинается с ключевого слова $filter в адресе ресурса. Формальный параметр ПоляПоиска – это соответствие, которое содержит наименования и значения реквизитов.

Отметим, что наименование реквизитов порой не очевидно. Необходимо запомнить, что для справочников:

  • Code – код,
  • Description – Наименование
  • DeletionMark – пометка удаления,
  • IsFolder – признак группы,
  • Parent_Key – родитель.
  • Если реквизит ссылочного типа, к его имени следует добавить суффикс _Key, например Контрагент_Key.

Для документов:

  • Number – номер документа,
  • Date – дата документа.

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

  • eq - Равно; /Catalog_Города?$filter=Наименование eq ‘Главный’;
  • ne - Не равно; /Catalog_Города?$filter=Наименование ne ‘Пермь’;
  • gt - Больше; /Catalog_Товары?$filter= Цена gt 10;
  • ge - Больше или равно; /Catalog_Товары?$filter=Цена ge 10;
  • lt - Меньше; /Catalog_Товары?$filter=Цена lt 10;
  • le - Меньше или равно; /Catalog_Товары?$filter=Цена le 10;
  • or - Логическое ИЛИ; /Catalog_ Товары ?$filter= Цена lt 10 or Цена gt 100;
  • and - Логическое И; / Catalog _Товары?$ filter =Цена g t 10 and Цена l t 100;
  • not - Отрицание; /Catalog_ Товары ?$filter=not (Цена eq 10);

Отметим, также, что значение фактического параметра Элемент (или сущность)) , который я передаю на функцию формируется по следующему правилу:

ПрефиксИмени_ИмяОбъектаКонфигурации_СуффиксИмени .

С помощью стандартного интерфейса OData можно получить доступ к следующим объектам (ПрефиксИмени ):

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

ИмяОбъектаКонфигурации - свойство «Имя» объекта конфигурации так, как оно задано в конфигураторе.

СуффиксИмени - нужен для уточнения имени ресурса, необязателен, может принимать следующие значения:

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

Параметры обращения к ресурсам

После формирования имени ресурса нужно определить параметры обращения к ресурсу, например, ?$filter=Значение &$format =json&$select= Ref_Key ,

  • $filter - отбор при получении данных
  • $format - указывает формат возвращаемых данных,
  • $select - перечисление свойств сущности, которые попадут в результат запроса;
  • $metadata - возвращает описание стандартного интерфейса OData (используется без указания суффикса имени, пример на одном из изображений выше);
  • $top - ограничение количества возвращаемых записей;
  • $skip - убирает из результата запроса указанное количество записей;
  • $count - возвращает количество записей в выборке запроса;
  • $inlinecount=allpage(=none) - добавляет в результат запроса информацию о количестве записей
  • $orderby=<Реквизит1> asc, <Реквизит2> desc - сортировка результата запроса
  • alloweOnly - только разрешенные (используется без знака «$»).

1.4 Получить массив записей регистра сведений

Посмотрим пример получения массив записей регистра сведения ФИОФизическихЛиц, например историю изменения ФИО физического лица

ИмяПубликации =" WebBuh"; Элемент = "InformationRegister_ФИОФизическихЛиц"; Период = Неопределено ; ДанныеСсылочногоТипа = Новый Структура (); ДанныеСсылочногоТипа .Вставить ("ФизическоеЛицо",ФизическоеЛицо_Key); ДанныеНЕСылочногоТипа = Новый Структура (); ДанныеНЕСылочногоТипа .Вставить ("ФизическоеЛицо_Type", "StandardODATA.Catalog_ФизическиеЛица") Массив = ПолучитьНаборЗаписиРегистраСведений (HTTPСоединение ,ИмяПубликации ,Элемент , Период ,ИзмеренияСсылочногоТипа , ИзмеренияНЕСылочногоТипа )

Тело функции ПолучитьНаборЗаписиРегистраСведений, которая вызывается в этом примере показано ниже

&НаСервере Функция ПолучитьНаборЗаписиРегистраСведений (HTTPСоединение ,ИмяПубликации ,Элемент , Период =Неопределено ,ИзмеренияСсылочногоТипа = Неопределено , ИзмеренияНЕСылочногоТипа = Неопределено ) ТекстЗапроса ="" ; Если Период <> Неопределено Тогда ФорматированныйПериод = Формат (Период ,"ДФ=yyyy-MM-ddTHH:mm:ss"); ТекстЗапроса = "Period = datetime""+ ФорматированныйПериод + """ ; КонецЕсли; Если ИзмеренияСсылочногоТипа <> Неопределено Тогда Для Каждого КлючЗначени е из ИзмеренияСсылочногоТипа Цикл Запитая = ? (ЗначениеЗаполнено (ТекстЗапроса ), "," ,""); ТекстЗапроса = ТекстЗапроса + Запитая + КлючЗначение.Ключ + "=guid(""+ КлючЗначение.Значение + "")"; КонецЦикла; КонецЕсли; Если ИзмеренияНЕСылочногоТипа <> Неопределено Тогда Для Каждого КлючЗначение из ИзмеренияНЕСылочногоТипа Цикл Запитая = ? (ЗначениеЗаполнено (ТекстЗапроса ), "," ,""); ТекстЗапроса = ТекстЗапроса + Запитая + КлючЗначение.Ключ + "=" + КлючЗначение.Значение ; КонецЦикла; КонецЕсли; АдресРесурса= ИмяПубликации + "/odata/standard.odata/" + Элемент + "("+ ТекстЗапроса + + ") ?$format=json "; //Вызов моей пользовательской функции СтруктураОтвета = ВызватьHTTPМетодНаСервере ("GET",HTTPСоединение ,АдресРесурса ); Если СтруктураОтвета .КодСостояния >= 400 Тогда //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Элемент+ " Ошибка "+СтруктураОтвета.КодСостояния); //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтруктураОтвета.ОтветСервераНеРасшифрованный); Возврат неопределено; КонецЕсли; Соответствие = 0

В 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. В ответе мы должны получить весь состав опубликованных таблиц. Он должен быть похож на рисунок ниже.


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

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

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

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

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

Обзор OData

OData — это веб-ориентированный API-интерфейс для доступа к данным и манипулирования ими. Он подобен API-интерфейсам mini-ODBC и JDBC, но в отличие от них специально ориентирован на Интернет. Точнее говоря, OData позволяет клиентам конструировать URI-идентификаторы для именования набора сущностей, осуществлять фильтрацию содержащихся в этом наборе сущностей, а также прослеживать отношения со связанными сущностями и коллекциями сущностей. Для получения дополнительной информации обратитесь к статье Introduction OData: Data Access for the Web, the cloud, mobile devices, and more (Представляем OData: доступ к данным с помощью Интернета, облачной среды, мобильных устройств и т. д.).

Рисунок 1. Выставление базы данных в Интернете с помощью OData-поставщика общего назначения

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

Рисунок 2. Язык CSDL (Conceptual Schema Definition Language)

На рисунке 2 показана схема языка CSDL (Conceptual Schema Definition Language). CSDL — это опциональный инструмент, помогающий приложениям-потребителям понимать структуру выставляемых данных. CSDL подобен метаданным в JDBC and ODBC, он помогает клиентским приложениям понимать, к чему именно они обращаются.

В Интернете имеются тысячи веб-ориентированных API-интерфейсов. OData — это один из примеров такого API-интерфейса. Более подробную информацию о веб-ориентированных API-интерфейсах можно получить на веб-сайте: Programmable Web . Стандартизация таких интерфейсов позволит улучшить консолидацию в этом важной технологической области и поможет инновациям идти в ногу с потребностями рынка, в частности поддерживать новые конструкции данных и инициативы в сфере открытых данных.

OData в организации OASIS

Проект хартии по OData был представлен в организацию OASIS (Organization for the Advancement of Structured Information Standards). Ниже приведен фрагмент текста из этого документа.

Работа будет ориентирована на достижение следующих целей.

  • Создание RESTful-сервисов данных на базе HTTP, возможность идентифицирования ресурсов с помощью URI-идентификаторов (Uniform Resource Identifier) и определения ресурсов с помощью абстрактной модели данных, возможность публикования и редактирования веб-клиентами с использованием простых HTTP-сообщений.
  • Выставление и получение информации из различных источников, включая, но не ограничиваясь, реляционные базы данных, файловые системы, системы управления контентом и традиционные веб-сайты.

Документы со спецификациями OData, представленные в организацию OASIS, а также проект хартии доступны по следующим ссылкам.

Помимо спецификаций OData в организацию OASIS были представлены следующие четыре документа с расширениями OData.

Эти документы с расширениями призваны инициировать работу в предлагаемом техническом комитете OASIS по OData (OASIS OData Technical Committee). На веб-сайте организации OASIS можно прочитать полный текст хартии по OData и документы с расширениями.

OData и продукты IBM

Следующие продукты IBM поддерживают OData.

  • Продукт для поддержки доступа со стороны различных клиентов.
  • Продукты DB2 и Informix способны использовать OData посредством Microsoft Visual Studio. Более подробная информация по этой теме содержится .

Примеры OData

В данном параграфе приведено несколько простых примеров на OData, обращающихся к сервису Netflix.

Default Genres Titles . . . . . . Titles http://odata.netflix.com/v2/Catalog/Titles/ 2012-05-23T21:41:18Z Lead singer Anthony Kiedis, bassist Flea, ... 2012-01-31T09:45:16Z . . . http://odata.netflix.com/v2/Catalog/Titles("13aly") Red Hot Chili Peppers: Funky Monks Lead singer Anthony Kiedis, bassist Flea, drummer Chad Smith ... 2012-01-31T09:45:16Z . . . 13aly Red Hot Chili Peppers: Funky Monks Red Hot Chili Peppers: Funky Monks Lead singer Anthony Kiedis, bassist Flea, drummer Chad Smith ... 3.4 1991 . . .

OData и другие веб-ориентированные API-интерфейсы

В настоящее время используются тысячи веб-ориентированных API-интерфейсов. К числу популярных API-интерфейсов этой категории относятся картографические сервисы . По состоянию на июнь 2012 года на веб-сайте Programmable Web было перечислено более 6000 веб-ориентированных API-интерфейсов (см. заметку под названием: API Business Models Take Center Stage). Недавнее исследование компании Vordel показало, что "половина предприятий внедряет API-интерфейсы для построения новых бизнес-каналов", при этом 25% из этих интерфейсов разрабатывается специально для мобильных приложений.

Одна из интересных областей – какое отношение имеет OData к деятельности в области API-интерфейса Linked Data. Рабочая группа W3C Linked Data Platform (LDP) Working Group и технический комитет OASIS OData Technical Committee стремятся специфицировать API-интерфейсы REST-типа для получения данных и манипулирования ими в Интернете с использованием различных моделей данных. Платформа LDP базируется на модели данных была специфицирована компаний Microsoft и берет свое начало в модели Peter Chen"s Entity Relationship Model сформулированной в 1976 г. (Peter Chen). Модель EDM до сих пор используется при проектировании реляционных баз данных. Модель данных EDM базируется на преобразовании информации в сущности и в отношения. Эта модель использует специфические для определенной области значения, например, номера социального страхования, номера счетов-фактур, номера товаров, для ссылки на ресурсы и на их свойства, а также для связывания информации.

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

Построение адаптеров между гетерогенными веб-ориентированными API-интерфейсами вполне возможно. К примеру, прототип адаптера для связывания рабочих элементов (workitem) решения , получаемых посредством API-интерфейс на базе Linked Data под названием OSLC (Open Services for Life Cycle Collaboration) , и документов Microsoft Sharepoint, получаемых посредством OData, можно найти по следующей ссылке: http://wiki.eclipse.org/Lyo/SharepointAdapter .

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

Благодарности

Выражаю глубокую благодарность за отзывы и предложения моим коллегам: Elizabeth Cleary, Andrew Eisenberg, Diane Jordan, Arnaud Le Hors.

Давайте на минутку представим, что у нас есть информационные базы на платформе "1С:Предприятие 8", с данными которой нам нужно регулярно работать. Но, к сожалению, у нас нет возможности вносить какие-либо свои правки в их конфигурацию. Возможно это (при наличии полноценной платформы); или бесплатная "1С:УНФ для Украины. Микро "; или из-за преимуществ автоматического обновления не хотим снимать поддержку; или обслуживающая компания назвала стоимость своих услуг, которая не получила одобрения у руководства, а собственного "программиста 1С" нет...

И вот в таких условиях вам ставят задачу по интеграции этой базы и некоторой внешней системы. Что делать и какие у нас есть варианты? Возможно в комментариях меня дополнять, но я пока вижу ровно 5 путей:

  1. Доступ в базу через семейство COM-объектов (V83.ComConnector и более ранние). Ограничение : платформа должна быть установлена на Windows.
  2. Непосредственный доступ в таблицы базы данных. Вот пример для СУБД . . Ограничение : запрет непосредственного доступа к данным в лицензионном соглашении; нестабильность полученного доступа; изменение данных может привести к нарушению логической целостности базы.
  3. Начиная с версии платформы 8.3.5 появилась возможность предоставить доступ к данным через автоматический REST-интерфейс на основе протокола OData v.3.0. Ограничение : необходимо установить веб-сервер и модуль расширения веб-сервера из поставки платформы.
  4. Начиная с версии платформы 8.3.6 появился механизм расширений , который позволяет "пристегнуть" новую функциональность без внесения изменений в основную конфигурацию. В числе новой функциональности есть интересные нам WEB- и HTTP-сервисы. Начиная с версии платформы 8.3.11 стала доступной возможность расширения структуры таблиц базы данных (добавление новых реквизитов для хранения служебных данных в целях интеграции). Ограничение : необходимо наличие программиста, который разработает расширение и будет следить за его работоспособностью при обновлениях; для сервисов необходимо установить веб-сервер и модуль расширения веб-сервера из поставки платформы.
  5. Можно отказаться от "мгновенного доступа" и тогда можем использовать запуск внешних обработок с помощью параметра командной строки /Execute . В таком сценарии можно сделать регулярный запуск по расписанию некоторой обработки, которая будет проверять внешний ресурс на наличие инструкций к выполнению и помещать туда результаты своей работы. Так же можно самостоятельно запускать клиентское приложение 1С на отработку своих команд, если есть доступ к ОС, в которой находится база. Ограничение : необходимо наличие программиста, который создаст обработку; наличие временного лага в реакции системы на значение промежутка между запусками в планировщике или на время старта клиентского приложения.

Таким образом среди 5 вариантов самым быстрым и самым легким для администратора способом является автоматический доступ через протокол oData. Этот же вариант является кроссплатформенным.

А еще вариант с протоколом oData менее затратен с точки зрения разработки связки с базой 1С. Дело в том, что компания Microsoft усиленно его продвигает. Помимо выпуска OData SDK для разработки под.NET, AJAX, PHP, Java, JavaScript, WebOS и Objective-C, эта компания внедрила данный протокол в свои популярные продукты: Excel, PowerPoint, SharePoint, MsSQL и других. Таким образом вам не нужно создавать свою версию CommerceML и заниматься разбором XML и JSON текстов как на вашей стороне так и на стороне базы 1С, как если бы вы реализовывали свои собственные WEB- и HTTP-сервисы. При использовании OData у вас уже сразу будут готовые библиотеки для получения или модификации данных для применения в вашей внешней системе, в то время как на стороне базы 1С все будет происходит автоматически.

Минутка уже прошла?

Можем выдохнуть - у нас больше нет никаких ограничений и мы можем делать любую интеграцию, какую только захотим! Я специально ограничил нашу фантазия в начале, что бы мучительно долго не перечислять все варианты из известной книги "Технологии интеграции 1С:Предприятия" ISBN 978-5-9677-1462-7 авторства Гончарова Д.И. и Хрусталева Е.Ю (и тем более не тратить время на перечисление слабых сторон этих вариантов). Можете тут поверить мне на слово или можете начать дискуссию в комментариях, но вариант с OData все равно остается самым привлекательным.

Для тех, кто заинтересовался темой, прошу перейти на официальный сайт протокола - www.odata.org . Еще раз обращаю внимание, что не смотря на то, что актуальная версия протокола уже 4.0 и она была стандартизирована консорциумом OASIS еще 17 марта 2014 года , но в платформе "1С:Предприятие 8" по прежнему используется протокол более ранней версии 3.0. Кстати, не забудьте заглянуть в раздел экосистемы протокола и полюбоваться на упоминание нашей 1C:Enterprise, которая идет первой в списке:))

Необходимые настройки

Как я уже упоминал, у вас должен быть веб-сервер. Начиная с версии 8.4 в составе серверной части платформы уже будет свой собственный веб-сервер, но пока нам нужно пользоваться сторонними - IIS или Apache. Как все настроить хорошо описано в желтой книжечке для администратора. Но если вы любите картинки и чужой опыт, то вот надергал в поиске: , и конечно же :) За полноту и актуальность предоставленных данных в указанных статьях не ручаюсь и вообще не знаком с авторами. Если возникнут проблемы, то читайте Руководство Администратора от вашей версии платформы - там есть все, что вам пригодится.

После того, как у вас уже установлен веб-сервер и он уже не падает при запуске из-за проблем с расширением доступа к 1С (давайте угадаю - вы поставили 32-разрядный Apache и 64-разрядную платформу), осталось совсем чуть-чуть. В конфигураторе заходим в меню "Администрирование" и нажимаем на команду "Публикация на веб-сервере...". В появившемся окошке необходимо указать следующие важные моменты:

  • Название вашей базы в поле "Имя", по которой веб-сервер будет предоставлять к ней доступ (если не хотите проблем, то не пишите на кириллице);
  • Укажите веб-сервер, который установлен на данном компьютере (если у вас установлено целых два веб-сервера, то в выпадающем списке будет выбор);
  • Путь к каталогу публикации, к которому должен быть доступ у вашего выбранного веб-сервера;
  • И самое главное - галочка "Публиковать стандартный интерфейс OData"!

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

Несколько замечаний по выполнению публикации . Если у вас к публикации несколько баз, то для каждой из них должен быть свой каталог. Сразу подумайте о пользователе, которым собираетесь получать доступ к базе - у него должны быть нужные роли и имя латинскими буквами без спецсимволов (если вам в будущем охота воевать с кодировками, то можете сделать имя на русском с пробелами). Если вы работаете на Windows и у вас включен UAC, то перед публикацией конфигуратор следуют запускать от имени администратора. Если вы работаете на Linux - держитесь, мы в вас верим! :)

Вот как выглядит рабочий default.vrd с публикацией интерфейса OData:

Как видно из файла публикации - веб-серверу абсолютно все равно, где физически находится информационная база, путь к ней прописывается точно так же, как вы его прописываете в списке баз начального окна. Главное, что бы на одном компьютере с веб-сервером было установлено расширение доступа и местонахождение базы было по сети физически доступно для службы веб-сервера с правами на изменение. Так же возможны проблемы с получением лицензии и нужно будет покопаться в файле nethasp.ini, но это все стандартные процедуры и для обычной установки платформы.

После того, как вы выполнили публикацию и перезапустили сервер, можем проверить результаты в браузере. Для этого нужно указать имя веб-сервера, далее имя базы из публикации, далее путь /odata/standard.odata/ . У вас должны запросить пароль и вы увидите, что-то похожее на это:

Что бы продемонстрировать возможности рассматриваемой в статье технологии, я взял конфигурацию ""Управление торговлей (базовая)", редакция 10.3", в которой установлен режим совместимости "Версия 8.2.13" и потому все метаданные через REST-интерфейс доступны сразу, а вызов функции УстановитьСоставСтандартногоИнтерфейсаOData() для управления доступностью состава запрещен.

Если же у вас имеется доработанная торговля 10.3, которой вы установили режим совместимости "Версия 8.3.5" или выше, или если у вас есть более современные конфигурации, то все метаданные по умолчанию будут скрыты и вам нужно будет воспользоваться специальной обработкой для указания видимости требуемых данных. Что бы не тратить время на создание своей обработки, можете воспользоваться моей работой, которая годится как для обычного так и для управляемого интерфейсов (см. вложения).

Бурчание...

Если честно, то я не очень понял эту идею с настраиваемым списком метаданных. Какое-то половинчатое решение. Если целью было увеличить безопасность, то почему для разрешаемых данных сразу дают полный доступ на редактирование и удаление, а не сделать более тонкую настройку прав с возможностью предоставить только чтение? Можно конечно решить вопрос прав с помощью специально настроенной роли, но это уже лишняя модификация прикладного решения, и даже в этом случае я не пущу в базу по REST-интерфейсу никого кроме серверных сценариев своего сайта (back-end), который будет принимать решение что отдавать, а что нет.

Если они хотели минимизировать объем передаваемой информации, то еще более сомнительное решение - метаданные смотрят всего несколько раз для изучения функциональности и дальше работают с данными. Логично же было бы делать оптимизации именно в данных? Ведь можно было бы ограничить список запрашиваемых у объектов полей, а особенно актуально ограничить раскрываемую информацию по параметру $expand, который тянет полностью весь связанный объект, в то время когда нам нужны из него всего одно-два поля.

А что же дальше?

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

Если требуется сделать на сайте что-то типа кабинета пользователя с предоставлением истории взаиморасчетов, действующих цен с учетом персональных скидок, ввода заказа и прочими плюшками, то к нашим услугам есть несколько готовых библиотек на официальном сайте . Есть даже целый фреймворк OpenUI5 от компании SAP, который на базе данных получаемых по протоколу OData позволяет создать полноценное бизнес-приложение. В общем, раздолье для грамотного JS-программиста.

Предостережение о "велосипедах"

Наверное, после прочтения последней фразы у вас могли загореться глаза - "К черту, стандартный веб-клиент 1С! Я с такими возможностями собственный интерфейс к базе создам с блэкджеком и приятной компанией". Но я бы на вашем месте не спешил конкурировать на этом поле с компанией 1С, где опытные веб-разработчики уже несколько лет создают то, что мы все видим постфактум. Вы действительно хотите повторить печальную славу "проекта Доминикана"?

Мне могут возразить создатели и - риск стоит затраченных усилий и уже созданы почти готовые для коммерческой эксплуатации продукты. Сотрудники Окнософта тут часто любят хвастаться, что на их разработку стоит очередь из клиентов на годы вперед. И я за них искренне рад - ребята нашли свою нишу. Но по их статьям у меня сложилось впечатлением, что их комплекс metadata.js - это вебовская аналогия некогда востребованной программы "Расширения для карманных компьютеров" компании ДИСКо, которая дала возможность обычным программистам 1С писать приложения под смартфоны. И где теперь эта программа? Такой же функционал для разработки мобильных решений (и даже еще более богатый, и на большее количество платформ) сама 1С дала бесплатно в рамках поставки своей платформы.

Из личного опыта. В какой-то момент после моего замечания, "что в веб-клиенте 1С так нельзя сделать", на моей бывшей фирме было принято решение создать собственный альтернативный веб-интерфейс. Наняли несколько JavaScript-разработчиков, взяли за основу для front-end какую-то популярную тогда библиотеку интерфейсов с красивыми гридами и чартами, а для сервера выбрали node.js. Я реализовал для этого проекта SOAP-интерфейс доступа к данным (HTTP-сервисов тогда еще не было) и мы получили красивую форму списков заказов уже через пару недель. Не знаю точно, что там происходило в разработке, но после нескольких месяцев героической битвы против тотальной атаки багов, проект закрыли и с разработчиками попрощались. А вот программисты компании 1С в это самое время не сидели сложа руки, а выпустили ряд обновлений, после которых пользоваться стандартным веб-клиентом стало немного поприятнее.

Допустим, что мы не грамотные JS-программисты, но какой-то списочек повесить на сайт хотим. Я открыл статью с перечнем самых популярных на сегодняшний день библиотек создания таблиц и нашел в нем простенькую библиотечку jsGrid как раз для нашего случая. Изучаем их сайт, берем пример их кода по использованию OData и вставляем туда путь к нашим данным.

Что бы совсем быть ленивым и ничего не программировать для нашего примера, мне нужно запросить полноценную табличку без необходимости по ссылкам догружать строковые представления. В типовой УТ10.3 на этот счет выбор не очень богатый и потому я возьму справочник Контрагенты.

Теперь самое интересное. А как же сформировать строку запроса на чтение нужных нам данных? Это просто! Смотрим по нашему пути к корню OData (для меня это ) как правильно называется этот справочник - Catalog_Контрагенты . Далее открыв в новом окне адрес http://localhost/DemoTrdBase/odata/standard.odata/ Catalog_Контрагенты мы увидим содержимое всего справочника в формате XML. Но для нашего примера нужен JSON и потому к строке нужно добавить параметр: $format=json - получится http://localhost/DemoTrdBase/odata/standard.odata/ Catalog_Контрагенты ? $format=json . Так, группы нам не интересны и давайте их уберем с помощью параметра фильтрации: $filter=IsFolder eq false - получится http://localhost/DemoTrdBase/odata/standard.odata/ Catalog_Контрагенты ? $format=json & $filter=IsFolder eq false . Блок параметров, как вы уже заметили начинается символом "?", а сами параметры между собой соединяются символом "&". Полный список доступных параметров и функций смотрите в документации по платформе.

Полученный файл положим в каталог, который настроен корневым в вашем веб-сервере. Это необходимо, что бы "домены" странички и запрашиваемых данных совпадали, иначе получите бесконечный индикатор обновления и ошибку в логах: " No "Access-Control-Allow-Origin" header is present on the requested resource. Origin "null" is therefore not allowed access. The response had HTTP status code 401. "


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

А совсем без программирования?

Сайты, мобильные приложения, шина сообщений и прочие слова для любого айтишника звучат круто, но не находят отклика в сердцах высоких начальников. Их главный рабочий инструмент Excel, к которому они пылают иррациональной любовью даже при наличии мощной подсистемы отчетности из их баз 1С. И в этот момент мы вспоминаем, что именно компания Microsoft придумала стандарт OData и внедрила его в свои программы начиная с Office 2010. В офисных программах мы можем как просто просматривать таблицы с данными, так и воспользоваться механизмами запросов для получения более интересной информации за один раз без необходимости соединять таблицы с разных листов.

К примеру, нас интересуют должники. В УТ10 мы их можем получить из виртуальной таблицы остатков регистра накопления ВзаиморасчетыСКонтрагентами, наложив фильтр что бы сумма долга была больше нуля (иначе это авансы). Задавать дату не буду, так как меня интересуют актуальные данные. Для моей базы это будет следующая ссылка: http://localhost/DemoTrdBase/odata/standard.odata/AccumulationRegister_ВзаиморасчетыСКонтрагентами/Balance?$filter=СуммаУпрBalance gt 0

Просмотрев результат, мы можем заметить, что у нас нет представлений для контрагентов, а только ключи для таблицы справочника контрагентов. Следовательно будем запрашивать и эти вспомогательные данные. Для этого воспользуемся ссылкой без фильтров: http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Контрагенты

А теперь простая последовательность шагов:

  1. Открываем Excel (у меня версия 2016; если у вас 2010 или 2013, то меню может немного отличаться)
  2. Переходим по навигационному пути: "Данные" / "Создать запрос" / "Из других источников" / "Из канала ODATA".
  3. Указываем нашу ссылку на регистр взаиморасчетов
  4. На форме авторизации выберем третий вариант "Базовый" и укажем логин/пароль. Нажимаем "Подключение".
  5. В открывшемся окне редактора запроса вместо имени "Запрос1" дадим что-то более для нас интересное - "Взаиморасчеты"
  6. В центре окна редактора запроса видим колонку "Список", где в каждой строке слово "Record". Мы можем или воспользоваться контекстной командой "В таблицу" или нажать соответствующую кнопку в меню "Преобразование" редактора. На возникший вопрос ответьте "Ок".
  7. Теперь колонка называется "Column1" и рядом с ней появилась кнопочка со стрелками в разные стороны. Нажмите на нее. С сервера подтянется описание существующих колонок. Снимите все галочки и оставьте их только на колонках "Контрагент_Key" и "СуммаУпрBalance". Нажмите на "Ок" и появится таблица из двух выбранных колонок с нужными нам данными.
  8. За пределами нашего внимания остались такие измерения как организация, договор и сделка, но они все равно были запрошены. В результате у нас сейчас есть строки контрагентов с разными суммами. Их можно свернуть с помощью группировки. Для этого или из меню или из контекста вызывайте команду "Группировать по". В группировочных полях оставьте только контрагента, а поле с суммой удалите. Назовите новую колонку "Долг", в операции выберите "Сумма", а в столбце укажите поле нашей суммы. Нажмите на "Ок" и в результате получим немного меньше записей.
  9. Теперь нам нужно расшифровать контрагентов. Для этого в левой панели "Запросы", где уже есть текущий запрос "Взаиморасчеты", вызовите контекстное меню и выберите "Новый запрос" / "Другие источники" / "Канал ODATA". В появившемся окошке укажем путь к справочнику контрагентов. Далее снова указываем логин/пароль авторизации, в предпросмотре нажимаем "Ок" и зададим новому запросу имя "Контрагенты".
  10. Вернемся к запросу "Взаиморасчеты" (клик по названию на панели запросов).
  11. Теперь выполняем соединение наших двух запросов. Для этого в основном меню редактора вызовите команду "Комбинировать" / "Объединить запросы". В окне конструктора объединения будет наша таблица взаиморасчетов. В центре в выпадающем окне выберите запрос "Контрагенты". Вид соединения остается тот, который по умолчанию (левое внешнее). Далее кликами выбираем колонки для условия объединения. Соглашаемся со всем что нам далее предлагают.
  12. После объединения мы получили новую колонку "Контрагенты" со знакомой кнопкой с разнонаправленными стрелочками. Кликаем по этой кнопке и выбираем интересующие нас колонки. Для интереса выберем "НаименованиеПолное" и "Parent" (группа). Колонка "Parent" так же предлагает нам раскрыться - выберем в ней поле "Description" (обычное наименование справочника).
  13. Сделаем красиво. Первую колонку с ключем контрагента можем удалить. Колонку группы так и назовем "Группа", колонке с именем контрагента дадим название "Контрагенты", а колонку долга перекинем в конец получаемой таблицы.
  14. Теперь можем нажать на главную кнопку редактора - "Закрыть и загрузить".
  15. Далее можно использовать загруженную таблицу как данные для сводной таблицы или сводной диаграммы. Или при создании этих новых объектов указываем в качестве источника данных наш запрос "Взаиморасчеты".

Но, как говорится, лучше один раз увидеть, чем сто раз услышать. Я постарался записать эту же последовательность действий на видео. И сразу предупреждаю, что у вас при повторе будет немного не так - будет запрошена авторизация, о чем я выше упомянул. Просто на момент записи видео, Excel уже запомнил мои логин и пароль.

Итоги

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

Что бы не было предубеждений, что применять доступ по OData можно исключительно для управляемого интерфейса на последних версиях платформы, я в качестве учебного примера выбрал демо-базу конфигурации "Управление торговлей (базовая), ред 10.3" в режиме совместимости 8.2. Даже на базе данных такой конфигурации, всего несколькими кликами мышки можно получить в книге Excel актуальные данные по долгам и точно так же просто можно было бы получить актуальные остатки на складах, данные по продажам и прочую полезную информацию.

P.S. Продолжение данной статьи, в котором рассмотрены операции создания и изменения данных, опубликовано по адресу

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

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

  • Выгрузка/загрузка данных в/из прикладного решения;
  • Интеграция с интернет-сайтами (интернет-магазинами);
  • Наращивание функциональности прикладного решения без изменения конфигурации;
  • Интеграция с другими корпоративными системами (иногда и без дополнительного программирования).

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

И это действительно удобно, если учесть, что клиенты OData существуют на всех основных платформах, соответствующие библиотеки можно скачать .

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

Публикация REST интерфейса OData

Для использования интерфейса OData его нужно опубликовать, а для этого нам потребуется веб-сервер — Apache 2.2 или IIS (начиная с версии еще и Apache 2.4). Затем, нужно зайти в меню «Администрирование»->»Публикация на веб-сервере…».

В открывшемся окне заполняем нужные поля и жмем «Опубликовать»:

После этого нужно будет определить состав интерфейса OData, т.е. указать — какие объекты конфигурации в него входят, а какие нет (изначально в составе нет ни одного объекта).

Сделать это можно примерно так:

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

&НаСервере

Процедура УстановитьODataНаСервере()

тМассив= Новый Массив;

тМассив. Добавить(Метаданные. Справочники. Товары) ;

УстановитьСоставСтандартногоИнтерфейсаOData(тМассив) ;

КонецПроцедуры


Понравилась статья? Поделитесь с друзьями!
Была ли эта статья полезной?
Да
Нет
Спасибо, за Ваш отзыв!
Что-то пошло не так и Ваш голос не был учтен.
Спасибо. Ваше сообщение отправлено
Нашли в тексте ошибку?
Выделите её, нажмите Ctrl + Enter и мы всё исправим!