При синхронизации данных между конфигурациями «Управление торговлей 11.5» (или «Комплексная автоматизация 2.5») и «Бухгалтерия предприятия 3.0» может возникать ошибка при выгрузке документов, содержащих номенклатуру с указанным импортером. Система сообщает, что у контрагента-импортера не заполнены обязательные поля, такие как «Наименование» или «ЮридическоеФизическоеЛицо», хотя в справочнике все данные внесены корректно. Рассмотрим, почему возникает эта ошибка и как ее исправить.
Текст ошибки обычно выглядит так:
Не удалось выполнить конвертацию в объект формата "Справочник.Номенклатура":
Справочник.Номенклатура
Импортер
Наименование: не заполнено обязательное поле.
ЮридическоеФизическоеЛицо: не заполнено обязательное поле.
Эта проблема была признана фирмой "1С" и зарегистрирована под кодом ошибки 000167756. Давайте проанализируем ситуацию и разберем несколько способов решения.
Проблема кроется не в том, что данные в справочнике «Контрагенты» действительно отсутствуют. Причина в механизме регистрации объектов к обмену. Начиная с версии формата обмена 1.17, в правила была добавлена передача реквизита «Импортер» для номенклатуры.
Когда вы выгружаете документ, например «Приобретение товаров и услуг», система регистрирует к обмену сам документ и связанную с ним номенклатуру. Однако сам объект контрагента-импортера по какой-то причине не всегда регистрируется к выгрузке целиком, со всеми его реквизитами. В результате в файл обмена попадает только ссылка на импортера. Подобные сложности с неполной передачей реквизитов часто встречаются и в других задачах, таких как миграция контрагентов с сегментами между различными версиями систем.
На стороне базы-приемника («Бухгалтерия предприятия») система пытается по этой ссылке создать или обновить контрагента, но не находит в полученных данных обязательных полей (наименования, вида лица и т.д.). Это и приводит к сбою и появлению сообщения об ошибке.
Этим объясняется, почему при ручном добавлении проблемной номенклатуры в регистр сведений Данные объектов для регистрации в обменах синхронизация может пройти успешно: в этом случае вы принудительно регистрируете объект со всеми его зависимостями, и данные о контрагенте-импортере выгружаются полностью.
Самый правильный и надежный способ решения проблемы — обновить конфигурации УТ/КА и БП, а также правила обмена до актуальных версий. В последующих релизах фирма "1С" исправила данную ошибку, и синхронизация проходит корректно без дополнительных манипуляций.
Если по каким-либо причинам обновление в данный момент невозможно, рассмотрим альтернативные варианты.
Это техническое решение подходит, если вы не можете обновиться, но хотите наладить автоматический обмен. Оно заключается в том, чтобы программно запретить выгрузку реквизита «Импортер». Важно понимать, что в этом случае данные об импортере не будут переноситься в «Бухгалтерию предприятия».
Чтобы не снимать конфигурацию с поддержки, все изменения будем вносить через расширение. Разберем по шагам, как это сделать:
МенеджерОбменаЧерезУниверсальныйФормат и добавьте его в расширение (заимствуйте).
ПКО_Справочник_Номенклатура_Отправка. В обсуждаемом случае это процедура КА2_ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных. Создадим для нее обработчик с аннотацией &ИзменениеИКонтроль.
Посмотрим на пример кода, который необходимо модифицировать. Ваша задача — создать в расширении процедуру-обработчик и оставить ее пустой или закомментировать проблемный участок, если вы копируете всю процедуру.
Пример реализации в расширении:
&ИзменениеИКонтроль("ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных")
Процедура Префикс_ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки, Отказ)
// Исходный код процедуры может содержать примерно следующий блок:
/*
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.17")
И ЗначениеЗаполнено(ДанныеИБ.ПроизводительИмпортерКонтрагент) Тогда
ДанныеXDTO.Вставить("Импортер", ДанныеИБ.ПроизводительИмпортерКонтрагент);
КонецЕсли;
*/
// Поскольку мы хотим ОТМЕНИТЬ это действие, мы либо оставляем процедуру-обработчик пустой,
// либо явно управляем выгрузкой других полей, пропуская импортера.
Отказ = Истина; // Отменяем стандартный обработчик
// ... прочий код выгрузки реквизитов ...
// Блок с импортером ПРОПУСКАЕМ
// ... прочий код выгрузки реквизитов ...
КонецПроцедуры
Самый простой вариант, предложенный на форуме, — это найти этот фрагмент кода и удалить или закомментировать его. Если вы используете аннотацию &Вместо, то скопируйте весь текст исходной процедуры в расширение и удалите строки, связанные с выгрузкой импортера. После сохранения расширения и перезапуска сеанса 1С синхронизация должна пройти без ошибок.
Если предыдущие варианты не подходят, можно воспользоваться временными решениями для разовой выгрузки документов.
Данные объектов для регистрации в обменах. Вручную добавьте в него запись для проблемного элемента справочника «Номенклатура». Если стандартные механизмы дают сбой, некоторые специалисты используют альтернативные правила обмена для универсального обмена данными или сторонние инструменты.Подведем итог: столкнувшись с ошибкой выгрузки импортера, в первую очередь проверьте наличие обновлений для ваших конфигураций. В отличие от старых систем, где требовались специфические правила конвертации для обмена с 1С:БП ред.3.0, современные конфигурации на платформе 8.3 чаще требуют обновления или точечных исправлений через расширения. Ручные методы стоит рассматривать лишь как временную меру.