При настройке синхронизации данных между информационными базами 1С у многих начинающих разработчиков и администраторов возникает резонный вопрос: как система понимает, какие именно данные нужно перенести? За это отвечает встроенный механизм регистрации изменений. В этой статье мы подробно разберем, как устроен этот механизм изнутри, обязателен ли он к использованию, и как с помощью стандартной обработки 1С управлять процессом выгрузки вручную.
Для того чтобы понять логику работы обмена, давайте заглянем «под капот» платформы 1С. Механизм регистрации изменений — это не просто абстрактное понятие, а физические таблицы в СУБД. Когда мы создаем в конфигураторе объект типа ПланОбмена и включаем в его состав определенные справочники, документы или регистры, платформа автоматически создает для каждого сопоставленного объекта скрытую таблицу регистрации изменений.
Проанализируем этот процесс по шагам:
НомерОтправленного и НомерПринятого. Таким образом, очередь выгрузки очищается.Выясним, является ли этот механизм обязательным и как именно данные попадают в очередь обмена. На самом деле регистрация изменений обязательна, если мы хотим использовать стандартный сеансовый обмен данными. Однако то, как именно данные регистрируются, может сильно различаться.
Рассмотрим два основных подхода к регистрации изменений в 1С:
1. Автоматическая регистрация (платформенная)
В конфигураторе для каждого объекта, входящего в состав плана обмена, есть свойство Авторегистрация. Если установить его в значение Разрешить, то при любой записи объекта (будь то создание нового элемента пользователем, проведение документа или программное изменение) платформа самостоятельно зарегистрирует этот объект на всех узлах данного плана обмена. Это самый простой способ, не требующий написания программного кода.
2. Ручная и программная регистрация
В крупных корпоративных системах автоматическая регистрация часто бывает избыточной. Например, нам не нужно переносить документы прошлых закрытых периодов или определенные группы контрагентов. В этом случае свойство Авторегистрация устанавливают в значение Запретить. Логику регистрации программируют вручную:
Посмотрим на пример кода, позволяющего программно зарегистрировать изменения объекта для конкретного узла обмена:
// Пример программной регистрации изменений для одного узла
УзелПолучатель = ПланыОбмена.СинхронизацияДанных.НайтиПоКоду("УТ");
Если ЗначениеЗаполнено(УзелПолучатель) Тогда
СсылкаНаОбъект = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "7700000000");
Если Не СсылкаНаОбъект.Пустая() Тогда
ПланыОбмена.ЗарегистрироватьИзменения(УзелПолучатель, СсылкаНаОбъект);
КонецЕсли;
КонецЕсли;
Вернемся к обсуждению на форуме. Автор интересуется, предназначена ли форма регистрации изменений только для просмотра. Ответ опытных специалистов однозначен: нет, не только для просмотра. Это полноценное рабочее место администратора обмена.
Разберем по шагам, какие задачи мы можем решать с помощью этой обработки (в современных конфигурациях она доступна через меню «Все функции» / «Функции для технического специалиста» -> «Обработки» -> «Регистрация изменений для обмена»):
НомерОтправленного и НомерПринятого.Рассмотрим пример кода, с помощью которого можно программно очистить регистрацию изменений для определенного типа данных, если очередь переполнена:
// Программное удаление регистрации изменений для всех документов "РеализацияТоваровУслуг"
УзелПолучатель = ПланыОбмена.СинхронизацияДанных.НайтиПоКоду("УТ");
Если ЗначениеЗаполнено(УзелПолучатель) Тогда
ПланыОбмена.УдалитьРегистрациюИзменений(УзелПолучатель, Метаданные.Документы.РеализацияТоваровУслуг);
КонецЕсли;
Проанализируем важный аспект, с которым часто сталкиваются разработчики на высоконагруженных базах данных. Активное использование механизма регистрации изменений может приводить к двум основным проблемам:
Блокировки СУБД: При массовой записи или проведении документов (например, при закрытии месяца, групповом перепроведении или загрузке данных из внешних систем) автоматическая регистрация начинает параллельно писать данные в таблицы регистрации изменений. Это может вызывать длительные взаимоблокировки (deadlocks) и замедлять работу пользователей.
Разрастание таблиц изменений: Если обмен данными по какой-то причине "завис" или сломался на несколько недель, таблицы регистрации продолжают накапливать информацию. База начинает стремительно увеличиваться в размерах, а операции записи замедляются. В таких ситуациях обработка «Регистрация изменений для обмена» становится спасительным инструментом: администратор может оперативно очистить зависшую очередь, восстановить работоспособность базы, а затем зарегистрировать к обмену только актуальные данные.
Подводя итог, ответим на вопросы автора темы: