Как работает механизм регистрации изменений

28.05.2018

Категория: 1С:Предприятие

Механизм регистрации изменений используется для обмена данными. При выполнении обмена из базы-источника в базу-приемник передаются не все данные, а только те, для которых были зарегистрированы изменения. В 1С:Предприятие регистрация изменений доступна для следующих объектов:

  • константа;
  • справочник;
  • документ;
  • план счетов;
  • план видов характеристик;
  • план видов расчета;
  • бизнес процесс;
  • задача.

А так же для наборов записей:

  • регистра сведений;
  • регистра бухгалтерии;
  • регистра накопления;
  • регистра расчета;
  • перерасчета.

Где хранится информация о зарегистрированных изменениях

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

Структура таблицы изменений подобна для всех объектов:

  • ключ элемента данных, для которого регистрируются изменения;
  • ссылка на узел, для которого регистрируется изменение;
  • номер сообщения, в котором было передано изменение.

Запись в таблице изменений проходит следующим образом:

  1. При регистрации изменения объекта создаются записи для всех узлов обмена, в которых этот объект должен быть зарегистрирован. При этом в графе НомерСообщения устанавливается значение NULL.
  2. При отправке данных в другую информационную базу в графе НомерСообщения устанавливается порядковый номер переданного сообщения.
  3. При получении данных из другой информационной базы передается номер последнего принятого сообщения. При этом из таблиц изменений удаляются строки, в которых номер сообщения меньше или равен принятому в другой базе. Таким образом удаляется регистрация изменений, которые уже были переданы и прием которых подтвержден.

Как сделать запрос к таблице изменений

Таблицы изменений по умолчанию не видны в конструкторе запросов. Но их можно вывести с помощью кнопки «Отображать таблицы изменений».

Пример запроса к таблице изменений:

ВЫБРАТЬ
    КонтрагентыИзменения.Узел,
    КонтрагентыИзменения.НомерСообщения,
    КонтрагентыИзменения.Ссылка
ИЗ
    Справочник.Контрагенты.Изменения КАК КонтрагентыИзменения

Как зарегистрировать изменение объекта

Для ручной регистрации изменений объектов существует обработка Регистрация изменений для обмена.

Изменения данных могут регистрироваться в автоматическом режиме. Для этого необходимо при включении объекта метаданных в состав плана обмена разрешить автоматическую регистрацию: установить для свойства Авторегистрация значение Разрешить.

Для того чтобы зарегистрироваться изменения вручную, у менеджера планов обмена существует функция ЗарегистрироватьИзменения(). Функция имеет два параметра: Узел и Данные.

Как зарегистрировать все изменения для узла

Для того, чтобы зарегистрировать все изменения для конкретного узла, нужно в первом параметре передать ссылку на узел, а во втором — значение Неопределено.

ПланыОбмена.ЗарегистрироватьИзменения(Узел, Неопределено);

Как зарегистрировать все изменения объектов определенного типа

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

ПланыОбмена.ЗарегистрироватьИзменения(Узел, Метаданные.Справочники.Номенклатура);

Как зарегистрировать все изменения конкретных объектов

Для того, чтобы зарегистрировать изменение конкретного объекта, нужно в первом параметре передать ссылку на узел, а во втором — ссылку на объект.

ПланыОбмена.ЗарегистрироватьИзменения(Узел, СправочникСсылка);

Для регистрации изменений наборов записей регистров, подчиненных регистратору, необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные набор записей с установленным отбором, в котором в элемент отбора Регистратор установлено значение регистратора данного набора записей. При этом чтение данных набора записей перед его регистрацией не обязательно.

Для регистрации изменений наборов записей независимого регистра необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные набор записей. Состав элементов отбора при этом, должен строго соответствовать основному отбору регистра.

Набор = РегистрыСведений.КомплектующиеНоменклатуры.СоздатьНаборЗаписей();

Набор.Отбор.Номенклатура.Значение = Номенклатура;
Набор.Отбор.Номенклатура.Использование = Истина;
Набор.Отбор.ХарактеристикаНоменклатуры.Значение = ХарактеристикаНоменклатуры;
Набор.Отбор.ХарактеристикаНоменклатуры.Использование = Истина;

ПланыОбмена.ЗарегистрироватьИзменения(Узел, Набор);

Как удалить регистрацию изменений

Для того чтобы удалить информацию о зарегистрированных изменениях у менеджера планов обмена существует функция УдалитьРегистрациюИзменений(). Функция имеет два параметра: Узел и НомерСообщения.

Как удалить регистрацию изменений полностью

Если необходимо удалить всю информацию о зарегистрированных изменениях для конкретного узла, то второй параметр следует оставить пустым:

ПланыОбмена.УдалитьРегистрациюИзменений(Узел);

Как удалить регистрацию изменений с номером сообщения не больше заданного

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

ПланыОбмена.УдалитьРегистрациюИзменений(Узел, НомерСообщения);

Например, если номер сообщения равен 2, то из таблиц изменений будут удалены все записи с номерами 1 и 2.

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.