Выгнать всех из базы 1С перед обновлением: от вежливой блокировки до rac и остановки службы
Содержание
Отключить активных пользователей в 1С 8.3 проще всего через саму программу: Администрирование → Обслуживание → Блокировка работы пользователей (в старых релизах раздел называется «Поддержка и обслуживание»). Программа предупредит всех, кто работает в базе, и через несколько минут сама завершит их сеансы. Если база клиент-серверная, сеанс любого пользователя можно убить вручную в консоли кластера или командой rac session terminate.
Типичная картина: вечер пятницы, нужно накатить обновление конфигурации , а конфигуратор не может получить монопольный доступ. В списке активных пользователей висят три бухгалтера, которые ушли домой с открытой 1С, и пара фоновых заданий. Способы отключения идут от самого мягкого к самому грубому, и работают они не везде одинаково.
Чем опасно «просто закрыть» 1С у пользователя
Снять процесс 1cv8.exe в диспетчере задач терминального сервера или выдернуть сеанс в консоли можно за секунду. Но последствия у такого отключения есть:
- 📝 Несохранённые данные пропадают. Документ, который бухгалтер заполнял полчаса и не записал, исчезнет.
- 🔄 Открытая транзакция откатывается. Если пользователь в момент отключения проводил документ или закрывал месяц, изменения не запишутся. База останется целой, но операцию придётся запускать заново.
- 🔁 Сеанс возвращается. Клиент 1С после разрыва пытается переподключиться, а регламентные задания стартуют снова по расписанию. Без блокировки новых сеансов через минуту список опять не пуст.
- 🔒 Повисшие файлы в файловой базе. Если процесс убит на компьютере, который держит открытым файл
1Cv8.1CDпо сети, блокировка файла на сервере может остаться до таймаута сетевой сессии.
Поэтому порядок такой: сначала запретить новые входы, потом предупредить, и только потом принудительно завершать то, что осталось.
Какой способ подходит вашей базе
| Способ | Файловая база | Клиент-серверная | Права | Риск |
|---|---|---|---|---|
| Блокировка из программы (БСП) | да | да | полные права в базе | низкий |
| Конфигуратор | только просмотр | только просмотр + завершение при обновлении | администратор базы | низкий |
| Консоль кластера | нет | да | администратор кластера | средний |
Утилита rac | нет | да | администратор кластера | средний |
| Скрипт через COM-соединение | нет | да | администратор кластера | средний |
| Разрыв соединений в СУБД | нет | да | администратор СУБД | высокий |
| Остановка службы или сервера | закрыть файл на сервере | да | администратор ОС | высокий |
Способ 1. Блокировка работы пользователей прямо в программе
Этот путь есть во всех типовых конфигурациях на Библиотеке стандартных подсистем: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА, ERP. Работает и в файловом, и в клиент-серверном варианте.
- Откройте
Администрирование → Обслуживание. - В группе «Обслуживание» найдите ссылку «Блокировка работы пользователей».
- Укажите время начала и окончания блокировки и текст сообщения: «С 19:00 база закрыта на обновление».
- Задайте код разрешения входа — по нему администратор войдёт в заблокированную базу.
- Нажмите «Установить блокировку».
Пользователи увидят предупреждение и смогут дописать документы. Когда наступит время блокировки, программа сама завершит их сеансы, а новые не пустит.
Рядом в том же разделе есть список «Активные пользователи». В клиент-серверной базе из него можно завершить выделенный сеанс: программа попросит логин и пароль администратора кластера, если он задан.
Вход в заблокированную базу
Администратор заходит в базу с параметром запуска /UC и кодом разблокировки. Например, для кода upd2024:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /UCupd2024
Для конфигуратора — то же самое с режимом DESIGNER. Код можно вписать и в поле «Дополнительные параметры запуска» в настройках базы в окне запуска.
Блокировку можно включить без входа в интерфейс: запуск с параметром /C"ЗавершитьРаботуПользователей" ставит её из командной строки, а /C"РазрешитьРаботуПользователей" снимает. Это удобно для ночных скриптов обновления.
Не забудьте снять блокировку после работ. Иначе утром ни один бухгалтер не войдёт в базу, а увидит ваше вечернее сообщение.
Способ 2. Что умеет конфигуратор
В конфигураторе есть пункт Администрирование → Активные пользователи. Он показывает, кто сидит в базе, с какого компьютера, в каком приложении и с какого времени. Завершить сеанс из этого списка нельзя — он нужен для того, чтобы понять, кого просить выйти.
Принудительное завершение конфигуратор предлагает в другом месте. Когда в клиент-серверной базе вы запускаете обновление конфигурации базы данных, а монопольный режим установить не удаётся, появляется окно с кнопкой «Завершить сеансы и повторить». Она завершает все сеансы, кроме вашего, и повторяет попытку.
Для файловой базы такой кнопки нет: каждый пользователь держит файл базы сам, и конфигуратор не может его вытолкнуть. Тут поможет только способ 1 или закрытие файла на сервере (способ 6).
Способ 3. Консоль администрирования серверов 1С
Для клиент-серверной базы это основной ручной инструмент. Консоль ставится вместе с сервером 1С или отдельно, компонентой «Администрирование сервера 1С:Предприятия».
- Запустите «Администрирование серверов 1С Предприятия».
- Раскройте
Central 1C:Enterprise 8.3 servers → <имя сервера> → Кластеры → <кластер> → Информационные базы → <ваша база> → Сеансы. - Выделите сеансы. В колонке «Приложение» видно тип: тонкий клиент, конфигуратор, фоновое задание, COM-соединение.
- Правой кнопкой мыши — «Удалить». Консоль спросит подтверждение и завершит сеанс.
Чтобы список не наполнился снова, откройте свойства информационной базы (правая кнопка по базе → «Свойства») и включите:
- ✅ «Блокировка начала сеансов включена» — с текстом сообщения, интервалом и кодом разрешения;
- ✅ «Блокировка регламентных заданий включена» — иначе фоновые задания будут стартовать по расписанию.
Для изменения свойств консоль попросит логин и пароль пользователя самой информационной базы с правами администратора.
Если консоль не открывается
Самая частая беда — консоль после обновления платформы перестаёт запускаться. Оснастка привязана к библиотеке radmin.dll конкретной версии. Перерегистрируйте её от имени администратора, указав папку установленной версии:
regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\radmin.dll"
Версия radmin.dll должна совпадать с версией сервера, к которому вы подключаетесь.
Способ 4. Утилита rac: завершение сеансов из командной строки
Утилита rac работает через сервер администрирования ras. Он не запускается сам по себе — его ставят отдельной службой или стартуют вручную. По умолчанию ras слушает порт 1545 и обращается к агенту кластера на порту 1540:
ras cluster --daemon
Дальше последовательность из четырёх команд. Если на кластере есть администратор, к командам добавляют --cluster-user и --cluster-pwd.
rem 1. Узнать идентификатор кластера
rac cluster list
rem 2. Найти идентификатор базы
rac infobase summary list --cluster=<uuid-кластера>
rem 3. Посмотреть сеансы этой базы
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>
rem 4. Завершить конкретный сеанс
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Запрет новых сеансов ставится той же утилитой. Для изменения свойств базы нужны логин и пароль её администратора:
rac infobase update --cluster=<uuid-кластера> --infobase=<uuid-базы> ^
--infobase-user=Админ --infobase-pwd=Пароль ^
--sessions-deny=on --scheduled-jobs-deny=on ^
--denied-message="Обновление базы" --permission-code=upd2024
После работ то же самое с --sessions-deny=off --scheduled-jobs-deny=off. Полный список параметров для вашей версии выводит rac help infobase и rac help session.
Скрипт PowerShell: завершить все сеансы одной базы
Удобно для планировщика заданий перед ночным обновлением. Путь к rac.exe и имя базы замените на свои:
$rac = "C:\Program Files\1cv8\8.3.xx.xxxx\bin\rac.exe"
$base = "buh" # имя базы в кластере
# Идентификатор первого кластера
$cluster = ((& $rac cluster list) | Where-Object { $_ -match '^cluster\s*:' } |
Select-Object -First 1) -replace '^cluster\s*:\s*', ''
# Идентификатор базы по имени
$ibId = $null
foreach ($line in (& $rac infobase summary list --cluster=$cluster)) {
if ($line -match '^infobase\s*:\s*(\S+)') { $current = $Matches[1] }
if ($line -match '^name\s*:\s*(\S+)' -and $Matches[1] -eq $base) { $ibId = $current }
}
if (-not $ibId) { Write-Host "База $base не найдена"; exit 1 }
# Завершить все сеансы базы
foreach ($line in (& $rac session list --cluster=$cluster --infobase=$ibId)) {
if ($line -match '^session\s*:\s*(\S+)') {
& $rac session terminate --cluster=$cluster --session=$Matches[1]
Write-Host "Завершён сеанс $($Matches[1])"
}
}
Скрипт рассчитан на ras, запущенный на том же компьютере. Для удалённого сервера после команды rac укажите адрес: & $rac srv1c:1545 cluster list и так далее.
Способ 5. Код на встроенном языке через COM-соединение
Методы встроенного языка вроде ПолучитьСеансыИнформационнойБазы() показывают сеансы, но не завершают их. Завершить сеанс из 1С можно через COM-объект V83.COMConnector, который подключается к агенту сервера. Работает только в Windows и только на той машине, где зарегистрирована библиотека comcntr.dll:
regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\comcntr.dll"
Пример процедуры для внешней обработки. Она завершает в указанной базе все сеансы тонкого и толстого клиента, кроме сеансов конфигуратора и консоли:
&НаСервереБезКонтекста
Процедура ЗавершитьСеансыБазы(ИмяБазы, АдминКластера, ПарольКластера)
Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent("tcp://srv1c:1540");
Кластеры = Агент.GetClusters();
Кластер = Кластеры[0];
Агент.Authenticate(Кластер, АдминКластера, ПарольКластера);
Завершено = 0;
Сеансы = Агент.GetSessions(Кластер);
Для Каждого Сеанс Из Сеансы Цикл
Если НРег(Сеанс.infoBase.Name) <> НРег(ИмяБазы) Тогда
Продолжить;
КонецЕсли;
Если Сеанс.AppID = "Designer" Или Сеанс.AppID = "SrvrConsole" Тогда
Продолжить;
КонецЕсли;
Агент.TerminateSession(Кластер, Сеанс);
Завершено = Завершено + 1;
КонецЦикла;
Сообщить(СтрШаблон("Завершено сеансов: %1", Завершено));
КонецПроцедуры
Учтите два момента. Код с директивой &НаСервереБезКонтекста выполняется на сервере 1С, и comcntr.dll должна быть зарегистрирована там. Сеанс, из которого запущена обработка, попадёт в список и тоже будет завершён — запускайте её из другой базы или добавьте фильтр по имени пользователя (Сеанс.userName).
В конфигурациях на БСП есть готовый программный интерфейс — модуль СоединенияИБ и подсистема администрирования кластера. На нём и построены команды способа 1, так что писать своё стоит только для нетиповых сценариев.
Способ 6. Разрыв соединений в СУБД и остановка службы
Это крайние меры. Их применяют, когда сеансы зависли и не удаляются ни консолью, ни rac.
Соединения на стороне SQL Server и PostgreSQL
Сеанс 1С живёт в кластере, а не в базе данных СУБД. Рабочий процесс rphost держит к СУБД свои соединения и после их разрыва подключается снова. Поэтому убивать соединения в СУБД имеет смысл только тогда, когда базу нужно освободить для операции на уровне самой СУБД — например, восстановления из бэкапа.
Для MS SQL Server:
ALTER DATABASE [buh] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- ... восстановление или обслуживание ...
ALTER DATABASE [buh] SET MULTI_USER;
Для PostgreSQL:
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'buh' AND pid <> pg_backend_pid();
Перед этим сделайте резервную копию и поставьте блокировку начала сеансов в кластере. Незавершённые транзакции откатятся, а пользователи, которые в этот момент работали, получат ошибку. Удалять или править строки в служебных таблицах 1С на SQL нельзя: так легко испортить базу.
Перезапуск службы агента сервера
Остановка службы сервера 1С обрывает сеансы во всех базах кластера, а не только в нужной. Делайте это в согласованное окно, когда никто не работает . Служба называется «Агент сервера 1С:Предприятия 8.3», команда из консоли от имени администратора:
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"
Имя службы для вашей установки проверьте в оснастке services.msc — у 32-разрядного сервера и при нескольких версиях оно отличается. Удалять папки кластера и файлы реестра кластера в каталоге srvinfo при этом не нужно.
Файловая база: кто держит файл
Для файловой базы консоли нет, но файл 1Cv8.1CD лежит в сетевой папке. На сервере, где она расшарена, откройте Управление компьютером → Общие папки → Открытые файлы. Найдите в списке 1Cv8.1CD, в колонке видно, какой пользователь его держит. Правой кнопкой — «Закрыть открытый файл».
Если база работает на терминальном сервере, сеанс пользователя можно завершить в диспетчере задач на вкладке «Пользователи» или снять у него процесс 1cv8.exe. Несохранённые данные этого пользователя пропадут.
Типичные промахи администратора
- 🔁 Сеансы удалили, а через минуту они снова в списке. Не включена блокировка начала сеансов и регламентных заданий. Клиенты переподключились, задания стартовали по расписанию.
- 🧩 Мешает фоновое задание или COM-соединение. Его выдаёт внешняя система: обмен с сайтом, интеграция с банком, сервис отчётности. Пока источник не остановлен, соединение будет появляться снова. Найдите в колонке «Компьютер» адрес и остановите обмен на той стороне.
- 🔑 Консоль и
racпишут, что нет прав. На кластере назначен администратор, а вы входите без его логина. Пароль утерян — остановите службу и восстановите файлы кластера из резервной копии или обратитесь к тому, кто настраивал сервер. - 🧭 Подключились не к той версии. На сервере стоят две версии платформы, а консоль или
racот другой. Используйте утилиты из папки той версии, под которой работает служба агента. - 🚪 Заблокировали базу и сами не можете войти. Забыли код разблокировки. Снимите блокировку в свойствах базы в консоли кластера или командой
rac infobase update ... --sessions-deny=off.
Частые вопросы
Сколько сеансов я вижу в списке, столько лицензий занято?
rac session list --licenses или колонка лицензий в консоли кластера.