[Примеры] Подсистема PAPI. Часть 1

10.06.24

Разработка - Инструментарий разработчика

Примеры использования PAPI – подсистемы интеграционных инструментов и сервисов. Будут рассмотрены методы и алгоритмы.

Вступление:

Подсистему задумал давно, и она уже была в рабочем состоянии примерно три раза, но по каким-то причинам до публикации дело не доходило. На данный момент она частично готова, но еще много чего в задумке и разработке. Решил выложить в том виде, в котором есть и постепенно выкладывать обновления, документацию и ролики. Также планирую выложить план задач (ToDo).

 
История о том, как я переписал PAPI три раза:

2016–2017 год.

Я очень часто работал с http-сервисами и пришел к выводу, что было бы замечательно сделать универсальный сервис без необходимости заходить в конфигуратор. Это было первое зерно, которое медленно прорастало.

2018 год.

Я должен был ложится на серьезную операцию на позвоночнике, в связи с чем решил как можно больше «оставить после себя». Благодаря чему написал ряд статей в том числе и по http-сервисам.

 

 

Самая популярная статья из написанных в то время HTTP Сервисы: Путь к своему сервису. Часть 1, в статье уже фигурировала аббревиатура PAPI. Я переписывал эту статью раза три, она мне не нравилась. Но настал момент когда нужно было принять решение о ее публикации. По большому счету, ночью я отправил статью на модерацию, а с утра поехал в больницу.

По выходу из больницы отложил разработку подсистемы на время восстановления.

2019 год.

Был нарисован первый набросок логотипа PAPI:

 

 

Появился заказ, под который я как раз и дописал первую версию PAPI.

Первая версия проходила обкатку в бою. На тот момент для регистрации изменений были использованы планы обмена, что, конечно, не позволяло «выйти из конфигуратора» на 100%.

2020 год.

Я впервые рассказывал про подсистему PAPI на Infostart Meetup Ekaterinburg Online в 2020 году.

 

 

Пообещал выложить данную подсистему. Иногда я себя за это ругаю 😉

 

 

Ссылка на данную статью осталась точно таже ;))

2021 год.

При подготовке к публикации подсистемы, я вдруг понял, что мне не нравится, как она реализована и PAPI была полностью переписана. Во второй версии была стыковка с GitLab и еще несколько новых особенностей которых ранее не было. Но были все те же планы обмена, порции и сама PAPI была подсистемой основной конфигурации. В таком виде подсистема меня тоже не устраивала.

Начался сложный период и выход подсистемы встал под большим вопросом.

В ноябре поехал на Инфостарт Ивент в Москву и оказался на докладе «Почему не достигаются цели?». После доклада навел порядок в голове и решил «взять паузу», а после все-таки возобновить работу над PAPI.

2023 год.

Расширения в платформе дали практически все возможности, которые мне нужны были для реализации подсистемы и PAPI была перенесена в расширение, попутно она была переписана на 90%. Эта была уже третья реинкарнация. Добавились новые возможности, планы обмена сменила «ИсторияДанных». Но были утеряны некоторые старые разработки, в том числе стыковка с Gitlab.

2024 год.

Мне пришла мысль, что PAPI должна быть расширением основным – Ядром. И должно быть вспомогательное расширение под конкретный случай – Локализация (PAPIL). Такой подход дает возможность более простой доработки и обновления.

В какой-то момент я понял, что так можно переписывать до бесконечности и это не совсем правильно с моей стороны. Если я обещал выложить подсистему, то я должен выложить ее.

Я сам себе назначил дату в свой день рождения и сказал, что выложу подсистему в каком бы виде она ни была на этот момент.

 

 

19.05.2024 Подсистема PAPI выложена в общий доступ в GitHub, в том виде в котором была на этот момент.

Ранее я обещал и давал QR код, поэтому появилась эта статья.

 
Почему называется PAPI?

Так как первоначально затевался именно универсальный http-сервис, поэтому наименование подсистемы было решено образовывать от API (application programming interface). Дальше я решил сделать, что-то шуточное. Я играл с разными наименованиями, в том числе PAPIRUS. Придумывая название, обыгрывал и логотип. В итоге я пришел к тому, что именно PAPI проще всего обыграть.

 

 

Шуточная составляющая в том, что в переводе с испанского, получается довольно-таки забавное название. Если вы смотрели испанские фильмы, то наверняка слышали, как дети называют своих отцов.

PAPI – в переводе с испанского «папочка».

Я добавил к API еще одно слово и получилось Pretty API -> PAPI.

Правда в 2021 году мне приелась эта шутка… Я работал на стартапе с программистами, которые ничего не знали про 1С, и они реально считали, что PAPI — это функционал непосредственно платформы 1С.

