Где на самом деле исполняется код из Конфигуратора 1С и как его запустить

· 10 мин

Содержание

Сам Конфигуратор 1С 8.3 код на встроенном языке не исполняет: он только хранит и редактирует конфигурацию. Чтобы выполнить команду, её запускают в режиме 1С:Предприятие — через внешнюю обработку , через отладчик (Отладка → Начать отладку, F5) или пакетно из командной строки ключом DESIGNER / ENTERPRISE /Execute. Служебные команды самого Конфигуратора (выгрузка базы, обновление конфигурации , тестирование) тоже можно выполнить без окна — из bat-файла.

Нужно быстро проверить запрос, поправить реквизит у тысячи документов или ночью выгрузить базу — способ зависит от задачи. Разберём все рабочие варианты для платформы 8.3 с интерфейсом «Такси»: от безопасной консоли до пакетного режима.

Какой способ выполнения команды выбрать

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

ЗадачаИнструментНужен монопольный доступ
Выполнить кусок кода, проверить запросВнешняя обработка-консольНет
Посмотреть значения переменных в момент работыОтладчик, Shift+F9Нет
Запустить обработку при старте базы1cv8 ENTERPRISE /ExecuteНет
Выгрузить базу в .dt, обновить конфигурацию ночью1cv8 DESIGNER с ключамиДа, для загрузки .dt и обновления структуры
Выполнять код по расписаниюРегламентное заданиеНет

Если задачу можно решить штатной обработкой (групповое изменение реквизитов, удаление помеченных), начните с неё. Свой код нужен там, где типовых инструментов не хватает.

1. Консоль кода: выполнение произвольной команды через внешнюю обработку

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

Как создать обработку для запуска кода

  1. В Конфигураторе откройте Файл → Новый и выберите «Внешняя обработка».
  2. Задайте имя, например ВыполнитьКоманду.
  3. Создайте основную форму обработки: в окне объекта на вкладке «Формы» нажмите кнопку добавления.
  4. В форме на вкладке «Команды» добавьте команду, перетащите её на форму — получится кнопка.
  5. Нажмите на значок лупы у свойства «Действие» команды, выберите размещение «На клиенте и процедура на сервере без контекста» или напишите обработчики вручную.
  6. Сохраните файл с расширением .epf.

Пример кода формы — запрос к справочнику и вывод результата в окно сообщений:

&НаКлиенте
Процедура ВыполнитьКод(Команда)
	ВыполнитьКодНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьКодНаСервере()
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	КОЛИЧЕСТВО(*) КАК Количество
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура";
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Сообщить("Позиций номенклатуры: " + Формат(Выборка.Количество, "ЧН=0; ЧГ=0"));
	КонецЕсли;
КонецПроцедуры

Не называйте процедуру просто Выполнить: это зарезервированный оператор встроенного языка, модуль не пройдёт синтаксический контроль.

Как запустить обработку

  1. Запустите базу в режиме 1С:Предприятие.
  2. Откройте Главное меню → Файл → Открыть и выберите файл .epf.
  3. Нажмите кнопку на форме. Результат появится в окне сообщений внизу.

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

Универсальная консоль с полем для кода

Если код меняется каждый раз, удобнее форма с многострочным полем и вызовом Выполнить(ТекстКода) на сервере. Оператор Выполнить исполняет строку как фрагмент программы.

&НаСервереБезКонтекста
Процедура ВыполнитьТекстНаСервере(ТекстКода)
	Выполнить(ТекстКода);
КонецПроцедуры

Такая консоль исполняет всё, что в неё вписали, с правами текущего пользователя. Не оставляйте её в общем доступе и не запускайте в рабочей базе код, который не проверили на копии. В готовых консолях из открытых каталогов встречаются как удобные инструменты, так и сырые поделки: открывайте их в Конфигураторе и читайте код перед запуском.

2. Как выполнить команду в конфигураторе через отладчик

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

Запуск отладки

  1. Откройте модуль нужного объекта или внешней обработки.
  2. Поставьте точку останова на строке: F9.
  3. Выберите Отладка → Начать отладку (F5). Запустится 1С:Предприятие, подключённое к отладчику.
  4. Выполните действие, которое доходит до этой строки. Конфигуратор выйдет на передний план, строка подсветится.

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

Пошаговое выполнение

КлавишаЧто делает
F10Шаг через: выполнить строку, не заходя в вызываемые процедуры
F11Шаг в: зайти внутрь вызываемой процедуры
Shift+F11Шаг из: выполнить процедуру до конца и вернуться выше
Ctrl+F10Идти до курсора
F5Продолжить до следующей точки останова

«Вычислить выражение» — мини-консоль внутри отладчика

На остановке нажмите Shift+F9. Откроется окно, где можно ввести выражение: значение переменной, ТекущаяДата(), Объект.Товары.Количество() или вызов функции. Результат и его тип покажутся сразу, коллекции раскрываются деревом.

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

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

Отладка на сервере 1С

В файловой базе серверный код отлаживается сразу. В клиент-серверной рабочий процесс должен разрешать отладку: службу агента сервера запускают с ключом -debug. Этот ключ добавляют в строку запуска службы ragent.exe в её свойствах.

Изменение параметров службы требует её перезапуска — все сеансы пользователей на этом сервере оборвутся. Делайте это вне рабочего времени и на тестовом сервере, если он есть.

3. Пакетный запуск: команды Конфигуратора из bat-файла

Многие действия меню Конфигуратора доступны ключами командной строки 1cv8.exe. Это удобно для ночных выгрузок, обновлений по расписанию и обслуживания десятка баз одним скриптом.

Общий вид команды

"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "пароль" /DumpIB "D:\Backup\buh.dt" /Out "D:\Backup\log.txt" /DisableStartupDialogs

Номер версии в пути подставьте свой — посмотрите папку в C:\Program Files\1cv8\. Для серверной базы вместо /F "путь" пишут /S "ИмяСервера\ИмяБазы".

Ключи, которые используют чаще всего

КлючЧто делаетАналог в меню
/DumpIB файл.dtВыгрузить информационную базуАдминистрирование → Выгрузить информационную базу
/RestoreIB файл.dtЗагрузить базу из .dtАдминистрирование → Загрузить информационную базу
/DumpCfg файл.cfСохранить конфигурацию в файлКонфигурация → Сохранить конфигурацию в файл
/LoadCfg файл.cfЗагрузить конфигурацию из файлаКонфигурация → Загрузить конфигурацию из файла
/UpdateDBCfgОбновить конфигурацию базы данныхКонфигурация → Обновить конфигурацию базы данных (F7)
/IBCheckAndRepairТестирование и исправлениеАдминистрирование → Тестирование и исправление
/Out файл.txtПисать сообщения в лог—
/DisableStartupDialogsНе показывать диалоги при старте—

/RestoreIB полностью заменяет данные базы содержимым файла. Перед загрузкой .dt сделайте выгрузку текущего состояния.

Как запустить обработку при старте 1С:Предприятия

Режим ENTERPRISE с ключом /Execute открывает указанную внешнюю обработку сразу после входа:

"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" ENTERPRISE /F "D:\Bases\Buh" /N "Администратор" /P "пароль" /Execute "D:\Tools\ВыполнитьКоманду.epf"

Ключ /C "строка" передаёт произвольный параметр. В коде его читают через глобальную переменную ПараметрЗапуска. Так одна обработка может выполнять разные действия в зависимости от параметра, а после работы закрывать сеанс методом ЗавершитьРаботуСистемы(Ложь).

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

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

4. Блокировки и монопольный режим перед выполнением команд

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

