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

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

Как программно закрыть 1С: все рабочие способы

Способы программного завершения работы 1С: встроенные команды, командная строка, скрипты, обработчики. Безопасное закрытие базы без потери данных.

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

Выбор способа зависит от того, откуда инициируется закрытие: из самого прикладного кода, из внешнего скрипта или из административной консоли. Критично различать корректное завершение сеанса, при котором платформа сохраняет настройки и освобождает соединения, и принудительное «убийство» процесса, которое может привести к повреждению файловой базы или зависшим блокировкам на сервере СУБД.

Ниже разобраны основные методы: от простого вызова ЗавершитьРаботуСистемы() до сценариев PowerShell и особенностей работы с сервером 1С:Предприятия.

Закрытие 1С из встроенного языка

Основной метод штатного завершения — ЗавершитьРаботуСистемы(). Он корректно закрывает сеанс: платформа вызывает обработчики завершения, сохраняет пользовательские настройки и освобождает соединение с базой. Метод имеет два необязательных параметра: первый отвечает за запрос подтверждения у пользователя, второй — за перезапуск после завершения.

bsl
// Закрыть программу без вопросов
ЗавершитьРаботуСистемы(Ложь);

// Закрыть и сразу перезапустить
ЗавершитьРаботуСистемы(Ложь, Истина);

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

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

Принудительное завершение из кода

Когда нужно закрыть приложение без каких-либо вопросов и обработчиков, используется ПрекращениеРаботыСистемы(). Этот метод завершает сеанс немедленно, игнорируя обработчики ПередЗавершениемРаботыСистемы. Его применяют в регламентных сценариях, где отказ недопустим: например, робот запустил тонкий клиент для обмена данными и должен гарантированно освободить сеанс.

bsl
&НаКлиенте
Процедура ПослеВыгрузки(Результат, ДопПараметры) Экспорт
	ПрекращениеРаботыСистемы();
КонецПроцедуры

Метод доступен в тонком и толстом клиенте, но не работает в веб-клиенте — там сеанс завершается закрытием вкладки браузера или вызовом ЗавершитьРаботуСистемы. Учитывайте это при разработке конфигураций, которые эксплуатируются в смешанном режиме.

Закрытие через командную строку и пакетный режим

Для внешней автоматизации платформа запускается с параметрами командной строки. Ключевой приём — запуск в режиме Execute с указанием внешней обработки, которая выполнит нужные действия и сама завершит работу. Так строятся сценарии обмена, обновления и обслуживания баз.

bat
"C:\Program Files\1cv8\8.3.22.1750\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Trade" /N"Администратор" /P"пароль" /Execute"D:\Scripts\backup.epf" /DisableStartupDialogs /DisableStartupMessages

Параметры /DisableStartupDialogs и /DisableStartupMessages подавляют стартовые окна и предупреждения, чтобы процесс шёл без участия пользователя. Внутри обработки обязательно вызывайте ЗавершитьРаботуСистемы(Ложь) — иначе сеанс останется висеть до таймаута.

Для файловых баз конфигуратор также поддерживает пакетный режим с параметром /BatchMode в отдельных операциях, а типовые операции обслуживания (тестирование, выгрузка в dt) выполняются через 1cv8.exe DESIGNER с соответствующими ключами. По завершении пакетной операции конфигуратор закрывается сам.

Завершение сеансов на сервере 1С

В клиент-серверном варианте закрывать сеансы нужно через административные инструменты, а не через процессы на клиентских машинах. Основные способы — консоль администрирования серверов 1С, утилита rac из состава сервера или программный интерфейс через COM-объект V83.COMConnector с административным соединением.

bash
# Список сеансов кластера
rac session list --cluster=<GUID_кластера> --cluster-user=Админ --cluster-pwd=пароль

# Принудительное завершение сеанса
rac session terminate --cluster=<GUID> --session=<GUID_сеанса>

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

Регламентное обслуживание серверной базы
  1. 1
    Установите блокировку сеансов с сообщением пользователям и датой начала
  2. 2
    Дождитесь завершения активных сеансов или завершите их через консоль/rac
  3. 3
    Выполните обслуживание: обновление, бэкап, тестирование
  4. 4
    Снимите блокировку и проверьте, что пользователи могут войти

