Обработчики

Обработчики 1С

В контексте выполнения доступна переменная СостояниеСообщения, доступная для всех направлений интеграции (В/Из Platform):

Имя переменной

Описание

Сост ояниеСообщения

Статус обработки сообщения (Перечисления.сшпСтатусыСообщений)

Обработано: устанавливается автоматически. Сообщение регистрируется с событием Receive, если сообщение отправлялось из 1С, и с событием Send, если сообщение приходило в 1С. Уровень логирования событий - Info

ОшибкаОбработки: устанавливается автоматически в случае исключения при выполнении кода обработчика. Сообщение помещается в архив с событием Receive, если сообщение отправлялось из 1С, и с событием Send, если сообщение приходило в 1С. Уровень логирования событий - Info

НеВалидно: устанавливается автоматически в случае некорректного формата сообщения. Сообщение помещается в архив с событием Receive, если сообщение отправлялось из 1С, и с событием Send, если сообщение приходило в 1С. Уровень логирования событий - Info

ОтсутствуетОбработчик: устанавливается автоматически, когда не удается подобрать обработчик для сообщения. Код 114: [Ошибка создания сообщения в 1С] Причина ошибки: В обработчике установлено недопустимое состояние сообщения Код. 558: [Ошибка обработки сообщения] Причина ошибки: В обработчике установлено недопустимое состояние сообщения Сообщение помещается в архив с событием Send или Receive.

ОбработкаОтменена: устанавливается програмно в теле обработчика. Позволяет отменить обработку текущего сообщения. Данное состояние устанавливается автоматически, если обработчик не найден. Сообщение помещается в архив с событием Cancel. Уровень логирования событий - Info

ОжиданиеОбработки: устанавливается програмно в теле обработчика. Позволяет отложить обработку текущего сообщения на Задержка секунд. Сообщение помещается в очередь, а не в архив и через временной интервал, указанный в переменной Задержка, возвращается в обработку. При каждом попадании сообщения в обработку регистрируется событие Delay Уровень логирования событий - Debug

Пример использования переменной РезультатОбработки:

Если ОбъектОбработки.РеквизитБулево тогда*
СостояниеСообщения = Перечисления.сшпСтатусыСообщений.ОбработкаОтменена;*
КонецЕсли;*

О диагностике ошибок в случае каждого состояния сообщения см. подробнее 9.3.4.3. Ошибки передачи сообщений.

Обработчики Из Platform

Для обработчиков направления интеграции Из Platform, в контексте выполнения доступны следующие переменные:

Имя переменной

Описание

Идентификатор

Идентификатор передаваемого сообщения. Соответствует Идентификатору в очереди входящих сообщений.

ДатаРегистрации

Дата регистрации объекта в очереди входящих сообщений, тип: дата

Задержка

Указывается количество секунд. Позволяет отложить обработку на указанное количество секунд. Для корректной работы необходимо также указать СостояниеСообщения – значение ОжиданиеОбработки.

ТелоСообщения

В переменной хранится тело пакета.

Коли чествоПопытокОжидания

Счетчик количества ожиданий обработки сообщения. Увеличивается каждый раз когда переменная СостояниеСообщения принимает значение ОжиданиеОбработки.

При написании кода обработчика Из Platform чтобы получить значение реквизита из структуры сообщения используется метод GetJSONElementValue, доступный при обращении к Компонента.

Пример:

Допустим, что записи в системе ищутся по коду, для этого в коде обработчика создается переменная, в которую записывается значение реквизита «Код» из JSON структуры сообщения, которое нужно передать из Platform в систему приемник.

ЗначениеДляПоиска = Компонента.GetJSONElementValue("Код", 1);*

Затем по данному значению ищется элемент в справочнике:

новыйОбъект = Справочники.ИмяСправочника.НайтиПоКоду(ЗначениеДляПоиска);*

Чтобы присвоить значения реквизитам найденного элемента, либо создать новый элемент с такими значениями. Для этого также можно использовать метод GetJSONElementValue:

Присвоение значения реквизиту Наименование*
новыйОбъект.Наименование = Компонента.GetJSONElementValue("Наименование", 1);*

Доступные методы для логирования:

  • Процедура ФатальнаяОшибка(Текст)

  • Процедура Ошибка(Текст)

  • Процедура Предупреждение(Текст)

  • Процедура Информация(Текст)

  • Процедура Отладка(Текст)

  • Процедура Подробности(Текст)

