Единый семинар «1С» для бухгалтеров и руководителей

WS Black Hole by EvilGrym. Универсальный обмен через SOAP, вместо прямого соединения через COM, V83.Application и т.п.

Обмен - Обмен с другими системами

Сервис предназначен для организации взаимодействия с БД 1С посредством SOAP протокола. Позволяет хранить исходный функциональный код на вызывающей стороне. Предназначен для замены обмена данными через COM-соединения любого рода.

Web-Сервис

Black Hole

by Evil Grym 

 

Назначение.

Сервис предназначен для организации взаимодействия с БД 1С посредством SOAP протокола. Позволяет хранить исходный функциональный код на вызывающей стороне.

 

Описание функций и способы их вызова.

Общие параметры функций:

Usr - Имя пользователя. Используется для дополнительной авторизации пользователя. Хранится в справочнике GTG_BlackHole_Users.

Pwd - Пароль пользователя. Используется для дополнительной авторизации пользователя. В БД не хранится. Сравнивается с отпечатком, хранящимся в справочнике GTG_BlackHole_Users.

Exec(Usr, Pwd, IncomingData) - выполняет произвольный код 1С переданный в параметрах вызова.

Параметры:

IncomingData - Структура в которой передается исполняемый код и дополнительные данные. Структура должна иметь обязательное поле ТекстПрограммы, в значении которого должен содержаться исполняемый код , написанный из расчета , что выполнение происходит в серверном контексте базы сервиса. Так же, структура может содержать произвольный набор полей, через которые можно передать дополнительные данные, требующиеся для выполнения текста программы. В передаваемых данных не должно быть ссылок. В тексте программы переданные дополнительные значения доступны через переменную типа структура ВхСтруктура.<имя_поля_IncomingData>

Возвращаемое значение:

Структура. Содержит обязательное поле СтатусВыполнения. Значения поля СтатусВыполнения  - Строка. При успешном выполнении "ОК", при ошибке - описание ошибки.

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

 

Query_to_TZ(Usr, Pwd, IncomingData)  - выполняет запрос  с параметрами переданный в параметрах вызова.

Параметры:

Вариант 1, для 1С:

IncomingData - Структура в которой передается запрос и его параметры. Структура должна иметь обязательное поле Запрос, в значении которого должен содержаться текст запроса , написанный из расчета , что выполнение происходит в контексте базы сервиса. Так же, структура может содержать парамметры запроса, передаваемые через поле ПараметрыЗапроса структуры IncomingData. Тип значения поля ПараметрыЗапроса - Структура, ключ которй соответствует имени параметра запроса , а значение - значению параметра запроса. В передаваемых данных не должно быть ссылок.

Также, можно преобразовать ссылочные данные, полученные в результате запроса в ГУИДы. Для этого в структуру IncomingData добавить поле СсылкиКакГУИДы со значением Истина. В этом случае, все ссылки , полученные в результате запроса будут преобразованы в ГУИДы.

 

IncomingData      
  Запрос Текст запроса  
  ПараметрыЗапроса    
    ИмяПараметра1 Значение параметра 1
    ИмяПараметра2 Значение параметра 2
  СсылкиКакГУИДы истина/ложь  

Вариант 2, для PHP:

IncomingData - Аналогично Варианту 1 , но т.к. в PHP наблюдается проблема при передаче вложенных структур при вызове функции веб-сервиса, то параметры нужно передавать следующим образом: параметры должны быть полями структуры IncomingData  , а к имени параметра нужно добавить "Парам_".

 

IncomingData      
  Запрос Текст запроса  
  Парам_ИмяПараметра1 Значение параметра 1  
  Парам_ИмяПараметра2 Значение параметра 2  
  СсылкиКакГУИДы истина/ложь  

Возвращаемое значение:

Таблица значений.

Query_to_ArrayOfTZ(Usr, Pwd, IncomingData)  - выполняет пакетный запрос  с параметрами переданный в параметрах вызова.

Параметры:

Аналогично функции Query_to_TZ

Возвращаемое значение:

Массив таблиц значений.

Настройки.

Константы:

Логгировать ошибки доступа WS Black Hole - Включает/выключает запись ошибок авторизации в регистр сведений Лог ошибок доступа к WS "Black Hole".

Логгировать вызовы WS Black Hole- Включает/выключает запись параметров, переданных при вызове функций сервиса, в регистр сведений Лог вызовов к WS "Black Hole".

 

Справочники:

Пользователи WS "Black Hole" - Справочник пользователей сервиса для дополнительной авторизации выполняемых операций. Пароль пользователя не хранится в базе, поэтому не может быть восстановлен. В случае утраты пароля можно сгенерировать новый.

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