Как освободить базу

  • 🔒 В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11): Администрирование → Обслуживание → Блокировка работы пользователей. Задаёте время, текст сообщения и код разрешения.
  • 🖥 В клиент-серверной базе: консоль администрирования серверов → свойства информационной базы → флажки блокировки начала сеансов и регламентных заданий.
  • ⌨ Из командной строки: запуск в режиме ENTERPRISE с ключом /C "ЗавершитьРаботуПользователей" включает блокировку средствами БСП, /C "РазрешитьРаботуПользователей" снимает её.

Чтобы зайти в заблокированную базу самому, при запуске передают код разрешения ключом /UC КодРазрешения — тот, что вы указали при установке блокировки.

Активные сеансы видно в Конфигураторе: Администрирование → Активные пользователи. Проверьте список перед F7 — так вы сразу поймёте, кто держит базу.

5. Фоновые и регламентные задания: выполнение кода по расписанию

Если команду нужно выполнять регулярно — пересчитывать остатки, загружать курсы, чистить временные данные, — её оформляют регламентным заданием.

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

  1. В дереве конфигурации откройте ветку Общие → Регламентные задания и добавьте новый объект.
  2. В свойстве «Имя метода» укажите экспортную процедуру общего модуля. Модуль должен быть серверным.
  3. Задайте расписание и флажок «Использование».
  4. Обновите конфигурацию базы данных (F7).

В типовых конфигурациях список заданий и их состояние смотрят в 1С:Предприятии: Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. Там же задание можно запустить вручную, не дожидаясь расписания.

Особенности, о которых забывают

  • 📁 В файловой базе регламентные задания выполняются, только пока открыт хотя бы один сеанс клиента. Закрыли все окна на ночь — ночное задание не запустится.
  • 🧩 Фоновое задание выполняется на сервере без интерфейса: Сообщить() и диалоги из него пользователь не увидит. Пишите результат в журнал регистрации через ЗаписьЖурналаРегистрации().
  • 🔁 Чтобы запустить код в фоне из своей обработки, используйте ФоновыеЗадания.Выполнить("ИмяМодуля.ИмяПроцедуры", Параметры). Процедура должна быть экспортной и в серверном общем модуле.

Отладка фонового задания

Точка останова в процедуре фонового задания сама не сработает: отладчик к нему не подключён. В Конфигураторе откройте Отладка → Подключение, включите автоматическое подключение и отметьте фоновые задания среди типов предметов отладки. Для клиент-серверной базы сервер, как и выше, должен быть запущен с разрешённой отладкой.

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

6. Почему команда не выполняется: частые ошибки

Диагностика: выберите симптом

Если не помогло

Запустите ту же операцию на копии базы под администратором. Если там всё работает, дело в правах или блокировках рабочей базы. Если падает и на копии — смотрите журнал регистрации (Администрирование → Журнал регистрации в Конфигураторе): там видны текст исключения и модуль, где оно возникло.

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

Можно ли выполнить код прямо в Конфигураторе без запуска 1С:Предприятия?
Нет. Конфигуратор не исполняет код встроенного языка. Нужен сеанс 1С:Предприятия: обычный, отладочный или пакетный с ключом /Execute.
Чем `Выполнить()` отличается от `Вычислить()`?
Выполнить исполняет фрагмент кода из нескольких операторов и ничего не возвращает. Вычислить вычисляет одно выражение и возвращает его значение.
Работает ли консоль кода в веб-клиенте?
Внешнюю обработку можно открыть и в веб-клиенте, если у пользователя есть право на открытие внешних обработок. Серверная часть кода выполнится так же, как в тонком клиенте.
Нужно ли выгонять пользователей, чтобы выполнить обработку?
Нет, если обработка не меняет структуру базы. Но при массовой записи документов пользователи могут получать ошибки блокировок данных, поэтому крупные изменения лучше делать вне рабочего времени.
Как выполнить команду сразу в нескольких базах?
Напишите bat-файл с циклом по списку баз и вызовом 1cv8.exe DESIGNER или ENTERPRISE /Execute для каждой. Каждой базе дайте свой файл лога /Out, иначе записи перезапишут друг друга.