Правило
Заголовок раздела «Правило»Обработчики событий объектов (ПередЗаписью, ПриЗаписи, ПередУдалением,
ОбработкаПроведения и т.п.) начинаются с проверки признака загрузки через обмен:
Если ОбменДанными.Загрузка Тогда Возврат;КонецЕсли;Проверки заполнения, автозаполнение реквизитов, каскадные записи и прочая бизнес-логика выполняются после этой проверки. Код, который обязан выполняться даже при загрузке (например, поддержка служебных флагов), ставится до неё осознанно и с комментарием.
При загрузке через обмен (РИБ, синхронизация, ОбменДанными.Загрузка = Истина в
загрузчиках) данные уже проверены и сформированы в узле-источнике. Повторные
проверки в приёмнике:
- ломают обмен: документ, валидный в источнике вчера, не проходит сегодняшнюю проверку в приёмнике — сообщение застревает, очередь обмена копится;
- портят данные: автозаполнение перетирает значения, пришедшие из источника;
- замедляют загрузку: тяжёлая логика умножается на тысячи объектов пачки обмена.
Обратная сторона: Загрузка = Истина в своих загрузчиках
Заголовок раздела «Обратная сторона: Загрузка = Истина в своих загрузчиках»Признак работает в обе стороны. Собственный загрузчик (обработка загрузки из
внешней системы, миграционный скрипт) может выставить
Объект.ОбменДанными.Загрузка = Истина перед записью — и тем самым отключить
все объектные проверки и автозаполнение:
Документ.ОбменДанными.Загрузка = Истина; // проверки объекта выключеныДокумент.Записать();Это осознанная сделка, а не способ «обойти надоевшую проверку»:
- выставляя флаг, загрузчик берёт валидацию на себя — данные источника проверены до записи (см. сверку и контроль), иначе в ИБ поедет мусор, который объектные проверки бы остановили;
- флаг уместен, когда источник авторитетен (миграция, доверенный обмен), и неуместен в загрузке «сырых» внешних данных, где проверки приёмника — последняя линия обороны;
- решение фиксируется комментарием у места установки флага.
Когда не применять
Заголовок раздела «Когда не применять»- Код, обеспечивающий целостность самой ИБ независимо от источника данных (служебные регистры, версии, даты изменения), может выполняться и при загрузке — ставьте его до проверки с явным комментарием, почему.
- В объектах, которые заведомо не участвуют ни в одном обмене, проверка формально избыточна — но безвредна и защищает от будущего подключения объекта к обмену, поэтому пишем её всегда.