Как настроить синхронизацию данных в 1С, исправить ошибку незавершенной настройки и проверить обмен на одном документе?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Синхронизация данных между различными конфигурациями «1С:Предприятие 8» — одна из самых частых и в то же время сложных задач, с которыми сталкиваются как начинающие разработчики, так и опытные администраторы. В процессе настройки регулярного обмена нередко возникают ситуации, когда стандартные помощники дают сбой, а выгрузка огромных массивов информации приводит к зависанию системы. Для управления этими процессами платформа предоставляет мощный встроенный инструмент — обработку «Регистрация изменений для обмена данными». В этой статье мы подробно разберем, зачем нужен этот инструмент, как с его помощью обойти блокировки настройки и как провести безопасное тестирование обмена всего на одном документе.

Что представляет собой обработка «Регистрация изменений» и зачем она нужна?

Для начала давайте разберемся в теоретической базе обмена данными. В основе любого механизма синхронизации в платформе 1С лежит объект метаданных ПланОбмена. В планах обмена регистрируются так называемые «узлы», которые соответствуют базам-корреспондентам. Когда пользователь создает, изменяет или удаляет любой документ или элемент справочника, платформа автоматически или программно фиксирует этот факт. Происходит авторегистрация изменений для конкретного узла обмена. Это можно представить как формирование очереди документов, готовых к отправке.

Обработка «Регистрация изменений для обмена данными» — это визуальный пульт управления этой очередью. Рассмотрим основные задачи, которые мы можем решать с ее помощью:

  1. Визуальный контроль очереди выгрузки: Мы можем наглядно увидеть, какие именно объекты (документы, справочники, бизнес-процессы, записи регистров) подготовлены к отправке в базу-приемник и в каком количестве.
  2. Ручная регистрация объектов: Если нам требуется принудительно выгрузить конкретный документ, справочник или даже всю базу за определенный период, мы можем сделать это вручную, минуя стандартные триггеры авторегистрации.
  3. Снятие объектов с регистрации (очистка очереди): Бывают ситуации, когда из-за программной ошибки или неверной первоначальной настройки в очередь обмена попадают сотни тысяч устаревших документов. Если запустить обмен в этот момент, система зависнет, пытаясь сформировать гигантский файл. С помощью обработки мы можем легко очистить всю очередь или её часть за пару кликов.
  4. Корректировка номеров сообщений: Процесс обмена строго контролирует последовательность пакетов. Каждому отправленному и принятому сообщению присваивается уникальный номер. Если базы восстанавливались из резервных копий, номера сообщений могут «рассинхронизироваться», из-за чего обмен заблокируется популярной ошибкой несоответствия номеров сообщений. Данная обработка позволяет вручную сбросить или скорректировать эти номера на узле.

Решаем проблему «Мастер настройки еще не закончил свою настройку»

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

Выясним причину этой ошибки. БСП хранит состояние настройки обмена в специальном служебном регистре сведений. Если мастер настройки был аварийно завершен, закрыт пользователем до появления финального окна с успешным результатом или узлы обмена создавались вручную напрямую в конфигураторе, признак завершения настройки останется в значении «Ложь». Из-за этого стандартная кнопка запуска синхронизации будет заблокирована.

Разберем пошагово, как решить эту проблему в обход интерфейса через редактирование параметров системы:

  1. Перейдем в режим технического специалиста. Для этого откроем главное меню программы, выберем раздел Настройки, затем перейдем в Параметры и установим флажок Режим технического специалиста (в более ранних версиях платформы этот режим назывался «Все функции»).
  2. В открывшемся окне функций перейдем к разделу Регистры сведений.
  3. Найдем в списке регистр сведений под названием ОбщиеНастройкиУзловИнформационныхБаз и откроем его.
  4. В списке записей найдем строку, соответствующую нашему проблемному узлу обмена (базе-корреспонденту), и откроем ее для редактирования.
  5. Найдем реквизит НастройкаЗавершена (или аналогичный флаг состояния настройки) и принудительно установим его в значение Истина (поставим галочку).
  6. Запишем и закроем запись регистра.

После выполнения этих простых действий блокировка БСП будет успешно снята, и кнопка запуска синхронизации станет активной.

