Выполнение кода в 1С 8.3: от внешней обработки до запуска по расписанию
Содержание
Быстрее всего запустить код обработки в 1С так: открыть файл .epf через Главное меню → Файл → Открыть (или Ctrl+O) в режиме Предприятия и нажать кнопку на форме. Если нужно выполнить произвольный фрагмент кода, а не готовую обработку, используют консоль кода — небольшую внешнюю обработку
с вызовом Выполнить().
Способов пять, и выбирают их по задаче. Разовая проверка выражения — отладчик. Ручная операция с данными — внешняя обработка или консоль. Регулярная ночная задача — запуск из командной строки с параметром /Execute. Всё ниже относится к платформе 8.3 и интерфейсу «Такси» и одинаково работает в БП 3.0, ЗУП 3.1, УТ 11: механизм платформенный, а не конфигурационный.
Какой способ запуска кода выбрать
| Способ | Когда подходит | Что нужно | Риски |
|---|---|---|---|
Открыть .epf через «Файл → Открыть» | Разовая операция готовой обработкой | Право на интерактивное открытие внешних обработок | Код выполняется с вашими правами без проверки |
| Регистрация в «Дополнительных обработках» | Обработкой пользуются регулярно, разные люди | Права администратора для регистрации | Минимальные: код можно запустить в безопасном режиме |
| Своя консоль кода | Произвольный код, запросы, массовые правки | Право на внешние обработки, знание языка | Ошибка в коде сразу меняет данные |
Отладчик (Shift+F9) | Посмотреть значение, проверить выражение | Конфигуратор или EDT | Почти нет, если не менять данные |
Командная строка /Execute | Регламентные задачи по расписанию Windows | Учётная запись 1С с паролем, планировщик | Пароль в строке запуска, нужен контроль |
Если операцию нужно повторять каждый день, не открывайте файл руками. Зарегистрируйте обработку или настройте запуск по расписанию — так меньше шансов взять старую версию файла из «Загрузок».
Как открыть внешнюю обработку (.epf и .erf) в режиме Предприятия
Внешняя обработка — это файл .epf, внешний отчёт — .erf. Оба запускаются одинаково и не требуют изменения конфигурации.
Открытие файла вручную
- Запустите базу в режиме «1С:Предприятие».
- Откройте главное меню (кнопка с тремя полосками в левом верхнем углу) и выберите
Файл → Открыть. Короче — нажатьCtrl+O. - Укажите файл
.epfили.erf. - В типовых конфигурациях на БСП появится предупреждение безопасности. Прочитайте, откуда файл, и подтвердите открытие.
- Откроется основная форма обработки. Код выполняется по кнопке, которую предусмотрел разработчик.
Открывайте только файлы, источнику которых доверяете. Внешняя обработка выполняется с правами текущего пользователя. Если у вас полные права — она может удалить или изменить что угодно.
Регистрация как дополнительной обработки
Для регулярной работы удобнее подключить обработку к базе. В БП 3.0, ЗУП 3.1 и УТ 11 путь одинаковый:
Администрирование → Печатные формы, отчеты и обработки.- Включите флажок «Дополнительные отчеты и обработки», если он снят.
- Перейдите по ссылке «Дополнительные отчеты и обработки» и нажмите «Добавить из файла».
- Укажите размещение (в каких разделах показывать команду) и пользователей, которым она доступна.
- Запишите карточку.
Так можно зарегистрировать не любую обработку, а только подготовленную для БСП: в модуле объекта должна быть экспортная функция СведенияОВнешнейОбработке(). Обычный «самописный» .epf без неё система не примет и сообщит об этом при загрузке.
Обработки, встроенные в конфигурацию
Если обработка уже есть в конфигурации, но в меню её не видно, откройте её через «Все функции». Команда включается в Главное меню → Сервис → Параметры флажком «Отображать команду «Все функции»». Затем Главное меню → Все функции → Обработки.
Консоль кода: как выполнить произвольный код в 1С
В типовых конфигурациях нет встроенной консоли для произвольного кода. Её роль играет внешняя обработка: поле для текста и кнопка «Выполнить». Готовых консолей много, но простую можно собрать самому за 10 минут в Конфигураторе.
Делаем минимальную консоль
- В Конфигураторе:
Файл → Новый → Внешняя обработка. - Создайте форму. Добавьте реквизит формы
ТекстКодатипа «Строка» неограниченной длины и выведите его на форму как многострочное поле. - Добавьте команду «Выполнить» и разместите её кнопкой.
- В модуль формы вставьте код:
&НаКлиенте
Процедура Выполнить(Команда)
ВыполнитьНаСервере(ТекстКода);
Сообщить("Готово");
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере(Знач Текст)
Выполнить(Текст);
КонецПроцедуры
- Сохраните файл как
КонсольКода.epfи откройте его в Предприятии.
Проверьте консоль безопасным кодом, который только читает данные:
Запрос = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Всего ИЗ Справочник.Контрагенты");
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Сообщить("Контрагентов: " + Формат(Выборка.Всего, "ЧГ=0"));
Выполнить() и Вычислить(): в чём разница
- 🔹
Выполнить(Строка)— оператор. Выполняет набор строк кода: циклы, условия, присваивания. Ничего не возвращает. - 🔹
Вычислить(Строка)— функция. Вычисляет одно выражение и возвращает значение, напримерВычислить("ТекущаяДатаСеанса() - 86400").
Переменные, объявленные внутри текста для Выполнить(), видны только в нём. Если коду нужны параметры, передавайте их через переменные процедуры, в которой стоит вызов: выполняемый текст видит её локальные переменные.
Выполнить() и Вычислить() не работают на стороне веб-клиента. Поэтому в примере вызов вынесен в серверную процедуру — так консоль работает и в тонком, и в веб-клиенте.
Как выполнить код обработки на сервере 1С
В клиент-серверной базе код с директивой &НаСервере или &НаСервереБезКонтекста выполняется в рабочем процессе кластера, а не на компьютере пользователя. Отсюда три практических следствия.
Файлы. Путь C:\Выгрузка\file.xml в серверном коде — это диск сервера, а не ваш. Чтобы передать файл с клиента на сервер, используйте временное хранилище: ПоместитьФайл() или НачатьПомещениеФайлаНаСервер() на клиенте, ПолучитьИзВременногоХранилища() на сервере.
Права ОС. Серверный код работает от имени пользователя Windows, под которым запущена служба агента сервера 1С (обычно USR1CV8). Если ему нет доступа к сетевой папке, код упадёт, даже если у вас самих доступ есть.
Внешняя обработка на сервере. Файл .epf нельзя просто открыть в серверном коде по пути с клиента. Его помещают во временное хранилище и подключают:
&НаКлиенте
Процедура ПодключитьОбработку(ПолноеИмяФайла)
Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайла), УникальныйИдентификатор);
ЗапуститьНаСервере(Адрес);
КонецПроцедуры
&НаСервере
Процедура ЗапуститьНаСервере(Адрес)
Имя = ВнешниеОбработки.Подключить(Адрес, , Истина);
Обработка = ВнешниеОбработки.Создать(Имя);
Обработка.ВыполнитьЗагрузку(); // экспортная процедура модуля объекта
КонецПроцедуры
Третий параметр Подключить() — безопасный режим. Со значением Истина код обработки не сможет работать с файлами, внешними компонентами и COM-объектами. Ставьте Ложь только для обработок, которым доверяете. Метод ВыполнитьЗагрузку() в примере — условное имя: подставьте экспортную процедуру своей обработки.
Конструктор Новый ДвоичныеДанные(ИмяФайла) в клиентском коде работает в тонком клиенте под Windows. В веб-клиенте файл выбирают через НачатьПомещениеФайлаНаСервер().
Отладка: пошаговое выполнение кода обработки
Отладчик нужен, когда обработка запускается, но делает не то. Порядок для внешней обработки:
- Откройте
.epfв Конфигураторе черезФайл → Открыть. - Поставьте точку останова на нужной строке —
F9. - Запустите Предприятие из Конфигуратора:
Отладка → Начать отладкуилиF5. Сеанс сразу подключится к отладчику. - В Предприятии откройте тот же файл по тому же пути и выполните действие.
- Выполнение остановится на точке, Конфигуратор выйдет на передний план.
Клавиши, которые нужны почти всегда:
| Клавиша | Действие |
|---|---|
F9 | Поставить или снять точку останова |
F11 | Шаг с заходом в процедуру |
F10 | Шаг без захода в процедуру |
Shift+F11 | Выйти из текущей процедуры |
Shift+F9 | Вычислить выражение |
F5 | Продолжить до следующей точки |
Окно «Вычислить выражение» (Shift+F9) — фактически встроенная консоль. В нём видно значение любой переменной в точке остановки, можно раскрыть таблицу значений или выборку. Для проверки гипотезы «почему здесь пусто» этого обычно достаточно, отдельная консоль не нужна.
Почему не срабатывает точка останова в серверном коде
В файловой базе серверный код отлаживается без настроек. В клиент-серверной служба агента сервера 1С должна быть запущена с ключом -debug. Без него точки на клиенте работают, а в процедурах &НаСервере — нет.
Ключ добавляют в параметры запуска службы (строка ImagePath службы в реестре или через sc config). После изменения службу перезапускают. Перезапуск службы обрывает все сеансы пользователей: делайте это вне рабочего времени и на рабочих базах — только по согласованию. Включать отладку на продуктивном сервере постоянно не стоит.
Ещё две частые причины:
- 🔸 Открыт другой файл. Обработка в Предприятии открыта из «Загрузок», а точки стоят в копии с рабочего стола.
- 🔸 Сеанс не подключён к отладчику. Проверьте список в
Отладка → Подключение— ваш сеанс должен быть в нём.
Права пользователя и безопасный режим
Без прав открыть внешнюю обработку не получится — платформа выдаст Нарушение прав доступа!. Права настраиваются на двух уровнях.
На уровне конфигурации. У корня конфигурации есть права «Интерактивное открытие внешних обработок» и «Интерактивное открытие внешних отчетов». Они входят в роли. В типовых конфигурациях на БСП есть отдельная роль для открытия внешних отчётов и обработок.
На уровне пользователей. В БП 3.0, ЗУП 3.1 и УТ 11 роли не назначают пользователю напрямую. Права выдают через Администрирование → Пользователи и права → Группы доступа: пользователь включается в группу, профиль которой содержит нужную роль. Полные права дают доступ ко всему, включая внешние обработки.
Что ещё ограничивает запуск
- 🛡 Защита от опасных действий. Флажок в свойствах пользователя информационной базы. Когда он включён, при открытии внешнего файла платформа показывает предупреждение и ждёт подтверждения.
- 🛡 Безопасный режим. Обработка, подключённая с
БезопасныйРежим = Истина, не может вызывать привилегированные операции. Код консоли можно ограничить так же: передВыполнить()вызовитеУстановитьБезопасныйРежим(Истина). - 🛡 Профили безопасности кластера. В консоли администрирования серверов можно назначить базе профиль, который запрещает внешним модулям доступ к файлам, COM и сети. Если код работал вчера и перестал после смены настроек кластера — проверьте профиль базы.
Не выдавайте право на внешние обработки «всем на всякий случай». Через консоль кода пользователь с этим правом может изменить любые данные, к которым у него есть доступ, в обход форм и проверок.
Перед запуском кода, который пишет данные, сделайте резервную копию базы или хотя бы прогоните его на копии. Массовую правку проверяйте на 5–10 объектах, а потом запускайте на всех.
Запуск обработки из командной строки и по расписанию
Для регулярных задач (ночная загрузка цен, выгрузка в банк) обработку запускают без участия человека. Платформа умеет открыть внешнюю обработку сразу после старта по параметру /Execute.
Файловая база:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Робот" /P"пароль" /Execute"D:\Scripts\ZagruzkaCen.epf" /DisableStartupMessages
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /N"Робот" /P"пароль" /Execute"D:\Scripts\ZagruzkaCen.epf" /DisableStartupMessages
Что важно знать:
- 🔹
/Executeтолько открывает обработку. Чтобы код выполнился сам, разместите его в обработчикеПриОткрытииформы илиПриСозданииНаСервере. - 🔹 Чтобы сеанс закрылся после работы, в конце кода вызовите
ЗавершитьРаботуСистемы(Ложь). Иначе в планировщике будут копиться висящие сеансы, и каждый занимает лицензию. - 🔹 Параметр
/C"строка"передаёт в сеанс произвольную строку. В коде её читают черезПараметрЗапуска. Так одна обработка может работать в разных режимах. - 🔹 Для запуска выберите отдельного пользователя 1С с минимально нужными правами. Его пароль лежит в задаче планировщика открытым текстом.
Настройка в планировщике Windows
- Сохраните строку запуска в файл
zagruzka.bat. - Откройте «Планировщик заданий» и создайте задачу.
- На вкладке «Общие» укажите учётную запись Windows и отметьте выполнение вне зависимости от входа пользователя.
- На вкладке «Триггеры» задайте время, например ежедневно в 02:00.
- На вкладке «Действия» укажите
zagruzka.bat. - Запустите задачу вручную и проверьте результат в базе.
Если внешний файл блокирует предупреждение безопасности, а у пользователя включена защита от опасных действий, задача повиснет на диалоге. Для служебного пользователя этот флажок снимают осознанно, понимая риск.
Альтернатива для задач внутри базы — регламентное задание. В типовых конфигурациях дополнительную обработку с видом «Дополнительная обработка» можно поставить на расписание прямо в её карточке, без планировщика Windows. Для этого обработка должна поддерживать такой режим.
Частые вопросы
Можно ли запустить внешнюю обработку в базе 1С:Fresh или в облаке?
.epf через «Файл → Открыть» там, как правило, нельзя.Почему обработка открывается, но кнопки не реагируют?
Отладка → Остановка по ошибке.