Администрирование · 10 мин
Как перезапустить 1С программно: все рабочие способы
Как программно перезапустить 1С: метод ЗавершитьРаботуСистемы, перезапуск сеанса, сервера и агента кластера. Примеры кода, риски и проверка результата.
Задача программного перезапуска 1С возникает в двух типовых сценариях: нужно перезапустить клиентское приложение у пользователя (например, после обновления конфигурации или изменения параметров сеанса) либо перезапустить серверную часть — агент сервера 1С или кластер. Это принципиально разные операции с разными инструментами, и путать их нельзя: методы встроенного языка влияют только на текущий сеанс, а перезапуск сервера выполняется средствами операционной системы или утилит администрирования.
Во встроенном языке 1С для завершения и перезапуска клиента предусмотрен метод ЗавершитьРаботуСистемы(), который умеет не только закрывать приложение, но и автоматически запускать его заново с заданными параметрами. На сервере используются системные команды Windows или Linux, а также утилита rac для управления кластером. Ниже разобраны все рабочие варианты с кодом, ограничениями и способами проверки результата.
Что именно требуется перезапустить: клиент, сеанс или сервер
Прежде чем писать код, определите объект перезапуска. Клиентское приложение — это процесс на компьютере пользователя (тонкий, толстый или веб-клиент). Сеанс — логическое подключение пользователя к информационной базе, которое живёт на сервере или в файловой базе. Сервер 1С — служба агента, обслуживающая кластер и рабочие процессы.
Из встроенного языка доступен только первый уровень: код может завершить или перезапустить собственное клиентское приложение. Сеансы других пользователей завершаются через консоль кластера, административные обработки или программный интерфейс кластера (COM-объект V83.COMConnector и административные объекты). Сам сервер перезапускается исключительно на уровне операционной системы.
Перезапуск клиентского приложения методом ЗавершитьРаботуСистемы
Основной инструмент — метод глобального контекста ЗавершитьРаботуСистемы(ЗапрашиватьВозможность, Перезапустить, ДополнительныеПараметрыКоманднойСтроки). Первый параметр управляет запросом подтверждения у пользователя, второй включает автоматический перезапуск после закрытия, третий позволяет передать параметры командной строки новому экземпляру.
// Простой перезапуск без подтверждения
ЗавершитьРаботуСистемы(Ложь, Истина);
// Перезапуск с запросом подтверждения у пользователя
ЗавершитьРаботуСистемы(Истина, Истина);
// Перезапуск с дополнительными параметрами запуска
ЗавершитьРаботуСистемы(Ложь, Истина, "/C ПерезапускПослеОбновления");Параметр /C в командной строке позволяет передать в новый сеанс произвольную строку, которую затем можно прочитать через ПараметрЗапуска в событии ПриНачалеРаботыСистемы. Так реализуют сценарии «после перезапуска открыть нужную форму» или «продолжить прерванную обработку».
Важное ограничение: метод работает только в интерактивном клиенте. В серверном контексте, в фоновом задании и в веб-клиенте поведение отличается — веб-клиент не перезапускается автоматически, браузерная вкладка просто закрывается или показывает страницу завершения. Для веб-клиента автоматический перезапуск недоступен, пользователь должен обновить страницу вручную.
Перезапуск после обновления конфигурации базы данных
Типовой сценарий — динамическое обновление конфигурации, после которого часть пользователей продолжает работать в старом сеансе. Платформа сама предлагает перезапуск при обнаружении расхождения версий, но это поведение можно контролировать программно.
В конфигурациях на базе Библиотеки стандартных подсистем (БСП) есть готовые механизмы: процедуры модуля ОбновлениеИнформационнойБазы и обработчик ПриОпределенииНеобходимостиПерезапуска. Если вы пишете собственную логику, проверить необходимость перезапуска можно через сравнение версии конфигурации в метаданных и версии, с которой стартовал сеанс.
- 1Завершите обновление конфигурации базы данных и убедитесь, что оно прошло без ошибок
- 2Оповестите пользователей штатными средствами (сообщение в сеанс или рассылка)
- 3Вызовите ЗавершитьРаботуСистемы(Истина, Истина) — с запросом подтверждения
- 4После перезапуска проверьте в ПриНачалеРаботыСистемы, что версия конфигурации актуальна
- 5Для неотвечающих сеансов используйте завершение через консоль кластера
Завершение сеансов других пользователей программно
Перезапуск чужого сеанса из кода возможен только в клиент-серверном варианте и только через административный интерфейс кластера. Для этого используется COM-соединитель: подключение к агенту сервера, получение списка сеансов и вызов метода завершения для нужного сеанса. Пользователю при этом приходит стандартное сообщение о разрыве соединения.
Альтернатива без программирования — консоль кластера серверов 1С: список сеансов, контекстное меню, «Удалить». В файловом варианте завершить чужой сеанс программно штатными средствами нельзя: можно только заблокировать новые подключения через УстановитьБлокировкуСоединений и ждать, пока пользователи выйдут сами.
Перезапуск сервера 1С: службы агента и кластера
Сервер 1С программно из конфигурации перезапустить невозможно — это осознанное ограничение безопасности платформы. Перезапуск выполняет администратор на уровне операционной системы. В Windows агент сервера работает как служба, и перезапускается стандартными командами.
:: Windows — перезапуск службы агента сервера 1С
net stop "Агент сервера 1С:Предприятия 8.3"
net start "Агент сервера 1С:Предприятия 8.3"
:: Linux (systemd, имя юнита зависит от установки)
sudo systemctl restart srv1cv83Имя службы в Windows зависит от версии платформы и разрядности — точное название смотрите в оснастке services.msc. В Linux имя юнита systemd определяется при установке и может отличаться; проверить его можно командой systemctl list-units | grep 1c или аналогичной.
При перезапуске агента сервера все активные сеансы кластера разрываются. Планируйте операцию на нерабочее время, предварительно установите блокировку соединений и завершите сеансы штатно. Для автоматизации по расписанию используйте планировщик задач Windows или cron в Linux с теми же командами.
Сравнение способов перезапуска
Перезапуск текущего клиента из кода. Подходит для сценариев после обновления. Не работает для веб-клиента и не влияет на других пользователей.
Завершение сеансов других пользователей. Требует прав администратора кластера. Только клиент-серверный вариант.
Полный перезапуск сервера 1С. Выполняется администратором ОС, разрывает все сеансы. Для планового обслуживания.
Типичные ошибки и проверка результата
Самая частая ошибка — вызов ЗавершитьРаботуСистемы в серверном контексте или в фоновом задании: метод там недоступен, и код завершается с ошибкой. Вторая типичная проблема — ожидание, что перезапуск клиента «обновит» серверный кэш: клиентский перезапуск не влияет на серверные процессы и кэш метаданных кластера.
Ещё одна ошибка — передача параметров командной строки с ошибками синтаксиса, из-за чего новый экземпляр не стартует или стартует с диалогом выбора базы. Проверяйте строку параметров на тестовой базе перед включением в рабочий код.
Как проверить результат
Новый экземпляр открылся, база подключена, ПараметрЗапуска содержит переданную строку
Приложение закрылось и не запустилось — проверяйте параметры командной строки
В консоли кластера список сеансов пуст или содержит только нужные
Сеансы висят — проверьте права администратора кластера
Служба в статусе «Выполняется», в консоли кластера видны рабочие процессы
Служба остановлена или падает — смотрите журнал событий ОС и технологический журнал
Частые вопросы
Можно ли перезапустить 1С по расписанию автоматически?
Клиентское приложение — только если в конфигурации заложена логика с подключённым обработчиком ожидания, который вызывает ЗавершитьРаботуСистемы в заданное время. Сервер — через планировщик задач Windows или cron в Linux с командами перезапуска службы агента. Плановый перезапуск сервера выполняйте в нерабочее время с предварительной блокировкой соединений.
Почему ЗавершитьРаботуСистемы не перезапускает приложение?
Проверьте второй параметр — он должен быть Истина. Если перезапуск всё равно не происходит, типичные причины: работа в веб-клиенте (перезапуск не поддерживается), ошибки в строке дополнительных параметров или запуск через внешнюю программу, которая контролирует процесс.
Как перезапустить сеанс конкретного пользователя из кода?
В клиент-серверном варианте — через COM-объект V83.COMConnector: подключение к агенту, получение рабочего процесса, поиск сеанса по имени пользователя и вызов метода завершения. Требуются права администратора кластера. В файловом варианте штатного способа нет.
Чем перезапуск отличается от динамического обновления?
Динамическое обновление меняет конфигурацию базы данных без отключения пользователей, но изменённые объекты начинают работать корректно только после перезапуска сеансов. Поэтому после динамического обновления перезапуск клиентов обычно обязателен — иначе пользователи работают со старой версией кода в памяти.
Опасно ли перезапускать службу агента сервера 1С?
Сама операция безопасна для базы данных — СУБД корректно завершает транзакции при разрыве соединений. Риск в другом: все активные сеансы обрываются, и несохранённые данные пользователей теряются. Перед перезапуском установите блокировку соединений, предупредите пользователей и дождитесь завершения сеансов.
Что важно запомнить
Клиент 1С перезапускается методом ЗавершитьРаботуСистемы(Ложь, Истина) из клиентского контекста; веб-клиент автоматически не перезапускается. Чужие сеансы завершаются через консоль кластера или COM-администрирование. Сервер перезапускается только службой ОС — из кода конфигурации это сделать нельзя. Перед любым принудительным завершением предупреждайте пользователей и сохраняйте данные.