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