Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

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

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

Минимальный релиз платформы для корректной работы 8.2.19.90 (ниже не проверялось)

Эффект от внедрения:
— ускорение в десятки, сотни раз выполнения запросов к другим информационным базам за счет уменьшения времени подключения (по сравнению с COM);
— сокращение кода и увеличение скорости и простоты отладки за счет унификации механизма выполнения запросов к другим информационным базам.

Подготовка к использованию (пошагово на примере БП и ЗУП)
• Объединить конфигурацию с текущими конфигурациями БП и ЗУП, в каждую конфигурацию будет добавлено по 4 новых объекта. Не забудьте снять флаг «Свойства» с корня дерева метаданных.
• Опубликовать Web-сервисы в этих базах и в каждой базе создать пользователя «Webservice» с паролем «12345qwerty» для авторизации через Web-сервис (имя пользователя и пароль можно поменять в общем модуле).
• Перейти в «Общие» — «WS-Ссылки» — «Добавить» и указать путь к:
  — файлу — если у вас платформа 8.2. Для получения файла перейти по ссылке «http://<имясервера>/<имябазы>/ws/ws.1cws?wsdl», авторизоваться и сохранить страницу как XML файл.
  — WS-ссылке — если у вас платформа 8.3. WS-ссылка выглядит так: «http://<имясервера>/<имябазы>/ws/ws.1cws?wsdl».
  Переименовать WS-ссылку — WS-ссылка на БП должна называться «БП», WS-ссылка на ЗУП должна называться «ЗУП» и т.д.  
• Задать константу «ИдентификаторБазы» в каждой базе (в БП это будет «Перечисления.Мод_ИдентификаторБазы.БП», в ЗУП, соответственно, «Перечисления.Мод_ИдентификаторБазы.ЗУП»)

Как это работает?
Решение позволяет разработчику не отвлекаться на детали взаимодействия с Web-сервисом и предоставляет в пользование 2 глобальные функции:
— глЗапрос(ПрефиксБазы, Запрос);
— глВыполнить(ПрефиксБазы, Код);
Параметром «ПрефиксБазы» задается база, в которой происходит выполнение запроса или кода. Доступные префиксы можно посмотреть в «Общие» — «WS-Ссылки» в дереве метаданных конфигурации. 
В параметр «Запрос» необходимо передавать сам запрос с параметрами, в параметр "Код" — код на языке 1С.

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

Запрос = Новый Запрос("ВЫБРАТЬ
|    Контрагенты.Наименование
|ИЗ
|    Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|    Контрагенты.ИНН = &ИНН");
Запрос.УстановитьПараметр("ИНН", ИНН);
Выборка = глЗапрос("БП", Запрос);
НаименованиеКонтрагента = Выборка[0].Наименование;

Правила использования
• Ссылочные параметры, кроме счетов бухгалтерского учета, необходимо менять на строковые, например, вместо «Организация = &Организация» писать «Организация.Код = &КодОрганизации». В архиве есть 
обработка "Добавление идентификаторов в регистр соответствий объектов ИБ", позволяющая настроить соответствие между счетами бухгалтерского учета двух баз, если вдруг у них разные идентификаторы (не встречал подобного).
• При выполнении кода результат можно вернуть с помощью вызова исключения.
• Если «ПрефиксБазы» совпадает с идентификатором текущей базы, то запрос или код выполняется в ней. Т.е. сбор данных из разных баз в одну таблицу можно выполнять в цикле, меняя только префикс базы, например:

ОбщаяТаблица = Новый ТаблицаЗначений;
МассивПрефиксов = Новый Массив;
МассивПрефиксов.Добавить("БП");
МассивПрефиксов.Добавить("УТ");
МассивПрефиксов.Добавить("ЗУП");
Для каждого Префикс из МассивПрефиксов Цикл
ЗагрузитьВТаблицуЗначений(ОбщаяТаблица, глЗапрос(Префикс, Запрос));
КонецЦикла;

Замена COM-подключений на выполнение запросов через Web-сервис
Переменные COM-подключения должны быть заменены переменными этой базы, например, вместо «COM.NewObject("Запрос");» необходимо написать просто «Новый Запрос;».
Далее рассмотрены основные конструкции встроенного языка для работы с COM-подключением и их аналоги для работы с функцией «глЗапрос».

COM-подключение Web-сервис
ЗапросCOM = COM.NewObject("Запрос"); Запрос = Новый Запрос;
ЗапросCOM.УстановитьПараметр("ДатаОкончания", COM.NewObject("Граница",КонецДня(КонДата),БазаCOM.ВидГраницы.Включая)); ЗапросCOM.УстановитьПараметр("ДатаОкончания", Новый Граница(КонецДня(КонДата), ВидГраницы.Включая));
ЗапросCOM.УстановитьПараметр("Контрагент",   БазаCOM.Справочники.Контрагенты.НайтиПоРеквизиту("Код",Контрагент.Код)); Необходимо изменить условие в запросе.
«ГДЕ Контрагент = &Контрагент»
заменить на
«ГДЕ Контрагент.Код = &Код» 
и передать «Код» в качестве параметра.
СписокСчетов.Добавить(COM.ПланыСчетов.Хозрасчетный.НайтиПоКоду("75")); СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("75"));
РезультатИтогиCOM = ЗапросCOM.Выполнить().Выгрузить(); РезультатИтоги = глЗапрос("БП", Запрос);

 

Гарантия возврата денег

ООО «Инфостарт» гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом в течение 14-ти дней со дня поступления денег на наш счет.

Программа настолько проверена в работе, что мы с полной уверенностью можем дать такую гарантию. Мы хотим, чтобы все наши покупатели оставались довольны покупкой.

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

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *