Использование инфраструктуры сообщений. Квитирование

Инфраструктура сообщений является неотъемлемой частью механизмов обмена данными платформы 1С:Предприятия 8. Она предоставляет возможности по формированию и анализу сообщений обмена.

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

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

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

Запись сообщения обмена

Для создания сообщения обмена предназначен объект ЗаписьСообщенияОбмена. При его помощи выполняются все необходимые действия для формирования правильного сообщения обмена:

Начало записи сообщения обмена

Запись сообщения начинается с вызова метода НачатьЗапись() объекта ЗаписьСообщенияОбмена. В качестве параметров метода передаются объект

Копировать в буфер обмена
ЗаписьXML

(при помощи которого производится формирование сообщения в формате XML) и номер формируемого сообщения обмена. В этот момент происходит формирование заголовка сообщения и блокируется объект представляющий узел-приемник сообщения. После чего объект ЗаписьXML и номер формируемого сообщения становятся доступны через данный экземпляр объекта ЗаписьСообщенияОбмена для формирования тела сообщения обмена.

Выборка и запись изменений данных

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

Выбранные изменения могут быть записаны в сообщение обмена, используя экземпляр объекта ЗаписьXML, доступный из экземпляра объекта ЗаписьСообщенияОбмена.

Завершение записи сообщения обмена

Для завершения процесса записи сообщения обмена необходимо осуществить вызов метода ЗакончитьЗапись() объекта ЗаписьСообщенияОбмена. В объект ЗаписьXML выполняется запись завершающих сообщение конструкций (завершение элементов XML). После чего происходит установка в объект узла-приемника сообщения номера сформированного сообщения, и осуществляется запись данного объекта. Сообщение обмена считается сформированным и готовым к отправке.

Получение сообщения обмена

При получении сообщения производится анализ заголовка сообщения:

Для выполнения всех перечисленных действий служит объект ЧтениеСообщенияОбмена.

Начало чтения сообщения

Чтение сообщения начинается с вызова метода НачатьЧтение() объекта ЧтениеСообщенияОбмена, в качестве параметров метода передаются объект

Копировать в буфер обмена
ЧтениеXML

(при помощи которого производится чтение сообщения в формате XML) и допустимый номер сообщения обмена.

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

Чтение заголовка сообщения обмена продолжается. Считывается номер сообщения. Номер сообщения должен удовлетворять условиям, переданным при вызове метода НачатьЧтение(). Далее считывается номер последнего полученного сообщения (полученного в информационной базе узла отправителя данного сообщения).

Номера и узлы плана обмена устанавливаются в соответствующие поля объекта ЧтениеСообщенияОбмена.

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

Чтение тела сообщения

После чтения и анализа заголовка сообщения обмена можно производить чтение тела сообщения - полученных данных. Для этого необходимо воспользоваться объектом ЧтениеXML (полученным из соответствующего свойства объекта ЧтениеСообщенияОбмена).

Завершение чтения сообщения

После прочтения содержимого сообщения обмена необходимо завершить чтение сообщения. Для этого необходимо вызвать метод ЗакончитьЧтение() объекта ЧтениеСообщенияОбмена. В результате вызова данного метода номер полученного сообщения будет записан в объект узла-отправителя сообщения обмена.

Односторонний обмен

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

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

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

Односторонний обмен без необходимости получения ответных сообщений

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