Перейти к основному содержимому

Групповые операции

Во время операций массовой загрузки данных необходимо записывать данные как можно быстрее, исключив те проверки и расчеты, которые не являются необходимыми.

Например, в большинстве случаев выполнение обработчиков при загрузке данных не требуется, так как все проверки данных уже выполнены на передающей стороне. Если все нужные элементу проекта данные содержатся в пакете данных, то дополнительных проверок не требуется.

В общем виде управление контекстом групповой операции выглядит следующим образом: с помощью типа ГрупповаяОперация контекст открывается, выполняются операции записи данных и контекст закрывается.

исп Загрузка = ГрупповаяОперация.Начать(РежимЗагрузкиДанных = Истина)  // устанавливает режим загрузки

для каждого ОписаниеЗадачи из МассивОписанийЗадач

знч объектЗадача = новый Задачи.Объект()
// Экземпляр объектЗадача, созданный в контексте режима загрузки,
// будет иметь флаг объектЗадача.ОбменДанными.Загрузка == Истина

объектЗадача.Код = ОписаниеЗадачи.id
объектЗадача.Наименование = ОписаниеЗадачи.name
объектЗадача.Записать()

;

Загрузка.Закрыть() // завершает групповую операцию загрузки

В данном примере групповая операция устанавливает единственный режим — режим загрузки данных. На самом деле таких режимов несколько и их можно устанавливать одновременно.

РежимЗагрузкиДанных

В этом режиме отключаются проверки логической целостности при записи данных, отключаются обработчики событий у таких типов как имя-справочника.Объект, имя-регистра-сведений.НаборЗаписей и др.

Есть ряд ситуаций, при которых обработчики элементов проекта должны работать всегда. Например, когда нужно выполнить в той же транзакции регистрацию изменений по элементу. Или когда нужно положить элемент в исходящую очередь обмена данными, когда сам факт записи элемента надо зарегистрировать для дальнейшей обработки.

В этих случаях обработчик, выполняющий то или иное действие, должен выполняться и в режиме загрузки данных тоже. Для этого он помечается аннотацией @ВыполнятьПриЗагрузкеДанных. Например:

@ВыполнятьПриЗагрузкеДанных
@Обработчик
метод ПередЗаписью()
ОперацияВыполняемаяВсегда()

// проверяем состояние режима загрузки
если не ОбменДанными.Загрузка
ТолькоИнтерактивнаяОперация()
;
;

ОтложенныйРасчетПрав

В этом режиме права доступа рассчитываются не сразу при записи, а пакетно, по множеству экземпляров. Фактический расчет прав доступа запускается при закрытии контекста. Также требует наличия привилегированного режима и транзакции.

Транзакция

В этом режиме в начале операции открывается транзакция, которая закрывается по завершении операции

ПривилегированныйРежим

В этом режиме отключается контроль прав доступа на время операции