Перейти к содержимому

Проверка ОбменДанными.Загрузка в обработчиках событий

Директивный

диагностикаDataExchangeLoading

#обмен#надёжность

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

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

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

При загрузке через обмен (РИБ, синхронизация, ОбменДанными.Загрузка = Истина в загрузчиках) данные уже проверены и сформированы в узле-источнике. Повторные проверки в приёмнике:

  • ломают обмен: документ, валидный в источнике вчера, не проходит сегодняшнюю проверку в приёмнике — сообщение застревает, очередь обмена копится;
  • портят данные: автозаполнение перетирает значения, пришедшие из источника;
  • замедляют загрузку: тяжёлая логика умножается на тысячи объектов пачки обмена.

Обратная сторона: Загрузка = Истина в своих загрузчиках

Заголовок раздела «Обратная сторона: Загрузка = Истина в своих загрузчиках»

Признак работает в обе стороны. Собственный загрузчик (обработка загрузки из внешней системы, миграционный скрипт) может выставить Объект.ОбменДанными.Загрузка = Истина перед записью — и тем самым отключить все объектные проверки и автозаполнение:

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

Это осознанная сделка, а не способ «обойти надоевшую проверку»:

  • выставляя флаг, загрузчик берёт валидацию на себя — данные источника проверены до записи (см. сверку и контроль), иначе в ИБ поедет мусор, который объектные проверки бы остановили;
  • флаг уместен, когда источник авторитетен (миграция, доверенный обмен), и неуместен в загрузке «сырых» внешних данных, где проверки приёмника — последняя линия обороны;
  • решение фиксируется комментарием у места установки флага.
  • Код, обеспечивающий целостность самой ИБ независимо от источника данных (служебные регистры, версии, даты изменения), может выполняться и при загрузке — ставьте его до проверки с явным комментарием, почему.
  • В объектах, которые заведомо не участвуют ни в одном обмене, проверка формально избыточна — но безвредна и защищает от будущего подключения объекта к обмену, поэтому пишем её всегда.