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

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

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

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

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

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

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

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

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

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

Заполнение кода в модуле внешней обработки

Основное место, где «заполняется код выполняемой функции», — модуль объекта внешней обработки. Откройте файл в конфигураторе: Файл → Открыть → выберите .epf-файл. В модуле объекта должна присутствовать экспортная функция СведенияОВнешнейОбработке(), возвращающая структуру с параметрами регистрации.

Таблица команд формируется внутри этой функции. Для каждой команды указывается идентификатор, представление (название, которое увидит пользователь), использование (способ вызова) и, при необходимости, модификатор. Именно идентификатор связывает кнопку в интерфейсе с конкретным кодом.

bsl
Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
	ПараметрыРегистрации.Версия = "1.0";
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = НСтр("ru = 'Выполнить обработку'");
	НоваяКоманда.Идентификатор = "ВыполнитьОбработку";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.ПоказыватьОповещение = Истина;
	Возврат ПараметрыРегистрации;
КонецФункции

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

Вариант с клиентским методом

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

Вариант «ОткрытиеФормы»

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

Где это настраивается в пользовательском режиме

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

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

Как подключить обработку и проверить код
  1. 1
    Включите механизм: Администрирование → Печатные формы, отчеты и обработки → флажок «Дополнительные отчеты и обработки».
  2. 2
    Перейдите по ссылке «Дополнительные отчеты и обработки» и нажмите «Добавить из файла».
  3. 3
    Выберите файл .epf и подтвердите загрузку, проверив предупреждение безопасности.
  4. 4
    В карточке обработки укажите размещение (разделы, где будет доступна команда) и при необходимости быстрый доступ.
  5. 5
    Нажмите «Выполнить» в списке команд и убедитесь, что код отрабатывает без ошибок.

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

Особенности заполнения в регламентных заданиях и печатных формах

Для обработок вида «Заполнение объекта», «Печатная форма», «Создание связанных объектов» и «Отчет» состав параметров регистрации отличается. Например, для печатной формы обязательно заполняется поле «Назначение» — массив объектов метаданных, для которых она доступна. Без назначения команда не появится в меню печати документа.

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

Типичные ошибки и как их исправить

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

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

Типичные ошибки
01
Функция СведенияОВнешнейОбработке() объявлена без Экспорт — карточка обработки не заполняется при добавлении файла.
02
Процедура ВыполнитьКоманду размещена в модуле объекта, хотя тип команды — вызов клиентского метода, и платформа ее не находит.
03
Не заполнено назначение для печатной формы — команда не появляется в меню «Печать» документа.
04
В коде серверной команды используется Предупреждение() или открытие формы — в фоновом задании это приводит к ошибке.
05
Обработка открывается через Файл → Открыть вместо подключения в справочник — команды не регистрируются и не работают по расписанию.

Как проверить, что функция выполняется

Минимальная проверка — временно вставить в начало процедуры ВыполнитьКоманду запись в журнал регистрации или вывод сообщения (для клиентского метода). Если после запуска команды запись появилась, связка «команда → идентификатор → процедура» работает, и можно отлаживать основную логику.

Для серверных методов удобно использовать отладку фоновых заданий: в конфигураторе включите «Отладка» → «Подключение» → автоматическое подключение фоновых заданий, поставьте точку останова в ВыполнитьКоманду и запустите команду из пользовательского режима.

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

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

Карточка обработки после добавления файла
Норма

Наименование, версия, вид и список команд заполнены автоматически

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

Поля пустые или появилась ошибка получения сведений о внешней обработке

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

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

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

Таблица команд пуста — проблема в функции СведенияОВнешнейОбработке()

Запуск команды
Норма

Команда выполняется, при отладке срабатывает точка останова в ВыполнитьКоманду

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

Ошибка «Метод объекта не обнаружен» — процедура не в том модуле или не экспортная

Границы безопасной самостоятельной работы

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

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

Итог

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

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

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

Где физически находится код выполняемой функции после подключения обработки к базе?

Файл обработки целиком сохраняется в базе данных в справочнике «Дополнительные отчеты и обработки» в виде двоичных данных. Код остается внутри этого файла; при выполнении команды платформа извлекает файл и исполняет нужную процедуру из его модуля.

Можно ли изменить код функции без конфигуратора?

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

Почему команда есть в списке, но при запуске ничего не происходит?

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

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

Идентификатор — это строковое имя-ссылка, по которому платформа определяет, какую ветку кода выполнить. Сам код — это содержимое процедуры ВыполнитьКоманду, которая получает идентификатор параметром и обычно через Если/ИначеЕсли распределяет выполнение между командами.

Нужно ли заполнять код для внешнего отчета на СКД?

Для отчета на системе компоновки данных с использованием «ОткрытиеФормы» отдельный выполняемый код обычно не нужен: достаточно схемы компоновки и параметров регистрации. Код требуется, только если отчет должен программно формировать или обрабатывать результат.

Обработка работает при открытии через «Файл → Открыть», но не из справочника. В чем причина?

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