Доступные методы для получения свойств сообщения:

  • Функция СвойствоСообщения(ИмяСвойства)

  • Функция ПолучитьПараметрыСообщенияСтруктурой()

  • Функция ПолучитьПараметрыСообщенияСоответствием()

  • Функция РазмерСообщения()с аналогом на английском - GetMessageSize()

  • Функция ИсточникСообщения() с аналогом на английском - GetSource() - возвращает значение InitialSource

  • Функция ИдентификаторКорреляцииСообщения() с аналогом на английском - GetCorrelationId()

  • Функция ИдентификаторКорреляцииПлатформыСообщения() с аналогом на английском - GetPlatformCorrelationId()

  • Функция ТипДанныхСообщения() с аналогом на английском - GetDataType()

  • Функция КоличествоПопытокОжидания() с аналогом на английском - GetDelayCount()

  • Функция ИдентификаторСообщения() с аналогом на английском - GetId()

  • Функция ТипСообщения() с аналогом на английском - GetType()

  • Функция ВремяСозданияСообщения() с аналогом на английском - GetCreationTime()

Для работы с телом из компоненты используются следующие методы:

  • int result = GetJSONPathExists(string jsonPath, int isFail, out int isExist) - возвращает 0 или 1, указывает существует ли указанный путь в теле принятого сообщения.

  • int result = GetJSONArraySize(string jsonPath, int isFail, out int size) - возвращает 0 или 1, размер массива по указанному пути в теле принятого сообщения.

  • var result = GetJSONElementValue(string jsonPath, int isFail) - возвращает значение из тела для принятого сообщения по указанному пути (до простых элементов).

  • int result = GetJSONPathIsArray(string jsonPath, int isFail, out int pathIsArray) - возвращает 0 или 1, указывает является ли значение по указанному пути в теле сообщения массивом.

Параметр isFail в методах - флаг для генерации ошибки (если 1, то при возникновении ошибки, она будет выведена).

Обработчики В Platform

Для обработчиков направления интеграции В Platform в контексте выполнения доступны следующие переменные:

Имя переменной

Описание

ОбъектОбработки

Зарегистрированный к выгрузке объект. Используется в качестве источника для формирования тела исходящего сообщения. Тип данных зависит от метода хранения, события регистрации и типа объекта метаданных: Метод хранения «По ссылке», событие «ПриЗаписи»: -Регистры: тип отбор -Ссылочные типы (справочники, документы и т.п.): тип ссылка Метод хранения «Сериализация», событие «ПриЗаписи»: -Тип объект XDTO Событие «ПередУдалением»: -Регистры: событие не регистрируется -Ссылочные типы (справочники, документы и т.п.): тип объект XDTO

Идентификатор

Идентификатор передаваемого сообщения. Соответствует Идентификатору в очереди входящих сообщений.

Иден тификаторСобытия

Идентификатор события.

ТипОбъекта

В переменной хранится объект интеграции, для которого и пишется обработчик. Например, Справочник.Контрагенты.

ФорматСообщения

Формат отправляемого сообщения (Перечисления.сшпФорматыСообщений) Доступные форматы: JSON и XML.

МетодХранения

