Заметки ОПИ: использование расширенного вызова

08.06.26

Интеграция - WEB-интеграция

Небольшая заметка об использовании одного из новых механизмов Открытого пакета интеграций под названием Расширенный вызов. О том, зачем он нужен и как его использовать

Открытый пакет интеграций - это бесплатное и с открытым исходным кодом расширение, представляющее из себя набор общих модулей для работы с разнообразными онлайн-сервисами, СУБД и другими технологиями

 

Узнать больше:
Репозиторий на Github | Основная статья на Инфостарт | Документация

В недавней версии ОПИ 2.0 появился новый механизм - расширенный вызов. Я считаю его появление довольно важным нововведением, так как он решает (и будет решать в дальнейшем) широкий спектр проблем, связанных с желанием пользователей иметь больше контроля над различными внутренними механизмами пакета. Поэтому я думаю, что было бы неплохо рассказать о нем подробнее в такой вот отдельной заметке

 

О чем вообще речь?

Рассмотрим на примере. Допустим, в ОПИ есть метод, предназначенный для создания чата пользователей в Bitrix24:

СоздатьЧат(Знач URL, Знач СтруктураЧата, Знач Токен = "")

У него есть три параметра, относящихся непосредственно к логике работы с платформой Bitrix: URL адрес сервера, структура с описанием создаваемого чата (имя, описание и пр.) и токен доступа. Сам же метод, внутри, работает по протоколу HTTP - через прослойку, но, в конечно итоге, с объектами типов HTTPЗапрос и HTTPСоединение

Если мы посмотрим на эти базовые объекты встроенного языка, то найдем там множество интересных настроек: таймаут, прокси, заголовки, защиту соединения и пр. Но как мы можем их установить или переопределить при вызове функции СоздатьЧат? Обычным способом - никак. Для этого и был добавлен расширенный вызов

 

Как это работает?

Расширенный вызов - это обертка над обычным вызовом функций пакета. На практике, его использование напоминает создание фонового задания: модуль, имя метода и массив параметров указываются не в классическом виде, а передаются в качестве аргументов метода-обертки. То есть вместо

СоздатьЧат(URL, СтруктураЧата, Токен);

 Мы будем вызывать специальную функцию - OPI_РасширенныйВызов.ВызватьСНастройками

    Параметры = Новый Массив;
    Параметры.Добавить(URL);
    Параметры.Добавить(СтруктураЧата);
    Параметры.Добавить(Токен);

    Настройки = Новый Структура;
    // Тут будут расширенные настройки

    Результат = OPI_РасширенныйВызов.ВызватьСНастройками("OPI_Bitrix24"
        , "СоздатьЧат"
        , Параметры
        , Настройки);

Это позволяет определить дополнительный набор настроек, влияющих на внутренние механизмы и инструменты, используемые при выполнении основной функции

Под капотом это работает достаточно просто: в 1С версии ОПИ для хранения настроек на время вызова функции используется параметр сеанса. Функция ВызватьСНастройками устанвливает в него необходимые значения, а после вызова основной функции (в нашем случае - СоздатьЧат) - очищает. В версии для OneScript это работает аналогичным образом, но вместо параметра сеанса используется глобальная переменная модуля

Внутренние механизмы (в нашем случае - модуль HTTP), в свою очередь, доработаны таким образом, чтобы проверять наличие активных настроек и применять их

 

Какие настройки сейчас доступны?

Перечень доступных настроек расширенного вызова зависит от конкретного метода. Его можно получить при помощи функции OPI_РасширенныйВызов.ПолучитьДоступныеНастройки или просто посмотреть в онлайн документации на странице интересующей функции:

 

 

Наиболее распространенными сейчас являются следующие настройки

  • dontwait - возвращает ФоновоеЗадание с запуском выбранной функции ОПИ (только на сервере)
  • proxу - позволяет определить настройки прокси для методов, использующих HTTP. Можно передать как непосредственно объект ИнтернетПрокси, так и структуру с соответствующими полями
  • timeout - позволяет переопределить таймаут HTTP-запроса
  • adv_response - позволяет получить полную структуру ответа с кодом состояния и заголовками HTTP-запроса, а не только тело
  • addin_mode - позволяет выбрать режим подключения внешней компоненты вручную (для методов, которые их используют)

