Как исправить ошибку «Не найдено правило конвертации объектов» при одностороннем обмене между ERP и ЗУП?

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

При настройке синхронизации данных между конфигурациями 1С:ERP Управление предприятием и 1С:Зарплата и управление персоналом (ЗУП) специалисты часто сталкиваются с проблемой «обратного потока». Даже если обмен задуман как односторонний (например, только из ERP в ЗУП), принимающая сторона может попытаться отправить ответный файл. Если в этом файле оказываются зарегистрированные объекты, для которых не описаны правила конвертации, система выдает критическую ошибку. Рассмотрим подробно, почему это происходит и как правильно настроить «пустышку» для обмена.

Анализ причины возникновения ошибки

Разберем ситуацию: из ERP выгружается документ ОперацияНалоговогоУчетаПоНДФЛ. В базе ЗУП этот документ успешно принимается. Однако при завершении сеанса синхронизации ЗУП пытается сформировать ответное сообщение (квитанцию о приеме и пакет своих данных). Если в плане обмена на стороне ЗУП по какой-то причине оказались зарегистрированы изменения объектов (например, пользователь случайно нажал «Зарегистрировать все» или сработала авторегистрация), движок обмена начнет искать правила конвертации (ПКО) для этих объектов.

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

Не найдено правило конвертации объектов. ТипОбъекта = Документ объект: Операция учета НДФЛ.

Это означает, что в XML-файле правил, загруженном в ЗУП, секция ПравилаКонвертацииОбъектов пуста или не содержит правила для указанного типа документа. Движок обмена (особенно построенный на базе БСП и Конвертации данных 2.0) не может игнорировать зарегистрированный объект, если для него нет инструкции по выгрузке, и аварийно завершает работу.

Решение 1: Принудительная очистка регистрации изменений

Самый простой и логичный способ решить проблему «зависшей» выгрузки в одностороннем обмене — это удалить регистрацию изменений в базе-приемнике. Если таблица изменений для конкретного узла обмена будет пуста, ЗУП отправит пустой файл («пустышку»), содержащий только номер принятого сообщения, и ошибка исчезнет.

Выполним следующие шаги:

  1. Откроем форму Регистрация изменений для обмена (она доступна в меню «Администрирование — Синхронизация данных» или через функции для технического специалиста), также можно использовать внешние инструменты для удаления объектов к выгрузке.
  2. Выберем нужный узел плана обмена.
  3. Проверим список зарегистрированных объектов. Если там видны документы типа ОперацияНалоговогоУчетаПоНДФЛ, их необходимо разрегистрировать.
  4. Нажмем правой кнопкой мыши на типе объекта и выберем Отменить регистрацию всех объектов данного типа.

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

Решение 2: Создание «фиктивных» правил в Конвертации данных 2.0

Если мы хотим гарантировать стабильную работу обмена, даже если регистрация объектов произойдет снова, нам нужно отредактировать правила обмена (XML-файл) в конфигурации Конвертация данных 2.0. Нам нужно создать так называемую «заглушку».

Рассмотрим алгоритм настройки ПКО:

  1. Загрузим структуру метаданных ЗУП и ERP в базу КД 2.0.
  2. Создадим новое Правило конвертации объекта (ПКО).
  3. В поле Источник укажем ДокументСсылка.ОперацияНалоговогоУчетаПоНДФЛ.
  4. В поле Приемник оставим значение Пусто (или укажем тот же тип, если планируется сопоставление).
  5. Главный секрет: в обработчике события Перед выгрузкой пропишем следующий код:

Отказ = Истина;

Проанализируем, что это дает: движок обмена находит правило для объекта, начинает процедуру выгрузки, но сразу же получает команду на отказ. Объект не попадает в файл, но при этом помечается как «обработанный», и регистрация с него снимается автоматически. Это предотвращает циклическое появление ошибки.

Решение 3: Программное управление выгрузкой через модуль Плана обмена

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

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


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

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

Решение 4: Настройка правил регистрации (ПРД)

Еще одним правильным подходом является использование Правил регистрации данных (ПРД). В современных конфигурациях на базе БСП за регистрацию отвечают отдельные XML-правила. Если мы настроим ПРД так, чтобы для плана обмена в ЗУП вообще не была разрешена регистрация документов, то объекты не будут попадать в очередь выгрузки.

Рассмотрим шаги настройки:

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

Итоги и рекомендации

Подводя итоги, отметим: ошибка «Не найдено правило конвертации» — это всегда следствие рассинхронизации между составом данных в очереди обмена и составом инструкций в XML-файле правил.

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

← На главную