К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как в 1С указать код выполняемой функции

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

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

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

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

Где в 1С встречается код выполняемой функции

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

Второе — регламентные и фоновые задания (в конфигураторе: «Конфигурация» → «Общие» → «Регламентные задания»), где в свойстве «Имя метода» указывается процедура общего серверного модуля. Третье — внешние печатные формы и обработчики событий в старших редакциях конфигураций, где обработчик задается строкой. Четвертое — настройки обменов и интеграций, где имя функции-обработчика прописывается в параметрах подключения.

Как указать функцию в дополнительных отчетах и обработках

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

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

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

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();

ПараметрыРегистрации.Версия = "1.0";

Команда = ПараметрыРегистрации.Команды.Добавить();

Команда.Представление = "Заполнить цены по правилу";

Команда.Идентификатор = "ЗаполнитьЦеныПоПравилу";

Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

Возврат ПараметрыРегистрации;

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

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения = Неопределено) Экспорт

Если ИдентификаторКоманды = "ЗаполнитьЦеныПоПравилу" Тогда

// здесь код выполняемой функции

КонецЕсли;

КонецПроцедуры

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

Порядок действий
  1. 1
    Включите функциональную опцию «Дополнительные отчеты и обработки» в разделе «Администрирование»
  2. 2
    Напишите в модуле обработки функцию СведенияОВнешнейОбработке с таблицей команд и идентификаторами
  3. 3
    Добавьте экспортную процедуру ВыполнитьКоманду с ветвлением по идентификатору
  4. 4
    Загрузите обработку в справочник «Дополнительные отчеты и обработки» и проверьте список команд
  5. 5
    Выполните команду из интерфейса и убедитесь, что срабатывает нужная ветка кода

Как указать имя метода в регламентном задании

В конфигураторе откройте ветку «Общие» → «Регламентные задания», создайте новое задание или откройте существующее. В палитре свойств найдите поле «Имя метода» — в него вписывается имя процедуры в формате ИмяОбщегоМодуля.ИмяПроцедуры, например ОбменССайтом.ВыполнитьВыгрузкуЗаказов.

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

Проверить корректность без ожидания расписания можно через консоль заданий или временно запустив метод из внешней обработки вызовом ОбщегоНазначения.ВыполнитьМетодКонфигурации — в отладке удобнее видеть стек ошибки.

bsl
Процедура ВыполнитьВыгрузкуЗаказов() Экспорт
    ЗаписьЖурналаРегистрации("ОбменССайтом", УровеньЖурналаРегистрации.Информация,,, "Старт выгрузки");
    // прикладной код
КонецПроцедуры

Как задать обработчик во внешних печатных формах и обработчиках событий

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

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

Проверка результата и отладка

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

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

Контрольные точки

Как проверить результат

Выполнение команды из интерфейса
Норма

Команда отрабатывает, в журнале регистрации есть отметка о старте

Тревожный признак

Ошибка «Метод объекта не обнаружен» или тишина без результата

Совпадение идентификатора
Норма

Строка в настройке посимвольно равна имени процедуры или значению в ветвлении

Тревожный признак

Различия в регистре, пробелах, опечатки

Сигнатура процедуры
Норма

Процедура экспортная, число параметров соответствует вызову

Тревожный признак

Ошибка «Несоответствие числа параметров»

Типичные ошибки и ограничения

Самая распространенная ошибка — опечатка в идентификаторе: в настройке «ЗаполнитьЦены», а в модуле «ЗаполнитьЦену». Вторая по частоте — процедура без ключевого слова Экспорт: внутри модуля она видна, извне — нет. Третья — размещение метода в модуле с неподходящими флагами компиляции (например, клиентский модуль для серверного вызова).

Отдельный риск — безопасный режим. Дополнительные обработки в типовых конфигурациях выполняются в безопасном режиме, где запрещены операции с файловой системой, COM-объектами и внешними компонентами. Если функция требует таких операций, потребуется либо профиль безопасности, либо перенос логики в расширение конфигурации.

Типичные ошибки
01
Опечатка или лишний пробел в идентификаторе команды — вызов уходит в пустую ветку и ничего не выполняется
02
Отсутствие ключевого слова Экспорт у процедуры — ошибка «Метод не обнаружен» при внешнем вызове
03
Метод регламентного задания размещен в клиентском или не серверном общем модуле — задание падает при запуске
04
Имя метода регламентного задания указано без имени общего модуля — платформа не находит процедуру
05
Попытка работы с файлами из дополнительной обработки в безопасном режиме — исключение по правам

Альтернативы: расширение конфигурации

Если код функции должен быть частью прикладной логики, а не внешней обработкой, правильнее использовать расширение конфигурации. В расширении процедуры размещаются в общих модулях или заимствованных модулях объектов, вызываются напрямую по имени и не требуют строковых идентификаторов — ошибка несовпадения имен исключается проверкой компиляции.

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

Сравнение вариантов

Дополнительная обработка (БСП)

Подходит для печатных форм, заполнения и разовых операций; требует точного совпадения идентификатора команды; работает в безопасном режиме

Регламентное задание

Для периодических серверных операций; имя метода указывается как ОбщийМодуль.Процедура; только серверные общие модули

Расширение конфигурации

Для постоянной логики; вызов по имени без строковых кодов; требует аккуратности при обновлении конфигурации

Итог

Что важно запомнить

Код выполняемой функции — это строковое имя процедуры, которое должно посимвольно совпадать с реальным методом. В дополнительных обработках это идентификатор команды, в регламентных заданиях — имя метода в формате Модуль.Процедура. Процедура должна быть экспортной, в подходящем модуле и с корректной сигнатурой; проверяйте вызов через журнал регистрации.

Частые вопросы

Что писать в поле «Код выполняемой функции», если процедура в модуле объекта обработки?

Укажите имя процедуры так, как оно объявлено в модуле, без параметров и скобок. Если механизм требует полного пути (как регламентные задания), используйте формат «ИмяМодуля.ИмяПроцедуры». Процедура обязательно должна быть экспортной.

Почему возникает ошибка «Метод объекта не обнаружен»?

Почти всегда причина в несовпадении строки-идентификатора с реальным именем процедуры: опечатка, лишний пробел, другой регистр. Реже — процедура не экспортная или находится в модуле, недоступном в том контексте выполнения (клиентском вместо серверного).

Можно ли указать функцию с параметрами?

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

Где посмотреть, какой идентификатор у команды уже загруженной обработки?

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

Чем регламентное задание отличается от дополнительной обработки по указанию функции?

В регламентном задании имя метода указывается напрямую в конфигураторе в формате «ОбщийМодуль.Процедура» и вызывается по расписанию на сервере. В дополнительной обработке идентификатор команды задается внутри самой обработки и срабатывает по действию пользователя или по расписанию, настроенному в справочнике.

Безопасно ли запускать внешнюю обработку с неизвестным кодом функции?

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