При настройке обмена данными между конфигурациями 1С, например, между Бухгалтерией предприятия (БП) и ERP Управление предприятием, разработчики часто сталкиваются с ошибками на этапе загрузки объектов. Одной из самых коварных является ошибка «Несоответствие типов (параметр номер 1)», возникающая в момент записи набора записей регистра сведений. Рассмотрим причины её появления и способы устранения.
Проанализируем ситуацию: при запуске синхронизации (например, справочника «Валюты») система прерывает процесс с ошибкой. В журнале регистрации или в окне обмена выводится следующий текст:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
Несоответствие типов (параметр номер '1')
{РегистрСведений.СоответствияОбъектовИнформационныхБаз.МодульНабораЗаписей(40)}: ОбменДанными.Получатели.Добавить(Отбор.УзелИнформационнойБазы.Значение);
Разберем, что происходит в этот момент. Механизм обмена на базе Библиотеки стандартных подсистем (БСП) пытается сохранить информацию о соответствии объекта в источнике и приемнике. Это необходимо, чтобы при следующем обмене система «узнала» объект и не создала дубль. Для этого используется служебный регистр СоответствияОбъектовИнформационныхБаз.
Ошибка возникает в методе Добавить() коллекции Получатели. Этот метод жестко типизирован. Он ожидает ссылку на узел плана обмена, который официально связан с данным объектом метаданных. Если регистр не включен в состав плана обмена, платформа не понимает, почему мы пытаемся добавить узел этого плана обмена в список получателей для данного регистра, и выдает «Несоответствие типов».
Выясним причину сомнений многих разработчиков: виновата ли версия Конвертации данных (КД)? В процессе обсуждения часто возникает вопрос, не является ли использование КД 2.1 устаревшим для современных конфигураций. На самом деле, ошибка не связана напрямую с правилами конвертации (файлом XML). Проблема кроется в настройках самой конфигурации, а именно в объекте План обмена.
Когда мы создаем свой план обмена или модифицируем типовой, мы должны четко определить, какие данные будут «гулять» через этот план. Если мы забываем включить туда технические регистры, БСП, следуя своей внутренней логике, все равно пытается записать в них данные, но стандартные механизмы платформы по регистрации изменений блокируют это действие из-за нарушения типизации.
Рассмотрим подробнее процедуру исправления ошибки в конфигураторе. Нам необходимо убедиться, что технический регистр включен в состав используемого плана обмена.
СоответствияОбъектовИнформационныхБаз.Проанализируем, почему важна настройка авторегистрации. Регистр СоответствияОбъектовИнформационныхБаз является служебным. Если оставить авторегистрацию включенной, то при каждой записи соответствия (а это происходит при каждом обмене для каждого объекта) система будет помечать саму эту запись как «изменение», которое нужно отправить обратно. Это может вызвать бесконечный цикл регистрации технических данных и резкое замедление обмена.
Разберем ситуацию шире. Помимо регистра соответствий, для стабильной работы синхронизации через БСП в состав плана обмена часто требуется включить и другие объекты. Если вы создаете новый план обмена, проверьте наличие следующих метаданных в его составе:
РегистрСведений.СоответствияОбъектовИнформационныхБаз — хранит связи UID.РегистрСведений.ПубличныеИдентификаторыОбъектов — если используется формат EnterpriseData.РегистрСведений.УдалениеОбъектов — для корректной передачи информации об удаленных элементах.РегистрСведений.СубъектыДляРегистрацииДанных — используется для оптимизации процессов выгрузки.Посмотрим на пример кода, который вызывал падение в модуле набора записей регистра:
Процедура ПередЗаписью(Отказ, Замещение)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Ошибка возникала здесь, так как тип узла в Отборе
// не соответствовал типам, разрешенным для состава плана обмена
Узел = Отбор.УзелИнформационнойБазы.Значение;
ОбменДанными.Получатели.Добавить(Узел);
КонецПроцедуры
После добавления регистра в состав плана обмена, платформа «разрешает» методу Добавить() принимать узел этого типа, и ошибка исчезает.
После внесения изменений в конфигурацию выполните следующие действия:
Как показывает практика, после включения СоответствияОбъектовИнформационныхБаз в состав, объект (в нашем случае справочник Валюты) записывается успешно, и транзакция обмена завершается без ошибок. Этот метод является универсальным для любых обменов, построенных на правилах конвертации внутри БСП.
Мы выяснили, что ошибка «Несоответствие типов» в контексте обмена данными чаще всего сигнализирует о неполном составе плана обмена. Платформа 1С строго следит за тем, чтобы объекты регистрировались только в тех планах обмена, к которым они приписаны. Своевременное добавление служебных регистров БСП в состав — залог стабильной работы распределенных информационных систем.