Подключение к сервису:

 АдресWSDL="http://localhost:8083/InfoBase/ws/gtg_bh.1cws?wsdl";
 TargetNamespace="GTG_BH_WS";
 DefinitionsName="GTG_BlackHole_WS";
 PortName="GTG_BlackHole_WSSoap12";
    Таймаут=30;
 
 // Если Web-сервис требует пароля:
  ИмяПользователя="BlackHoleUser";
  Пароль="123456";
  Определение=Новый WSОпределения(СокрЛП(АдресWSDL),ИмяПользователя,Пароль,Таймаут); 
 
 Прокси = Новый WSПрокси(Определение,
 СокрЛП(TargetNamespace),
 СокрЛП(DefinitionsName),
 СокрЛП(PortName),       
 0);
 
 // Если Web-сервис требует пароля:
  Прокси.Пользователь=ИмяПользователя;
  Прокси.Пароль=Пароль;

Использование функции Query_to_TZ:

ВСЗапрос="ВЫБРАТЬ
| GTG_BlackHole_Users.Ссылка КАК Ссылка,
| GTG_BlackHole_Users.ВерсияДанных КАК ВерсияДанных,
| GTG_BlackHole_Users.ПометкаУдаления КАК ПометкаУдаления,
| GTG_BlackHole_Users.Код КАК Код,
| GTG_BlackHole_Users.ДоступРазрешен КАК ДоступРазрешен,
| GTG_BlackHole_Users.Соль КАК Соль,
| GTG_BlackHole_Users.Предопределенный КАК Предопределенный,
| GTG_BlackHole_Users.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.GTG_BlackHole_Users КАК GTG_BlackHole_Users
|ГДЕ
| GTG_BlackHole_Users.Код ПОДОБНО &Код";

 
 
Usr = "РоботЧернодыр";
Pwd = "86e0-362aa800b1b0";

 ИнДата = Новый Структура();
 ИнДата.Вставить("Запрос",ВСЗапрос);
 
 ПараметрыИнЗапроса = Новый Структура();
 ПараметрыИнЗапроса.Вставить("Код","%Черно%");

 ИнДата.Вставить("Запрос",ВСЗапрос);
 ИнДата.Вставить("ПараметрыЗапроса",ПараметрыИнЗапроса);
 ИнДата.Вставить("СсылкиКакГУИДы",Истина);
 
 IncomingData = СериализаторXDTO.ЗаписатьXDTO(ИнДата);

 Результат=Прокси.Query_to_TZ(Usr, Pwd, IncomingData); // XDTO-объект, таблица значений
 
 ТЗ = СериализаторXDTO.ПрочитатьXDTO(Результат); // Таблица значений.

Использование функции Exec:

 ТекстПрограммы="
 |
 | А = (10 + ВхСтруктура.Параметр1)*ВхСтруктура.Параметр2;
 | СтруктураВозврата.Вставить(""Результат_А"",А);
 | 
 | МассивБ = Новый Массив;
 | Для Ы=1 по А Цикл
 |  МассивБ.Добавить(Ы);
 | КонецЦикла;
 | 
 | СтруктураВозврата.Вставить(""Результат_Б"",МассивБ);
 |
 | Спр = Справочники.GTG_BlackHole_Users.НайтиПоКоду(""РоботЧернодыр"");
 | СтруктураВозврата.Вставить(""Результат_Х"",XMLСтрока(Спр.Ссылка));
 |";

 
 
Usr = "РоботЧернодыр";
Pwd = "86e0-362aa800b1b0";

 ИнДата = Новый Структура();
 ИнДата.Вставить("ТекстПрограммы",ТекстПрограммы);
 ИнДата.Вставить("Параметр1",10);
 ИнДата.Вставить("Параметр2",1);
 
 
 IncomingData = СериализаторXDTO.ЗаписатьXDTO(ИнДата);

 Результат=Прокси.Exec(Usr, Pwd, IncomingData); // XDTO-объект, структура
 
 РезСтруктура = СериализаторXDTO.ПрочитатьXDTO(Результат); // структура.
 
 Сообщить("Статус выполнения: "+РезСтруктура.СтатусВыполнения);
 Сообщить("А = "+РезСтруктура.Результат_А);
 Сообщить("Содержимое массива Б: ");
 Для Каждого Элем Из РезСтруктура.Результат_Б Цикл
  Сообщить("  "+Элем);
 КонецЦикла;
 Сообщить("Х = "+РезСтруктура.Результат_Х);

 

Скачать файлы

Наименование Файл Версия Размер
WS Black Hole by EvilGrym. Универсальный обмен через SOAP, вместо прямого соединения через COM.:
.cf 513,47Kb
13.10.17
2
.cf 1.0.0.1 513,47Kb 2 Скачать

См. также

Комментарии
1. Евгений Колтович (depresnjak) 2 23.10.17 12:55 Сейчас в теме
Есть ли требования к платформе?
2. Evil Grym (Evilgrym) 164 23.10.17 23:59 Сейчас в теме
Нет, работает там, где есть веб сервисы.
Оставьте свое сообщение