Краткую шпаргалку по расширенному вызову также можно отыскать в онлайн документации Открытого пакета интеграций.


Ну, а на этом все! Напомню, что Открытый пакет интеграций - это функционал для работы с уже более 30-ю разнообразными сервисами и технологиями, доступный в 3-х независимых вариантах: расширения 1С, пакета для OneScript и даже полноценного консольного приложения для Windows и Linux. Там всегда найдется что-нибудь интересное!

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

Спасибо за внимание!

 

 Если вам нравится ОПИ, то не забывайте поддерживать его на GitHub, Инфостарт и Boosty (ссылка в репозитории)!

 

Репозиторий ОПИ: github.com/Bayselonarrend/OpenIntegrations

Зеркало на Sourcecraft: sourcecraft.dev/bayselonarrend/openintegrations

Последний релиз: github.com/Bayselonarrend/OpenIntegrations/releases/latest

Документация: openintegrations.dev

 
 Куда жать и где скачать?

 

Другие статьи про Открытый пакет интеграций на Инфостарт:

 

 

 Мой GitHub:    https://gitub.com/Bayselonarrend 
 OpenYellow:    https://openyellow.org
 Лицензия MIT:  https://mit-license.org

Вступайте в нашу телеграмм-группу Инфостарт

расширение ОПИ web http внешние компоненты

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

42700 руб.

03.08.2020    24711    38    26    

29

WEB-интеграция Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Расширение для автоматизации передачи данных между сервисом Vetmanager с 1С: Бухгалтерия 3.0. Решение позволяет загружать документы и справочники из Ветменеджер в 1С:Бухгалтерию, сокращая время на ручной ввод данных и минимизируя ошибки.

24000 руб.

02.02.2021    23414    73    52    

44

WEB-интеграция Программист Бизнес-аналитик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17568 руб.

20.12.2024    6676    28    4    

30

WEB-интеграция 1С 8.3 1C:Бухгалтерия Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

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

23034 руб.

25.05.2021    16168    44    8    

19
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 1104 08.06.26 09:35 Сейчас в теме
в эске сильно не хватает именованных аргументов, как в питоне.
2. bayselonarrend 3199 08.06.26 10:12 Сейчас в теме
(1) Хм, не знаю, никогда о таком не задумывался. Мне скорее все время не хватает объекта метаданных, вроде ОбщийКласс, который будет тоже самое, что и ОбщийМодуль, но с переменными)
3. SerVer1C 1104 08.06.26 11:30 Сейчас в теме
(2) С именованными аргументами было бы просто
СоздатьЧат(URL, СтруктураЧата, Токен, timeout=30, dontwait=Истина);
4. bayselonarrend 3199 08.06.26 11:40 Сейчас в теме
Можно сделать так же обычными позиционными. Просто дублировать одни и те же параметры + их обработку в каждой функции и, в итоге, иметь везде по 15 параметров - так себе затея. Как потом еще новые туда докидывать - вообще не хочу думать)
8. Yashazz 4927 08.06.26 14:03 Сейчас в теме
(3) Можно передавать лишь один аргумент - структуру; а уж её ключи разбирать и обрабатывать. Именованно и просто, и кстати добавлять/убирать ключи менее травматично.
mefalcon; +1 Ответить
5. gybson 13 08.06.26 13:26 Сейчас в теме
(2) Обработка называется
7. bayselonarrend 3199 08.06.26 13:52 Сейчас в теме
(5) Обработка ощущается как кастыль. Там много лишнего, вроде форм и макетов, модуля менеджера, реквезитов. Тяжелый объект. Плюс в обработке модуль объекта нельзя клиентским сделать. Отдельный объект был бы лучше, особенно если бы вызывался с нормальным конструктором как Новый МойКласс(Парам1, Парам2)
6. plushko 35 08.06.26 13:40 Сейчас в теме
Эта жёлтая овечка в бусах похожа на мою первую учительницу информатики. И бусы такие же...
9. starik-2005 3289 08.06.26 18:24 Сейчас в теме
Посмотрел в гите на проект, который собирает с гита все про 1С. И моего проекта с 24 звездами там нет. Интересно даже, почему?
10. bayselonarrend 3199 08.06.26 22:41 Сейчас в теме
(9) Кто знает. Без ссылки не скажу, почему
12. bayselonarrend 3199 09.06.26 08:59 Сейчас в теме
(11) Ну, он не попал, потому что у него нет признаков 1Сного в описании. Основной язык репозитория Python, описания (не Readme, а краткого) нету и нет никаких тэгов.Нужно или в описании что-нибудь написать, чтобы там было "1С:Предприятие", например. Или поставить тэг (topic) 1c-enterprise в настройках
13. starik-2005 3289 09.06.26 10:51 Сейчас в теме
(12)
например
Серьезно? Первая строка ридми.
MCP-сервер для проверки синтаксиса 1С:Предприятие с автоматической инициализацией.
Я просто увидел, что там кто-то все парсит, но не рассказывает, как он это делает.
14. bayselonarrend 3199 09.06.26 12:14 Сейчас в теме
(13)
Серьезно? Первая строка ридми.


