Автозапуск 1С без участия человека: от bat-файла до кластера

· 10 мин

Содержание

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

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

Что выбрать: регламентное задание или планировщик Windows

Сначала решите, где должна жить автоматизация. От этого зависит, кто отвечает за запуск, где искать ошибку и сколько лицензий уйдёт.

ЗадачаЧем запускатьПочему
Загрузка курсов валют, обмен с сайтом, ЭДОРегламентное заданиеЛогика уже есть в типовой конфигурации
Выгрузка базы в .dtПланировщик Windows + КонфигураторНужен режим DESIGNER, изнутри базы не сделать
Обновление конфигурации ночьюПланировщик Windows + КонфигураторТребуется монопольный доступ
Своя обработка раз в суткиРегламентное задание (серверная база) или планировщик с /Execute (файловая)Зависит от варианта базы
Тестирование и исправлениеПланировщик Windows + КонфигураторТолько из Конфигуратора, монопольно

💡 Правило простое: всё, что делается кодом внутри базы, отдавайте регламентным заданиям. Всё, что требует Конфигуратора или монопольного режима, отдавайте Планировщику Windows.

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

Для файловой базы планировщик Windows — основной инструмент. Он умеет запустить 1С в заданное время даже без вошедшего в систему пользователя.

Шаг 1. Подготовьте пользователя 1С

  1. В базе создайте отдельного пользователя, например Робот, с паролем.
  2. Дайте ему только нужные права: для обмена — права на обмен, для выгрузки — администратора.
  3. Если будете открывать внешнюю обработку через /Execute, в Конфигураторе в свойствах этого пользователя снимите флажок «Защита от опасных действий». Иначе запуск остановится на окне предупреждения, и его некому будет закрыть.

Шаг 2. Напишите bat-файл

Удобнее держать команду в bat-файле, а в планировщике вызывать уже его. Пример для ежедневной выгрузки:

@echo off
set V8="C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe"
set BASE=C:\Base\Buh
set DST=D:\Backup\Buh_%date:~6,4%-%date:~3,2%-%date:~0,2%.dt
set LOG=D:\Backup\log_buh.txt

%V8% DESIGNER /F"%BASE%" /N"Робот" /P"Пароль" /DumpIB"%DST%" /DisableStartupDialogs /Out"%LOG%" -NoTruncate
if %ERRORLEVEL% NEQ 0 echo %date% %time% ОШИБКА выгрузки >> %LOG%

Номер версии платформы в пути замените на свой. Если указать 1cv8.exe из каталога конкретной версии, после установки новой платформы скрипт продолжит работать на старой — это бывает плюсом: обновление платформы не сломает ночную задачу.

Шаг 3. Создайте задание в планировщике

Через интерфейс: Панель управления → Администрирование → Планировщик заданий → Создать задачу. На вкладке «Общие» отметьте «Выполнять для всех пользователей» (выполнять независимо от регистрации пользователя), на вкладке «Триггеры» задайте время, на «Действия» укажите bat-файл.

То же одной командой из консоли, запущенной от администратора:

schtasks /Create /TN "1C\Выгрузка Бухгалтерии" /TR "D:\Scripts\dump_buh.bat" /SC DAILY /ST 02:00 /RU "DOMAIN\svc1c" /RP "Пароль"

Не запускайте 1С от учётной записи SYSTEM «на всякий случай». У неё нет обычного профиля, сетевых дисков и прав на папку с базой по сети. Заведите отдельную учётную запись Windows с доступом к каталогу базы и к папке для копий.

Шаг 4. Регламентные задания в файловой базе

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

  • 🖥 Оставить один сеанс открытым на сервере или рабочей станции. Регламентные задания выполняются внутри клиентского сеанса.
  • ⏰ Запускать клиент по расписанию с ключом /AllowExecuteScheduledJobs -Force, чтобы этот сеанс гарантированно взял на себя выполнение заданий.
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" ENTERPRISE /F"C:\Base\Buh" /N"Робот" /P"Пароль" /AllowExecuteScheduledJobs -Force /DisableStartupDialogs

Такой сеанс занимает лицензию, пока открыт. Закрывать его можно тем же планировщиком через несколько часов (вкладка «Параметры» → «Останавливать задачу, выполняемую дольше»).

Регламентные задания в клиент-серверной базе: настройка расписания

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