Первое время было забавно слушать как взрослые парни спрашивают про «папочку», но спустя какое-то время шутка надоела ;))

 
Состав PAPI на момент публикации данной статьи:

Подсистемы:

PAPI – Основная подсистема, содержит базовый функционал.

PAPI_Алгоритмы – Подсистема по созданию алгоритмов.

PAPI_HTTP – Подсистема для реализации http-сервисов.

PAPI_Методы – Методы http-сервисов.

PAPI_ИсторияДанных – Работа с платформенным механизмом История данных.

PAPI_ОтложенныеОперации – Подсистема с объектами отложенного выполнения.

PAPI_ПодпискиНаСобытия – Подсистема по работе с подписками на события.

PAPI_Шина – Подсистема для взаимодействия с шиной. (В процессе разработки)

PAPI_ДополнительныеИнструменты – Дополнительный функционал, не вошедший ни в одну подсистему.

PAPI_СервисыИнтеграции – Работа с сервисами интеграции.

PAPI_Каналы – Пока только для описания каналов.

PAPI_СообщенияСервисовИнтеграции – Работа с сообщениями сервисов интеграции.

 

Общие модули:

PAPI - Процедуры и функции для упрощения работы с алгоритмами и методами.

PAPI_АсинхронныеОперации – Модуль предыдущего PAPI, служил для выполнения запросов в фоновом задании. Нужно переработать.

PAPI_ДанныеДляЗаполненияНастроек – Содержит функционал по первоначальному заполнению шаблонов сообщений и некоторые настройки.

PAPI_ИсторияДанных – Содержит процедура и функции по работе с функционалом «История данных»

PAPI_Логирование – Служит для работы с логированием событий в регистрах и журнале регистрации.

PAPI_ОбщегоНазначенияВызовСервера – Набор вспомогательных процедур и функций.

PAPI_ОбщегоНазначенияКлиентСервер – Набор вспомогательных процедур и функций.

PAPI_ПодпискиНаСобытия – Процедуры и функции по работе с универсальными подписками на события.

PAPI_ПодпискиНаСобытияКлиентСервер – Процедуры и функции по работе с универсальными подписками на события.

PAPI_РаботаСАлгоритмами – Процедуры и функции по работе с алгоритмами.

PAPI_РаботаСВнешнимиОбработками – Модуль для подключаемых внешних обработок.

PAPI_РаботаСВходящимиЗапросами – Модуль для работы с входящими http запросами.

PAPI_РаботаСВходящимиСообщениями – Модуль для обработки входящих сообщений сервисов интеграции.

PAPI_РаботаСМетодами – Процедуры и функции по работе с методами.

PAPI_РаботаСОтветом – процедуры и функции по работе с ответами алгоритмов, http-запросов, методов, сообщений сервисов интеграций.

PAPI_СервисыИнтеграции - Содержит процедура и функции по работе с функционалом «Сервисов интеграций».

PAPI_СлужебныеДляОбмена - Набор вспомогательных процедур и функций.

 

Роли:

PAPI_Администратор – Дает полный функционал управления PAPI.

PAPI_БазовыеПрава – Дает минимальные права. Обычным пользователям больше и не надо.

PAPI_ПодсистемаPAPI – Дает только видимость подсистемы PAPI.

PAPI_Оператор - Предоставления доступа к объектам задействованным в интеграционных механизмах для разрешения ошибок

 

Подписки на события:

Имя Событие Источник

PAPI_ОбработкаПослеЗаписиВерсийИстории

Данных

ОбработкаПослеЗаписиВерсий

ИсторииДанных

  • РегистрСведенийМенеджер
  • ПланСчетовМенеджер
  • ДокументМенеджер
  • БизнесПроцессМенеджер
  • ПланВидовРасчетаМенеджер
  • ЗадачаМенеджер
  • ПланВидовХарактеристикМенеджер
  • R03;СправочникМенеджер
PAPI_ОбработкаПроведения_Документы ОбработкаПроведения
  • ДокументОбъект

PAPI_ОбработкаУдаленияПроведения

_Документы

ОбработкаУдаленияПроведения
  • ДокументОбъект

PAPI_ОбработкаФормированияПоВерсии

ИсторииДанных_Объекты

ОбработкаФормированияПоВерсии

ИсторииДанных
  • БизнесПроцессОбъект
  • ПланВидовРасчетаОбъект
  • ПланСчетовОбъект
  • ПланВидовХарактеристикОбъект
  • ПланОбменаОбъект
  • КонстантаМенеджерЗначения
  • СправочникОбъект
  • ЗадачаОбъект
  • ДокументОбъект

PAPI_ОбработкаФормированияПоВерсии

ИсторииДанных_РегистрСведений

ОбработкаФормированияПоВерсии

ИсторииДанных
  • РегистрСведенийНаборЗаписей
