Автозапуск 1С без участия человека: от bat-файла до кластера
Содержание
Чтобы 1С запускалась сама, нужны две вещи: Планировщик заданий Windows, который в нужное время вызывает 1cv8.exe с параметрами командной строки, и регламентные задания внутри базы, которые выполняют работу по расписанию. В клиент-серверной базе регламентные задания крутит сервер 1С, и планировщик Windows нужен только для внешних операций: выгрузки, обновления конфигурации, запуска обработки.
В файловой базе всё сложнее: регламентные задания там выполняются только пока база открыта хотя бы одним клиентом. Поэтому ночной обмен, загрузка курсов и резервная копия «сами» не случатся, если вечером все закрыли программу. Ниже — рабочие схемы для обоих вариантов, готовые команды и способ понять утром, что ночью всё прошло.
Что выбрать: регламентное задание или планировщик Windows
Сначала решите, где должна жить автоматизация. От этого зависит, кто отвечает за запуск, где искать ошибку и сколько лицензий уйдёт.
| Задача | Чем запускать | Почему |
|---|---|---|
| Загрузка курсов валют, обмен с сайтом, ЭДО | Регламентное задание | Логика уже есть в типовой конфигурации |
Выгрузка базы в .dt | Планировщик Windows + Конфигуратор | Нужен режим DESIGNER, изнутри базы не сделать |
| Обновление конфигурации ночью | Планировщик Windows + Конфигуратор | Требуется монопольный доступ |
| Своя обработка раз в сутки | Регламентное задание (серверная база) или планировщик с /Execute (файловая) | Зависит от варианта базы |
| Тестирование и исправление | Планировщик Windows + Конфигуратор | Только из Конфигуратора, монопольно |
💡 Правило простое: всё, что делается кодом внутри базы, отдавайте регламентным заданиям. Всё, что требует Конфигуратора или монопольного режима, отдавайте Планировщику Windows.
Автозапуск файловой базы через Планировщик заданий Windows
Для файловой базы планировщик Windows — основной инструмент. Он умеет запустить 1С в заданное время даже без вошедшего в систему пользователя.
Шаг 1. Подготовьте пользователя 1С
- В базе создайте отдельного пользователя, например
Робот, с паролем. - Дайте ему только нужные права: для обмена — права на обмен, для выгрузки — администратора.
- Если будете открывать внешнюю обработку
через
/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 нужен монопольный доступ, поэтому порядок на сервере такой:
- Включите блокировку сеансов с кодом разрешения:
rac infobase update ... --sessions-deny=on --permission-code="night" --scheduled-jobs-deny=on. - Завершите активные сеансы (
rac session list, затемrac session terminate --session=<id>). Пользователи потеряют несохранённые данные, поэтому делайте это ночью и предупредите людей заранее. - Запустите обновление с ключом
/UC"night". - Запустите базу в режиме
ENTERPRISEот администратора. При первом входе выполнится обработчик обновления данных, без него типовая конфигурация не даст работать пользователям. - Снимите блокировку:
--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) | Да, на время работы |
| Файловая база с открытым «дежурным» сеансом | Да, постоянно |