Где включить и настроить

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

Откройте задание и нажмите на ссылку расписания. В окне расписания задаются:

  • 📅 период и дни недели, по которым задание работает;
  • 🕑 время начала и время окончания интервала;
  • 🔁 повтор через заданное число секунд внутри дня;
  • ⏹ время, после которого выполнение завершается;
  • 🔄 повтор при аварийном завершении: сколько раз и через какой интервал.

Почему задания в серверной базе не запускаются

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

Блокировку можно снять и из командной строки через rac (сервер администрирования ras должен быть запущен):

rac infobase update --cluster=<id кластера> --infobase=<id базы> --infobase-user="Администратор" --infobase-pwd="Пароль" --scheduled-jobs-deny=off

Идентификаторы кластера и базы покажут rac cluster list и rac infobase summary list --cluster=<id>.

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

Ключи командной строки 1cv8 для автоматизации

Ключи, без которых не обходится ни один сценарий автозапуска:

КлючЧто делает
ENTERPRISE / DESIGNERРежим запуска: пользовательский или Конфигуратор
/F"путь"Файловая база
/S"сервер\база"Серверная база
/N"имя" /P"пароль"Пользователь 1С и пароль
/WA-Отключить аутентификацию Windows, использовать логин и пароль 1С
/DisableStartupDialogsНе показывать стартовые диалоги
/DisableStartupMessagesНе показывать стартовые сообщения о смене платформы и подобные
/Execute"файл.epf"Открыть внешнюю обработку сразу после запуска
/C"строка"Передать строку в базу, читается через ПараметрЗапуска
/Out"файл" -NoTruncateПисать сообщения в лог и не очищать его при каждом запуске
/DumpResult"файл"Записать код результата пакетной команды Конфигуратора
/UC"код"Код разрешения входа в заблокированную базу
/DumpIB / /RestoreIBВыгрузка и загрузка .dt

Как обработка понимает, что её запустили по расписанию

Через /C передайте признак, а в обработке проверьте его и закройте программу по окончании работы:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Если СтрНайти(ПараметрЗапуска, "АВТО") > 0 Тогда
		ВыполнитьНаСервере();
		ЗавершитьРаботуСистемы(Ложь);
	КонецЕсли;
КонецПроцедуры

ЗавершитьРаботуСистемы(Ложь) закрывает программу без вопроса пользователю. Без этой строки сеанс повиснет до утра и займёт лицензию.

Ночное обновление конфигурации и классификаторов

Обновление конфигурации из командной строки

Обновить конфигурацию на поддержке из файла .cfu и сразу применить изменения к базе можно одной командой:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /S"srv1c\buh" /N"Администратор" /P"Пароль" /UC"night" /UpdateCfg"D:\Update\1Cv8.cfu" /UpdateDBCfg /Out"D:\Update\upd.log" -NoTruncate /DumpResult"D:\Update\result.txt"

Перед обновлением обязательно выгрузите базу в .dt или сделайте резервную копию СУБД — откатить обновление структуры без копии нельзя.

Для /UpdateDBCfg нужен монопольный доступ, поэтому порядок на сервере такой:

  1. Включите блокировку сеансов с кодом разрешения: rac infobase update ... --sessions-deny=on --permission-code="night" --scheduled-jobs-deny=on.
  2. Завершите активные сеансы (rac session list, затем rac session terminate --session=<id>). Пользователи потеряют несохранённые данные, поэтому делайте это ночью и предупредите людей заранее.
  3. Запустите обновление с ключом /UC"night".
  4. Запустите базу в режиме ENTERPRISE от администратора. При первом входе выполнится обработчик обновления данных, без него типовая конфигурация не даст работать пользователям.
  5. Снимите блокировку: --sessions-deny=off --scheduled-jobs-deny=off.

Если подкоманды rac на вашей версии платформы отличаются, смотрите справку rac help infobase и rac help session.

Встроенное обновление без скриптов

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

Классификаторы и курсы

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

Логи, коды возврата и контроль ночных запусков

Автоматизация, о сбое которой никто не знает, хуже ручной работы. Настройте три уровня контроля.

1. Код возврата 1cv8.exe. Ноль — успех, любое другое значение — ошибка. Проверяйте %ERRORLEVEL% в bat-файле сразу после вызова, как в примере выше. Ключ /DumpResult дублирует результат в файл — удобно, если bat запускает внешняя система.

