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