Как исправить ошибку «Метод объекта не обнаружен (ВыполнитьКоманду)» при добавлении внешней обработки в 1С

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

При интеграции дополнительных отчетов и обработок в типовые конфигурации 1С (такие как 1С:Зарплата и управление персоналом, 1С:Бухгалтерия или 1С:ERP), работающие на базе Библиотеки стандартных подсистем (БСП), разработчики часто сталкиваются с ошибкой: «Команда [ИмяКоманды] не выполнена: Метод объекта не обнаружен (ВыполнитьКоманду)». Выясним причину возникновения этой проблемы и разберем по шагам, как правильно ее устранить.

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

Давайте проанализируем ситуацию. Когда мы регистрируем внешнюю обработку в справочнике «Дополнительные отчеты и обработки», система считывает параметры из экспортной функции СведенияОВнешнейОбработке. В этой функции для каждой команды указывается способ ее выполнения — так называемый тип запуска (колонка Использование таблицы команд).

Если для команды указан тип запуска ВызовСерверногоМетода (или в устаревших вариантах кода просто строка "ВызовСерверногоМетода"), это сигнализирует системе о том, что выполнение логики должно происходить на стороне сервера без открытия формы обработки. Для этого БСП ищет в Модуле объекта этой внешней обработки специальную экспортную процедуру с именем ВыполнитьКоманду. Если такой процедуры в модуле объекта нет или она объявлена без ключевого слова Экспорт, платформа выдает ошибку: «Метод объекта не обнаружен (ВыполнитьКоманду)».

Рассмотрим подробнее два основных способа решения этой проблемы: добавление необходимого серверного метода и переход на открытие интерактивной формы.


Решение 1: Добавление экспортной процедуры ВыполнитьКоманду в модуль объекта

Если вашей обработке не требуется открывать форму для взаимодействия с пользователем (например, это фоновая выгрузка данных по расписанию или автоматическое заполнение документов), вам действительно необходим фоновый вызов серверного метода. Чтобы все заработало корректно, нам нужно добавить обработчик этой команды. В качестве основы можно использовать шаблон внешней обработки на БСП с фоновым выполнением команд.

Выполним следующие шаги:

  1. Откройте вашу внешнюю обработку (файл .epf) в конфигураторе.
  2. Перейдите в Модуль объекта внешней обработки (не в модуль формы!). Для этого нажмите правой кнопкой мыши по корню обработки в дереве метаданных и выберите «Открыть модуль объекта».
  3. Добавьте в самый конец модуля следующий шаблон кода:

// Процедура - обработчик команд, вызываемых на сервере
//
// Параметры:
//  ИдентификаторКоманды - Строка - Идентификатор выполняемой команды.
//  ПараметрыВыполненияКоманды - Структура - Контекст выполнения (содержит ссылку на саму обработку и др.).
//
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
    
    Если ИдентификаторКоманды = "Выгрузка" Тогда
        ВыполнитьВыгрузкуДанных();
    КонецЕсли;
    
КонецПроцедуры

Процедура ВыполнитьВыгрузкуДанных()
    // Здесь размещается основная бизнес-логика вашей обработки.
    // Например, сбор данных из базы и формирование файла.
КонецПроцедуры

Важный нюанс: Обратите внимание, что процедура ВыполнитьКоманду обязательно должна содержать ключевое слово Экспорт. Внутри нее мы анализируем параметр ИдентификаторКоманды, значение которого должно в точности совпадать с тем идентификатором, который вы указали при регистрации команды в функции СведенияОВнешнейОбработке.


Решение 2: Перевод команды в режим открытия формы

Посмотрим на пример, когда логика обработки требует от пользователя каких-то интерактивных действий перед запуском (например, нужно выбрать период, указать организацию на форме или вручную выбрать каталог для сохранения файла). В таком случае вызывать серверный метод «вслепую» нельзя — пользователю нужно показать форму.

Для этого нам нужно перерегистрировать команду, изменив тип ее запуска на открытие формы. Давайте разберем, как изменить функцию регистрации:

  1. Откройте модуль объекта внешней обработки.
  2. Найдите функцию СведенияОВнешнейОбработке.
  3. Найдите строку добавления команды. Вместо типа запуска ВызовСерверногоМетода укажите ОткрытиеФормы.

Ниже приведем современный шаблон регистрации обработки, соответствующий стандартам БСП:


Функция СведенияОВнешнейОбработке() Экспорт

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

КонецФункции

При использовании типа команды ТипКомандыОткрытиеФормы() система при нажатии кнопки в интерфейсе просто откроет основную форму вашей обработки. В этом сценарии процедура ВыполнитьКоманду в модуле объекта больше не требуется. Для практической реализации такого сценария подойдёт пример разработки внешней обработки БСП с запуском через открытие формы.


Обратите внимание: безопасный режим и файловая система

Проанализируем еще один подводный камень, который часто возникает сразу после исправления ошибки с методом объекта. Это работа в безопасном режиме.

Если в коде регистрации вашей обработки указано:

ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);

то платформа накладывает жесткие ограничения на выполнение программного кода. В безопасном режиме вашей внешней обработке будет запрещено:

Поскольку обработка автора называется «ВыгрузкаЗП», она с высокой долей вероятности формирует и сохраняет файл на диск. Чтобы при записи файла не возникло новой ошибки, связанной с нарушением прав безопасности, установите свойство безопасного режима в значение Ложь:

ПараметрыРегистрации.БезопасныйРежим = Ложь;

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

← На главную