PAPI_ПередЗаписью_Документы ПередЗаписью
  • ДокументОбъект
PAPI_ПередЗаписью_ОбъектыБезДокументов ПередЗаписью
  • БизнесПроцессОбъект
  • ПланВидовРасчетаОбъект
  • ПланСчетовОбъект
  • ПланВидовХарактеристикОбъект
  • ПланОбменаОбъект
  • КонстантаМенеджерЗначения
  • СправочникОбъект
  • ЗадачаОбъект

PAPI_ПередЗаписью_РегистрРасчетаНабор

Записей

ПередЗаписью
  • РегистрРасчетаНаборЗаписей
PAPI_ПередЗаписью_Регистры ПередЗаписью
  • РегистрСведенийНаборЗаписей
  • РегистрБухгалтерииНаборЗаписей
  • РегистрНакопленияНаборЗаписей
  • ПоследовательностьНаборЗаписей
  • ПерерасчетНаборЗаписей
PAPI_ПередУдалением_Объекты ПередУдалением
  • БизнесПроцессОбъект
  • ПланВидовРасчетаОбъект
  • ПланСчетовОбъект
  • ПланВидовХарактеристикОбъект
  • ПланОбменаОбъект
  • СправочникОбъект
  • ЗадачаОбъект
  • ДокументОбъект
PAPI_ПриЗаписи_Объекты ПриЗаписи
  • БизнесПроцессОбъект
  • ПланВидовРасчетаОбъект
  • ПланСчетовОбъект
  • ПланВидовХарактеристикОбъект
  • ПланОбменаОбъект
  • КонстантаМенеджерЗначения
  • СправочникОбъект
  • ЗадачаОбъект
  • ДокументОбъект

PAPI_ПриЗаписи_РегистрРасчетаНабор

Записей

ПриЗаписи
  • РегистрРасчетаНаборЗаписей
PAPI_ПриЗаписи_Регистры ПриЗаписи
  • РегистрСведенийНаборЗаписей
  • РегистрБухгалтерииНаборЗаписей
  • РегистрНакопленияНаборЗаписей
  • ПоследовательностьНаборЗаписе
  • ПерерасчетНаборЗаписей
PAPI_ПриКопировании_Объекты ПриКопировании
  • БизнесПроцессОбъект
  • ПланВидовРасчетаОбъект
  • ПланСчетовОбъект
  • ПланВидовХарактеристикОбъект
  • ПланОбменаОбъект
  • СправочникОбъект
  • ЗадачаОбъект
  • ДокументОбъект
PAPI_ОбработкаПроверкиЗаполнения ОбработкаПроверкиЗаполнения
  • РегистрСведенийНаборЗаписей
  • БизнесПроцессОбъект
  • ПланВидовРасчетаОбъект
  • ПланСчетовОбъект
  • РегистрБухгалтерииНаборЗаписей
  • РегистрРасчетаНаборЗаписей
  • РегистрНакопленияНаборЗаписей
  • ПланВидовХарактеристикОбъект
  • ПоследовательностьНаборЗаписей
  • ПланОбменаОбъект
  • ПерерасчетНаборЗаписей
  • КонстантаМенеджерЗначения
  • СправочникОбъект
  • ЗадачаОбъект
  • ДокументОбъект

 

Регламентные задания:

Имя Процедура Описание

PAPI_ВыполнитьОбработкуОчередиДействий

СДокументами

ОбщийМодуль.

PAPI_АсинхронныеОперации.

ВыполнитьОбработкуОчередиДействийС

Документами

Выполняет отложенное действие по документам на основании регистра сведений «PAPI_ОчередьДействийС

Документами».

PAPI_ИсторияДанныхВыполнитьОбработку

ПослеЗаписиВерсий

ОбщийМодуль.

PAPI_ИсторияДанных.

ВыполнитьОбработкуПослеЗаписиВерсийНа

Сервере

Запускает выполнение обработчика ОбработкаПослеЗаписиВерсий

ИсторииДанных для версий, при записи которых был установлен флаг ВыполнятьОбработкуПосле

ЗаписиВерсии.

PAPI_ИсторияДанныхОбновитьИсторию

ОбщийМодуль.

PAPI_ИсторияДанных.

ОбновитьИсториюНаСервере
Обновляет историю данных.
PAPI_СервисыИнтеграцииВыполнитьОбработку

ОбщийМодуль.

PAPI_СервисыИнтеграции.

ВыполнитьОбработкуНаСервере

Выполняет запуск фоновых заданий обработки сервисов интеграции.

Работают только если

ПолучитьФункциональнуюОпцию

