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