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

Администрирование · 12 мин

Как запустить 1С в фоне: фоновые задания, расписание и пакетный режим

Разбираем, как запустить 1С в фоне: фоновые и регламентные задания, пакетный режим запуска, настройка расписания, проверка выполнения и типичные ошибки.

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

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

Ниже разобраны рабочие способы для обоих вариантов развёртывания, настройка расписания, пакетный запуск из командной строки, проверка результата и типичные ошибки, из-за которых задания «молча» не выполняются.

Что такое фоновые и регламентные задания в 1С

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

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

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

Настройка регламентного задания по расписанию

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

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

Расписание настраивается в консоли заданий или в конфигураторе: периодичность (ежедневно, еженедельно, с интервалом в секундах), время начала и окончания, дни недели. Для тяжёлых операций выбирайте ночные часы с низкой нагрузкой, чтобы фоновое выполнение не конкурировало за ресурсы с работой пользователей.

Порядок действий
  1. 1
    Создайте общий серверный модуль и экспортную процедуру без параметров
  2. 2
    Добавьте регламентное задание и укажите имя метода
  3. 3
    Задайте расписание и убедитесь, что флажок «Использование» установлен
  4. 4
    В клиент-серверной базе проверьте, что на сервере не заблокированы регламентные задания
  5. 5
    Запустите задание вручную из консоли и проверьте журнал регистрации

Фоновое выполнение в файловой базе

Файловый вариант не имеет сервера, который сам следил бы за расписанием. Поэтому регламентные задания выполняются только в сеансе, где это явно разрешено. Стандартное решение — выделить отдельный компьютер или сеанс, который постоянно запущен с параметром выполнения регламентных заданий.

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

bash
"C:\Program Files\1cv8\8.3.22.1750\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Trade" /NRobot /PPassword /ExecuteScheduledJobs /DisableStartupDialogs

Альтернатива постоянному сеансу — запуск из планировщика Windows по расписанию: задача стартует 1С в пакетном режиме, та выполняет нужную обработку через параметр /Execute и завершается. Такой подход надёжнее для редких операций вроде ночного резервного копирования или выгрузки данных.

Пакетный запуск из командной строки

Исполняемый файл 1cv8.exe принимает набор параметров, позволяющих запустить базу без диалогов: указание пути к базе (/F для файловой или /S для серверной), имя и пароль пользователя (/N и /P), ключ /DisableStartupDialogs для подавления стартовых окон и /DisableStartupMessages для подавления сообщений.

Чтобы выполнить конкретное действие, используют параметр /Execute с путём к внешней обработке (.epf) — она откроется, выполнит код в событии «ПриОткрытии» или через обработчик ожидания и должна сама завершить сеанс вызовом «ЗавершитьРаботуСистемы(Ложь)». Без завершения сеанса процесс останется висеть в памяти.

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

Как проверить, что фоновое задание выполнилось

Основной инструмент контроля — консоль «Регламентные и фоновые задания» в режиме предприятия. Для каждого задания видно состояние (выполняется, завершено, ошибка), время последнего запуска и сообщения об ошибках. В типовых конфигурациях есть также «Результаты выполнения регламентных заданий».

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

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

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

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

Состояние в консоли заданий
Норма

«Завершено» с актуальным временем последнего запуска

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

«Ошибка» или дата запуска давно устарела

Журнал регистрации
Норма

События задания без сообщений об ошибках

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

Записи с уровнем «Ошибка» по имени метода

Результат работы
Норма

Созданы документы, отправлены файлы, обновлены данные

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

Данные не изменились, хотя задание «выполнено»

Типичные ошибки и ограничения

Самая частая проблема в клиент-серверном варианте — блокировка регламентных заданий на уровне информационной базы. В консоли кластера или в параметрах базы есть свойство «Блокировка регламентных заданий»; если она включена (например, после восстановления копии базы), ни одно задание не запустится, и внешне это выглядит как «всё настроено, но не работает».

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

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

