Синхронизация данных между конфигурациями 1С:Управление торговлей (УТ 11) и 1С:Бухгалтерия предприятия (БП 3.0) по протоколу EnterpriseData (универсальный формат) — стандартный, но часто сбоящий механизм, особенно если одна из баз обновлена до актуального релиза, а вторая осталась на старой или существенно доработанной версии. Типичным симптомом такого рассинхронизационного конфликта является ошибка при чтении документов реализации:
Не найдено ПКО с именем ВидыЭД_Реализация_Получение
В этой статье мы подробно разберем, почему возникает данная коллизия, проанализируем внутренние механизмы XDTO-обмена и рассмотрим несколько эффективных способов решения проблемы — от простых настроек в пользовательском интерфейсе до разработки безопасных расширений конфигурации.
Для начала выясним причину сбоя. Обмен в формате EnterpriseData опирается на так называемые ПКО (Правила конвертации объектов) и ПОО (Правила обработки объектов). Эти правила жестко зашиты в общих модулях конфигураций (прежде всего, в модуле МенеджерОбменаЧерезУниверсальныйФормат).
Когда выгрузка происходит из более старой версии УТ 11, конфигурация формирует XML-пакет, в который помещает данные документа «Реализация товаров и услуг» (РТУ). Вместе с реквизитами самого документа УТ пытается передать сопутствующие сведения, касающиеся ЭДО (Электронного документооборота), используя правило конвертации свойств с типом перечисления ВидыЭД.
Принимающая сторона (актуальная версия БП 3.0) считывает этот файл. Но в ее новом релизе разработчики 1С переработали подсистему ЭДО, удалив, переименовав или перенеся правила конвертации для ВидыЭД в другие программные модули. В итоге БП получает XML-узел, требующий обработки по правилу ВидыЭД_Реализация_Получение, обращается к своему менеджеру обмена, не находит там зарегистрированного правила с таким именем и прерывает транзакцию загрузки с ошибкой.
Ниже мы подробно разберем пять способов устранения этой ошибки, ранжированных по уровню безопасности и сложности реализации.
Самый простой и безопасный способ, который часто упускают из виду. При инициализации обмена базы «договариваются» между собой о том, какую версию формата обмена использовать (например, ED 1.5, 1.6, 1.8, 1.15 и т. д.). По умолчанию система стремится использовать самую свежую версию из доступных в обеих базах.
Если мы принудительно укажем обмену использовать более старую версию формата, в которой свойства ЭДО для реализации еще не передавались (или обрабатывались по старым совместимым алгоритмам), ошибка исчезнет сама собой.
Выполним следующие шаги для настройки:
Примечание: Понижение версии формата может слегка ограничить передачу некоторых новых специфических реквизитов, добавленных в последних релизах, но базовые реквизиты документов реализации (контрагент, договор, табличная часть, суммы, ставки НДС) перенесутся без потерь.
Если понижение версии формата не помогло или недопустимо из-за требований бизнеса, нам придется решить проблему программно. Но вносить изменения напрямую в конфигурацию БП (снимать с поддержки) крайне не рекомендуется — это усложнит процесс ее последующего обновления.
Мы применим механизм Расширений конфигурации и создадим «заглушку» для несуществующего правила конвертации на стороне приемника (в БП).
Проанализируем структуру инициализации правил в модуле МенеджерОбменаЧерезУниверсальныйФормат. В нем присутствует процедура, регистрирующая ПКО, например ЗаполнитьПравилаКонвертацииОбъектов. Нам нужно перехватить этот метод и добавить виртуальное правило с требуемым именем, чтобы система при чтении XML-файла не выбрасывала исключение.
Рассмотрим пример реализации в расширении БП:
МенеджерОбменаЧерезУниверсальныйФормат (или соответствующую его версию, используемую в обмене, например МенеджерОбменаЧерезУниверсальныйФормат13).&После для метода регистрации правил:
&После("ЗаполнитьПравилаКонвертацииОбъектов")
Процедура Расш_ЗаполнитьПравилаКонвертацииОбъектов(ПравилаКонвертации)
// Проверим, зарегистрировано ли уже ПКО с проблемным именем
Если ПравилаКонвертации.Найти("ВидыЭД_Реализация_Получение") = Неопределено Тогда
// Создаем заглушку ПКО, чтобы БП не выдавала ошибку при разборе XML
НовоеПКО = ПравилаКонвертации.Добавить();
НовоеПКО.Имя = "ВидыЭД_Реализация_Получение";
НовоеПКО.ИмяТипаДанныхИсточник = "СправочникСсылка.ВидыЭД"; // Или соответствующий тип источника
НовоеПКО.ИмяТипаДанныхПриемник = "ПеречислениеСсылка.ВидыЭД";
НовоеПКО.ОтказПриСинхронизацииСвойств = Истина; // Указываем системе игнорировать конвертацию свойств
КонецЕсли;
КонецПроцедуры
Благодаря этому коду, когда принимающий механизм БП встретит в файле обмена указание обработать узел по правилу ВидыЭД_Реализация_Получение, он успешно найдет зарегистрированное в нашем расширении правило-пустышку, проигнорирует внутренние свойства этого узла (так как установлен флаг ОтказПриСинхронизацииСвойств) и продолжит загрузку документа РТУ без критических ошибок.
Мы также можем решить проблему на стороне источника — в конфигурации 1С:Управление торговлей, полностью запретив выгрузку свойств, отвечающих за ЭДО для документа «Реализация товаров и услуг».
Для этого выполним следующие действия:
МенеджерОбменаЧерезУниверсальныйФормат.ПередВыгрузкой_Документ_РеализацияТоваровУслуг_Отправка или аналогичный метод регистрации свойств в ПКО Документ_РеализацияТоваровУслуг_Отправка.ЭлектронныйДокумент или аналогичный), и закомментировать его инициализацию либо принудительно очистить это свойство перед отправкой.Пример программного отключения выгрузки свойства в расширении УТ:
&После("ПередВыгрузкой_Документ_РеализацияТоваровУслуг_Отправка")
Процедура Расш_ПередВыгрузкой_Документ_РеализацияТоваровУслуг_Отправка(ДанныеИБ, СобственнаяВыгрузка, СвойстваКомпоновки)
// Если в структуре свойств присутствует ссылка на правила конвертации ЭДО,
// удаляем ее или отключаем выгрузку данных свойств
Если СвойстваКомпоновки.Свойства.Свойство("ЭлектронныйДокумент") Тогда
СвойстваКомпоновки.Свойства.Удалить("ЭлектронныйДокумент");
КонецЕсли;
КонецПроцедуры
Таким образом, УТ просто перестанет помещать проблемные теги в выгружаемый XML-файл, и БП примет документ без лишних вопросов.
Если вы хотите сделать все максимально профессионально и сохранить полную поддержку структуры формата EnterpriseData, рекомендуется использовать специализированный инструмент от 1С — конфигурацию Конвертация данных 3.0 (КД 3).
Рассмотрим этот процесс по шагам:
ВыгрузкаПравилОбменаСводная (она входит в состав дистрибутива КД 3.0).Документ_РеализацияТоваровУслуг_Отправка (в правилах УТ) и проанализируем вкладку «Конвертация свойств».ВидыЭД_Реализация_Получение, и удалим это сопоставление либо изменим ПКО для этого свойства на корректное (актуальное для вашей БП).МенеджерОбменаЧерезУниверсальныйФормат.Иногда ошибка возникает локально из-за того, что в УТ к отправке ошибочно зарегистрировались не только сами накладные, но и специфические служебные объекты ЭДО, которые БП физически не может переварить.
Выполним оперативную очистку очереди регистрации обмена:
СостояниеВыгрузкиДокументовЭДО, ЭлектронныеДокументы и т.п.), нажмем по ним правой кнопкой мыши и выберем пункт Отменить регистрацию всех объектов этого типа.Реализация товаров и услуг.В большинстве случаев ручная очистка «мусорной» регистрации позволяет успешно завершить обмен без необходимости править программный код конфигураций.