Как исправить ошибку «Не найдено ПКО с именем ВидыЭД_Реализация_Получение» при синхронизации БП 3.0 и УТ 11

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

Синхронизация данных между конфигурациями 1С:Управление торговлей (УТ 11) и 1С:Бухгалтерия предприятия (БП 3.0) по протоколу EnterpriseData (универсальный формат) — стандартный, но часто сбоящий механизм, особенно если одна из баз обновлена до актуального релиза, а вторая осталась на старой или существенно доработанной версии. Типичным симптомом такого рассинхронизационного конфликта является ошибка при чтении документов реализации:

Не найдено ПКО с именем ВидыЭД_Реализация_Получение

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

Почему возникает эта ошибка?

Для начала выясним причину сбоя. Обмен в формате EnterpriseData опирается на так называемые ПКО (Правила конвертации объектов) и ПОО (Правила обработки объектов). Эти правила жестко зашиты в общих модулях конфигураций (прежде всего, в модуле МенеджерОбменаЧерезУниверсальныйФормат).

Когда выгрузка происходит из более старой версии УТ 11, конфигурация формирует XML-пакет, в который помещает данные документа «Реализация товаров и услуг» (РТУ). Вместе с реквизитами самого документа УТ пытается передать сопутствующие сведения, касающиеся ЭДО (Электронного документооборота), используя правило конвертации свойств с типом перечисления ВидыЭД.

Принимающая сторона (актуальная версия БП 3.0) считывает этот файл. Но в ее новом релизе разработчики 1С переработали подсистему ЭДО, удалив, переименовав или перенеся правила конвертации для ВидыЭД в другие программные модули. В итоге БП получает XML-узел, требующий обработки по правилу ВидыЭД_Реализация_Получение, обращается к своему менеджеру обмена, не находит там зарегистрированного правила с таким именем и прерывает транзакцию загрузки с ошибкой.

Ниже мы подробно разберем пять способов устранения этой ошибки, ранжированных по уровню безопасности и сложности реализации.


Способ 1. Принудительное понижение версии формата EnterpriseData (без программирования)

Самый простой и безопасный способ, который часто упускают из виду. При инициализации обмена базы «договариваются» между собой о том, какую версию формата обмена использовать (например, ED 1.5, 1.6, 1.8, 1.15 и т. д.). По умолчанию система стремится использовать самую свежую версию из доступных в обеих базах.

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

Выполним следующие шаги для настройки:

  1. Перейдем в базу 1С:Управление торговлей.
  2. Откроем раздел Администрирование — Синхронизация данных — Настройки синхронизации данных.
  3. Откроем свойства нашей настройки обмена с БП.
  4. Найдем параметр Версия формата обмена (в некоторых релизах этот выбор доступен в форме изменения параметров подключения или по кнопке «Еще» — «Параметры конвертации»).
  5. Установим версию формата ниже текущей (например, вместо 1.8 или 1.15 выберем 1.5 или 1.6).
  6. Сохраним настройки и выполним повторную выгрузку данных из УТ и загрузку в БП.

Примечание: Понижение версии формата может слегка ограничить передачу некоторых новых специфических реквизитов, добавленных в последних релизах, но базовые реквизиты документов реализации (контрагент, договор, табличная часть, суммы, ставки НДС) перенесутся без потерь.


Способ 2. Создание ПКО-заглушки в БП через расширение конфигурации (рекомендуемый для программистов)

Если понижение версии формата не помогло или недопустимо из-за требований бизнеса, нам придется решить проблему программно. Но вносить изменения напрямую в конфигурацию БП (снимать с поддержки) крайне не рекомендуется — это усложнит процесс ее последующего обновления.

Мы применим механизм Расширений конфигурации и создадим «заглушку» для несуществующего правила конвертации на стороне приемника (в БП).

Проанализируем структуру инициализации правил в модуле МенеджерОбменаЧерезУниверсальныйФормат. В нем присутствует процедура, регистрирующая ПКО, например ЗаполнитьПравилаКонвертацииОбъектов. Нам нужно перехватить этот метод и добавить виртуальное правило с требуемым именем, чтобы система при чтении XML-файла не выбрасывала исключение.

Рассмотрим пример реализации в расширении БП:

  1. Создадим новое расширение в БП и подключим его в режиме «Активно».
  2. Добавим в расширение общий модуль МенеджерОбменаЧерезУниверсальныйФормат (или соответствующую его версию, используемую в обмене, например МенеджерОбменаЧерезУниверсальныйФормат13).
  3. Создадим процедуру-перехватчик с аннотацией &После для метода регистрации правил:

