1С номер сообщения в плане обмена

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

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

  • узел-источник сообщения;
  • узел-приемник, которому данное сообщение адресовано;
  • номер данного сообщения;
  • номер последнего принятого от узла-приемника сообщения.

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

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

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

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

  • формируется заголовок сообщения;
  • осуществляется блокировка объекта узла плана обмена;
  • осуществляется правильное завершение записи сообщения;
  • значение последнего переданного сообщения записывается в объект узла-приемника сообщения.

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

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

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

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

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

Читайте также:  Ссылка на страницу в телеграмме

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

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

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

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

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

  • проверяется совпадение кодов узла-источника и узла-приемника сообщения;
  • осуществляется блокировка объекта узла-источника сообщения;
  • производится проверка номера полученного сообщения;
  • номер полученного сообщения записывается в объект узла-приемника.

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Athlon x4 860k обзор

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

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

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

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

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

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

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

Ошибка «Номер сообщения меньше либо равен ранее принятому», наверное, знакома каждому, кто когда-либо связывался с обменами в программах 1С. Рассмотрим, почему возникает такая ошибка, и предложим скачать обработку для исправления ситуации.

Когда происходит обмен данными, система обычно делает специальные пометки в базе данных о том, происходила выгрузка или нет. Узлы планов обменов имеют два специальных стандартных реквизита — Номер принятого и Номер отправленного сообщения (подробно — планы обмена). Именно в этих реквизитах 1С хранит информацию о загруженных/выгруженных пакетах.

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

Получите 267 видеоуроков по 1С бесплатно:

Обработка Регистрация изменений для обмена 1С

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

Для изменения номера сообщений проще всего воспользоваться типовой обработкой — «Регистрация изменений для обмена».

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

Читайте также:  Что такое апп стор

Так и для управляемого:

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

В открывшимся окне следует установить сообщения, равные нулю, и нажать кнопку «Записать»:

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

Описанные выше обработки обычно в составе типовых конфигураций.

Другие статьи по 1С:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Пользователи 1С, используя обмены, иногда сталкиваются с проблемой возникновения ошибки «Номер сообщения меньше либо равен ранее принятому». Что же обозначает эта ошибка: в базе, с которой воспроизводится обмен, зафиксирован прием пакета с номером больше или равным тому пакету, который готовится на отправку, тогда программа выдаст подобную ошибку. А в случае, если базы не восстанавливались, и возникла ошибка, то нужно найти ее причину.

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

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

Если номера сообщений расходятся, то можно реализовать второй вариант — выровнять коды сообщений в узлах обмена. Чтобы изменить номер сообщения, следует перейти к типовой обработке и выбрать «Регистрация изменений для обмена». Далее, чтобы исправить ошибку, нужно нажать на гиперссылку с номерами сообщений или на кнопку «Изменить номера сообщений». После чего появится окно, где нужно выбрать «Установить сообщения равны нулю» или «Записать». Обратите внимание, что если нулевые данные отсутствуют, будет потеряна регистрация изменений для обмена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector