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

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

Как запустить процедуру в 1С: все рабочие способы

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

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

Главное ограничение, о котором часто забывают: в 1С нельзя просто «набрать имя процедуры в командной строке» и выполнить её. Код исполняется только в контексте платформы — в модуле, в отладчике, в консоли кода или через механизм внешних обработок. Ниже разобраны все рабочие варианты с условиями применения и типичными ошибками.

Как устроен запуск процедур в 1С

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

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

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

Вызов процедуры из другого модуля

Стандартный способ запуска — вызов по имени из другого кода. Если процедура объявлена в общем модуле с ключевым словом Экспорт, она доступна отовсюду, где доступен сам модуль:

// В общем модуле "РаботаСКонтрагентами"

Процедура ОбновитьСтатусыКонтрагентов() Экспорт

// тело процедуры

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

// Вызов из любого другого модуля:

РаботаСКонтрагентами.ОбновитьСтатусыКонтрагентов();

Без ключевого слова Экспорт процедура считается локальной и видна только внутри своего модуля. Это вторая по частоте причина ошибки «процедура не определена» — разработчик забыл добавить Экспорт при объявлении.

Процедуры модуля формы вызываются внутри самой формы просто по имени. Для вызова серверной процедуры из клиентского кода формы используют отдельную процедуру с директивой &НаСервере или &НаСервереБезКонтекста:

&НаКлиенте

Процедура КнопкаВыполнитьНажатие(Команда)

ВыполнитьОбработкуНаСервере();

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

&НаСервереБезКонтекста

Процедура ВыполнитьОбработкуНаСервере()

// серверный код

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

Запуск через консоль кода

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

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

// Пример кода для консоли

РаботаСКонтрагентами.ОбновитьСтатусыКонтрагентов();

Сообщить("Выполнено");

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

Запуск через внешнюю обработку

Если процедуру нужно запускать регулярно вручную, удобно оформить её как внешнюю обработку с кнопкой. Создаётся новая внешняя обработка в конфигураторе (Файл → Новый → Внешняя обработка), на форму добавляется команда, в обработчик которой помещается вызов процедуры.

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

Порядок действий
  1. 1
    Создайте резервную копию базы, если процедура меняет данные
  2. 2
    Откройте консоль кода или внешнюю обработку через Файл → Открыть
  3. 3
    Введите вызов процедуры: ИмяМодуля.ИмяПроцедуры() или вставьте код
  4. 4
    Проверьте, что контекст исполнения (клиент/сервер) соответствует модулю
  5. 5
    Выполните код и проверьте результат по сообщениям и данным в базе

Запуск через регламентные задания

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

Требования к процедуре для регламентного задания: она должна быть экспортной, находиться в общем модуле с флагом «Сервер» и не иметь параметров. Код выполняется на сервере в фоновом сеансе, поэтому в нём нельзя использовать интерактивные вызовы — окна сообщений с вопросами, открытие форм.

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

Запуск в отладчике

Когда нужно не просто выполнить процедуру, а проследить её работу по шагам, используют отладчик конфигуратора. В нужной строке ставится точка останова (клик по полю слева от строки или F9), затем конфигурация запускается в режиме отладки (F5 или «Начать отладку»).

Когда выполнение дойдёт до точки останова, сеанс остановится, и код можно выполнять по шагам: F11 — шаг с заходом в процедуры, F10 — шаг без захода, Shift+F10 — выполнить до конца текущей процедуры. Значения переменных смотрят в табло (Shift+F9) или через «Вычислить выражение».

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

bsl
// Вызов экспортной процедуры общего модуля
ОбщегоНазначения.СообщитьПользователю("Текст сообщения");

// Запуск фонового задания из кода
ПараметрыВыполнения = Новый Массив;
ФоновыеЗадания.Выполнить("ИмяМодуля.ИмяПроцедуры", ПараметрыВыполнения);

Проверка результата и типичные ошибки

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

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

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

Окно сообщений после выполнения
Норма

Нет текста об ошибках, выведены ожидаемые сообщения

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

Текст 'Ошибка при вызове метода контекста' или 'Процедура не определена'

Данные, которые должна изменить процедура
Норма

Значения обновлены согласно логике процедуры

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

Данные не изменились — возможно, код не дошёл до записи

Журнал регистрации для фоновых заданий
Норма

Событие о выполнении задания без ошибок

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

Запись с ошибкой фонового задания или задание не запускалось

Типичные ошибки
01
Вызов процедуры без Экспорт — ошибка 'Процедура или функция с указанным именем не определена'
02
Вызов серверной процедуры из клиентского кода без промежуточной серверной процедуры — ошибка компиляции или недоступность модуля
03
Интерактивные вызовы (Вопрос, ОткрытьФорму) в регламентном задании — задание падает, так как выполняется без интерфейса
04
Запуск кода на изменение данных в рабочей базе без копии — невозможность отката при ошибке в логике
05
Опечатка в имени модуля или процедуры — та же ошибка 'не определена', проверяйте имя через Ctrl+клик в конфигураторе

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

Можно ли запустить процедуру из командной строки Windows?

Напрямую — нет. Из командной строки можно запустить 1С с параметром /Execute, указывающим на внешнюю обработку, которая при открытии выполнит нужный код. Также используют параметр /C для передачи строки запуска, которую обработка разбирает в своём коде.

Почему возникает ошибка «Процедура или функция с указанным именем не определена»?

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

Как запустить процедуру с параметрами?

Параметры передаются в скобках при вызове: ИмяМодуля.ИмяПроцедуры(Параметр1, Параметр2). В консоли кода параметры задают прямо в тексте вызова. Для регламентных заданий процедура с параметрами недопустима — параметры придётся получать внутри неё, например из констант или регистра сведений.

Как выполнить процедуру на сервере из тонкого клиента?

Разместите процедуру в общем модуле с флагами «Сервер» и «Вызов сервера», либо создайте в форме процедуру с директивой &НаСервереБезКонтекста и вызывайте её из клиентского обработчика. Прямой вызов серверного кода из клиентского контекста невозможен — нужна серверная «прослойка».

Чем отличается фоновое задание от регламентного?

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

Безопасно ли давать пользователям консоль кода?

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

Итог

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

Процедура запускается вызовом по имени из модуля, консолью кода, внешней обработкой, регламентным заданием или в отладчике. Ключевые условия успеха: ключевое слово Экспорт, правильный контекст (клиент/сервер) и резервная копия перед кодом, меняющим данные.