Администрирование · 9 мин
Как программно закрыть 1С: все рабочие способы
Способы программного завершения работы 1С: встроенные команды, командная строка, скрипты, обработчики. Безопасное закрытие базы без потери данных.
Программное закрытие 1С требуется при автоматизации регламентных операций: ночном резервном копировании, обновлении конфигурации, выгрузке данных по расписанию, перезапуске сеансов на сервере. Встроенный язык платформы предоставляет штатные методы завершения работы, а для внешнего управления доступны параметры командной строки, пакетный режим конфигуратора и скрипты операционной системы.
Выбор способа зависит от того, откуда инициируется закрытие: из самого прикладного кода, из внешнего скрипта или из административной консоли. Критично различать корректное завершение сеанса, при котором платформа сохраняет настройки и освобождает соединения, и принудительное «убийство» процесса, которое может привести к повреждению файловой базы или зависшим блокировкам на сервере СУБД.
Ниже разобраны основные методы: от простого вызова ЗавершитьРаботуСистемы() до сценариев PowerShell и особенностей работы с сервером 1С:Предприятия.
Закрытие 1С из встроенного языка
Основной метод штатного завершения — ЗавершитьРаботуСистемы(). Он корректно закрывает сеанс: платформа вызывает обработчики завершения, сохраняет пользовательские настройки и освобождает соединение с базой. Метод имеет два необязательных параметра: первый отвечает за запрос подтверждения у пользователя, второй — за перезапуск после завершения.
// Закрыть программу без вопросов
ЗавершитьРаботуСистемы(Ложь);
// Закрыть и сразу перезапустить
ЗавершитьРаботуСистемы(Ложь, Истина);Если передать первым параметром Истина (значение по умолчанию), пользователь увидит диалог подтверждения и сможет отменить закрытие. Для автоматических сценариев — например, обработки, которая после выгрузки данных должна закрыть сеанс, — передавайте Ложь, иначе процесс «повиснет» в ожидании реакции пользователя.
Важный нюанс: если в конфигурации определён обработчик ПередЗавершениемРаботыСистемы и в нём установлен параметр Отказ = Истина, закрытие будет отменено. Это штатный механизм защиты от потери незаписанных данных — например, когда у пользователя открыт незаполненный документ.
Принудительное завершение из кода
Когда нужно закрыть приложение без каких-либо вопросов и обработчиков, используется ПрекращениеРаботыСистемы(). Этот метод завершает сеанс немедленно, игнорируя обработчики ПередЗавершениемРаботыСистемы. Его применяют в регламентных сценариях, где отказ недопустим: например, робот запустил тонкий клиент для обмена данными и должен гарантированно освободить сеанс.
&НаКлиенте
Процедура ПослеВыгрузки(Результат, ДопПараметры) Экспорт
ПрекращениеРаботыСистемы();
КонецПроцедурыМетод доступен в тонком и толстом клиенте, но не работает в веб-клиенте — там сеанс завершается закрытием вкладки браузера или вызовом ЗавершитьРаботуСистемы. Учитывайте это при разработке конфигураций, которые эксплуатируются в смешанном режиме.
Закрытие через командную строку и пакетный режим
Для внешней автоматизации платформа запускается с параметрами командной строки. Ключевой приём — запуск в режиме Execute с указанием внешней обработки, которая выполнит нужные действия и сама завершит работу. Так строятся сценарии обмена, обновления и обслуживания баз.
"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 с административным соединением.
# Список сеансов кластера
rac session list --cluster=<GUID_кластера> --cluster-user=Админ --cluster-pwd=пароль
# Принудительное завершение сеанса
rac session terminate --cluster=<GUID> --session=<GUID_сеанса>Перед регламентными операциями вроде обновления конфигурации базы данных сеансы принято не просто завершать, а блокировать новые соединения: устанавливается блокировка сеансов с сообщением пользователям, действующие сеансы завершаются, выполняется обслуживание, затем блокировка снимается. В типовых конфигурациях этот механизм доступен через функциональность «Блокировка работы пользователей» (БСП).
- 1Установите блокировку сеансов с сообщением пользователям и датой начала
- 2Дождитесь завершения активных сеансов или завершите их через консоль/rac
- 3Выполните обслуживание: обновление, бэкап, тестирование
- 4Снимите блокировку и проверьте, что пользователи могут войти
Принудительное завершение процессов из ОС
Когда сеанс завис и не реагирует на штатные методы, процесс можно завершить средствами операционной системы. В Windows это taskkill, в Linux — kill. Такой способ не выполняет обработчики завершения и не сохраняет настройки, поэтому применяется только как аварийная мера.
:: Завершить все клиентские процессы 1С текущего пользователя
taskkill /F /IM 1cv8.exe
:: Только процессы конкретного пользователя (на терминальном сервере)
taskkill /F /IM 1cv8.exe /FI "USERNAME eq Ivanov"На терминальном сервере обязательно фильтруйте процессы по пользователю, иначе завершите сеансы всех работающих сотрудников. Для файловых баз принудительное завершение процесса опаснее всего: если в момент «убийства» шла запись, файл базы может оказаться повреждён, и потребуется тестирование и исправление через конфигуратор или утилиту chdbfl.
Проверка результата и типичные проблемы
После программного закрытия убедитесь, что процесс действительно завершён: в диспетчере задач не должно остаться 1cv8.exe от нужного пользователя, а в консоли кластера — соответствующего сеанса. Для скриптов полезно проверять код возврата: при пакетном запуске конфигуратора ненулевой код указывает на ошибку, детали смотрите в журнале регистрации или файле лога, если он задан параметром /Out.
Частая ситуация — «фантомные» сеансы на сервере: клиент закрыт, а сеанс висит и держит лицензию. Такие сеансы завершаются через консоль кластера или rac session terminate. Если фантомы появляются регулярно, проверяйте сетевую стабильность и настройки таймаутов кластера.
Как проверить результат
Процесс отсутствует у нужного пользователя
Процесс остался — сеанс не завершён или завис
Сеанс отсутствует в списке
Сеанс активен — завершите через rac или консоль
Есть запись о завершении сеанса без ошибок
Ошибки записи или обрыв — возможна порча данных в файловой базе
FAQ
Чем отличается ЗавершитьРаботуСистемы от ПрекращениеРаботыСистемы?
Первый метод — штатный: вызывает обработчики завершения, позволяет отменить закрытие, сохраняет настройки. Второй завершает сеанс немедленно, минуя обработчики, поэтому незаписанные данные в открытых формах теряются. Для регламентных роботов подходит второй, для интерактивной работы — первый.
Как закрыть 1С у всех пользователей перед обновлением?
Установите блокировку сеансов (в типовых — «Блокировка работы пользователей»), дождитесь завершения активных сеансов или завершите их через консоль администрирования либо rac session terminate, затем выполняйте обновление. После завершения снимите блокировку.
Можно ли закрыть 1С по расписанию?
Да. Создайте задание в планировщике Windows, которое запускает 1cv8.exe с внешней обработкой, вызывающей ЗавершитьРаботуСистемы(Ложь), либо скрипт с taskkill для аварийных случаев. Планировщик позволяет задать время, учётную запись и условия запуска.
Чем опасен taskkill для файловой базы?
Если процесс завершить во время записи данных, файл 1Cv8.1CD может оказаться в несогласованном состоянии. Признаки — ошибки открытия базы, «битые» записи. Лечится тестированием и исправлением в конфигураторе или утилитой chdbfl, поэтому перед принудительным завершением делайте копию файла базы.
Почему код закрытия выполняется, но программа не закрывается?
Наиболее частая причина — обработчик ПередЗавершениемРаботыСистемы в конфигурации устанавливает Отказ = Истина, например из-за незаписанного документа или открытого модального окна. Проверьте логику этого обработчика либо используйте ПрекращениеРаботыСистемы, если потеря несохранённых данных допустима.
Что важно запомнить
Из кода используйте ЗавершитьРаботуСистемы(Ложь) для штатного закрытия и ПрекращениеРаботыСистемы() для гарантированного. Извне — пакетный запуск с обработкой, завершающей сеанс. На сервере управляйте сеансами через консоль или rac с предварительной блокировкой. taskkill — только аварийная мера, особенно рискованная для файловых баз.