("PAPI_ОбменыСервисов

ИнтеграцииВключены")

 

Функциональные опции:

Имя Константа Описание

PAPI_ОбменыСервисовИнтеграции

Включены

PAPI_ОбменыСервисовИнтеграции

Включены

Включает и выключает регламент «PAPI_СервисыИнтеграцииВыполнитьОбработку»

PAPI_ЛогированиеВходящихСообщений

СервисаИнтеграции

PAPI_ЛогированиеВходящихСообщений

СервисаИнтеграции

Если включена тогда все входящие сообщения сервисов интеграции сохраняются в регистре сведений «PAPI_ВходящиеСообщенияСервисаИнтеграции»

 

Общие команды:

PAPI_НастройкиШины – Команда открывает форму настроек.

 

Общие формы:

PAPI_Настройки – Форма настроек.

 

Общие картинки:

           PAPI, PAPI_Команды, PAPI_Метаданные, PAPI_Подписки

 

HTTP-сервисы:

           PAPI – универсальный http-сервис.

           Шаблон: /{MethodVersion}/{MethodName}

           Тип: ANY

           PAPI_lower – универсальный http-сервис (Нижний регистр).

           Шаблон: /{MethodVersion}/{MethodName}

Тип: ANY

 

Константы:

PAPI_ДатаЗапретаОбменаДокументов – Заглушка для обменов. Можно выставить дату, которую проверять, например в подписке перед записью документов и отшивать документы младше этой даты.

PAPI_Источник – Текстовое представление текущей базы, нужно для обменов через Шину, но не обязательно.

PAPI_КоличествоПопытокОчередиДокументов – Нужна для отложенных действия с документами в регистре сведений «PAPI_ОчередьДействийСДокументами».

PAPI_ЛогированиеВходящихСообщенийСервисаИнтеграции – Для функциональной опции «PAPI_ЛогированиеВходящихСообщенийСервисаИнтеграции».

PAPI_ОбменыСервисовИнтеграцииВключены – Для функциональной опции «PAPI_ОбменыСервисовИнтеграцииВключены».

 

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

PAPI_Алгоритмы – Служит для описания алгоритмов.

PAPI_ВнешняяОбработка – Первоначально создан для подключение внешних обработок с процедурами для подписок на события, но в будущем будут использоваться и для других вещей.

PAPI_КаналыИнтеграции – Для описания канала отправки или приемки. Используется для ответов.

PAPI_Методы – Служит для описания методов.

PAPI_ПодпискиНаСобытия – Служит для описания подписок на события.

PAPI_СозданиеСообщений – В процессе разработки.

PAPI_Участники – Отправители и получатели.

PAPI_ЧтениеСообщений – Обработка входящих сообщений сервисов интеграций. В процессе разработки.

PAPI_ШаблоныСообщений – Описание сообщений.

 

Документы:

           PAPI_ВходящийЗапрос – Для логирования входящих http запросов.

 

Перечисления:

PAPI_ДействиеСДокументом, PAPI_ТелоЗапроса, PAPI_ТелоОтвета, PAPI_ТипВыполнения, PAPI_ТипЛога, PAPI_ТипПодпискиНаСобытие

 

Обработки:

PAPI_НастройкаСервисовИнтеграции – Инструмент повторяет типовой функционал, но имеет несколько особенностей.

PAPI_НастройкаСоставаИсторииДанных – Обработка позволяет настраивать состав платформенной "Истории данных".

PAPI_ОтправкаСообщенияСервисовИнтеграции – Инструмент позволяет создать сообщение сервиса интеграции на выбранном канале.

PAPI_СообщенияСервисовИнтеграции – Позволяет отслеживать какие и сколько сообщений находятся в канале. Проверяет есть ли связь с шиной. Может удалять ненужные сообщения.

PAPI_ОтладкаВходящегоЗапроса - Служит для повторного выполнения запроса из Документ.PAPI_ВходящийЗапрос.

 

Регистры сведений:

PAPI_ВходящиеСообщенияСервисаИнтеграции – Служит для фиксации входящих сообщений сервисов интеграций.

PAPI_ЗапросНедостающихДанных – Служебный регистр. Пока под вопросом. Может быть исчезнет в будущем.

PAPI_ЛогАлгоритмов – Логи при работе алгоритмов.

PAPI_ЛогМетодов – Логи при работе методов.

PAPI_ОтборыПолучателей – Промежуточный вариант, в будущем будут нарисованы фильтры.

PAPI_ОчередьАлгоритмовДляФоновогоВыполнения – Регистр предыдущего PAPI, служил для выполнения алгоритмов в фоновом задании. Нужно переработать.

PAPI_ОчередьДействийСДокументами – Служебный регистр, хранит навигационную ссылку на документ и действие которое необходимо с ним сделать.

PAPI_ХранилищеРезультатов – Регистр предыдущего PAPI, служил для хранения данных. Нужно переработать.

 

Что может PAPI?

Кратко расскажу базовый функционал, более полные примеры будут видимо в формате видео. Все примеры из статьи будут доступны в демо базе и приложенных обработках.

В первой части будут рассмотрены примеры Алгоритмов и Методов. Во второй части все остальное.

 

Алгоритмы

Справочник.PAPI_Алгоритмы - Позволяет решать алгоритмы (Кусочки кода). Алгоритм может содержать параметры. Параметр может быть предопределенным и вычисляемым. Выполнение алгоритма происходит с помощью модуля "PAPI_РаботаСАлгоритмами", функция РешитьАлгоритм.

 
 Реквизиты:

Разрешен – Булево – Разрешает выполнение алгоритма. Если алгоритм запрещен значение реквизита ложь. При запрете выдаст ошибку с кодом "ALErr1", См. "Пример 3: Логирование Ошибок".

ИмяАлгоритма – Строка (200) – Ключ поиска алгоритма для программистов.

Комментарий – Строка – Информация по алгоритму.

Логировать – Булево – Указывает на необходимость записи в регистр сведений PAPI_ЛогАлгоритмов.

Привилегированный – Булево – Признак запуска алгоритма в привилегированном режиме.

Настройки – ХранилищеЗначенией – Содержит структуру алгоритма, состоящую из кода алгоритма и параметров алгоритма. Прочитать структуру можно в модуле "PAPI_РаботаСАлгоритмами", используя функцию СтруктураНастроекАлгоритма.

 

 
Пример 1: Алгоритм без параметра.

Создадим алгоритм "ВычислениеБезПараметров":

Обратите внимание на реквизит "Разрешен". Если его выключит, то мы получим ошибку. Проверим это позже.

 

Заполним закладку "Вычисления":

ПятьМинут = 60 * 5;
Результат = ТекущаяДатаСеанса() + ПятьМинут;

Выполняем следующий код:

Алгоритм = Справочники.PAPI_Алгоритмы.ПолучитьАлгоритмПоИмени("ВычислениеБезПараметров");

СтруктураВозврата = PAPI_РаботаСАлгоритмами.РешитьАлгоритм(Алгоритм);          

Если СтруктураВозврата.Отработал Тогда

	Сообщить(СтруктураВозврата.Результат);

Иначе

	Сообщить(СтруктураВозврата.ТекстОшибки);

КонецЕсли;

 
Пример 2: Запрещенный Алгоритм.

Снимем галочку "Разрешен" и еще раз выполним.

А теперь еще раз выполним пример 1.

Мы видим сообщение, что алгоритм запрещен.

 
Пример 3: Логирование Ошибок.

Оставим алгоритм запрещенным и включим логирование.

Еще раз выполним и откроем "Логирование алгоритмов"

Мы видим запись в регистре с информацией об ошибке.

Если мы хотим поменять сообщение "Алгоритм запрещен" на другое сообщение, например "Запрещенный алгоритм", нам нужно поправить шаблон сообщения.

 

Было:

Стало:

Выполняем еще раз:

 
Пример 4: Алгоритм с параметром.
 
Пример 5: Переопределяем параметр Алгоритма.
 
Пример 6: Получение параметров Алгоритма после его выполнения.
 
Пример 7: Алгоритм во внешней обработке.
 
Пример 8: Алгоритм в обработке из расширения локализации.

 

Алгоритмы. Планы на будущее:

  • Работа с обработками
  • Выгрузка\загрузка алгоритмов в файлы
  • Более дружественный интерфейс
  • Библиотека одобренных алгоритмов
  • Стыковка с Git
  • Юзабилити
  • Сделать обработку по тестированию алгоритмов
  • Добавить справку

 

Универсальный http-сервис:

В PAPI есть справочник PAPI_Методы. Мы можем создавать методы, не заходя в конфигуратор, можем использовать алгоритмы.

 
Реквизиты:
 
Табличные части:
 
 Пример URL:

 http[s]://{host}/{base}/hs/papi/{MethodVersion}/{MethodName}

Выполнение методов происходит с помощью модуля "PAPI_РаботаСМетодами", функция ВыполнитьМетод.

Для того чтобы использовать http-сервис, нужно его опубликовать.

Про публикацию можно посмотреть в статье: HTTP Сервисы: Путь к своему сервису. Часть 1

Я при публикации демо базы использовал имя: papi_demo

Шаблон по умолчанию: /{MethodVersion}/{MethodName}

Публикую локально: localhost

Адрес у меня будет такой:

http://localhost/papi_demo/hs/papi/{MethodVersion}/{MethodName}

 

 
Пример 1. Создаем метод ping.

Создаю метод "ping". Ставим галку "Разрешен", Версию указываем "V1", Доступные методы указываем "GET" и "POST", имя "ping".

На закладке "Вычисления" код:

Результат = "Папочка с тобой";

На закладке "Ответ" добавим заголовок "Content-Type" и значение "text/html; charset=utf-8"

Проверяем (я буду проверять в Postman):

Наш URL: http://localhost/papi_demo/hs/papi/v1/ping/

GET:

 

POST:

 
Пример 2. get и post с разным результатом.

В функции выполнения метода есть параметр СтруктураВходныхПараметров – это структура, которая создается на основании запроса и имеет свойство "МетодЗапроса".

Давайте изменим код на закладке "Вычисления":

Результат = "Метод вызова: "
	+ СтруктураВходныхПараметров.МетодЗапроса
	+ ". Папочка с тобой";

Проверим:

Так же PAPI умеет вставлять заголовки ответа программно, поэтому предлагаю сделать для "GET" заголовок текст, а для "POST" будет JSON.

Для этого мы используем модуль PAPI.

Наш код на закладке "Вычисления" будет такой:

Если СтруктураВходныхПараметров.МетодЗапроса = "GET"

	Или СтруктураВходныхПараметров.МетодЗапроса = "TRACE" Тогда

	PAPI.ДобавитьЗаголовокОтвета(ПроизвольныеЗаголовки, "Content-Type", "text/html; charset=utf-8");

	Результат ="Папочка с тобой";

Иначе

	PAPI.ДобавитьЗаголовокОтвета(ПроизвольныеЗаголовки, "Content-Type", "application/json");

	СтруктураДляОтвета = Новый Структура("result", "Папочка с тобой");

	Результат = PAPI.Записать_JSON(СтруктураДляОтвета);

КонецЕсли;

 

Проверяем:

 
Пример 3. Логирование методов.

Давайте для начала разберемся с входящим запросом.

Установим галочку "Входящий запрос":

И еще раз выполним метод:

Теперь зайдем во входящие запросы:

Мы видим всю информацию по запросу. Тут и метод, и версия, и заголовки. Все данные, которые могут понадобиться. Даже видно есть ли тело запроса.

По большому счету можно повторить запрос к методу используя этот входящий запрос чтобы произвести отладку.

Давайте выполним входящий запрос:

Как видите мы можем логировать запросы и повторно их выполнять.

Теперь давайте включим логирование, но снимем разрешение на выполнения метода:

Повторно выполним запрос:

Текст ошибки можно так же, как и для алгоритмов поменять в справочнике PAPI_ШаблоныСообщений.

 
Пример 4. Используем параметры методов get.

В URL можно передавать Query-параметры, они передаются после знака "?" в URL и чаще всего используются в запросах get. PAPI умеет с ними работать по разному.

Создадим новый метод:

Наш код на закладке "Вычисления" будет такой:

QueryПараметры = "";
Для Каждого Параметр Из СтруктураВходныхПараметров.ПараметрыЗапроса Цикл

	QueryПараметры = QueryПараметры + Символы.ПС
		+ "Ключ: " + СокрЛП(Параметр.Ключ)
		+", Значение: " + СокрЛП(Параметр.Значение);
      
КонецЦикла;

Результат = "Переданы параметры: " + QueryПараметры;

Проверяем:

URL: http://localhost/papi_demo/hs/papi/v1/QueryParamsGet?Dog=Барбос&Cat=Васька

 

У PAPI есть возможность обработать параметры до того, как начнет выполнятся код с закладки "Вычисления" и поместить параметры в специально подготовленную структуру.

Давайте создадим вторую версию метода, для этого скопируем его и укажем версию "V2"

Теперь на закладке "Запрос" заполним вычисления параметров:

Мы просто переложили имя собаки из параметра "Dog" в параметр "Собака", а имя из "Cat" в "Кот". Как к ним теперь обратится?

Для этого созданы "ПараметрыМетода".

Поменяем код на закладке "Вычисления":

QueryПараметры = "";
Для Каждого Параметр Из СтруктураВходныхПараметров.ПараметрыМетода Цикл

	QueryПараметры = QueryПараметры + Символы.ПС
		+ "Ключ: " + СокрЛП(Параметр.Ключ)
		+", Значение: " + СокрЛП(Параметр.Значение);
                 
КонецЦикла;

Результат = "Переданы параметры: " + QueryПараметры;

Пробуем:

URL: http://localhost/papi_demo/hs/papi/v2/QueryParamsGet?Dog=Барбос&Cat=Васька

 

В расчете параметра можно использовать алгоритм.

Давайте сделаем это для параметра "Собака".

Создаем алгоритм:

На закладке "Вычисления" вставляем код:

Результат = ?(ПараметрыАлгоритма.Свойство("Dog"),ПараметрыАлгоритма.Dog,"");

 

Создаем копированием третью версию метода "QueryParamsGet":

На закладке "Запрос" у параметра "Собака" выбираем созданный нами алгоритм:

Проверяем:

URL: http://localhost/papi_demo/hs/papi/v3/QueryParamsGet?Dog=Барбос&Cat=Васька

 
Пример 5. Метод get и post с параметрами.
 
Пример 6. Метод get и post с оператором Goto.
 
Пример 7. Метод get и post в алгоритме.
 
Пример 8. Метод post во внешней обработке.
 
Пример 9. Метод post в обработке из расширения локализация.

В расширение "ЛокализацияPAPI" добавим обработку " ДемоПримерыМетодовPAPI.epf"                               

В ней код из Примера 8: Метод post во внешней обработке.

Создадим копированием метод из Примера 8: Метод post во внешней обработке:

На закладке "Вычисления" добавим код:

текОбработка = Обработки.ДемоПримерыМетодовPAPI.Создать();   

Результат = текОбработка.ПреобразоватьФИОВЛатиницу(ПараметрыМетода, СтруктураВозврата);

Проверяем:

 

Методы. Планы на будущее:

  • Работа с обработками
  • Выгрузка\загрузка методов в форме
  • Выгрузка\загрузка методов в файлы
  • Более дружественный интерфейс
  • Библиотека одобренных методов
  • Стыковка с Git
  • Юзабилити
  • Протестировать и снять заглушку по потоку
  • Протестировать и снять заглушку по двоичным данным
  • Добавить во входящие запросы возможность повторного запуска запроса
  • Добавить справку

 

Итоги:

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

На самом деле я уже писал статьи используя некоторые инструменты PAPI, ниже я приведу перечень полезных статей.

Подсистема лежит на GitHub, найти ее там труда не составит, но на случай, если вы не используете GitHub, я создал отдельную статью на Infostart и выложил все исходники в нее.

Следить за обновлениями можно в моем телеграмм канале, найти который труда не составит.

На этом статью завершаю, спасибо за терпение.

Всем удачи и интересных проектов.

 

 
Полезные статьи:

 

http-сервисы PAPI PAPI-tools PAPIL API История данных Сервисы интеграции сообщения сервисов интеграций каналы цель обещание подписки GitHub Локализация Обмены Шина Расширение Подписки на события Алгоритмы

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    137247    758    391    

787

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    10958    27    6    

55

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    6840    21    2    

44

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

5400 руб.

17.05.2024    8947    22    18    

56

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18782    10    15    

16

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

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

36000 руб.

03.08.2020    16574    15    19    

15
Отзывы
16. dsdred 3457 14.06.24 08:54 Сейчас в теме
(15) Примеры будут. Я просто не успел их оформить.
В следующей части планирую показать уже более жизненные примеры.

Примеры будут доступны на Infostart и на youtube канале по подсистеме.
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user612295_death4321 12.06.24 18:19 Сейчас в теме
Выглядит как что-то очень мощное)
lebedev_vadim2005; +1 Ответить
2. dsdred 3457 12.06.24 18:29 Сейчас в теме
(1) в следующий статьях буду раскрывать потенциал подсистемы.