Принудительное завершение процессов из ОС

Когда сеанс завис и не реагирует на штатные методы, процесс можно завершить средствами операционной системы. В Windows это taskkill, в Linux — kill. Такой способ не выполняет обработчики завершения и не сохраняет настройки, поэтому применяется только как аварийная мера.

bat
:: Завершить все клиентские процессы 1С текущего пользователя
taskkill /F /IM 1cv8.exe

:: Только процессы конкретного пользователя (на терминальном сервере)
taskkill /F /IM 1cv8.exe /FI "USERNAME eq Ivanov"

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

Типичные ошибки
01
Завершение 1cv8.exe через taskkill на файловой базе во время записи — риск повреждения данных и необходимость восстановления
02
Вызов ЗавершитьРаботуСистемы() без параметра Ложь в ночном регламенте — процесс ждёт подтверждения и сценарий срывается
03
Завершение сеансов на сервере без предварительной блокировки — пользователи успевают переподключиться во время обновления
04
Игнорирование отказа в обработчике ПередЗавершениемРаботыСистемы — код закрытия отрабатывает, а сеанс остаётся активным

Проверка результата и типичные проблемы

После программного закрытия убедитесь, что процесс действительно завершён: в диспетчере задач не должно остаться 1cv8.exe от нужного пользователя, а в консоли кластера — соответствующего сеанса. Для скриптов полезно проверять код возврата: при пакетном запуске конфигуратора ненулевой код указывает на ошибку, детали смотрите в журнале регистрации или файле лога, если он задан параметром /Out.

Частая ситуация — «фантомные» сеансы на сервере: клиент закрыт, а сеанс висит и держит лицензию. Такие сеансы завершаются через консоль кластера или rac session terminate. Если фантомы появляются регулярно, проверяйте сетевую стабильность и настройки таймаутов кластера.

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

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

Процесс 1cv8.exe в диспетчере задач
Норма

Процесс отсутствует у нужного пользователя

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

Процесс остался — сеанс не завершён или завис

Сеансы в консоли кластера
Норма

Сеанс отсутствует в списке

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

Сеанс активен — завершите через rac или консоль

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

Есть запись о завершении сеанса без ошибок

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

Ошибки записи или обрыв — возможна порча данных в файловой базе

FAQ

Чем отличается ЗавершитьРаботуСистемы от ПрекращениеРаботыСистемы?

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

Как закрыть 1С у всех пользователей перед обновлением?

Установите блокировку сеансов (в типовых — «Блокировка работы пользователей»), дождитесь завершения активных сеансов или завершите их через консоль администрирования либо rac session terminate, затем выполняйте обновление. После завершения снимите блокировку.

Можно ли закрыть 1С по расписанию?

Да. Создайте задание в планировщике Windows, которое запускает 1cv8.exe с внешней обработкой, вызывающей ЗавершитьРаботуСистемы(Ложь), либо скрипт с taskkill для аварийных случаев. Планировщик позволяет задать время, учётную запись и условия запуска.

Чем опасен taskkill для файловой базы?

Если процесс завершить во время записи данных, файл 1Cv8.1CD может оказаться в несогласованном состоянии. Признаки — ошибки открытия базы, «битые» записи. Лечится тестированием и исправлением в конфигураторе или утилитой chdbfl, поэтому перед принудительным завершением делайте копию файла базы.

Почему код закрытия выполняется, но программа не закрывается?

Наиболее частая причина — обработчик ПередЗавершениемРаботыСистемы в конфигурации устанавливает Отказ = Истина, например из-за незаписанного документа или открытого модального окна. Проверьте логику этого обработчика либо используйте ПрекращениеРаботыСистемы, если потеря несохранённых данных допустима.

Итог

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

Из кода используйте ЗавершитьРаботуСистемы(Ложь) для штатного закрытия и ПрекращениеРаботыСистемы() для гарантированного. Извне — пакетный запуск с обработкой, завершающей сеанс. На сервере управляйте сеансами через консоль или rac с предварительной блокировкой. taskkill — только аварийная мера, особенно рискованная для файловых баз.