Типичные ошибки
01
Забытый флажок «Использование» у регламентного задания — задание существует, но никогда не запускается
02
Закрытый сеанс-робот в файловой базе — расписание есть, а исполнять его некому
03
Процедура с параметрами в имени метода — регламентное задание вызывает только методы без параметров
04
Отсутствие завершения сеанса в пакетной обработке — процессы 1cv8 накапливаются и съедают память
05
Запуск тяжёлого задания днём — блокировки и жалобы пользователей на «зависания»

Выбор способа под вашу ситуацию

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

Сравнение вариантов

Регламентные задания (клиент-сервер)

Основной способ для регулярных операций; исполняются на сервере независимо от сеансов. Требуют снятой блокировки заданий на базе.

Сеанс-робот с /ExecuteScheduledJobs (файловая база)

Подходит для постоянных фоновых задач в файловом режиме; требует постоянно включённого компьютера и открытого сеанса.

Пакетный запуск через планировщик Windows

Лучший вариант для редких операций и резервного копирования; не требует постоянного сеанса, но нужен аккуратный bat-файл с завершением работы.

Программный вызов ФоновыеЗадания.Выполнить

Для разгрузки интерфейса пользователя — длительная операция уходит в фон, а пользователь продолжает работать. В файловой базе привязан к сеансу инициатора.

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

Итог

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

В клиент-серверной базе фоновый запуск — это регламентные задания с расписанием, исполняемые сервером. В файловой базе нужен постоянный сеанс с /ExecuteScheduledJobs или пакетный запуск через планировщик Windows. Всегда проверяйте результат через консоль заданий и журнал регистрации, а разрушительные операции тестируйте на копии.

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

Маршрут решения

Как выбрать действие

Клиент-серверная база, задача должна идти по расписаниюНастройте регламентное задание и проверьте блокировку заданий в свойствах базы
Файловая база, задания не выполняютсяЗапустите отдельный сеанс с параметром /ExecuteScheduledJobs или перенесите запуск в планировщик Windows
Задание падает с ошибкой о недоступности интерактивных действийУберите из кода открытие форм и диалоги, вынесите логику в серверную процедуру
Нужно запустить обработку один раз ночьюСоздайте bat-файл с /Execute и добавьте задачу в планировщик Windows
Почему регламентное задание не запускается, хотя расписание настроено?

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

Можно ли запустить 1С в фоне без открытого окна на рабочем столе?

Да, при запуске через планировщик Windows с опцией «Выполнять вне зависимости от регистрации пользователя» процесс работает без видимого окна. Дополнительно используйте ключи /DisableStartupDialogs и /DisableStartupMessages, чтобы программа не ждала реакции пользователя.

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

Фоновое задание создаётся программно в любой момент и выполняется один раз. Регламентное — это объект конфигурации с расписанием: платформа сама порождает фоновое задание при каждом срабатывании расписания. Регламентное задание — это «фоновое задание плюс расписание».

Что будет, если фоновое задание зависнет?

Задание продолжит занимать рабочий процесс сервера или сеанс. Его можно найти в консоли заданий и принудительно отменить. Чтобы зависания не блокировали работу, задавайте разумные таймауты в коде и избегайте ожидания внешних ресурсов без ограничения по времени.

Безопасно ли хранить пароль в bat-файле для пакетного запуска?

Это допустимый, но слабый вариант: пароль виден любому, кто откроет файл или посмотрит задачу планировщика. Лучше использовать аутентификацию ОС, ограничить права учётной записи-робота минимумом и ограничить доступ к самому bat-файлу на уровне файловой системы.

Почему задание выполнилось, но данные не изменились?

Частая причина — исключение внутри транзакции, которое код перехватил и «проглотил» без записи в журнал. Добавьте в обработчик исключений явную запись ошибки в журнал регистрации и проверьте права учётной записи, под которой исполняется задание.