Выполнение кода в 1С 8.3: от внешней обработки до запуска по расписанию

· 10 мин

Содержание

Быстрее всего запустить код обработки в 1С так: открыть файл .epf через Главное меню → Файл → Открыть (или Ctrl+O) в режиме Предприятия и нажать кнопку на форме. Если нужно выполнить произвольный фрагмент кода, а не готовую обработку, используют консоль кода — небольшую внешнюю обработку с вызовом Выполнить().

Способов пять, и выбирают их по задаче. Разовая проверка выражения — отладчик. Ручная операция с данными — внешняя обработка или консоль. Регулярная ночная задача — запуск из командной строки с параметром /Execute. Всё ниже относится к платформе 8.3 и интерфейсу «Такси» и одинаково работает в БП 3.0, ЗУП 3.1, УТ 11: механизм платформенный, а не конфигурационный.

Какой способ запуска кода выбрать

СпособКогда подходитЧто нужноРиски
Открыть .epf через «Файл → Открыть»Разовая операция готовой обработкойПраво на интерактивное открытие внешних обработокКод выполняется с вашими правами без проверки
Регистрация в «Дополнительных обработках»Обработкой пользуются регулярно, разные людиПрава администратора для регистрацииМинимальные: код можно запустить в безопасном режиме
Своя консоль кодаПроизвольный код, запросы, массовые правкиПраво на внешние обработки, знание языкаОшибка в коде сразу меняет данные
Отладчик (Shift+F9)Посмотреть значение, проверить выражениеКонфигуратор или EDTПочти нет, если не менять данные
Командная строка /ExecuteРегламентные задачи по расписанию WindowsУчётная запись 1С с паролем, планировщикПароль в строке запуска, нужен контроль

Если операцию нужно повторять каждый день, не открывайте файл руками. Зарегистрируйте обработку или настройте запуск по расписанию — так меньше шансов взять старую версию файла из «Загрузок».

Как открыть внешнюю обработку (.epf и .erf) в режиме Предприятия

Внешняя обработка — это файл .epf, внешний отчёт — .erf. Оба запускаются одинаково и не требуют изменения конфигурации.

Открытие файла вручную

  1. Запустите базу в режиме «1С:Предприятие».
  2. Откройте главное меню (кнопка с тремя полосками в левом верхнем углу) и выберите Файл → Открыть. Короче — нажать Ctrl+O.
  3. Укажите файл .epf или .erf.
  4. В типовых конфигурациях на БСП появится предупреждение безопасности. Прочитайте, откуда файл, и подтвердите открытие.
  5. Откроется основная форма обработки. Код выполняется по кнопке, которую предусмотрел разработчик.

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

Регистрация как дополнительной обработки

Для регулярной работы удобнее подключить обработку к базе. В БП 3.0, ЗУП 3.1 и УТ 11 путь одинаковый:

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

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

Обработки, встроенные в конфигурацию

Если обработка уже есть в конфигурации, но в меню её не видно, откройте её через «Все функции». Команда включается в Главное меню → Сервис → Параметры флажком «Отображать команду «Все функции»». Затем Главное меню → Все функции → Обработки.

Консоль кода: как выполнить произвольный код в 1С

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

Делаем минимальную консоль

  1. В Конфигураторе: Файл → Новый → Внешняя обработка.
  2. Создайте форму. Добавьте реквизит формы ТекстКода типа «Строка» неограниченной длины и выведите его на форму как многострочное поле.
  3. Добавьте команду «Выполнить» и разместите её кнопкой.
  4. В модуль формы вставьте код:
&НаКлиенте
Процедура Выполнить(Команда)
	ВыполнитьНаСервере(ТекстКода);
	Сообщить("Готово");
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере(Знач Текст)
	Выполнить(Текст);
КонецПроцедуры
  1. Сохраните файл как КонсольКода.epf и откройте его в Предприятии.

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

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

Выполнить() и Вычислить(): в чём разница

  • 🔹 Выполнить(Строка) — оператор. Выполняет набор строк кода: циклы, условия, присваивания. Ничего не возвращает.
  • 🔹 Вычислить(Строка) — функция. Вычисляет одно выражение и возвращает значение, например Вычислить("ТекущаяДатаСеанса() - 86400").

Переменные, объявленные внутри текста для Выполнить(), видны только в нём. Если коду нужны параметры, передавайте их через переменные процедуры, в которой стоит вызов: выполняемый текст видит её локальные переменные.

Выполнить() и Вычислить() не работают на стороне веб-клиента. Поэтому в примере вызов вынесен в серверную процедуру — так консоль работает и в тонком, и в веб-клиенте.

