DaJet ©

Планы обмена 1С:Предприятие 8

Регистрация изменений регистров сведений

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

Важно!
В случае редактирования значения измерения набора записей регистра сведений (меняется ключ записи в СУБД), вызов метода регистрации изменений выполняется дважды (!): один раз для "старой" или текущей записи, существующей в данный момент времени в базе данных, а второй раз - для "новой" записи, находящейся до вызова метода Записать набора записей регистра только в оперативной памяти программы (новый ключ записи).

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

Ниже приведены примеры кода 1С и соответствующий ему код SQL для Microsoft SQL Server, который выполняет эквивалентную операцию регистрации изменений, но только для ссылочного объекта.

На уровне СУБД вызов выше указанного метода выполняется в транзакции с уровнем изоляции READ COMMITTED. Далее выполняется команда UPDATE, которая пытается в таблице регистрации изменений плана обмена для соответствующего объекта метаданных и его записей установить полю _MessageNo значение NULL. Это маркировка записей регистрации изменений на выгрузку — своеобразный флаг.
Далее платформа 1С:Предприятие 8 проверяет, что искомые записи действительно присутствуют в таблице регистрации изменений. Для это выполняется команда SELECT с отбором по соответствующим измерениям и полю _MessageNo равным значению NULL. Если количество записей не совпало с искомым, то выполняется команда INSERT с тем, чтобы изменения для соответствующих записей были всё-таки зарегистрированы.
В любом случае, запросы UPDATE и SELECT будут выполнены всегда.

Для наборов записей выполняется точно такой же код, но только вместо поля _IDRRef используются поля измерений регистра сведений, которые имеют установленное свойство Основной отбор для соответствующего объекта метаданных в конфигураторе.

Для регистров сведений, подчинённых регистратору, используется только поле Регистратор (_RecorderTRef и _RecorderRRef) без каких либо измерений, а для периодического регистра сведений — поле Период (_Period) и измерения с основным отбором.

Подробнее можно ознакомиться с механизмом регистрации изменений 1С:Предприятие 8 в статье: Планы обмена 1С (infostart.ru)