При настройке нетипового обмена данными между старыми конфигурациями на обычных формах (например, Управление торговлей, редакция 10.3) и современными конфигурациями на управляемых формах (например, Бухгалтерия предприятия, редакция 3.0) разработчики часто сталкиваются со специфическими ошибками. Одна из самых распространенных и неочевидных проблем — падение процесса выгрузки с диагностическим сообщением вида Метод объекта не обнаружен (ПКГС_...) при обработке табличных частей документов.
В этой статье мы подробно разберем, почему возникает данная ошибка, в чем разница работы обработчиков в разных режимах совместимости Библиотеки стандартных подсистем (БСП) и как правильно настроить правила в конфигурации «Конвертация данных 2.1», чтобы решить проблему раз и навсегда.
Проанализируем классическую ситуацию. Разработчик настраивает правила обмена в конфигурации «Конвертация данных 2.1». При этом в обработчик события «Перед обработкой» группы свойств (например, табличной части «Товары») пишется произвольный код на встроенном языке 1С. При попытке выполнить обмен в журнале регистрации базы-источника (УТ 10.3) фиксируется следующая ошибка:
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(9754)}: Ошибка в обработчике события ПередОбработкойВыгрузки группы свойств
ПКО = СчетНаОплатуПокупателю (Документ: Заказ покупателя)
ПКГС = 23 (--> Товары)
Объект = Заказ покупателя УТ000000130 от 28.07.2020 16:23:24 (Документ объект: Заказ покупателя)
Обработчик = ПередОбработкойВыгрузкиГруппыСвойств
ОписаниеОшибки = Метод объекта не обнаружен (ПКГС_СчетНаОплатуПокупателю_Товары_ПередОбработкойВыгрузки_23_22)
ПозицияМодуля = (1)
Обратите внимание на имя неопределенного метода: ПКГС_СчетНаОплатуПокупателю_Товары_ПередОбработкойВыгрузки_23_22. Это динамически генерируемое имя процедуры. Откуда оно берется и почему система не может его найти?
Дело в том, что в современных версиях БСП (начиная с версии 2.1 и выше) механизмы интеграции и выполнения правил обмена были оптимизированы. Вместо классического, но медленного и небезопасного выполнения произвольного кода «на лету» через оператор Выполнить(), БСП компилирует все обработчики событий из файла правил во временный модуль. Каждому обработчику сопоставляется уникальная процедура или функция.
Однако конфигурация Управление торговлей 10.3 базируется на старой архитектуре. Встроенная в нее обработка обмена (КонвертацияОбъектовИнформационныхБаз) попросту «не умеет» динамически компилировать эти методы при использовании правил, адаптированных под стандарты БСП 2.1. Она пытается выполнить вызов процедуры по ее имени, но так как процедура физически отсутствует в памяти, система выбрасывает исключение.
Многие разработчики замечают странную особенность: если запустить выгрузку вручную через внешнюю обработку УниверсальныйОбменДаннымиXML, обмен проходит без единой ошибки. Почему так происходит?
Всё очень просто. Обработка УниверсальныйОбменДаннымиXML работает в обход механизмов БСП. Она считывает XML-файл правил обмена напрямую и выполняет код ваших обработчиков классическим способом через системную функцию Выполнить(ТекстОбработчика). В этом случае компиляция процедур с именами ПКГС_... не инициируется, и ошибка не воспроизводится.
Но как только мы загружаем эти же правила в узел плана обмена для автоматической синхронизации, за дело принимаются встроенные механизмы БСП, и выгрузка завершается аварийно.
Если вам необходимо срочно запустить обмен и проверить его работоспособность, можно прибегнуть к ручной правке сгенерированного XML-файла правил обмена. Разберем этот процесс по шагам:
ПравилаОбмена.xml) в любом текстовом редакторе (например, Notepad++ или VS Code).ВерсияФормата. Вы увидите примерно следующую строку:
<ВерсияФормата РежимСовместимости="РежимСовместимостиСБСП21">2.01</ВерсияФормата>
РежимСовместимости с версии 2.1 на версию 2.0. Строка должна принять следующий вид:
<ВерсияФормата РежимСовместимости="РежимСовместимостиСБСП20">2.01</ВерсияФормата>
После этой несложной манипуляции обработчик обмена в УТ 10.3 поймет, что правила оптимизированы под стандарт БСП 2.0, и будет выполнять обработчики событий стандартным совместимым методом, не требующим динамической компиляции функций.
Ручная правка XML-файла — это временный костыль. При первой же повторной выгрузке правил из базы «Конвертация данных» ваши изменения затрутся, и ошибка вернется. Рассмотрим, как правильно настроить этот параметр непосредственно в источнике правил.
Чтобы лучше понимать архитектуру интеграции решений 1С, давайте кратко проанализируем разницу между основными режимами совместимости, которые предлагает нам КД 2.1:
Выполнить(). Идеально для старых конфигураций и обмена через обработку УниверсальныйОбменДаннымиXML.Используя эти знания, вы сможете легко диагностировать и предотвращать подобные ошибки еще на этапе проектирования схем обмена данными.