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