Как автоматически запустить внешнюю обработку в 1С по расписанию без изменения конфигурации?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой IT и автоматизация бизнеса
← На главную

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

Запуск внешней обработки через командную строку с ключом /Execute

Платформа 1С:Предприятие поддерживает специальный ключ командной строки /Execute, который позволяет указать путь к файлу внешней обработки (.epf), выполняемой сразу после старта сеанса. Проанализируем базовый синтаксис команды запуска для файловой или клиент-серверной базы.

Посмотрим на пример пакетного файла (.bat или .cmd), предназначенного для запуска через Планировщик заданий (Windows Task Scheduler):


"C:\Program Files\1cv8\current\bin\1cv8.exe" ENTERPRISE /F "C:\Bases\MyBase" /N "Робот" /P "Пароль" /DisableStartupMessages /Execute "C:\Scripts\MyProcessing.epf"

Разберем параметры командной строки подробнее:

  1. ENTERPRISE — запуск платформы в режиме «1С:Предприятие».
  2. /F (или /S для клиент-серверного режима) — указание пути к информационной базе.
  3. /N и /P — имя пользователя и пароль учетной записи, под которой запускается процесс. Для таких задач рекомендуется заводить отдельного сервисного пользователя.
  4. /DisableStartupMessages — подавление стартовых диалогов и информационных сообщений при входе в систему.
  5. /Execute — путь к запускаемому файлу внешней обработки.

Передача параметров в обработку через ключ /C и глобальный контекст

Часто в рамках одной обработки требуется вызывать различные процедуры в зависимости от времени запуска или дня недели, либо передавать дополнительные флаги выполнения. Для этого используем ключ командной строки /C. Значение, переданное после этого ключа, считывается в коде 1С с помощью свойства глобального контекста ПараметрЗапуска.

Посмотрим на пример командной строки с передачей параметра действия:


"C:\Program Files\1cv8\current\bin\1cv8.exe" ENTERPRISE /F "C:\Bases\MyBase" /N "Робот" /P "Пароль" /DisableStartupMessages /C "ВыгрузитьОстатки" /Execute "C:\Scripts\MyProcessing.epf"

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


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	// Проверяем, передан ли параметр через ключ /C
	Если Не ПустаяСтрока(ПараметрЗапуска) Тогда
		// Подключаем обработчик ожидания для корректного старта после полной отрисовки формы
		ПодключитьОбработчикОжидания("ВыполнитьДействиеПоРасписанию", 0.1, Истина);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьДействиеПоРасписанию()
	Попытка
		Если ВРег(СокрЛП(ПараметрЗапуска)) = "ВЫГРУЗИТЬОСТАТКИ" Тогда
			ВыполнитьВыгрузкуОстатковСервер();
		ИначеЕсли ВРег(СокрЛП(ПараметрЗапуска)) = "ЗАГРУЗИТЬЦЕНЫ" Тогда
			ВыполнитьЗагрузкуЦенСервер();
		КонецЕсли;
	Исключение
		ЗаписьЖурналаРегистрации("Автозапуск обработки", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;
	
	// Обязательно завершаем работу сеанса
	ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры

Важные технические нюансы автоматического запуска

При настройке автоматического исполнения обработок через планировщик необходимо учитывать ряд критических особенностей платформы 1С:Предприятие 8.3:

  1. Завершение работы сеанса: Ключ /Execute лишь открывает файл, но не закрывает 1С после завершения алгоритма. Если в коде не вызвать ЗавершитьРаботуСистемы(Ложь) или ПрекратитьРаботуСистемы(), процесс 1cv8.exe останется висеть в памяти, блокируя клиентские лицензии и последующие запуски.
  2. Защита от опасных действий: Начиная с версии платформы 8.3.9 при открытии внешних файлов отображается модальное окно с предупреждением безопасности. В автоматическом режиме это окно заблокирует выполнение. Чтобы обойти блокировку, необходимо отключить защиту от опасных действий для сервисного пользователя в конфигураторе (или в режиме «1С:Предприятие»), либо настроить параметр DisableUnsafeActionProtection в конфигурационном файле conf.cfg.
  3. Подавление исключений и логирование: В автоматическом режиме любой необработанный сбой вызовет всплывающее диалоговое окно об ошибке. Весь основной код процедур следует обрамлять в блок Попытка ... Исключение, записывая результаты работы и ошибки в системный журнал через метод ЗаписьЖурналаРегистрации.
  4. Клиентский контекст: Для выполнения серверных операций в управляемом приложении внешняя обработка должна корректно вызывать серверные методы формы или модуля объекта. При запуске через тонкий клиент (1cv8c.exe) прямое исполнение серверных алгоритмов из модуля объекта обработки без вызова процедур формы недоступно, поэтому для регламентных задач целесообразно использовать запуск через толстый клиент 1cv8.exe.

Альтернативные способы выполнения задач без изменения конфигурации

Рассмотрим другие подходы, если запуск интерактивного сеанса через командную строку не подходит:

  1. Подсистема дополнительных отчетов и обработок (БСП): Если конфигурация разработана на основе «1С:Библиотеки стандартных подсистем» (как, например, «1С:Управление нашей фирмой»), внешнюю обработку можно подключить в справочник через пользовательский интерфейс. Для файловых баз потребуется настроить один постоянный регламентный сеанс 1С, который будет циклически выполнять фоновые задания по встроенному расписанию БСП.
  2. Расширения конфигурации: Механизм расширений (начиная с 8.3) позволяет добавить собственное регламентное задание и логику в общий модуль без снятия основной конфигурации с поддержки. Это исключает необходимость в командных файлах и решает вопросы с предупреждениями безопасности.
  3. COM-соединение: Можно использовать внешний скрипт, подключающийся к базе через V83.COMConnector. Метод ВнешниеОбработки.Создать() позволяет загрузить файл обработки и вызвать требуемую функцию напрямую без отображения пользовательского интерфейса.
← На главную