Разработка и Конфигурация · 11 мин
Как в 1С указать код выполняемой функции
Где в 1С указывается код выполняемой функции: дополнительные обработки, печатные формы, регламентные задания. Пошаговые действия, примеры кода и типичные ошибки.
Поле «Код выполняемой функции» (в разных конфигурациях оно может называться «Идентификатор команды», «Имя метода» или «Обработчик») встречается в 1С там, где программа должна по заданному имени найти и запустить вашу процедуру: в дополнительных отчетах и обработках, внешних печатных формах, регламентных заданиях и настройках обменов. Ошибка в этом поле — одна из самых частых причин сообщений вида «Метод объекта не обнаружен» или «Обработчик не найден».
Суть механизма проста: вы пишете в модуле процедуру или функцию с определенным именем, а в настройке указываете это же имя строкой. При наступлении события платформа выполняет Выполнить или вызывает метод по имени. Если строка не совпадает с реальным именем процедуры — символ в символ, с учетом регистра в некоторых случаях, — вызов завершится ошибкой.
Ниже разобраны основные сценарии: где именно указывается код функции в типовых конфигурациях на базе БСП (УТ 11, ERP, КА, ЗУП, Бухгалтерия 3.0), как оформить саму процедуру в модуле, как проверить результат и какие ошибки встречаются чаще всего.
Где в 1С встречается код выполняемой функции
Чаще всего с этим полем сталкиваются в четырех местах. Первое — справочник «Дополнительные отчеты и обработки» (раздел «Администрирование» → «Печатные формы, отчеты и обработки»), где для каждой команды внешней обработки задается идентификатор, который передается в процедуру ВыполнитьКоманду модуля обработки.
Второе — регламентные и фоновые задания (в конфигураторе: «Конфигурация» → «Общие» → «Регламентные задания»), где в свойстве «Имя метода» указывается процедура общего серверного модуля. Третье — внешние печатные формы и обработчики событий в старших редакциях конфигураций, где обработчик задается строкой. Четвертое — настройки обменов и интеграций, где имя функции-обработчика прописывается в параметрах подключения.
Как указать функцию в дополнительных отчетах и обработках
Откройте «Администрирование» → «Печатные формы, отчеты и обработки» → «Дополнительные отчеты и обработки». Если пункт недоступен, включите одноименную функциональную опцию в том же разделе. Создайте новый элемент и загрузите файл внешней обработки (.epf) или отчета (.erf) — программа считает сведения из функции СведенияОВнешнейОбработке модуля обработки.
Именно в этой функции задается связка «команда — код функции». В таблицу команд добавляется строка, где колонка «Идентификатор» — это и есть тот код, который при выполнении команды передается в параметрах процедуры-обработчика. Пример оформления модуля обработки:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0";
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Заполнить цены по правилу";
Команда.Идентификатор = "ЗаполнитьЦеныПоПравилу";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Возврат ПараметрыРегистрации;
КонецФункции
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения = Неопределено) Экспорт
Если ИдентификаторКоманды = "ЗаполнитьЦеныПоПравилу" Тогда
// здесь код выполняемой функции
КонецЕсли;
КонецПроцедуры
Обратите внимание: строка в поле «Идентификатор» и строка в сравнении внутри ВыполнитьКоманду должны совпадать полностью. Если команд несколько, каждая получает свой идентификатор, а внутри процедуры выполняется ветвление по нему.
- 1Включите функциональную опцию «Дополнительные отчеты и обработки» в разделе «Администрирование»
- 2Напишите в модуле обработки функцию СведенияОВнешнейОбработке с таблицей команд и идентификаторами
- 3Добавьте экспортную процедуру ВыполнитьКоманду с ветвлением по идентификатору
- 4Загрузите обработку в справочник «Дополнительные отчеты и обработки» и проверьте список команд
- 5Выполните команду из интерфейса и убедитесь, что срабатывает нужная ветка кода
Как указать имя метода в регламентном задании
В конфигураторе откройте ветку «Общие» → «Регламентные задания», создайте новое задание или откройте существующее. В палитре свойств найдите поле «Имя метода» — в него вписывается имя процедуры в формате ИмяОбщегоМодуля.ИмяПроцедуры, например ОбменССайтом.ВыполнитьВыгрузкуЗаказов.
К процедуре предъявляются жесткие требования: она должна быть экспортной, располагаться в общем модуле с установленным флагом «Сервер» и не иметь параметров (либо параметры должны быть необязательными). Если модуль не серверный или процедура не экспортная, задание будет падать с ошибкой «Метод не обнаружен» уже при первом запуске.
Проверить корректность без ожидания расписания можно через консоль заданий или временно запустив метод из внешней обработки вызовом ОбщегоНазначения.ВыполнитьМетодКонфигурации — в отладке удобнее видеть стек ошибки.
Процедура ВыполнитьВыгрузкуЗаказов() Экспорт
ЗаписьЖурналаРегистрации("ОбменССайтом", УровеньЖурналаРегистрации.Информация,,, "Старт выгрузки");
// прикладной код
КонецПроцедурыКак задать обработчик во внешних печатных формах и обработчиках событий
Во внешних печатных формах кодом выполняемой функции фактически является идентификатор команды печати из СведенияОВнешнейОбработке (вид «ПечатнаяФорма»). При вызове команды платформа передает в процедуру Печать модуля обработки идентификатор макета и массив объектов — по идентификатору выбирается нужный макет и алгоритм заполнения.
В механизмах подписок на события и обработчиков, настраиваемых в режиме предприятия (например, в конфигурациях с расширенной настройкой интеграций), имя функции указывается строкой в соответствующем поле настройки. Правило то же: строка должна совпадать с именем экспортной функции в указанном модуле, а сама функция — принимать те параметры, которые передает вызывающий механизм. Несовпадение сигнатуры приводит к ошибке «Несоответствие числа параметров».
Проверка результата и отладка
Простейший способ убедиться, что код функции указан верно, — временно добавить в начало процедуры запись в журнал регистрации или вывод сообщения, выполнить команду и проверить, появилась ли отметка. Если записи нет, вызов не дошел до процедуры: ищите рассинхронизацию идентификаторов.
Для фоновых и регламентных механизмов смотрите журнал регистрации (отбор по событию с ошибкой) и консоль заданий: там видны текст ошибки и имя метода, который система пыталась вызвать. Сравните это имя с реальным именем процедуры посимвольно — лишний пробел или другой регистр букв в строке сравнения уже ломают вызов.
Как проверить результат
Команда отрабатывает, в журнале регистрации есть отметка о старте
Ошибка «Метод объекта не обнаружен» или тишина без результата
Строка в настройке посимвольно равна имени процедуры или значению в ветвлении
Различия в регистре, пробелах, опечатки
Процедура экспортная, число параметров соответствует вызову
Ошибка «Несоответствие числа параметров»
Типичные ошибки и ограничения
Самая распространенная ошибка — опечатка в идентификаторе: в настройке «ЗаполнитьЦены», а в модуле «ЗаполнитьЦену». Вторая по частоте — процедура без ключевого слова Экспорт: внутри модуля она видна, извне — нет. Третья — размещение метода в модуле с неподходящими флагами компиляции (например, клиентский модуль для серверного вызова).
Отдельный риск — безопасный режим. Дополнительные обработки в типовых конфигурациях выполняются в безопасном режиме, где запрещены операции с файловой системой, COM-объектами и внешними компонентами. Если функция требует таких операций, потребуется либо профиль безопасности, либо перенос логики в расширение конфигурации.
Альтернативы: расширение конфигурации
Если код функции должен быть частью прикладной логики, а не внешней обработкой, правильнее использовать расширение конфигурации. В расширении процедуры размещаются в общих модулях или заимствованных модулях объектов, вызываются напрямую по имени и не требуют строковых идентификаторов — ошибка несовпадения имен исключается проверкой компиляции.
Выбор простой: разовая пользовательская операция, печатная форма или заполнение — дополнительная обработка с идентификатором команды; постоянная бизнес-логика, доработка типовых документов — расширение. Смешивать подходы в одной задаче не стоит: поддержка усложняется.
Сравнение вариантов
Подходит для печатных форм, заполнения и разовых операций; требует точного совпадения идентификатора команды; работает в безопасном режиме
Для периодических серверных операций; имя метода указывается как ОбщийМодуль.Процедура; только серверные общие модули
Для постоянной логики; вызов по имени без строковых кодов; требует аккуратности при обновлении конфигурации
Что важно запомнить
Код выполняемой функции — это строковое имя процедуры, которое должно посимвольно совпадать с реальным методом. В дополнительных обработках это идентификатор команды, в регламентных заданиях — имя метода в формате Модуль.Процедура. Процедура должна быть экспортной, в подходящем модуле и с корректной сигнатурой; проверяйте вызов через журнал регистрации.
Частые вопросы
Что писать в поле «Код выполняемой функции», если процедура в модуле объекта обработки?
Укажите имя процедуры так, как оно объявлено в модуле, без параметров и скобок. Если механизм требует полного пути (как регламентные задания), используйте формат «ИмяМодуля.ИмяПроцедуры». Процедура обязательно должна быть экспортной.
Почему возникает ошибка «Метод объекта не обнаружен»?
Почти всегда причина в несовпадении строки-идентификатора с реальным именем процедуры: опечатка, лишний пробел, другой регистр. Реже — процедура не экспортная или находится в модуле, недоступном в том контексте выполнения (клиентском вместо серверного).
Можно ли указать функцию с параметрами?
Зависит от механизма. Регламентные задания требуют процедуру без обязательных параметров. В дополнительных обработках БСП параметры передает сама платформа (идентификатор команды, объекты назначения) — ваша процедура должна принимать именно их. Произвольные параметры передать через строковый код нельзя.
Где посмотреть, какой идентификатор у команды уже загруженной обработки?
Откройте элемент справочника «Дополнительные отчеты и обработки» — список команд с идентификаторами выводится в таблице «Команды». Те же данные можно увидеть в функции СведенияОВнешнейОбработке в модуле файла обработки, открыв его через конфигуратор.
Чем регламентное задание отличается от дополнительной обработки по указанию функции?
В регламентном задании имя метода указывается напрямую в конфигураторе в формате «ОбщийМодуль.Процедура» и вызывается по расписанию на сервере. В дополнительной обработке идентификатор команды задается внутри самой обработки и срабатывает по действию пользователя или по расписанию, настроенному в справочнике.
Безопасно ли запускать внешнюю обработку с неизвестным кодом функции?
Нет. Внешняя обработка выполняется с правами запустившего пользователя и вне безопасного режима может читать и изменять данные базы, обращаться к файлам и сети. Перед загрузкой изучите код модуля в конфигураторе и протестируйте на копии информационной базы.