Ну специально же написал прямо отдельно)

описания (не Readme, а краткого) нету
15. starik-2005 3289 09.06.26 13:22 Сейчас в теме
(14)
отдельно
Ну теперь буду знать )
bayselonarrend; +1 Ответить
16. gybson 13 09.06.26 13:55 Сейчас в теме
В целом выглядит как мегаантипаттерн неявной передачи параметров
17. bayselonarrend 3199 09.06.26 14:52 Сейчас в теме
(16)
мегаантипаттерн


Это было бы так, если бы мы говорили о богатом языке с философией. В 1С это просто очередной вынужденный обход

Тем более, для внешнего пользователя, который работает только с публичным API библиотеки, все вполне себе явно
18. gybson 13 09.06.26 16:45 Сейчас в теме
(17) Не совсем так, это известная проблема

https://luzkan.github.io/smells/tramp-data
https://luzkan.github.io/smells/message-chain

Такой рефакторинг имеет свою цену.
19. gybson 13 09.06.26 16:49 Сейчас в теме
(17) Очевидным была бы структура "ЧатБ24", в которой все параметры и чата и смежные. Как структура исходящего сообщения в типовых или в HTTP коннектор тоже структура с параметрами.
20. bayselonarrend 3199 09.06.26 20:05 Сейчас в теме
(19) Это и называется tramp data, когда ты передаешь в функцию модуля Б24 информацию, которую она не обрабатывает, а просто дальше по цепи передает. Хотя основная проблема даже не в этом, а в том, что это 1С, и я не могу сделать нормальный класс с фиксированным набором полей. То есть это ручная валидация структуры на входе каждой такой функции для меня и никакой контекстной подсказки для пользователя, который будет ей пользоваться. Тем более, что речь не про универсальные механизмы с динамическим набором из большого количества полей, как тот же ответ или коннектор. Тут буквально небольшая прикладная функция для конкретной задачи

Причем тут message chain, который про получение данных из одних объектов через другие, я не очень понял. То, что у меня, это скорее global data. Метод Б24 вообще никак не принимает и не передает настройки клиента. HTTP клиент сам их достает из global, когда потребуется, вне зависимости от вызывающей функции
21. gybson 13 09.06.26 20:29 Сейчас в теме
(20) Это до кучи, чтобы было две полезных ссылки.
Но в целом да, в идеале надо передавать не URL а может готовый коннектор к URL

Но так надо просто поверить, что если нигде не ошибся с именами, то как-то оно куда-то попадет и сработает.
Для отправки сообщения требуется регистрация/авторизация