Инструкция: как протестировать обмен на одном документе

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

  1. Открытие обработки: Перейдем в раздел Администрирование, далее выберем пункт Синхронизация данных и перейдем в Настройки синхронизации данных. Выделим нашу настройку обмена и нажмем кнопку Состав отправляемых данных (обычно эта кнопка имеет пиктограмму в виде двух синих квадратиков на панели инструментов). Перед нами откроется дерево объектов метаданных с указанием количества зарегистрированных изменений.
  2. Полная очистка очереди отправки: Чтобы результаты нашего теста были максимально чистыми и в файл выгрузки не попали другие объекты, нам необходимо очистить всю текущую авторегистрацию. Для этого выделим самый верхний корневой элемент дерева (название самого плана обмена), кликнем правой кнопкой мыши и выберем команду Отменить регистрацию изменений всех объектов. Система запросит подтверждение — соглашаемся. Теперь счетчики зарегистрированных изменений по всем типам метаданных должны обнулиться.
  3. Регистрация тестового документа: Нам нужно выбрать конкретный документ, правильность переноса которого мы хотим проверить. В дереве метаданных обработки найдем нужный тип документа (например, РеализацияТоваровУслуг). Кликнем по нему правой кнопкой мыши и выберем команду Зарегистрировать -> Одиночный объект. В открывшейся форме списка выберем один конкретный проведенный документ и нажмем кнопку «Выбрать». Обратим внимание, что напротив выбранного типа документа в дереве обработки появится счетчик со значением «1». Это значит, что к обмену подготовлен ровно один этот документ.
  4. Запуск выгрузки данных: Закроем окно обработки регистрации изменений. Вернемся в форму настроек синхронизации данных и нажмем кнопку Синхронизировать. Программа сформирует пакет данных, содержащий исключительно наш зарегистрированный тестовый документ, и отправит его в канал связи (или сохранит в файл каталога обмена).
  5. Загрузка и проверка в базе-приемнике: Перейдем в базу-приемник и запустим там процесс синхронизации для приема данных. После завершения сеанса найдем перенесенный документ в списке. Тщательно проверим заполнение всех реквизитов шапки, табличной части, корректность переноса контрагентов, номенклатуры, договоров и проведение документа. Если все данные перенеслись корректно, тестовый обмен можно считать успешно выполненным!

Внутреннее устройство механизма регистрации изменений на уровне базы данных

Для более глубокого понимания рассмотрим, как платформа 1С реализует этот механизм изнутри. Когда мы включаем авторегистрацию для какого-либо объекта в составе плана обмена, СУБД создает специальную вспомогательную таблицу регистрации изменений (в терминах SQL-сервера она обычно имеет суффикс _ChngR). В эту таблицу записываются ссылки на измененные объекты и ссылки на узлы планов обмена, для которых эти изменения актуальны.

Каждый раз, когда выполняется транзакция записи объекта (например, проведение документа), платформа автоматически делает запись в соответствующую таблицу _ChngR. Обработка «Регистрация изменений» считывает данные именно из этих таблиц. Если мы принудительно очищаем регистрацию, платформа выполняет SQL-запрос на удаление записей из этих служебных таблиц, что мгновенно снижает нагрузку на базу данных при последующей выгрузке.

Программное управление регистрацией изменений в 1С

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


// Определим узел обмена, для которого нужно зарегистрировать изменения
УзелАдресат = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("001");

Если Не УзелАдресат.Пустая() Тогда
    // Зарегистрируем один конкретный документ для отправки
    ДокументСсылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("УТ-00001", ТекущаяДата());
    Если ЗначениеЗаполнено(ДокументСсылка) Тогда
        ПланыОбмена.ЗарегистрироватьИзменения(УзелАдресат, ДокументСсылка);
        ЗаписьЖурналаРегистрации("ОбменДанными.Регистрация", УровеньЖурналаРегистрации.Информация, , , "Документ зарегистрирован вручную.");
    КонецЕсли;
КонецЕсли;

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


// Отмена регистрации изменений для всех документов реализации по выбранному узлу
ПланыОбмена.УдалитьРегистрациюИзменений(УзелАдресат, ОписаниеТиповДокумента);

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

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

← На главную