Если пользователю будет необходим нетиповой обмен между базами и публикация баз будет возможна (установлен WEB-сервер), то можно воспользоваться механизмом WEB-сервисов.
Определение WEB-сервиса — реализация абсолютно четких интерфейсов обмена данными между различными приложениями, которые написаны не только на разных языках, но и распределены на разных узлах сети. Но в нашем примере мы разберем обмен между двумя базами 1С.
-
В базе-источнике требуется создать объект конфигурации: WEB-сервисы
-
В базе приемнике создаем объект конфигурации: WS-ссылки
WS-ссылка содержит описание WEB-сервиса из базы-источника. Этот объект конфигурации не имеет программного кода и представляет собой только модель данных и описание операций созданного в базе-источнике WEB-сервиса.
Пример описания WS-ссылки (рис.1)
Рис. 1 – описание WS-ссылки
Важным параметром является то, что данную ссылку мы можем открыть в браузере и посмотреть текстовое описание WEB-сервиса (рис.2). Если в браузере WEB-сервис не открывается, то и созданная WS-ссылка работать не будет
Рис. 2 – описание WEB-сервиса
Если мы откроем WS-ссылку, которая корректно загружена, то увидим вот такую картину (рис.3)
Рис.3 – WS-ссылка
-
Пакеты, которые автоматически подключаются (ветка пакеты)
-
Сам WEB-сервис, к которому идет обращение и его операции, которые описаны в базе-источнике.
Операции WEB-сервиса описываются функциями встроенного языка. То есть – любая операция веб-сервиса должна возвратить какое-либо значение. Тип возвращаемого значения можно указать в описании операции WEB_сервиса (рис 4.2).
//ИТС +
Типы возвращаемых значений мы указываем в свойстве непосредственно WEB-сервиса «Пакеты XDTO». Механизм XDTO позволяет определять объекты переноса данных, которые могут образовывать строгую иерархию и могут сериализоваться в XML. Эти свойства позволили использовать объекты XDTO в качестве параметров и возвращаемых значений операций web-сервисов.
//ИТС -
Для задачи обмена 1С – 1С из базы-источника логичее возвращать тип, который поймет 1С, то есть возвращаемый параметр будет типом 1С (в нашем случае – хранилище значений). Эти типы содержатся в пакете-XDTO: http://v8.1c.ru/8.1/data/core (рис.4.1)
Рис. 4.1 – описание WEB-сервиса
Рис. 4.2 – описание операции WEB-сервиса
После того, как мы описали функцию WEB-сервиса, которая будет вызываться из базы-приемника (в задаче: база приемник инициализирует обращение к базе-источнику, но этот механизм можно построить и наоборот, что база-источник будет отдавать данные в базу-приемник, тогда нам следует описывать WEB-сервис в базе-приемнике, а в базе-источнике будет WS-ссылка на него. Все зависит от конкретной задачи)
Описание вызова WEB-сервиса (Листинг 1)
ssl4 = Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено );
ВебСервис_Прокси = WSСсылки.uuDocumPrimarySync.СоздатьWSПрокси("https://127.0.0.1:81","uuPrimarySync","uuPrimarySyncSoap",,,ssl4);
ВебСервис_Прокси.Пользователь = "***";
ВебСервис_Прокси.Пароль = "******";
СтрукДата = Новый Структура;
СтрукДата.Вставить("StartDate", Объект.Период.ДатаНачала);
СтрукДата.Вставить("EndDate", Объект.Период.ДатаОкончания);
ХранилищеКПередачеВДО = Новый ХранилищеЗначения(СтрукДата);
Ответ = ВебСервис_Прокси.HandheldSync(ХранилищеКПередачеВДО);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Для того, чтобы обратиться к WEB-сервису (в случае работы базы через протокол HTTPS) требуется:
-
Указать сертификат ssl
-
Организовать обращение к WS-ссылке с использованием метода: СоздатьWSПрокси – в методе прописывается
-
URL-пространство имен, (*) – описывается в Web-сервисе (см. рис 4.1),
-
имя сервиса (*)– описывается в Web-сервисе (см. рис 4.1),
-
имя порта (*) – описывается в WS-ссылке, см
-
интернет прокси,
-
Таймаут,
-
защищенное соединение (* для подключения HTTPS),
-
местоположение,
-
использование аутентификации WINDOWS
Описание создания защищенного ssl-соединения (синтаксис-помощник 1С; листинг 2)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
Листинг 2 - Возможные описания объекта защищенного соединения OpenSSL (1С помощник)
Описание:
Объект защищенного соединения OpenSSL.
Используемый клиентский сертификат должен быть самоподписанным или проходить валидацию через сертификаты удостоверяющих центров, заданные в свойстве "СертификатыУдостоверяющихЦентров"
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Пример:
ssl1 = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
Новый СертификатыУдостоверяющихЦентровWindows());
ssl2 = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(),
Новый СертификатыУдостоверяющихЦентровФайл("C:/certs/myca.pem"));
ssl3 = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаФайл("C:/certs/user.p12", "password" ),
Новый СертификатыУдостоверяющихЦентровФайл("C:/certs/myca.pem"));
ssl4 = Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено );
ssl5 = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаФайл("C:/certs/user.p13", "password" ),
Новый СертификатыУдостоверяющихЦентровОС());
Листинг 2 – описание возможных описаний объекта защищенного соединения OpenSSL
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
Выбор корректного описания зависит напрямую от того, с каким сертификатом работает организация.
-
Если все корректно, то в переменную «ответ» (листинг 3) вернется значение из базы-источника. Так же тут указываем сразу параметры, которые требуются для передачи в операцию WEB-сервиса
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Листинг 3 – Строка обращения к операции WEB-сервиса
Ответ = ВебСервис_Прокси.HandheldSync(ХранилищеКПередачеВДО);
Листинг 3 – Строка обращения к операции WEB-сервиса
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
Обрабатываем полученные результаты. И тут может быть два варианта.
-
Мы получили сразу объект того типа, который указывали в выходных параметрах. Нам его нужно просто обработать средствами встроенного языка – извлечь из него требуемые данные (если это таблица значений, структура или хранилище значений, как в нашем случае).
-
WEB-сервер нам возвращает закодированный ответ в виде строки BASE64. Этот случай опишем подробнее.
Если WEB-сервер нам возвратил закодированную строчку, то требуется выполнить преобразование ее в объекты 1С. Для этого нам следует сделать несколько преобразований:
-
BASE64 в двоичные данные (используем функцию встроенного языка 1С:
ДвоичныеДанные = Base64Значение(Ответ); (где ответ – это значение, которое возвращено WEB-сервером)
-
Используем фабрику XDTO для представления двоичных данных в объекте 1С (листинг 4)
Фабрика типов XDTO: Содержит определения всех типов, позволяет осуществлять чтения/запись данных XDTO в XML и JSON (материал Синтаксис-помощника).
//////////////////////////////////////////////////////////////////////////////////////////////////////////////Листинг 4 – использование фабрики XDTO для преобразования двоичных данных в объект 1С +
телоXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "ValueStorage"), ДвоичныеДанные);
Листинг 4 – использование фабрики XDTO для преобразования двоичных данных в объект 1С -
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Создаем значение XDTO по лексическому представлению значения. Лексическое представление значения должно удовлетворять ограничениям, определяемым данным типом значения XDTO. Тип нашего XDTO (параметр 1 – является обязательным) должен совпадать с типом выходного параметра функции WEB-сервиса (см. Рис 4.2). Описываем пространство имен (URIПространстваИмен (NamespaceURI)) и БазовыйТип (BaseType). Вторым параметром в функцию подставляем наши двоичные данные (без преобразования их в объекты). Если все выполнено корректно, то наше выходное значение из WEB-сервиса будет содержаться в реквизите: телоXDTO.Значение, того типа, который мы указали в выходном параметре ("ValueStorage" – хранилище значения).
Работа непосредственно с получением данных через WEB-сервис на этом заканчивается.
Резюме:
Использование веб-сервисов 1С при обмене 1С – 1С позволяет быстро передавать достаточно большие объемы данных из базы-источника в базу-приемник в объектах языка 1С.
Данный метод обмена может применяться при бесшовной интеграции между двумя базами 1С, но требует определенной серверной инфраструктуры (установленного и настроенного WEB-сервера).
Так же этот вариант применим при необходимости получать данные из одной базы в другую (пример – получение остатка бюджета из одной базы (источник) при заведении нового счета на оплату (в сторонней базе)).