Обработчики 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 содержится тело пакета.
При написании кода обработчика «В Platform» нужно получать данные из системы и преобразовывать их в структуру сообщения для отправки. Это можно сделать несколькими вариантами:
Через объектную модель
Через запрос
В первом случае используется переменная ОбъектОбработки, значения которой инициализируются подсистемой Datareon при выгрузке из 1С. Для составления структуры сообщения используется переменная РезультатОбработки, в которую записываются данные в нужном формате. Для этого используется переменная ФорматСообщения:
ФорматСообщения = Перечисления.сшпФорматыСообщений.JSON;
Затем создается структура, куда записываются данные из системы с использованием переменной ОбъектОбработки:
Данные = Новый Структура;*
Данные.Вставить("Наименование", ОбъектОбработки.Наименование);*
Данные.Вставить("РазрешенаПродажа", ОбъектОбработки.РазрешенаПродажа);*
Данные.Вставить(... ...*
Далее эту структуру записывают в РезультатОбработки для задания тела сообщения:
РезультатОбработки.Body =сшпОбщегоНазначения.ПреобразоватьСтруктуруПоФормату(ФорматСообщения,Данные);*
//где Данные - это структура, а ФорматСообщения - это значениеперечисления сшпФорматыСообщений.
Метод сшпОбщегоНазначения.ПреобразоватьСтруктуруПоФормату(<Формат>,<Данные>) - используется для преобразования структуры данных к указанному формату. Например, если ФорматСообщения JSON, структура будет преобразована в JSON представление объекта.
Итоговый текст кода обработчика:
ФорматСообщения = Перечисления.сшпФорматыСообщений.JSON;*
Данные = Новый Структура;*
Данные.Вставить("Наименование", ОбъектОбработки.Наименование);*
Данные.Вставить("Код", ОбъектОбработки.Код);*
Данные.Вставить("РазрешенаПродажа", ОбъектОбработки.РазрешенаПродажа);*
Данные.Вставить("ТестовыйОбщийРеквизит1",*
ОбъектОбработки.ТестовыйОбщийРеквизит1);*
РезультатОбработки.Body =*
сшпОбщегоНазначения.ПреобразоватьСтруктуруПоФормату(ФорматСообщения, Данные);*
Аналог объектной модели через запрос в коде обработчика. Пример кода:
Запрос = Новый Запрос; Запрос.Текст =
"ВЫБРАТЬ
| Продукты.Наименование КАК Наименование,
| Продукты.Код КАК Код,
| Продукты.РазрешенаПродажа КАК РазрешенаПродажа,
| Продукты.ТестовыйОбщийРеквизит1 КАК ТестовыйОбщийРеквизит1
|ИЗ
| Справочник.Продукты КАК Продукты
|ГДЕ
| Продукты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ОбъектОбработки.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
Данные = Новый Структура;
Данные.Вставить("Наименование", ВыборкаДетальныеЗаписи.Наименование);
Данные.Вставить("Код", ВыборкаДетальныеЗаписи.Код);
Данные.Вставить("РазрешенаПродажа",
ВыборкаДетальныеЗаписи.РазрешенаПродажа);
Данные.Вставить("ТестовыйОбщийРеквизит1",
ВыборкаДетальныеЗаписи.ТестовыйОбщийРеквизит1);
РезультатОбработки.Body =
сшпОбщегоНазначения.ПреобразоватьСтруктуруПоФормату(ФорматСообщения,Данные);
Вместо переменной ОбъектОбработки в коде объявляется переменная ВыборкаДетальныеЗаписи, в которую записываются результаты запроса к базе. Последняя часть кода практически идентична объектной модели.
Для логирования доступны те же методы, что в для направления Из Platform.
Для доступа к свойствам сообщения доступен метод:
Процедура УстановитьСвойствоСообщения(ИмяСвойства, ЗначениеСвойства).
Также в коде обработчиков доступен вызов функций 1С - еще одного типа обработчиков.
Для того, чтобы вызвать функцию из обработчика или другой функции нужно прописать следующий код:
ВыполнитьФункцию(ИмяФукнции, параметры через запятую)
В случае вызова функции из бизнес процесса необходимо передать в переменную Результат тело ответного сообщения:
Результат =
сшпОбщегоНазначения.ПреобразоватьСтруктуруПоФормату(Перечисления.сшпФорматыСообщений.JSON, Данные);
Отображение изменений кода обработчиков 1С
При редактировании кода можно отслеживать изменения в сравнении с оригинальным кодом обработчика (до их сохранения). Для этого установите флажок Показать изменения. В результате в левой части рабочей области отобразится оригинал кода, в правой части - отредактированный код.
Отладка кода обработчиков 1С
В процессе отладки во внешнюю систему 1С отправляется сообщение с кодом обработчика, json-телом отладочного сообщения (в случае обработчика Из Platform), параметрами и запросом 1С для выбора объекта из базы 1С (в случае обработчика В Platform). Код обработчика полностью выполняется во внешней системе 1С перед началом отображения шагов отладки. Результат выполнения приходит из внешней системы также до начала отображения шагов отладки. Если в коде обработчика 1С присутствует инициализация переменных (присвоение значений), результат выполнения содержит шаги, каждый из которых соответствует инициализации переменной в коде обработчика 1С. Эти шаги отображаются после запуска отладки (при этом возможен переход от шага к шагу). В списке переменных отображаются актуальные значения переменных, которые были инициализированы на текущем и на предыдущих шагах. Таким образом, отладка кода обработчиков 1С представляет собой имитацию пошаговой отладки. При этом отладка позволяет найти ошибки в коде без использования инструментов разработки 1С.
Для перехода в режим отладки нажмите на соответствующую кнопку в редакторе, либо воспользуйтесь горячей клавишей F5.
Для установки точек прерывания необходимо нажать на выбранную строку в левой части кода. Для запуска отладки нажмите на соответствующую кнопку в редакторе или на клавишу F5. Для перемещения по коду используйте клавиши «стрелки» либо следующие горячие клавиши:
F9 - предыдущий шаг.
F10 - следующий шаг.
F5 - продолжить (дойти до следующей точки останова или до конца кода, если точек останова нет).
В нижней части рабочей области будут отображаться данные, которые заполняются во время отладки. Для завершения отладки нажмите на значок «крестик».
Отладка обработчиков Из Platform
Процесс отладки зависит от наличия добавленного в обработчик типа данных (или внешнего типа данных).
Если в обработчике на вкладке Из Platform добавлен тип данных (или внешний тип данных), структура этого типа данных определяет структуру отладочного сообщения. Значения каждого поля отладочного сообщения могут быть указаны в режиме Структура. Для перехода в этот режим активируйте переключатель в правом верхнем углу рабочей области:
Редактирование отладочного сообщения в режиме Структура:
Если в обработчике на вкладке Из Platform не добавлен тип данных, отладочное сообщение может быть отредактировано только в режиме Произвольное тело сообщения в формате json. Для перехода в этот режим активируйте переключатель в правом верхнем углу рабочей области:
Редактирование отладочного сообщения в режиме Произвольное тело сообщения:
Примечание
При переключении между режимами информация не переносится, значения пустые по умолчанию.
Отладка обработчиков В Platform
Обработчики 1С В Platform реагируют на изменение элементов объекта конфигурации базы 1С, который указан в поле Имя таблицы. Этот объект доступен в коде обработчика В Platform через переменную ОбъектОбработки (cм. раздел Обработчики В Platform).
Для осуществления отладки кода необходим элемент объекта конфигурации базы 1С, который будет использоваться в качестве переменной ОбъектОбработки. Выбор объекта осуществляется в меню, которое открывается при нажатии на следующую кнопку:
В результате отобразится всплывающее окно выбора значения:
Доступны следующие варианты выбора объекта:
Первый элемент из: будет выбран элемент запросом 1С (subscriptionObject - объект в поле Имя таблицы обработчика):
ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ subscriptionObject
С помощью запроса 1С: откроется форма редактирования запроса 1С.
С помощью произвольного кода 1С: откроется форма редактирования произвольного кода 1С.
Примечание
Если элемент объекта конфигурации не указан в качестве переменной ОбъектОбработки, при запуске отладки будет выбран вариант Первый элемент из.
Результат выполнения кода обработчика будет отображен в первой строке панели результатов и переменных отладки.
Переменные ОбъектОбработки и РезультатОбработки будут отображены в первых строках списка переменных отладки.
Особенности версии 1С 3.0.1.232
В обработчиках 1С доступны и рекомендованы следующие методы для задержки:
ОжиданиеМСек(Задержка)
Ожидание(Задержка)
При использовании устаревших методов в обработчиках 1С (сшпОбщегоНазначения.ОжиданиеМСек(), сшпОбщегоНазначения.Ожидание()) будет выполняться ожидание, превышающее указанное значение.