Командная строка 1С 8.3: ключи, скрипты и автоматизация

· 9 мин

Содержание

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. Логику поместите в обработчик открытия формы или в процедуру, которую он вызывает.
  2. Серверную часть вынесите в серверную процедуру формы или модуля объекта.
  3. В конце вызовите ЗавершитьРаботуСистемы(Ложь). Параметр Ложь отключает запрос подтверждения, иначе 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
)

Здесь два приёма, без которых скрипт работает не так, как ждут:

  1. start "" /wait. 1cv8.exe — оконное приложение. Без start /wait командный файл не дождётся окончания выгрузки и сразу пойдёт дальше: копировать ещё не созданный файл или проверять пустой результат.
  2. Формат даты. Разбор %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. Вторая копия не стартует, пока первая не закончит.

Что обычно ставят на расписание

ЗадачаРежимКлючиКогда запускать
Резервная копия .dtDESIGNER/DumpIBНочью
Сохранение .cf перед обновлениемDESIGNER/DumpCfgПеред каждым обновлением
Обновление конфигурацииDESIGNER/UpdateCfg + /UpdateDBCfgВ окно, когда в базе никого нет
Загрузка курсов, обменыENTERPRISE/Execute + /CПо расписанию задачи
Очистка кэша у пользователяENTERPRISE/ClearCacheРазово после обновления

Обновление конфигурации БД по расписанию оборвётся, если кто-то остался в базе. Перед окном обслуживания установите блокировку начала сеансов и предупредите пользователей: при завершении сеансов несохранённые документы пропадут. Скрипт тогда входит в базу с ключом /UC"код".

Проверка результата: коды возврата, логи, типичные сбои

Пакетный режим молчит. Узнать, чем закончился запуск, можно тремя способами.

  1. Код возврата процесса. 0 — успех, ненулевое значение — ошибка. В bat это %ERRORLEVEL% (только при start /wait), в bash — $?.
  2. Файл /DumpResult. Платформа записывает в него код результата. Удобно, когда планировщик не передаёт код возврата дальше.
  3. Файл /Out. Сюда пишутся тексты сообщений: ошибки авторизации, блокировки, проблемы с файлом. Добавьте модификатор -NoTruncate, чтобы новые записи дописывались в конец, а не стирали лог: /Out"dump.log" -NoTruncate.

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

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

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

Можно ли выгрузить .dt, не выгоняя пользователей?
Да, монопольный режим для /DumpIB не нужен. Но выгрузка нагружает базу и замедляет работу пользователей, поэтому её ставят на ночь.
Чем `/Execute` отличается от `/C`?
/Execute открывает внешнюю обработку из файла. /C только передаёт строку в базу, в переменную ПараметрЗапуска; что с ней делать, решает код конфигурации или обработки.
Как запустить 1С из командной строки сразу в конфигураторе?
Первым словом после имени файла укажите DESIGNER, затем ключи базы: 1cv8.exe DESIGNER /F"D:\Bases\Buh" /N"Админ". Без пакетных ключей конфигуратор просто откроется в окне.
Работает ли командная строка с базой в облаке через веб-публикацию?
Подключиться в пользовательском режиме можно через /WS"адрес". Пакетные команды конфигуратора через веб-публикацию не выполняются — для них нужен прямой доступ к файловой или серверной базе.
Можно ли запускать скрипт 1С от имени службы без входа в Windows?
Да, через Планировщик заданий с режимом «выполнять независимо от входа пользователя». Учётной записи задания нужны права на каталог базы, папку выгрузки и доступ к ключу защиты или лицензии.