Как правильно вызывать алгоритмы в 1С:Конвертация данных 2.0 и исправить ошибку Метод объекта не обнаружен

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе с инструментом «1С:Конвертация данных 2.0» (КД 2.0) разработчики часто сталкиваются с необходимостью вынести повторяющийся код в отдельные алгоритмы. Это позволяет соблюдать принцип DRY (Don't Repeat Yourself) и упрощает поддержку правил обмена. Однако начинающие специалисты часто совершают синтаксическую ошибку при попытке вызвать созданный алгоритм, что приводит к остановке выгрузки и ошибке выполнения кода. Разберем подробно, почему возникает ошибка Метод объекта не обнаружен и как правильно организовать работу с алгоритмами. Для этой задачи есть регулярный обмен данными по правилам КД 2.0.

Выясняем причину ошибки при вызове алгоритма

Проанализируем ситуацию: разработчик создал алгоритм с именем ОбработкаТабличнойЧасти и пытается вызвать его в обработчике «Перед выгрузкой» следующим образом:


Выполнить(Алгоритмы.ОбработкаТабличнойЧасти());

В результате система выдает ошибку: Метод объекта не обнаружен (ОбработкаТабличнойЧасти). Почему это происходит? Дело в том, что в КД 2.0 коллекция Алгоритмы не является набором методов или функций в привычном понимании встроенного языка 1С. Каждый алгоритм, созданный в справочнике «Алгоритмы», хранится как текстовая строка кода. Когда мы обращаемся к Алгоритмы.ИмяАлгоритма, мы получаем именно эту строку текста.

Используя скобки (), вы пытаетесь вызвать функцию объекта, которой не существует. Для корректного исполнения кода необходимо передать саму строку алгоритма в системную функцию Выполнить() (при написании которой пригодится редактор кода для КД 2). Правильный синтаксис выглядит так:


Выполнить(Алгоритмы.ОбработкаТабличнойЧасти);

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

Рассмотрим механизм передачи параметров в алгоритмы

Поскольку алгоритмы в КД 2.0 не являются полноценными процедурами, у них нельзя описать формальные параметры. Тем не менее, передача данных внутрь алгоритма жизненно необходима. Разберем, как это реализовать на практике.

1. Использование контекста текущего обработчика. Вызов Выполнить() исполняет код «здесь и сейчас». Это значит, что алгоритму доступны все локальные переменные, которые определены в месте вызова. Например, если вы вызываете алгоритм из ПКО (Правила конвертации объектов), внутри него будут доступны:

2. Передача собственных параметров через переменные. Если вам нужно передать специфическое значение, просто определите переменную перед вызовом алгоритма:


// В обработчике ПКО
МойДополнительныйПараметр = "СпецЗначение";
Выполнить(Алгоритмы.ОбработкаТЧ);

Внутри алгоритма ОбработкаТЧ (проверить наличие нужных свойств поможет обозреватель правил конвертации свойств) вы сможете напрямую обратиться к переменной МойДополнительныйПараметр.

Проанализируем контекстную зависимость

Важно понимать, что универсальность алгоритма ограничена контекстом его вызова. Проанализируем типичную ошибку: вы создали алгоритм, который обращается к переменной Источник.Номер. Если вы вызовете его из обработчика «Перед выгрузкой данных» (глобального), возникнет ошибка, так как там нет переменной Источник.

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

  1. алг_ПКО_... — если алгоритм предназначен только для правил конвертации объектов;
  2. алг_ПВД_... — для правил выгрузки данных (включая работу с составом плана обмена);
  3. алг_Глобальный_... — если код не зависит от контекста объекта. Такие стандарты поддерживает усовершенствованный редактор правил обмена.

Разберем способы отладки алгоритмов

Отладка кода внутри Выполнить() — задача непростая, так как обычные точки останова в конфигураторе не сработают. Посмотрим, какие инструменты у нас есть:

  1. Вывод сообщений. Самый простой способ — использование функции Сообщить(). Выводите значения ключевых переменных в окно сообщений, чтобы отследить логику выполнения.
  2. Использование модуля отладки. В обработке «Универсальный обмен данными в формате XML» есть возможность выгрузить модуль отладки. При этом алгоритмы КД превращаются в реальные процедуры в текстовом файле. Вы можете вставить этот код во внешнюю обработку и использовать стандартный отладчик 1С. Для этой задачи есть автоматизация запуска обмена через XML-правила КД 2.
  3. Проверка на пустые значения. Всегда проверяйте наличие данных перед обработкой, чтобы алгоритм не «падал» при неожиданных данных. Используйте конструкции:
    
    Если Источник <> Неопределено Тогда
        // Ваша логика
    КонецЕсли;
    

Особенности использования флага Отказ

Если внутри алгоритма, вызванного из обработчика «Перед выгрузкой», вы установите Отказ = Истина;, это корректно прервет выгрузку всего объекта. Это очень удобно для централизованной проверки условий. Например, создадим алгоритм алг_ПроверкаДаты:


Если Источник.Дата < '20230101' Тогда
    Отказ = Истина;
    Сообщить("Объект " + Источник + " слишком старый для выгрузки!");
КонецЕсли;

Теперь достаточно вызвать Выполнить(Алгоритмы.алг_ПроверкаДаты); в нескольких ПКО, и логика фильтрации будет работать везде одинаково.

Взгляд в будущее: КД 2.0 против КД 3.0

Стоит отметить, что в «Конвертации данных 3.0» подход к алгоритмам кардинально изменился. В новой версии обмен строится на базе XDTO и универсального формата данных. Логика переносится в модули менеджеров обмена внутри самих конфигураций. Механизм Выполнить(Алгоритмы...) там практически не применяется. Если вы планируете переход на современные конфигурации (ERP 2, УТ 11, БП 3), учитывайте, что навыки написания «строковых» алгоритмов в КД 2.0 могут не пригодиться, так как там требуется знание «чистого» 1С в общих модулях.

Подведем итог: для успешного использования алгоритмов в КД 2.0 помните о правильном синтаксисе без скобок, следите за контекстом переменных и не ленитесь заглядывать во встроенную справку КД — она содержит множество полезных примеров, которые уберегут вас от подобных ошибок.

← На главную