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













