Как выполнить код обработки на сервере 1С

В клиент-серверной базе код с директивой &НаСервере или &НаСервереБезКонтекста выполняется в рабочем процессе кластера, а не на компьютере пользователя. Отсюда три практических следствия.

Файлы. Путь C:\Выгрузка\file.xml в серверном коде — это диск сервера, а не ваш. Чтобы передать файл с клиента на сервер, используйте временное хранилище: ПоместитьФайл() или НачатьПомещениеФайлаНаСервер() на клиенте, ПолучитьИзВременногоХранилища() на сервере.

Права ОС. Серверный код работает от имени пользователя Windows, под которым запущена служба агента сервера 1С (обычно USR1CV8). Если ему нет доступа к сетевой папке, код упадёт, даже если у вас самих доступ есть.

Внешняя обработка на сервере. Файл .epf нельзя просто открыть в серверном коде по пути с клиента. Его помещают во временное хранилище и подключают:

&НаКлиенте
Процедура ПодключитьОбработку(ПолноеИмяФайла)
	Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайла), УникальныйИдентификатор);
	ЗапуститьНаСервере(Адрес);
КонецПроцедуры

&НаСервере
Процедура ЗапуститьНаСервере(Адрес)
	Имя = ВнешниеОбработки.Подключить(Адрес, , Истина);
	Обработка = ВнешниеОбработки.Создать(Имя);
	Обработка.ВыполнитьЗагрузку(); // экспортная процедура модуля объекта
КонецПроцедуры

Третий параметр Подключить() — безопасный режим. Со значением Истина код обработки не сможет работать с файлами, внешними компонентами и COM-объектами. Ставьте Ложь только для обработок, которым доверяете. Метод ВыполнитьЗагрузку() в примере — условное имя: подставьте экспортную процедуру своей обработки.

Конструктор Новый ДвоичныеДанные(ИмяФайла) в клиентском коде работает в тонком клиенте под Windows. В веб-клиенте файл выбирают через НачатьПомещениеФайлаНаСервер().

Отладка: пошаговое выполнение кода обработки

Отладчик нужен, когда обработка запускается, но делает не то. Порядок для внешней обработки:

  1. Откройте .epf в Конфигураторе через Файл → Открыть.
  2. Поставьте точку останова на нужной строке — F9.
  3. Запустите Предприятие из Конфигуратора: Отладка → Начать отладку или F5. Сеанс сразу подключится к отладчику.
  4. В Предприятии откройте тот же файл по тому же пути и выполните действие.
  5. Выполнение остановится на точке, Конфигуратор выйдет на передний план.

Клавиши, которые нужны почти всегда:

КлавишаДействие
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

  1. Сохраните строку запуска в файл zagruzka.bat.
  2. Откройте «Планировщик заданий» и создайте задачу.
  3. На вкладке «Общие» укажите учётную запись Windows и отметьте выполнение вне зависимости от входа пользователя.
  4. На вкладке «Триггеры» задайте время, например ежедневно в 02:00.
  5. На вкладке «Действия» укажите zagruzka.bat.
  6. Запустите задачу вручную и проверьте результат в базе.

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

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

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

Можно ли запустить внешнюю обработку в базе 1С:Fresh или в облаке?
В облачных сервисах внешние обработки обычно запускаются только после регистрации как дополнительные и проверки на стороне провайдера. Открыть произвольный .epf через «Файл → Открыть» там, как правило, нельзя.
Почему обработка открывается, но кнопки не реагируют?
Чаще всего код упал с ошибкой, а окно сообщения закрылось или ушло в панель сообщений. Запустите обработку под отладчиком с включённой остановкой по ошибке: Отладка → Остановка по ошибке.
Чем внешняя обработка отличается от расширения конфигурации?
Обработку открывают по требованию, и она не меняет поведение базы. Расширение подключается к конфигурации постоянно и может менять формы, модули и добавлять объекты. Для разовых операций хватает обработки.
Можно ли выполнить код без Конфигуратора и без файла .epf?
Только если в базе уже есть встроенная консоль — в некоторых отраслевых и доработанных конфигурациях она есть. В типовых решениях нужен хотя бы файл внешней обработки.
Обработка для БП подойдёт для ЗУП?
Только если она обращается лишь к объектам, которые есть в обеих конфигурациях. Если в коде упомянут справочник или документ, которого в ЗУП нет, обработка упадёт с ошибкой при первом обращении к нему. Проверьте код по списку объектов ЗУП до запуска.