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