Как правильно отменить регистрацию изменений для плана обмена в 1С:ERP?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

При работе с механизмами интеграции и обмена данными в крупноблочных конфигурациях, таких как 1С:ERP Управление предприятием, разработчики часто сталкиваются с необходимостью управления регистрацией изменений. Стандартный сценарий «выгрузил данные — хочу сразу очистить регистрацию для узла» таит в себе множество подводных камней, особенно если эта операция выполняется некорректно или внутри транзакции записи объектов. В этой статье мы подробно разберем, какими методами платформы и Библиотеки стандартных подсистем (БСП) следует решать эту задачу правильно и безопасно.

Платформенный механизм: полная очистка регистрации изменений

Если перед нами стоит задача полностью очистить все зарегистрированные изменения для конкретного узла плана обмена (стереть так называемый «кэш» выгрузки), не нужно искать сложные обходные пути в общих модулях БСП. Для этого в платформе «1С:Предприятие 8» реализован быстрый и оптимизированный на уровне СУБД метод:

ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена);

Рассмотрим подробнее особенности работы этого метода:

  1. Высокая производительность: При вызове данного метода без указания второго параметра (конкретной ссылки на объект или массива ссылок) платформа выполняет прямую очистку всей таблицы регистрации изменений для указанного узла. Это происходит на уровне СУБД крайне быстро.
  2. Отсутствие блокировок: Очистка всей таблицы целиком гораздо безопаснее с точки зрения транзакционных блокировок, чем построчное удаление зарегистрированных объектов в цикле.

Почему удалять регистрацию внутри транзакции записи — плохая идея?

Часто у разработчиков возникает соблазн удалить регистрацию изменений непосредственно в коде, который записывает объект, или в конце транзакции выгрузки. Проанализируем ситуацию, почему так делать не рекомендуется:

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


// Отключаем автозаполнение получателей (блокируем регистрацию на узлах обмена)
ЭтотОбъект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;
ЭтотОбъект.ОбменДанными.Получатели.Очистить();
ЭтотОбъект.Записать();

Если запись выполняется в рамках интеграционных процедур, когда выполнять бизнес-логику и регистрировать изменения на других узлах вообще не требуется, используют стандартное свойство:


ЭтотОбъект.ОбменДанными.Загрузка = Истина;
ЭтотОбъект.Записать();

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

Штатный механизм БСП: Квитирование (подтверждение доставки)

В конфигурациях на базе БСП (включая 1С:ERP) удаление регистрации изменений никогда не происходит сразу «вдогонку» за выгрузкой. Архитектура обмена построена на принципе квитирования — подтверждения успешного приема данных получателем. Это гарантирует, что данные не потеряются в случае сбоя сети или ошибки при записи в принимающей базе.

Разберем по шагам, как работает этот процесс:

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

ПланыОбмена.УдалитьРегистрациюИзменений(Отправитель, НомерПринятого);

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

Полезные инструменты БСП для управления регистрацией

Если вам требуется управлять регистрацией изменений интерактивно или программно в соответствии со стандартами 1С, используйте готовый инструментарий:


ОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Получатель, Данные, ПроверятьРазрешениеВыгрузки);

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

← На главную