Командная строка 1С 8.3: ключи, скрипты и автоматизация
Содержание
1С 8.3 можно запускать и обслуживать из командной строки: исполняемому файлу 1cv8.exe (толстый клиент и конфигуратор) или 1cv8c.exe (тонкий клиент) передают режим запуска, путь к базе, пользователя и действие. Например, 1cv8.exe DESIGNER /F"D:\Bases\Buh" /N"Админ" /P"пароль" /DumpIB"E:\Backup\buh.dt" выгрузит базу в файл без участия человека. Так делают ночные копии, обновляют конфигурацию и запускают обработки по расписанию.
Способов управлять 1С из командного интерфейса три. Ключи 1cv8 подходят для разовых задач и простых скриптов. Утилита ibcmd (платформа 8.3.14 и новее) работает с базой без графической оболочки и удобна на серверах Linux. Для кластера серверов есть rac, но это уже администрирование сеансов и баз, а не запуск программы.
Как устроена строка запуска 1С 8.3
Строка запуска собирается из трёх частей: путь к исполняемому файлу, режим и набор ключей.
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Иванов" /P"12345"
Режимы пишутся первым словом после имени файла:
| Режим | Что запускает | Когда нужен |
|---|---|---|
ENTERPRISE | Пользовательский режим 1С:Предприятие | Работа, запуск обработок, тесты |
DESIGNER | Конфигуратор | Выгрузка и загрузка, обновление, проверка |
CREATEINFOBASE | Создание новой базы | Развёртывание пустой базы из шаблона |
Какой файл вызывать:
- 🖥️
1cv8.exe— толстый клиент. Умеет иENTERPRISE, иDESIGNER. Для пакетных операций конфигуратора нужен именно он. - 🪶
1cv8c.exe— тонкий клиент. Только пользовательский режим, зато быстрее стартует и требует меньше памяти. - 🚪
1cestart.exe— стартер из папкиcommon. Сам выбирает версию платформы и передаёт ключи дальше. Удобен для ярлыков, но в скриптах лучше указывать конкретный1cv8.exe, чтобы не гадать, какая версия поднимется.
Версий платформы на компьютере может быть несколько. Путь C:\Program Files\1cv8\8.3.xx.xxxx\bin\ укажите с точным номером той версии, под которой работает база. Иначе при обновлении платформы скрипт продолжит запускать старую.
Ключи и модификаторы запуска: справочник
Значения ключей берут в двойные кавычки, пробела между ключом и значением нет: /F"D:\Bases\Buh", а не /F "D:\Bases\Buh".
Подключение к базе
| Ключ | Назначение | Пример |
|---|---|---|
/F | Файловая база, путь к каталогу | /F"D:\Bases\Buh" |
/S | Серверная база: сервер\имя базы | /S"srv01\buh" или /S"srv01:1541\buh" |
/WS | База, опубликованная на веб-сервере | /WS"http://web01/buh" |
/IBName | База по имени из списка баз пользователя | /IBName"Бухгалтерия" |
/IBConnectionString | Полная строка соединения | /IBConnectionString"File=""D:\Bases\Buh"";" |
Пользователь и аутентификация
- 👤
/N"Имя"и/P"Пароль"— вход по логину 1С. - 🔑
/WA+— вход через учётную запись Windows,/WA-— запретить его и требовать логин 1С. Без/WA-платформа сначала попробует аутентификацию ОС. - 🔓
/UC"код"— код разрешения входа, когда в базе установлена блокировка начала сеансов. Без него скрипт не попадёт в заблокированную базу.
Поведение при старте
- 🔇
/DisableStartupMessages— подавить стартовые сообщения (например, о том, что конфигурация отличается от конфигурации БД). - 🚫
/DisableStartupDialogs— не показывать диалоги выбора базы и ввода пароля. При ошибке подключения 1С не будет ждать человека, а завершится. - ⚙️
/C"строка"— передать произвольный параметр в базу. В коде он доступен через глобальную переменнуюПараметрЗапуска. - 🧹
/ClearCache— очистить кэш клиента перед стартом. Помогает, когда после обновления у пользователя «старые» формы. - 🌐
/L"ru"и/VL"ru"— язык интерфейса и локализация сеанса. - 🧪
/RunModeOrdinaryApplicationи/RunModeManagedApplication— принудительно обычное или управляемое приложение для толстого клиента.
Пакетные команды конфигуратора
Работают только в режиме DESIGNER:
| Ключ | Действие |
|---|---|
/DumpIB"файл.dt" | Выгрузить информационную базу |
/RestoreIB"файл.dt" | Загрузить базу из .dt (заменяет данные!) |
/DumpCfg"файл.cf" | Сохранить конфигурацию в файл |
/LoadCfg"файл.cf" | Загрузить конфигурацию из файла |
/UpdateCfg"файл.cfu" | Обновить конфигурацию поставщика файлом обновления |
/UpdateDBCfg | Обновить конфигурацию базы данных |
/Out"лог.txt" | Писать служебные сообщения в файл |
/DumpResult"файл" | Записать в файл код результата выполнения |
Ключи можно комбинировать: /UpdateCfg"..." /UpdateDBCfg сначала обновит основную конфигурацию, потом применит её к базе.
/RestoreIB и /UpdateDBCfg требуют монопольного доступа. Если в базе есть пользователи, операция не выполнится. Перед загрузкой .dt сделайте свежую выгрузку текущей базы — загрузка полностью затирает данные.
Как запустить внешнюю обработку из командной строки
Для запуска обработки без ручного открытия служит ключ /Execute:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8c.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Робот" /P"..." /Execute"D:\Scripts\ZagruzkaKursov.epf" /DisableStartupDialogs
Платформа откроет базу и сразу откроет форму обработки. Дальше всё зависит от кода самой обработки. Чтобы она отработала и закрыла 1С без участия человека:
- Логику поместите в обработчик открытия формы или в процедуру, которую он вызывает.
- Серверную часть вынесите в серверную процедуру формы или модуля объекта.
- В конце вызовите
ЗавершитьРаботуСистемы(Ложь). ПараметрЛожьотключает запрос подтверждения, иначе 1С зависнет в ожидании ответа.
Если одной обработке нужно несколько сценариев, передавайте режим через /C:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если СтрНайти(ПараметрЗапуска, "АВТО") > 0 Тогда
ВыполнитьЗагрузкуНаСервере();
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецПроцедуры
Строка запуска тогда дополняется ключом /C"АВТО". Без этого параметра обработка откроется как обычная форма, и с ней можно работать вручную.
Предупреждение безопасности
В 8.3 при открытии внешней обработки платформа может показать предупреждение о возможно опасном действии. В пакетном запуске отвечать на него некому, и скрипт повиснет.
Решение — в свойствах пользователя, от имени которого идёт запуск, снять флажок Защита от опасных действий. Делается это в списке пользователей конфигуратора или в карточке пользователя в режиме предприятия. Отключайте защиту только у служебной учётной записи «робота», а не у живых сотрудников.
Заведите для скриптов отдельного пользователя 1С с минимальными правами под конкретную задачу. Так в журнале регистрации сразу видно, что действие сделал скрипт, а не бухгалтер.
Запуск 1С из командной строки в Linux
Синтаксис ключей в Linux тот же, меняются путь к программе и экранирование в оболочке. В новых версиях платформы файлы лежат в каталоге вида /opt/1cv8/x86_64/8.3.xx.xxxx/, в более старых — в /opt/1C/v8.3/x86_64/. Проверить можно командой ls /opt/1cv8/x86_64/.
#!/bin/bash
V8=/opt/1cv8/x86_64/8.3.xx.xxxx/1cv8
"$V8" DESIGNER /F"/srv/1c/buh" /N"Админ" /P"$ONEC_PASS" \
/DumpIB"/backup/buh_$(date +%F).dt" \
/Out"/var/log/1c/dump.log" /DisableStartupDialogs
echo "Код возврата: $?"
Чем Linux отличается на практике:
- 🖼️ Нужен дисплей.
1cv8— графическое приложение, даже в пакетном режиме конфигуратора ему нужен X-сервер. На сервере без графики запуск оборачивают вxvfb-run:xvfb-run -a "$V8" DESIGNER .... Пакетxvfbставится из репозитория дистрибутива. - 🔤 Кавычки. Bash съедает внешние кавычки. Запись
/F"/srv/1c/buh"для пути без пробелов сработает. Если в пути есть пробелы, берите аргумент целиком в одинарные кавычки:'/F"/srv/1c/моя база"'. - 🔐 Права. Скрипт должен работать от пользователя, у которого есть права на каталог файловой базы и на каталог для выгрузки. Для серверных баз это не важно: данные лежат на сервере 1С.
- 🧰 Альтернатива — ibcmd. Утилита работает без графики и без X-сервера, умеет выгружать и загружать базу, работать с конфигурацией. Синтаксис у неё свой, с подкомандами; список смотрите в
ibcmd help.
Не храните пароль прямо в тексте скрипта. Передавайте его через переменную окружения из файла с правами 600, как $ONEC_PASS в примере. Строку запуска процесса видят другие пользователи системы через ps.
Автоматизация через планировщик задач Windows и cron
Скрипт сам по себе ничего не автоматизирует — его запускает планировщик.
Windows: bat-файл и Планировщик заданий
Типичный bat для ночной выгрузки:
@echo off
set V8="C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe"
set DT=E:\Backup\buh_%date:~6,4%-%date:~3,2%-%date:~0,2%.dt
start "" /wait %V8% DESIGNER /F"D:\Bases\Buh" /N"Робот" /P"..." /DumpIB"%DT%" /Out"E:\Backup\dump.log" /DumpResult"E:\Backup\result.txt" /DisableStartupDialogs
if errorlevel 1 (
echo Ошибка выгрузки >> E:\Backup\errors.log
)
Здесь два приёма, без которых скрипт работает не так, как ждут:
start "" /wait.1cv8.exe— оконное приложение. Безstart /waitкомандный файл не дождётся окончания выгрузки и сразу пойдёт дальше: копировать ещё не созданный файл или проверять пустой результат.- Формат даты. Разбор
%date%в примере рассчитан на русскую локаль видаДД.ММ.ГГГГ. На сервере с другими региональными настройками строка будет другой — проверьтеecho %date%вручную.
Регистрация задания из командной строки:
schtasks /create /tn "1C Backup Buh" /tr "D:\Scripts\backup_buh.bat" /sc daily /st 03:00 /ru "DOMAIN\svc_1c" /rp *
Учётная запись задания должна иметь доступ к каталогу базы и к папке выгрузки. В свойствах задания включите запуск независимо от входа пользователя в систему.
Linux: cron или systemd
Строка для crontab -e, выгрузка в 3:00 каждый день:
0 3 * * * /opt/scripts/backup_buh.sh >> /var/log/1c/cron.log 2>&1
Если нужна защита от двойного запуска, оберните команду в flock: flock -n /tmp/buh.lock /opt/scripts/backup_buh.sh. Вторая копия не стартует, пока первая не закончит.
Что обычно ставят на расписание
| Задача | Режим | Ключи | Когда запускать |
|---|---|---|---|
| Резервная копия .dt | DESIGNER | /DumpIB | Ночью |
| Сохранение .cf перед обновлением | DESIGNER | /DumpCfg | Перед каждым обновлением |
| Обновление конфигурации | DESIGNER | /UpdateCfg + /UpdateDBCfg | В окно, когда в базе никого нет |
| Загрузка курсов, обмены | ENTERPRISE | /Execute + /C | По расписанию задачи |
| Очистка кэша у пользователя | ENTERPRISE | /ClearCache | Разово после обновления |
Обновление конфигурации БД по расписанию оборвётся, если кто-то остался в базе. Перед окном обслуживания установите блокировку начала сеансов и предупредите пользователей: при завершении сеансов несохранённые документы пропадут. Скрипт тогда входит в базу с ключом /UC"код".
Проверка результата: коды возврата, логи, типичные сбои
Пакетный режим молчит. Узнать, чем закончился запуск, можно тремя способами.
- Код возврата процесса.
0— успех, ненулевое значение — ошибка. В bat это%ERRORLEVEL%(только приstart /wait), в bash —$?. - Файл
/DumpResult. Платформа записывает в него код результата. Удобно, когда планировщик не передаёт код возврата дальше. - Файл
/Out. Сюда пишутся тексты сообщений: ошибки авторизации, блокировки, проблемы с файлом. Добавьте модификатор-NoTruncate, чтобы новые записи дописывались в конец, а не стирали лог:/Out"dump.log" -NoTruncate.
Если этих логов не хватает, следующий шаг — журнал регистрации базы (видно, что делал пользователь-робот) и технологический журнал платформы, который включается файлом logcfg.xml.
/DisableStartupDialogs и /DisableStartupMessages. Для обработок проверьте, что в коде есть ЗавершитьРаботуСистемы(Ложь) и что у пользователя снята защита от опасных действий./N и /P, добавьте /WA-. Убедитесь, что у пользователя 1С стоит флажок входа с аутентификацией 1С./UC./UC"код" с тем же кодом, что указан в блокировке.xvfb-run -a или перейдите на ibcmd для операций с базой.1cv8.exe через start "" /wait и проверяйте лог /Out.Частые вопросы
Можно ли выгрузить .dt, не выгоняя пользователей?
/DumpIB не нужен. Но выгрузка нагружает базу и замедляет работу пользователей, поэтому её ставят на ночь.Чем `/Execute` отличается от `/C`?
/Execute открывает внешнюю обработку из файла. /C только передаёт строку в базу, в переменную ПараметрЗапуска; что с ней делать, решает код конфигурации или обработки.Как запустить 1С из командной строки сразу в конфигураторе?
DESIGNER, затем ключи базы: 1cv8.exe DESIGNER /F"D:\Bases\Buh" /N"Админ". Без пакетных ключей конфигуратор просто откроется в окне.Работает ли командная строка с базой в облаке через веб-публикацию?
/WS"адрес". Пакетные команды конфигуратора через веб-публикацию не выполняются — для них нужен прямой доступ к файловой или серверной базе.