Параллельно на ютубе буду канал пополнять, посвященный подсистеме: https://m.youtube.com/playlist?list=PLmaAvH9kGsqr3UvWtL-oXqcwVRLXcuZTG
dimaster; +1 Ответить
3. gybson 12.06.24 20:52 Сейчас в теме
Пока не очень видно преимущества по сравнению с сервисом в расширении
4. dsdred 3457 12.06.24 21:07 Сейчас в теме
(3) неуверен, что вас понял. я лишь показываю, что сервис может быть полностью в расширении или использовать обработку, модуль. Кому как проще. Отлаживать проще в модуле или обработке.
5. gybson 12.06.24 21:43 Сейчас в теме
(4) Вот нужен сервис HTTP, сели проектировать и решили взять за основу PAPI, как нам это поможет?
6. dsdred 3457 12.06.24 21:53 Сейчас в теме
(5) Использовал в 3 проектах. Очень помогал ;)
Возможность создать http-сервис не заходя в конфигуратор и не устраивая обновления с перекуром пользователей лично мне сильно помогает.

К тому же PAPI находится в расширении.

П.С. Я не призываю всех его использовать, делал первоначально для себя и решил поделится.
dimaster; +1 Ответить
7. dimaster 40 13.06.24 07:22 Сейчас в теме
(6) было бы супер, если рассмотрели что-то прикладное. например, при записи справочника[номенклатура] в одной базе, по http создавалась бы карточка в другой базе. либо перед записью проверялось наличие карточки в другой базе (например, по артикулу). в общем, в сторону синхронизации что-то
8. dsdred 3457 13.06.24 07:47 Сейчас в теме
(7)Доброе утро, записал в лист примеров.
Как раз буду показывать подписки на события.

