авторегистрация в плане обмена 1с что это
Планы обмена 1С 8.3
Планы обмена в 1С 8.3 — объект метаданных конфигурации, служащий для реализации синхронизации данных в системе 1С 8.
План обмена можно сравнить со справочником, где элементы — это узлы информационных баз. Однако в работе с планами обмена имеется множество нюансов, о них мы поговорим ниже.
Обычно обмен в 1С построен с использованием специальных правил обмена, которые формируются с помощью конфигурации Конвертация данных.
Настройки и свойства планов обмена в 1С
Как ранее было замечено, план обмена очень похож на обычный справочник в 1С, и поэтому мы рассмотрим только главные отличия обмена.
Как работать с планом обмена
План обмена умеет хранить информацию и изменения элементов из состава плана обмена, а так же хранит информацию о номере текущего сообщения. В общем случае схема работы такова:
Распределенная информационная база
Если этот флаг установлен в настройках, то данный план обмена является распределенной информационной базой (РИБ).
Распределенная информационная база — территориально распределенная система на основе одинаковой конфигурации 1С 8.3. РИБ помимо изменений данных умеет передавать и изменений конфигурации, что очень удобно, например, при обновлении релиза конфигурации.
Состав плана обмена
Настройка, с помощью которой разработчик управляет набором объектов для обмена:
В составе плана обмена может быть 3 состояния объекта:
Планы обмена и производительность 1С
Из-за системных особенностей реализации планов обмена не рекомендуется злоупотреблять выгрузкой изменений по планам обмена. Дело в том, что при чтении изменений блокируются все таблицы изменений. Т.е. при выгрузке план обмена не дает записать новые изменений, а следовательно, блокирует и сами элементы — справочники, документы и т.д.
Выгрузку рекомендуется производить в нерабочее время или совсем маленькими партиями данных, чтобы блокировки были на максимально короткий срок.
Другие статьи по 1С:
Видеолекции по технологии обмена в 1С 8.2:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
План обмена
План обмена содержит информацию об узлах, которые могут участвовать в обмене данными, определяет состав данных, которыми будет производиться обмен, и указывает, следует ли задействовать механизм распределенной информационной базы при обмене.
В одном прикладном решении может существовать несколько планов обмена, каждый из которых может описывать свой порядок обмена данными. Например, если выполняется обмен данными с удаленными складами и удаленными офисами, то, скорее всего, будет существовать два плана обмена (один для обмена со складами, другой — для офисов), поскольку состав данных, которыми производится обмен со складами, будет значительно «уже», чем состав данных, предназначенных для обмена с офисами.
Назначение
В плане обмена хранится список узлов, — участников обмена в распределенной информационной системе. В качестве узлов могут выступать информационные базы 1С:Предприятия 8, информационные базы 1С:Предприятия 7.7 или другие информационные системы, не основанные на 1С:Предприятии.
Для каждого узла можно задать код, наименование и необходимый перечень реквизитов, описывающих узел. Узел может иметь также несколько подчиненных табличных частей для хранения информации, связанной с этим узлом, несколько форм, для отображения информации, содержащейся в плане обмена, и т. д. Например, структура плана обмена МобильноеПриложениеТорговыйПредставитель может выглядеть следующим образом:
При создании плана обмена существует возможность указать, будет ли он задействовать механизмы распределенной информационной базы или нет.
Также в плане обмена указывается состав данных, которыми предполагается вести обмен:
Для каждого из объектов прикладного решения, которые могут участвовать в обмене, задается режим регистрации их изменений. Если разрешена авторегистрация, то система сама отслеживает выполняемые изменения, и формирует набор данных, которыми нужно обменяться. Если же разработчик запрещает авторегистрацию изменений, — он должен, средствами встроенного языка, самостоятельно выполнять регистрацию нужных ему изменений.
Механизмы, реализуемые планом обмена
Способы регистрации изменений данных в механизмах обмена данными
В платформе 1С:Предприятие 8 реализовано два механизма обмена данными: универсальный механизм обмена данными и механизм распределенной информационной базы. Оба эти механизма базируются на одних тех же технологиях. Одной из этих технологий является служба регистрации изменений данных.
Однако часто требуется регистрация не каждого изменения данных, или регистрация изменений смежных объектов, или зависящих от изменяемых данных. Это можно выполнить различными способами.
Регистрация изменений всех данных для указанного узла
Пример. Регистрация изменения всех данных для узла Узел :
Регистрация изменений всех данных одного типа
Для регистрации изменений данных одного типа необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные объект описания метаданных, соответствующий данным.
Пример: регистрация изменения всех элементов справочника Номенклатура для узла Узел :
Регистрация изменений конкретных данных различных типов
Для регистрации конкретных данных различных типов необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные либо сами данные, либо ссылку на них.
Регистрация изменений данных объектных типов
К объектным типам относятся справочники, документы, планы счетов, планы видов характеристик, планы расчета, бизнес-процессы, задачи. Для их регистрации необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные либо сам объект, либо ссылку на него.
Регистрация изменений наборов записей
Регистрация изменений наборов записей зависит от типа регистра, которому принадлежит набор записей. В общем случае в наборе записей должен быть установлен отбор, определяющий содержимое набора записей с точки зрения логики конфигурации. Чтение данных набора необязательно.
Регистрация изменений наборов записей регистров, подчиненных регистратору
Регистрация изменений наборов записей независимых регистров
План обмена
Общие сведения об обмене данными
Механизмы обмена данными «1С:Предприятия» позволяют организовывать обмен информацией, хранимой в базе данных, с другими программными системами. К механизмам обмена данными могут быть отнесены:
При помощи планов обмена мы получаем информацию о том, какие элементы данных были изменены и в какой узел обмена их необходимо передать. Это возможно благодаря тому, что планы обмена содержат механизм регистрации изменений. Информация об измененных данных переносится с помощью сообщений, инфраструктура которых также поддерживается планами обмена.
Что такое план обмена
Для того чтобы существовала возможность обмена какими-либо данными с кем-либо, необходимо некоторым образом идентифицировать тех, с кем мы будем обмениваться, и для каждого из них описать перечень обмена. Обе эти задачи позволяет решать объект конфигурации «План обмена». Подобно тому, как элементами данных справочника являются элементы справочника, элементами данных плана обмена являются узлы плана обмена.
Каждый узел идентифицирует участника обмена по данному плану обмена. Кроме этого, в каждом плане обмена всегда существует один предопределенный узел, идентифицирующий данную информационную базу.
В обмене данными могут участвовать:
Итак, при записи и удалении объектов обмена план обмена формирует записи регистрации изменений. Записи регистрации изменений хранятся в таблицах регистрации изменений, причем для каждого объекта обмена ведется своя таблица. При изменении объекта обмена в таблице регистрации изменений создается столько записей, сколько узлов-получателей указано в параметрах обмена данными у объекта обмена. Каждая запись при этом будет хранить ссылку на свой узел-получатель.
Поскольку сообщения передаются в рамках плана обмена от одного узла к другому, каждое сообщение точно ассоциировано с планом обмена, имеет уникальный номер и одного отправителя и получателя. За нумерацию сообщений отвечает инфраструктура сообщений. Благодаря этому записи регистрации изменений и имеют возможность хранить номера сообщений, в которых эти изменения были переданы первый раз.
Инфраструктура сообщений позволяет также получать подтверждения от узла-получателя о приеме сообщений. Такое подтверждение содержится в каждом сообщении, приходящем от узла-получателя в виде номера последнего принятого сообщения. Впоследствии, проанализировав номер последнего принятого сообщения и номера сообщений, содержащиеся в записях регистрации изменений, разработчик может удалить записи регистрации изменений, прием которых подтвержден получателем.
Добавление плана обмена
Этот реквизит понадобится нам для того, чтобы разрешать коллизии при обмене данными. Под коллизией понимается ситуация, когда один и тот же объект обмена данными был изменен одновременно в двух узлах. В этом случае мы будем анализировать значение реквизита Главный и принимать изменения только в том случае, если они сделаны в главном узле. В случае коллизии изменения, произведенные не в главном узле, мы будем отвергать.
Теперь определим состав объектов, участвующих в обмене. Для этого на закладке «Основные» нажмем кнопку «Состав».
Затем создадим основную форму списка плана обмена, чтобы описать в ней некоторые действия по регистрации нового узла обмена.
Суть этих действий будет заключаться в том, что при регистрации нового узла обмена мы должны будем сформировать для него все необходимые записи регистрации изменений для всех объектов конфигурации, входящих в данный план обмена. Это будет своего рода начальная синхронизация узла обмена всеми данными обмена.
Кнопка «Зарегистрировать изменения» должна быть доступна только в случае, если текущий узел не является предопределенным для данной информационной базы, иначе регистрация изменений невозможна. Чтобы обеспечить такое поведение кнопки, создадим в модуле формы списка функцию, выполняющуюся на сервере без контекста и возвращающую истину, если переданный в функцию узел является предопределенным.
Процедуры обмена данными
Процедуры записи и чтения данных
Регистрация изменений для плана обмена
Свойство ОбменДанными
У всех объектов и наборов записей, которые могут быть зарегистрированы в плане обмена есть свойство ОбменДанными, которое предназначено для управления обменом данными.
Свойство ОбменДанными имеет тип ПараметрыОбменаДанными. Оно не сохраняется в базе данных и имеет 3 свойства:
Режим обмена
Свойство Загрузка позволяет отключить платформенные проверки, которые выполняются при записи объекта. Например, проверку заполнения владельца элемента справочника. В обычном режиме платформа не даст записать элемент подчиненного справочника без заполнения реквизита Владелец. Если установить свойство Загрузка в Истина, то элемент запишется.
Например, справочник Договоры подчинен справочнику Контрагенты. В этом случае нельзя записать договор без заполнения реквизита Владелец:
Данное свойство используется при загрузке данных извне. При чтении данных из файла обмена сначала может загружаться объект договора, а только потом объект контрагента. В этом случае у договора в реквизите Владелец будет битая ссылка (ссылка, которая не принадлежит ни одному объекту базы данных). С битой ссылкой платформа тоже не даст записать объект. Поэтому устанавливается свойство ОбменДанными.Загрузка = Истина и договор записывается с битой ссылкой. Затем записывается контрагент и ссылка перестает быть битой.
В типовых конфигурациях 1С в обработчиках ПередЗаписью и ПриЗаписи модуля объекта и модуля набора записей можно встретить следующий фрагмент кода:
Данный фрагмент кода позволяет отключить выполнение данных обработчиков, потому что в них может быть обращение к реквизитам, которые еще не загружены (например к реквизиту Владелец), а также чтобы гарантировать запись данных, которые загружаются.
Запись с установленным свойством ОбменДанными.Загрузка = Истина часто называются записью в режиме обмена или записью в режиме загрузки данных.
Запись в режиме обмена также можно использовать для более быстрой записи объектов. Например, когда нужно изменить значение одного реквизита у всех объектов:
Запись в режиме обмена нужно использовать с осторожностью. Не нужно всегда записывать все объекты в режиме обмена. В обработчиках ПередЗаписью и ПриЗаписи может выполняться код, который создает определенные записи в регистре сведений или определенным образом заполняет служебную табличную часть. А так как в начале этих обработчиков выполняется проверка на запись в режиме обмена, то этот код не будет выполнен.
Стоит отметить, что в режиме обмена нельзя проводить документы. В этом случае будет получена ошибка «Действие не может выполняться в режиме загрузки данных»:
Автоматическая регистрация
Свойство Получатели объекта ПараметрыОбменаДанными содержит в себе набор узлов плана обмена, на которых будет зарегистрирован записываемый объект. Данное свойство заполняется автоматически если при настройке состава плана обмена была разрешена автоматическая регистрация:
Данное свойство заполняется до вызова события ПередЗаписью. Непосредственно в самом событии оно уже заполнено узлами плана обмена:
Если в обработчике ПередЗаписью очистить свойство Получатели, то объект не будет зарегистрирован ни на одном из узлов плана обмена:
У свойства Получатели есть свойство АвтоЗаполнение. С помощью данного свойства можно узнать разрешена ли автоматическая регистрация записываемого объекта. Если оно равно Истина, то разрешена. Иначе запрещена.
Изменять данное свойство в обработчике ПередЗаписью не имеет смысла. Автоматическое заполнение свойства Получатели узлами плана обмена выполняется до вызова данного обработчика:
Но при программной записи объекта через свойство АвтоЗаполнение можно выключить автоматическое заполнение узлов-получателей:
Также у свойства Получатели есть метод Заполнить, который позволяет заполнить данное свойство всеми узлами плана обмена, для которых включена автоматическая регистрация данного объекта:
Свойство АвтоЗаполнение не влияет на метод Заполнить. То есть если установить АвтоЗаполнение = Ложь и вызвать метод Заполнить, узлы все равно будут заполнены согласно настройки состава плана обмена.
Свойство ОбменДанными также доступно при удалении объекта в обработчике ПередУдалением. В этом случае в свойстве Получатели будут узлы плана обмена, для которых будет зарегистрировано удаление объекта.
Узел-отправитель
Установка свойства ОбменДанными.Загрузка = Истина не отменяет автоматическое заполнение свойства Получатели. Поэтому даже при записи в режиме обмена будет выполняться регистрация изменений.
В этом случае можно столкнуться с такой ситуацией: из другой базы была загружена новая номенклатура. Она была записана в режиме обмена в базу. Во время записи была выполнена регистрация на всех узлах плана обмена (кроме предопределенного), в том числе на том узле, из которого она пришла. Затем она была выгружена в тот узел, там записана и снова зарегистрирована для текущего узла. Снова загружена в текущий узел и т.д. В результате один объект будет без конца выгружаться туда-сюда.
Чтобы этого избежать используется свойство Отправитель. В данном свойстве указывается ссылка на узел, из которого был загружен объект. В результате при регистрации изменений для узла-отправителя не будет выполняться регистрация: