Как исправить ошибку «Несоответствие типов (параметр номер 1)» при синхронизации данных между БП и ERP

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

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

Анализ технической проблемы и стека вызовов

Проанализируем ситуацию: при запуске синхронизации (например, справочника «Валюты») система прерывает процесс с ошибкой. В журнале регистрации или в окне обмена выводится следующий текст:


Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
Несоответствие типов (параметр номер '1')
{РегистрСведений.СоответствияОбъектовИнформационныхБаз.МодульНабораЗаписей(40)}: ОбменДанными.Получатели.Добавить(Отбор.УзелИнформационнойБазы.Значение);

Разберем, что происходит в этот момент. Механизм обмена на базе Библиотеки стандартных подсистем (БСП) пытается сохранить информацию о соответствии объекта в источнике и приемнике. Это необходимо, чтобы при следующем обмене система «узнала» объект и не создала дубль. Для этого используется служебный регистр СоответствияОбъектовИнформационныхБаз.

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

Почему это происходит при использовании Конвертации данных 2.1

Выясним причину сомнений многих разработчиков: виновата ли версия Конвертации данных (КД)? В процессе обсуждения часто возникает вопрос, не является ли использование КД 2.1 устаревшим для современных конфигураций. На самом деле, ошибка не связана напрямую с правилами конвертации (файлом XML). Проблема кроется в настройках самой конфигурации, а именно в объекте План обмена.

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

Пошаговое решение проблемы

Рассмотрим подробнее процедуру исправления ошибки в конфигураторе. Нам необходимо убедиться, что технический регистр включен в состав используемого плана обмена.

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

Проанализируем, почему важна настройка авторегистрации. Регистр СоответствияОбъектовИнформационныхБаз является служебным. Если оставить авторегистрацию включенной, то при каждой записи соответствия (а это происходит при каждом обмене для каждого объекта) система будет помечать саму эту запись как «изменение», которое нужно отправить обратно. Это может вызвать бесконечный цикл регистрации технических данных и резкое замедление обмена.

Дополнительные объекты, которые должны быть в составе

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

Посмотрим на пример кода, который вызывал падение в модуле набора записей регистра:


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

После добавления регистра в состав плана обмена, платформа «разрешает» методу Добавить() принимать узел этого типа, и ошибка исчезает.

Проверка результата

После внесения изменений в конфигурацию выполните следующие действия:

  1. Обновите конфигурацию базы данных (F7).
  2. Если обмен идет между двумя базами (БП и ERP), рекомендуется проверить состав плана обмена в обеих конфигурациях. Даже если обмен односторонний, принимающая сторона должна уметь записывать соответствия.
  3. Запустите синхронизацию повторно.

Как показывает практика, после включения СоответствияОбъектовИнформационныхБаз в состав, объект (в нашем случае справочник Валюты) записывается успешно, и транзакция обмена завершается без ошибок. Этот метод является универсальным для любых обменов, построенных на правилах конвертации внутри БСП.

Резюме

Мы выяснили, что ошибка «Несоответствие типов» в контексте обмена данными чаще всего сигнализирует о неполном составе плана обмена. Платформа 1С строго следит за тем, чтобы объекты регистрировались только в тех планах обмена, к которым они приписаны. Своевременное добавление служебных регистров БСП в состав — залог стабильной работы распределенных информационных систем.

← На главную