Но если кратко, я против перед записью делать прямое подключение. Делал такое но против ;)
Я за то чтобы был промежуточный механизм для хранения изменений.

Но как пример, продемонстрирую прямое подключение и промежуточное.

П.С. Кстати в докладе https://infostart.ru/pm/1406269/ рассказывал про это, показывал вариант с планами обмена. Но планы обмена конечно не самый интересный вариант.
dimaster; +1 Ответить
9. Pokemonus 13.06.24 08:52 Сейчас в теме
Лично я не приветствую хранение кода 1С в базе.
Уже сталкивался с подобными методиками восторженного применения Выполнить() и хранением кода в базе.
Как-то сделавший все это программист вдруг стал недоступен (на время) - все мы люди, человеки и здоровье иногда дает сбои.
И мне пришлось окунуться во всю эту "прелесть". И это не пара строк кода "алгоритма", а тысячи... и еще запросы, занимающие не один экран монитора...
Пытаясь найти ошибки (куда уж без них) столкнулся с крайне неприятной стороной такого рода изделия - в отладчике такой код не прошагаешь. Чтобы как-то отладить приходится вынести такой геморрой, что тема преподнесенная как "не надо открывать конфигуратор" просто расплющивается перед тяжестью факта - конфигуратор придется-таки открывать, вот только приятного от этого будет мало.
В любом случае код в модуле будет выполняться намного быстрее, чем хранимый в базе. А еще код этот надо из базы получить.
Конечно такая история имеет право на жизнь, но лично я противник такого подхода.
zen_daya; +1 Ответить
10. dsdred 3457 13.06.24 09:12 Сейчас в теме
(9)Я тоже не приветствую, писал даже про это https://infostart.ru/pm/1105734/
Если вы обратили внимание у меня есть примеры с обработками.

Но часто бывает, что нужно сделать без обновления конфигурации, в этом случае правлю на живую, а потом уже переношу в обработку или модуль.
Все обмены которые мы пишем с коллегами лежат в обработке в расширении Локализации.
При этом очень легко тестировать такие обработки.
Сохраняем ее на диск и в коде выполнения меняем пару строк.

П.С. в следующих примерах я покажу Подписки на события и там как раз это все покажу. Я на подписках придумал как это сделать и на них реализовал, но пока на Методы и Алгоритмы не перенес эту вещь.

Также очень странно, что ваш коллега сделал что-то и не объяснил как этим пользоваться.
На текущем месте работы у меня коллега в течении дня въехал в PAPI, прямо задавал вопросы и начал клепать обмены.

На предыдущем месте у меня коллеги тоже быстро вьехали у нас там был РИБ и надо было менять массово методы. Один из коллег нарисовал обмен с гитлаб и создал метод в который нужно было постучаться и обновить конкретный метод. В итоге мы создавали новую ветку и писали метод сохраняя его в виде файла. Дальше проводили ревью пул реквеста и после одобрения стучались в базы говоря им получи новый метод.
11. Pokemonus 13.06.24 09:55 Сейчас в теме
(10)
Я понимаю всю эту механику.
Но не принимаю :)
Да еще вопрос возникает риторический... много на просторах инета жалоб на быстродействие 1С, иногда справедливых, это с одной стороны, а с другой - сами же добиваемся замедления выполнения.
Корреляция такая странная.

