Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Управление регистрацией изменений
Дальше: Ручная регистрация изменений

Автоматическая регистрация изменений

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

В приведенном ниже примере обработчик ПередЗаписью исключает из списка получателей узел с кодом Оптовый плана обмена УдаленныеСклады (листинг 3.1).

Листинг 3.1. Пример обработчика события «ПередЗаписью»

Процедура ПередЗаписью()

 

Узел = ПланыОбмена.УдаленныеСклады.НайтиПоКоду("Оптовый");

Объект.ОбменДанными.Получатели.Удалить(Узел);

 

КонецПроцедуры

Следует помнить, что значение свойства ОбменДанными не хранится в информационной базе. Можно сказать, что данное свойство заполняется некими значениями по умолчанию при создании объекта (в оперативной памяти). Одним из таких свойств, которое в дальнейшем определяет порядок регистрации изменений, является свойство Автозаполнение. То есть, несмотря на тот факт, что при настройке состава регистрации изменений авторегистрация для объекта была включена, при создании объекта (при создании, получении из кода, при открытии формы объекта) это свойство можно переопределить.

Пример реализации приведен в листинге 3.2.

Листинг 3.2. Пример изменения свойства «Автозаполнение»

Узел = ПланыОбмена.УдаленныеСклады.НайтиПоКоду("Оптовый");

Объект.ОбменДанными.Получатели.Автозаполнение = Ложь;

Объект.ОбменДанными.Получатели.Добавить(Узел);

Объект.Записать();

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

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

Рассмотрим пример. План обмена УдаленныеОфисы (автоматическая регистрация изменений для документа РасходнаяНакладная включена) имеет следующий состав непредопределенных узлов:

План обмена УдаленныеСклады (автоматическая регистрация изменений для документа РасходнаяНакладная отключена) имеет следующий состав непредопределенных узлов:

Подобная настройка планов обмена может быть выполнена исходя из соображений, что документ РасходнаяНакладная должен присутствовать во всех офисах компании и при этом должен быть выгружен только на «свой» склад.

При создании документа РасходнаяНакладная (или изменении существующего) в таблице регистрации изменений данного документа появятся две записи для узлов:

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

Назад: Управление регистрацией изменений
Дальше: Ручная регистрация изменений