2. Текстовый лог /Out. Туда Конфигуратор пишет, что сделал и на чём остановился. Без -NoTruncate файл перезаписывается при каждом запуске, и вчерашняя ошибка исчезает.

3. Журнал регистрации. Для регламентных заданий и своих обработок смотрите Администрирование → Обслуживание → Журнал регистрации, отбор по событию или уровню «Ошибка». В своём коде фиксируйте результат явно:

ЗаписьЖурналаРегистрации("Автозапуск.Выгрузка",
	УровеньЖурналаРегистрации.Ошибка, , ,
	"Не удалось выгрузить файл: " + ОписаниеОшибки());

В самом Планировщике Windows включите журнал всех заданий (ссылка в правой панели) и смотрите колонку «Результат последнего запуска». Код 0x0 — задача завершилась успешно, другие коды означают ошибку запуска bat-файла или сам 1С вернул ошибку.

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

Как не уронить производительность фоновыми заданиями

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

  • ⏱ Разнесите тяжёлое по времени. Выгрузка .dt, обновление полнотекстового индекса, пересчёт итогов и обмен не должны стартовать в одну минуту. Дайте каждой операции своё окно: например, 01:00 — обмены, 02:00 — копия, 03:30 — обслуживание.
  • 🔍 Не обновляйте полнотекстовый индекс каждую минуту в большой базе. Задания обновления и слияния индекса полнотекстового поиска лучше ставить реже, а слияние — на ночь.
  • 🧱 Ограничивайте время выполнения. В расписании задайте время окончания или «Завершать после», чтобы зависший обмен не тянулся в рабочий день.
  • 🚫 Выключайте лишнее. Задания для неиспользуемых подсистем (обмен с сайтом, которого нет, синхронизация с банком без договора) просто греют сервер. Снимите у них флажок «Включено».
  • 🖥 В файловой базе фон тормозит интерфейс. Задания выполняются в том же клиентском сеансе, поэтому тяжёлую работу днём там не планируйте вовсе.
  • 📊 Смотрите на кластер. В консоли кластера видно, сколько фоновых заданий висит в сеансах и сколько памяти занимают рабочие процессы. Если ночью рабочий процесс раздувается и перезапускается, ищите задание, которое обрабатывает данные одной транзакцией.

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

Сколько лицензий уйдёт

СпособНужна клиентская лицензия
Регламентное задание на сервере 1СНет
Клиент ENTERPRISE из Планировщика WindowsДа, пока сеанс открыт
Конфигуратор в пакетном режиме (DESIGNER)Да, на время работы
Файловая база с открытым «дежурным» сеансомДа, постоянно

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

Можно ли запустить 1С автоматически при включении компьютера?
Да. В Планировщике Windows выберите триггер «При запуске» или «При входе в систему» и укажите bat-файл с вызовом 1cv8.exe. Для дежурного сеанса файловой базы это удобнее, чем ярлык в автозагрузке: задача стартует и без входа пользователя.
Почему регламентные задания работают только у администратора?
В файловой базе задания выполняются в одном из клиентских сеансов, и платформа выбирает его сама. Если нужен предсказуемый исполнитель, запустите отдельный сеанс с ключом /AllowExecuteScheduledJobs -Force на машине, которая не выключается на ночь.
Можно ли запускать внешнюю обработку как регламентное задание без доработки конфигурации?
В типовых конфигурациях на БСП — да: подключите обработку через «Дополнительные отчёты и обработки», если она написана как дополнительная обработка с регламентной командой. Обычный .epf без такой регистрации подключить в расписание нельзя, его запускают ключом /Execute.
Будет ли bat-файл работать после обновления платформы?
Будет, если в пути указан каталог конкретной версии и старую платформу не удалили. Если удалили — поправьте путь. Можно указывать общий запускатель 1cestart.exe, но тогда версию выбирает он сам, и это менее предсказуемо для ночных задач.
Как получить уведомление, если ночной запуск упал?
Проверьте ERRORLEVEL в bat-файле и при ошибке отправьте письмо или сообщение любым консольным средством, которое у вас уже есть, например через PowerShell Send-MailMessage или запрос к боту мессенджера. Внутри базы то же самое делают регламентным заданием, которое читает журнал регистрации.