А Ваша работа, да, вызывает уважение (!!!)
Даже скачал, может и пригодится :)
12. dsdred 3457 13.06.24 10:02 Сейчас в теме
(11) Про скорость это действительно риторика. Это тоже самое когда ругают ООП за медленность в равнении с функциональным подходом.

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

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

Даже скачал, может и пригодится :)

Буду рад если пригодится.
Тем более я буду продолжать развивать этот инструмент, задумок много.
13. pm74 202 13.06.24 22:33 Сейчас в теме
что то сильно сложное в статье
Я очень часто работал с http-сервисами и пришел к выводу, что было бы замечательно сделать универсальный сервис без необходимости заходить в конфигуратор

ни на что не претендую но...
давно уже сделано расширение оттестировано и работает на многих базах ,
недавно для кучи добавил работу с simpleui
14. dsdred 3457 13.06.24 22:35 Сейчас в теме
(13) У меня тут не только http-сервисы.
Примеры пока только по ним выложил.
15. Angel_19 6 14.06.24 08:34 Сейчас в теме
Доброго.
Разработка серьезная. Но чтобы начать её использовать нужны реальные примеры использования - чтобы заинтересоваться и начать разбираться в ней более глубоко. Пока не понял как это можно использовать.
16. dsdred 3457 14.06.24 08:54 Сейчас в теме
(15) Примеры будут. Я просто не успел их оформить.
В следующей части планирую показать уже более жизненные примеры.

Примеры будут доступны на Infostart и на youtube канале по подсистеме.
Оставьте свое сообщение