[Примеры] Подсистема 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    136668    755    391    

783

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

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

18000 руб.

06.10.2023    10852    27    6    

55

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

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

10000 руб.

10.11.2023    6758    21    2    

44

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

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

5400 руб.

17.05.2024    8556    21    16    

56

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

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

5040 руб.

04.05.2021    18757    10    15    

16

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

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

36000 руб.

03.08.2020    16533    15    18    

15

SALE! %

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

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

3600 2880 руб.

14.01.2013    181013    1101    0    

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

Примеры будут доступны на Infostart и на youtube канале по подсистеме.
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user612295_death4321 12.06.24 18:19 Сейчас в теме
Выглядит как что-то очень мощное)
lebedev_vadim2005; +1 Ответить
2. dsdred 3456 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 3456 12.06.24 21:07 Сейчас в теме
(3) неуверен, что вас понял. я лишь показываю, что сервис может быть полностью в расширении или использовать обработку, модуль. Кому как проще. Отлаживать проще в модуле или обработке.
5. gybson 12.06.24 21:43 Сейчас в теме
(4) Вот нужен сервис HTTP, сели проектировать и решили взять за основу PAPI, как нам это поможет?
6. dsdred 3456 12.06.24 21:53 Сейчас в теме
(5) Использовал в 3 проектах. Очень помогал ;)
Возможность создать http-сервис не заходя в конфигуратор и не устраивая обновления с перекуром пользователей лично мне сильно помогает.

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

П.С. Я не призываю всех его использовать, делал первоначально для себя и решил поделится.
dimaster; +1 Ответить
7. dimaster 40 13.06.24 07:22 Сейчас в теме
(6) было бы супер, если рассмотрели что-то прикладное. например, при записи справочника[номенклатура] в одной базе, по http создавалась бы карточка в другой базе. либо перед записью проверялось наличие карточки в другой базе (например, по артикулу). в общем, в сторону синхронизации что-то
8. dsdred 3456 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 3456 13.06.24 09:12 Сейчас в теме
(9)Я тоже не приветствую, писал даже про это https://infostart.ru/pm/1105734/
Если вы обратили внимание у меня есть примеры с обработками.

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

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

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

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

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

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

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

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

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

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

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