В статье рассмотрены различные способы интеграции сторонних программ с платформой 1С:Предприятие, выявлены достоинства и недостатки данных подходов, обосновано преимущество протокола OData перед остальными способами интеграции.
Ключевые слова: 1С:Предприятие, технология COM, REST-интерфейс, протокол OData, XML, JSON.
Рост сложности программного обеспечения увеличивает сложность реализации интеграции в конкретных ситуациях, вместе с тем растущая конкуренция требует быстрого решения проблемы. Это создает необходимость в использовании подходящих инструментов, предоставляемых платформой или сторонними компаниями. Они помогают облегчить интеграцию программ с помощью использования встроенных библиотек или использования технологий других организаций.
Существует множество подходов для интеграции платформы 1С:Платформы со сторонними приложениями. Рассмотрим распространенные три метода:
- Интеграция с помощью технологии COM (Component Object Model — модель компонентного объекта)
- Использование встроенных механизмов интеграции платформы.
- Использование подхода REST (Representational State Transfer — передача представительного состояния)
1. Технология COM является одной из первых технологий по интеграции данных между приложениями. Она используется в пакете программ Microsoft Office.
Достоинство подхода: Этот метод поддерживается множеством приложений, так как продвигается компанией Microsoft, у которой данная технология используется во взаимодействии программ, входящих в состав Microsoft Office.
Недостатки подхода: Устаревший способ. Для его работы необходимо функционирование сервера 1С:Предприятие в системе Windows. В случае написания интерфейсов необходимо использование двух языков программирования (С и.idl). [1]
Пример кода: производим соединение к другой базе: [2]
НовыйСервер = "МойСервер";
НоваяБазаДанных = "МояБазаДанных";
Пользователь = "Администратор";
Пароль = "123";
V82 = Новый COMобъект("V82.ComConnector");
СтрокаПодключения = "srvr='" + СокрЛП(НовыйСервер)
+ "'; ref='" + СокрЛП(НоваяБазаДанных)
+ "'; usr='" + СокрЛП(Пользователь)
+ "'; pwd='" + СокрЛП(Пароль) + "';";
БазаИсточник = V82.Connect(СтрокаПодключения);
Объекты, получаемые данным способом, имеют тип COM-объект, поэтому есть возможность указать напрямую реквизиты только примитивных типов: булево, строка, число и дата. Остальные реквизиты можно определить через поиск по коду или наименованию.
СсылкаНаКонтрагент=БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН);
КонтрагентГоловной=БазаИсточник.Справочники.Контрагенты.СоздатьЭлемент();
Предопределенные реквизиты COM-объекта имеют англоязычную транскрипцию, остальные – русскую.
КонтрагентСОМ=БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН);
Код = КонтрагентСОМ.Code;
Наименование = КонтрагентСОМ.Description;
НаименованиеПолное = КонтрагентСОМ.НаименованиеПолное;
При получении предопределенных реквизитов в русскоязычном представлении может некорректно отработать метод:
БазаИсточник.ЗаполнитьЗначениеСвойств(ТекущийКонтрагент, КонтрагентCOM);
Где ТекущийКонтрагент – имеет тип обычной переменной, а КонтрагентCOM – COM-объект.
Конструкторы в базе создаются через метод NewObject:
СтрокаUID = БазаИсточник.XMLСтрока(СсылкаНаКонтрагента);
Запрос = БазаИсточник.NewObject("Запрос");
Запрос.УстановитьПараметр("UID",БазаИсточник.NewObject("УникальныйИдентификатор", СтрокаUID));
Запрос.Текст = "Текст";
2. Встроенные механизмы дают программисту возможность произвести вручную выгрузку данных в формате XML или JSON. Затем эти данные можно отправить конечному пользователю через основные протоколы HTTP, FTP. [3]
Пример извлечения данных в формат XML:
Функция Объект_В_XML(Объект)
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML, Объект);
Возврат ЗаписьXML.Закрыть();
КонецФункции
Извлечение XML через механизм XML Data Transfer Objects (XDTO):
&НаСервере
Процедура XMLНаСервере()
НовыйСериализаторXDTO = СериализаторXDTO;
НоваяЗаписьXML = Новый ЗаписьXML();
НоваяЗаписьXML.ОткрытьФайл("C:\Номенклатура.xml", "UTF-8");
НоваяЗаписьXML.ЗаписатьОбъявлениеXML();
НоваяЗаписьXML.ЗаписатьНачалоЭлемента("СправочникНоменклатура");
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектНоменклатура = Выборка.ПолучитьОбъект();
НовыйСериализаторXDTO.ЗаписатьXML(НоваяЗаписьXML, ОбъектНоменклатура, НазначениеТипаXML.Явное);
КонецЦикла;
НоваяЗаписьXML.ЗаписатьКонецЭлемента();
НоваяЗаписьXML.Закрыть();
КонецПроцедуры
Небольшое переписывание данного кода даст возможность экспортировать данные в формате JSON.
При выполнении программного кода данные XML выглядят так:
Рис. 1. XML-данные.
Данные в формате JSON выглядят более просто:
{
"СправочникНоменклатура": [ {
"Номенклатура": {
"#value": {
"IsFolder": false,
"Ref": "86bff087-8f2e-11e8-8d00-eefe535894eb",
"DeletionMark": false,
"Parent": "a80961a5-9d48-11e8-8d51-f46d04a4dd84",
"Code": "000000003",
"Description": "Витая пара",
"ОсновнаяЕдиницаИзмерения": "dfd7a36f-8e7f-11e8-8cfd-f46d04a4dd84",
"ОсновнаяЦена": 15,
"ОсновнойПоставщик": "b5d4fa4d-9c5e-11e8-8d46-f46d04a4dd84",
"Валюта": "e92411a3-8dc6-11e8-8cf9-f46d04a4dd84"} } }
Достоинство подхода: использование распространенных и хорошо читаемых человеком форматов XML и JSON. Не требуется создание “связи” между интегрируемыми приложениями, что обеспечивает надежность обмена данными.
Недостатки подхода: отсутствует автоматическая обработка данных со стороны стороннего приложения.
3. REST — это подход к обработке и представлению данных, которая использует для обмена данными протокол OData. Для связи с приложениями протокол OData отправляет HTTP-запросы и получает от них данные в формате XML и JSON. Данные форматы и протоколы являются стандартными инструментами для обеспечения взаимодействия компонентов в Интернете, этим и объясняется универсальность применения подхода среди приложений.
Преимущество подхода: в большинстве случаев не требуется написание программного кода, использование стандартных HTTP-запросов, получение данных в формате XML или JSON.
Недостатки подхода: требуется установить веб-сервер и модуль расширения веб-сервера из поставки платформы.
В качестве веб-сервера возможно использовать Apache. Затем в конфигураторе выбираем меню “Администрирование”, выбираем команду “Публикация на веб-сервере”. В возникшем окне требуется на латинском языке указать имя базы, к которой будет предоставляться доступ, используемый веб-сервер, путь к каталогу публикации. Соответственно выбираем галочку “Публиковать стандартный интерфейс OData”. [4]
Рис. 2. Скриншот окна «Публикация на веб-сервере».
После нажатия на кнопку «Опубликовать» создается файл default.vrd (XML-файл с настройками публикации), в конфигурации веб-сервера добавляется запись о публикации с указанным в настройках именем. Затем веб-сервер стоит перезагрузить.
Исходя из вышеперечисленного, наиболее оптимальным способом интеграции платформы 1С:Предприятие со сторонними приложениями является использование метода REST-интерфейса. Этот метод не требует написание собственного кода, он основан на работе с популярным протоколом HTTP и форматами XML и JSON, имеет высокую надежность, также широко известен благодаря его продвижению компанией Microsoft.
Литература:
- Оберг, Р. Д.. Технология COM+/ Р. Д. Оберг. // Основы и программирование — М.: «Вильямс», 2000. — С. 480.
- Гайдабура, В. Три кита работы с COM-объектами. Работать через COM-соединение проще, чем вы думаете. / В. Гайдабура // Программирование: практика программирования. — URL: https://infostart.ru/public/170424/ (дата обращения: 07.09.2018).
- Способы интеграции с 1С. — URL: https://habr.com/company/1c/blog/308420/ (дата обращения: 07.09.2018).
- Кинащ Д. Практика доступа в базу 1С через протокол OData. Чтение данных. / Д. Кинаш // Администрирование: сервисные утилиты. — URL: https://infostart.ru/public/711302/ (дата обращения: 07.09.2018).