Ошибка синхронизации УТ 11.5 и БП 3.0: не заполнены обязательные поля у импортера

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

При синхронизации данных между конфигурациями «Управление торговлей 11.5» (или «Комплексная автоматизация 2.5») и «Бухгалтерия предприятия 3.0» может возникать ошибка при выгрузке документов, содержащих номенклатуру с указанным импортером. Система сообщает, что у контрагента-импортера не заполнены обязательные поля, такие как «Наименование» или «ЮридическоеФизическоеЛицо», хотя в справочнике все данные внесены корректно. Рассмотрим, почему возникает эта ошибка и как ее исправить.

Текст ошибки обычно выглядит так:


Не удалось выполнить конвертацию в объект формата "Справочник.Номенклатура": 
Справочник.Номенклатура
  Импортер
    Наименование: не заполнено обязательное поле.
    ЮридическоеФизическоеЛицо: не заполнено обязательное поле.

Эта проблема была признана фирмой "1С" и зарегистрирована под кодом ошибки 000167756. Давайте проанализируем ситуацию и разберем несколько способов решения.

Причина возникновения ошибки

Проблема кроется не в том, что данные в справочнике «Контрагенты» действительно отсутствуют. Причина в механизме регистрации объектов к обмену. Начиная с версии формата обмена 1.17, в правила была добавлена передача реквизита «Импортер» для номенклатуры.

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

На стороне базы-приемника («Бухгалтерия предприятия») система пытается по этой ссылке создать или обновить контрагента, но не находит в полученных данных обязательных полей (наименования, вида лица и т.д.). Это и приводит к сбою и появлению сообщения об ошибке.

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

Решение 1. Обновление конфигурации (рекомендуемый способ)

Самый правильный и надежный способ решения проблемы — обновить конфигурации УТ/КА и БП, а также правила обмена до актуальных версий. В последующих релизах фирма "1С" исправила данную ошибку, и синхронизация проходит корректно без дополнительных манипуляций.

Если по каким-либо причинам обновление в данный момент невозможно, рассмотрим альтернативные варианты.

Решение 2. Отключение выгрузки импортера через расширение

Это техническое решение подходит, если вы не можете обновиться, но хотите наладить автоматический обмен. Оно заключается в том, чтобы программно запретить выгрузку реквизита «Импортер». Важно понимать, что в этом случае данные об импортере не будут переноситься в «Бухгалтерию предприятия».

Чтобы не снимать конфигурацию с поддержки, все изменения будем вносить через расширение. Разберем по шагам, как это сделать:

  1. Создайте новое расширение. В конфигураторе базы-источника (УТ или КА) создайте новое пустое расширение. Назначьте ему префикс и понятное имя, например, «ОтключениеВыгрузкиИмпортера». Снимите флажок «Безопасный режим». Для обеспечения стабильности системы на этом этапе полезно провести анализ состава расширений и конфигурации на наличие ошибок.
  2. Заимствуйте объект. Найдите в дереве конфигурации общий модуль МенеджерОбменаЧерезУниверсальныйФормат и добавьте его в расширение (заимствуйте).
  3. Создайте обработчик события. В заимствованном модуле найдите процедуру, отвечающую за выгрузку данных номенклатуры. Ее название может немного отличаться в зависимости от конфигурации, но обычно оно содержит ПКО_Справочник_Номенклатура_Отправка. В обсуждаемом случае это процедура КА2_ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных. Создадим для нее обработчик с аннотацией &ИзменениеИКонтроль.
  4. Измените код выгрузки. В созданной процедуре необходимо найти блок кода, который добавляет данные об импортере в выгружаемый пакет XDTO, и закомментировать его.

Посмотрим на пример кода, который необходимо модифицировать. Ваша задача — создать в расширении процедуру-обработчик и оставить ее пустой или закомментировать проблемный участок, если вы копируете всю процедуру.

Пример реализации в расширении:


&ИзменениеИКонтроль("ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных")
Процедура Префикс_ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки, Отказ)

    // Исходный код процедуры может содержать примерно следующий блок:
    /*
    Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.17")
        И ЗначениеЗаполнено(ДанныеИБ.ПроизводительИмпортерКонтрагент) Тогда
        
        ДанныеXDTO.Вставить("Импортер", ДанныеИБ.ПроизводительИмпортерКонтрагент);
        
    КонецЕсли;
    */
    
    // Поскольку мы хотим ОТМЕНИТЬ это действие, мы либо оставляем процедуру-обработчик пустой,
    // либо явно управляем выгрузкой других полей, пропуская импортера.
    
    Отказ = Истина; // Отменяем стандартный обработчик
    
    // ... прочий код выгрузки реквизитов ...
    // Блок с импортером ПРОПУСКАЕМ
    // ... прочий код выгрузки реквизитов ...

КонецПроцедуры

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

Решение 3. Временные и ручные способы

Если предыдущие варианты не подходят, можно воспользоваться временными решениями для разовой выгрузки документов.

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

← На главную