Метод хранения сообщения (Перечисления.сшпМетодХранения. Доступные методы: ПоСсылке и Сериализация.

ОбъектСобытия

В переменной может храниться любой объект (структура или сериализованный объект)

ДатаРегистрации

Дата регистрации объекта в очереди входящих сообщений, тип: дата

Задержка

Указывается количество секунд. Позволяет отложить обработку на указанное количество секунд. Для корректной работы необходимо также указать СостояниеСообщения – значение ОжиданиеОбработки.

ЭтоУдаление

Булевая переменная, обозначает признак полного удаления записи

СсылкаНаОбъект

Хранится ссылка на объекта обработки

Ре зультатОбработки

Структура пакета, который будет выгружен из 1С: Body: тело пакета CreationTime: дата/время создания пакета, тип дата. Устанавливается автоматически. Properties: дополнительные свойства, тип структура. Receivers: получатели сообщения для прямой адресации, тип массив. Если в массиве указать перечень адаптеров (тип Строка - имена адаптеров как заданы в схеме сети), то сообщение будет доставлено указанным получателям, а не согласно настроенной маршрутизации. ReplyTo: получатель ответа, тип строка Source: источник/отправитель сообщения, тип строка. Устанавливается автоматически адаптером, переопределение недоступно.

При написании кода обработчика «В Platform» нужно получать данные из системы и преобразовывать их в структуру сообщения для отправки. Это можно сделать несколькими вариантами:

  • Через объектную модель

  • Через запрос

В первом случае используется переменная ОбъектОбработки, значения которой инициализируются подсистемой Datareon при выгрузке из 1С. Для составления структуры сообщения используется переменная РезультатОбработки, в которую записываются данные в нужном формате. Для этого используется переменная ФорматСообщения:

ФорматСообщения = Перечисления.сшпФорматыСообщений.JSON;

Затем создается структура, куда записываются данные из системы с использованием переменной ОбъектОбработки:

Данные = Новый Структура;*
Данные.Вставить("Наименование", ОбъектОбработки.Наименование);*
Данные.Вставить("РазрешенаПродажа", ОбъектОбработки.РазрешенаПродажа);*
Данные.Вставить(... ...*

Далее эту структуру записывают в РезультатОбработки для задания тела сообщения:

РезультатОбработки.Body =сшпОбщегоНазначения.ПреобразоватьСтруктуруПоФормату(ФорматСообщения,Данные);*

//где Данные - это структура, а ФорматСообщения - это значениеперечисления сшпФорматыСообщений.

Метод сшпОбщегоНазначения.ПреобразоватьСтруктуруПоФормату(<Формат>,<Данные>) - используется для преобразования структуры данных к указанному формату. Например, если ФорматСообщения JSON, структура будет преобразована в JSON представление объекта.

Итоговый текст кода обработчика:

ФорматСообщения = Перечисления.сшпФорматыСообщений.JSON;*
Данные = Новый Структура;*
Данные.Вставить("Наименование", ОбъектОбработки.Наименование);*
Данные.Вставить("Код", ОбъектОбработки.Код);*
Данные.Вставить("РазрешенаПродажа", ОбъектОбработки.РазрешенаПродажа);*
Данные.Вставить("ТестовыйОбщийРеквизит1",*
ОбъектОбработки.ТестовыйОбщийРеквизит1);*
РезультатОбработки.Body =*
сшпОбщегоНазначения.ПреобразоватьСтруктуруПоФормату(ФорматСообщения, Данные);*

Аналог объектной модели через запрос в коде обработчика. Пример кода:

Запрос = Новый Запрос; Запрос.Текст =
"ВЫБРАТЬ
| Продукты.Наименование КАК Наименование,
| Продукты.Код КАК Код,
| Продукты.РазрешенаПродажа КАК РазрешенаПродажа,
| Продукты.ТестовыйОбщийРеквизит1 КАК ТестовыйОбщийРеквизит1
|ИЗ
| Справочник.Продукты КАК Продукты
|ГДЕ
| Продукты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ОбъектОбработки.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
Данные = Новый Структура;
Данные.Вставить("Наименование", ВыборкаДетальныеЗаписи.Наименование);
Данные.Вставить("Код", ВыборкаДетальныеЗаписи.Код);
Данные.Вставить("РазрешенаПродажа",
ВыборкаДетальныеЗаписи.РазрешенаПродажа);
Данные.Вставить("ТестовыйОбщийРеквизит1",
ВыборкаДетальныеЗаписи.ТестовыйОбщийРеквизит1);
РезультатОбработки.Body =
сшпОбщегоНазначения.ПреобразоватьСтруктуруПоФормату(ФорматСообщения,Данные);

Вместо переменной ОбъектОбработки в коде объявляется переменная ВыборкаДетальныеЗаписи, в которую записываются результаты запроса к базе. Последняя часть кода практически идентична объектной модели.

Для логирования доступны те же методы, что в для направления Из Platform.

Для доступа к свойствам сообщения доступен метод:

  • Процедура УстановитьСвойствоСообщения(ИмяСвойства, ЗначениеСвойства).

Также в коде обработчиков доступен вызов функций 1С - еще одного типа обработчиков.

Для того, чтобы вызвать функцию из обработчика или другой функции нужно прописать следующий код:

ВыполнитьФункцию(ИмяФукнции, параметры через запятую)

В случае вызова функции из бизнес процесса необходимо передать в переменную Результат тело ответного сообщения:

Результат =
сшпОбщегоНазначения.ПреобразоватьСтруктуруПоФормату(Перечисления.сшпФорматыСообщений.JSON, Данные);

Вкладка «Код»: Отладка

При редактировании кода можно отслеживать изменения от оригинального кода обработчика (до их сохранения). Для этого установите флажок Показать изменения. После этого в левой части страницы отобразиться оригинал кода, а в правой - отредактированный.

../_images/image331.png

Для перехода в режим отладки нажмите на соответствующую кнопку в редакторе, либо воспользуйтесь горячей клавишей F5.

../_images/image341.png

Для начала отладки выберите систему 1С, которая подключена к Платформе. Для настройки отладочного сообщения нажмите на следующую кнопку:

../_images/image351.png

В результате откроется форма для настройки отладочного сообщения:

../_images/image361.png

По умолчанию редактирование отладочного сообщения происходит в формате Структура.

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

Для установки точек прерывания необходимо нажать на нужную строку в левой части кода. Для запуска отладки нажмите на соответствуюшую кнопку в редакторе или на клавишу F5. Для перемещения по коду используйте стрелочки либо следующие горячие клавиши:

  • F9 - предыдущий шаг.

  • F10 - следующий шаг.

  • F5 - продолжить (дойти до следующей точки останова или до конца кода, если точек останова нет).

При этом внизу страницы будут отображаться данные, которые заполняются во время отладки. Для завершения отладки нажмите на значок «крестик» или на клавишу Esc.