&После("ЗаполнитьПравилаКонвертацииОбъектов")
Процедура Расш_ЗаполнитьПравилаКонвертацииОбъектов(ПравилаКонвертации)
    
    // Проверим, зарегистрировано ли уже ПКО с проблемным именем
    Если ПравилаКонвертации.Найти("ВидыЭД_Реализация_Получение") = Неопределено Тогда
        
        // Создаем заглушку ПКО, чтобы БП не выдавала ошибку при разборе XML
        НовоеПКО = ПравилаКонвертации.Добавить();
        НовоеПКО.Имя = "ВидыЭД_Реализация_Получение";
        НовоеПКО.ИмяТипаДанныхИсточник = "СправочникСсылка.ВидыЭД"; // Или соответствующий тип источника
        НовоеПКО.ИмяТипаДанныхПриемник = "ПеречислениеСсылка.ВидыЭД"; 
        НовоеПКО.ОтказПриСинхронизацииСвойств = Истина; // Указываем системе игнорировать конвертацию свойств
        
    КонецЕсли;
    
КонецПроцедуры

Благодаря этому коду, когда принимающий механизм БП встретит в файле обмена указание обработать узел по правилу ВидыЭД_Реализация_Получение, он успешно найдет зарегистрированное в нашем расширении правило-пустышку, проигнорирует внутренние свойства этого узла (так как установлен флаг ОтказПриСинхронизацииСвойств) и продолжит загрузку документа РТУ без критических ошибок.


Способ 3. Отключение выгрузки свойств ЭДО на стороне УТ (через расширение УТ)

Мы также можем решить проблему на стороне источника — в конфигурации 1С:Управление торговлей, полностью запретив выгрузку свойств, отвечающих за ЭДО для документа «Реализация товаров и услуг».

Для этого выполним следующие действия:

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

Пример программного отключения выгрузки свойства в расширении УТ:


&После("ПередВыгрузкой_Документ_РеализацияТоваровУслуг_Отправка")
Процедура Расш_ПередВыгрузкой_Документ_РеализацияТоваровУслуг_Отправка(ДанныеИБ, СобственнаяВыгрузка, СвойстваКомпоновки)
    
    // Если в структуре свойств присутствует ссылка на правила конвертации ЭДО, 
    // удаляем ее или отключаем выгрузку данных свойств
    Если СвойстваКомпоновки.Свойства.Свойство("ЭлектронныйДокумент") Тогда
        СвойстваКомпоновки.Свойства.Удалить("ЭлектронныйДокумент");
    КонецЕсли;
    
КонецПроцедуры

Таким образом, УТ просто перестанет помещать проблемные теги в выгружаемый XML-файл, и БП примет документ без лишних вопросов.


Способ 4. Корректировка правил через конфигурацию «1С:Конвертация данных 3.0»

Если вы хотите сделать все максимально профессионально и сохранить полную поддержку структуры формата EnterpriseData, рекомендуется использовать специализированный инструмент от 1С — конфигурацию Конвертация данных 3.0 (КД 3).

Рассмотрим этот процесс по шагам:

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

Способ 5. Очистка регистрации служебных объектов ЭДО (быстрое решение «здесь и сейчас»)

Иногда ошибка возникает локально из-за того, что в УТ к отправке ошибочно зарегистрировались не только сами накладные, но и специфические служебные объекты ЭДО, которые БП физически не может переварить.

Выполним оперативную очистку очереди регистрации обмена:

  1. В 1С:Управление торговлей откроем обработку Регистрация изменений для обмена данными (ее можно открыть через функции для технического специалиста или из карточки настройки синхронизации, нажав на иконку «Состав отправляемых данных»).
  2. Внимательно изучим дерево зарегистрированных объектов.
  3. Если мы увидим в списке зарегистрированных к отправке объектов служебные справочники или документы, связанные с ЭДО (например, СостояниеВыгрузкиДокументовЭДО, ЭлектронныеДокументы и т.п.), нажмем по ним правой кнопкой мыши и выберем пункт Отменить регистрацию всех объектов этого типа.
  4. Оставим к отправке только физические документы Реализация товаров и услуг.
  5. Запустим синхронизацию заново.

В большинстве случаев ручная очистка «мусорной» регистрации позволяет успешно завершить обмен без необходимости править программный код конфигураций.

← На главную