Выгнать всех из базы 1С: блокировка, консоль кластера, rac и код
Содержание
Чтобы принудительно отключить всех пользователей
в 1С 8.3, установите блокировку новых сеансов и завершите текущие. В типовых конфигурациях это делает форма «Блокировка работы пользователей» в разделе Администрирование → Обслуживание. В клиент-серверной базе то же самое можно сделать в консоли кластера или утилитой rac.
Обычная ситуация: ночью надо обновить конфигурацию , а в базе висят три забытых сеанса и фоновое задание. Способов несколько: от мягкой блокировки с предупреждением до обрыва сеансов из скрипта. Выбор зависит от типа базы и ваших прав.
Какой способ отключения выбрать
Способы различаются тем, где у вас база и есть ли права администратора кластера.
| Способ | Тип базы | Что нужно | Предупреждает пользователей |
|---|---|---|---|
| Блокировка работы в программе | файловая и серверная | права администратора в базе | да |
| Консоль кластера | серверная | доступ к серверу 1С | нет |
Утилита rac | серверная | запущенная служба RAS | нет |
| Обработка через COM | серверная | зарегистрированный comcntr.dll | можно добавить |
| Отключение на уровне СУБД | серверная | доступ к SQL | нет, рискованно |
Правило простое: в рабочее время — через программу, с сообщением людям. Ночью и в скриптах — через rac.
Любое принудительное завершение обрывает сеанс. Несохранённый документ пропадёт, незаписанная транзакция откатится. Днём сначала предупредите людей.
Отключение пользователей из самой программы 1С
Этот способ работает и в файловой, и в клиент-серверной базе. Он построен на Библиотеке стандартных подсистем, поэтому есть в БП 3.0, ЗУП 3.1, УТ 11 и других типовых.
Блокировка с предупреждением
- Зайдите в базу пользователем с полными правами.
- Откройте
Администрирование → Обслуживаниеи найдите ссылку «Блокировка работы пользователей». - Напишите сообщение: что происходит и когда база снова будет доступна.
- Укажите время начала и окончания блокировки.
- Задайте код разрешения, например
7788. Он нужен, чтобы самому войти в заблокированную базу. - Нажмите кнопку установки блокировки.
Пользователи увидят сообщение и предупреждение о скором закрытии. Затем программа сама завершит их сеансы. Новые входы будут запрещены до окончания блокировки.
Пользователь, который входит во время блокировки, получает отказ с вашим текстом сообщения. Поэтому пишите в нём конкретно: «Обновление базы, вход откроется в 06:00», а не «Ведутся работы». Так меньше звонков администратору.
Активные пользователи
В той же группе есть форма «Активные пользователи». В ней видно, кто работает, с какого компьютера и в каком приложении. Выделите строку и завершите сеанс командой формы. Так удобно выкинуть одного «зависшего» сотрудника, не трогая остальных.
Вход в заблокированную базу
Сами вы входите с параметром кода разрешения /UC:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC7788
Параметр можно дописать в поле «Дополнительные параметры запуска» в настройках базы в окне запуска. Без него даже администратор получит отказ.
💡 Блокировку можно запустить и без открытия формы: параметр запуска /C"ЗавершитьРаботуПользователей" в типовых конфигурациях ставит блокировку и выгоняет всех. Снимается она параметром /C"РазрешитьРаботуПользователей" вместе с /UC.
Завершение сеансов в консоли администрирования кластера
Для серверной базы консоль «Администрирование серверов 1С Предприятия» — самый наглядный инструмент.
Удалить все сеансы базы
- Откройте консоль и разверните
Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы. - Выделите все строки списка сеансов (Ctrl+A).
- Через контекстное меню выберите «Удалить».
Сеансы пропадут сразу, без предупреждения. Но если ничего не запретить, пользователи тут же зайдут обратно.
Запретить новые подключения на уровне кластера
Откройте свойства информационной базы в консоли. Понадобится логин и пароль администратора этой базы. Там есть поля:
- 🔒 «Блокировка начала сеансов включена» — главный флажок;
- 🕐 «Начало» и «Конец» — период блокировки;
- 💬 «Сообщение о блокировке» — текст, который увидит пользователь;
- 🔑 «Код разрешения» — тот же код для
/UC; - ⏸ «Блокировка регламентных заданий включена» — останавливает фоновые задания по расписанию.
Порядок такой: сначала флажки блокировки, потом удаление сеансов. Иначе вы гоняетесь за пользователями по кругу.
Какие сеансы есть в списке
В колонке «Приложение» видно, откуда пришёл сеанс. От этого зависит, что будет после удаления:
- 🖥 «Тонкий клиент», «Толстый клиент», «Веб-клиент» — обычные пользователи. Удалять можно после предупреждения.
- ⚙️ «Фоновое задание» — регламентные задания и длительные операции. Без запрета регламентных заданий они стартуют снова.
- 🔌 «COM-соединение» — внешние программы и обмены. Удалённый сеанс внешняя программа может тут же открыть заново, поэтому обмен лучше остановить на его стороне.
- 🌐 «Web-сервис» и HTTP-сервисы — запросы с сайта или мобильного приложения. Они короткие и обычно заканчиваются сами.
- 🛠 «Конфигуратор» — чужой Конфигуратор держит базу так же, как обычный сеанс. Перед удалением узнайте у коллеги, не сохраняет ли он изменения конфигурации.
Остановка службы как крайняя мера
Если консоль не отвечает, остаётся перезапуск службы «Агент сервера 1С:Предприятия». Перезапуск службы обрывает сеансы всех баз на этом сервере, а не только нужной. Делайте это только вне рабочего времени и после предупреждения всех, кто работает с сервером. После запуска службы сразу включите блокировку нужной базы, пока пользователи не вернулись.
Отключение через rac вместо rmngr
rmngr — это процесс менеджера кластера, а не утилита. Им ничего не отключают. Командная работа с кластером идёт через rac, а rac обращается к службе RAS (по умолчанию порт 1545). Служба RAS должна быть запущена на сервере.
Если RAS на Windows ещё не установлен, его регистрируют службой из папки bin платформы, запустив командную строку от администратора:
sc create "1C:Enterprise 8.3 Remote Server" binPath= "\"C:\Program Files\1cv8\<версия>\bin\ras.exe\" cluster --service --port=1545 localhost:1540" start= auto
sc start "1C:Enterprise 8.3 Remote Server"
Версия RAS и rac должна совпадать с версией сервера 1С. После обновления платформы путь в службе придётся поправить.
Сначала узнайте идентификаторы:
rac localhost:1545 cluster list
rac localhost:1545 infobase summary list --cluster=<uuid кластера>
rac localhost:1545 session list --cluster=<uuid кластера> --infobase=<uuid базы>
Завершить один сеанс:
rac localhost:1545 session terminate --cluster=<uuid кластера> --session=<uuid сеанса>
Если у кластера задан администратор, к каждой команде добавьте --cluster-user и --cluster-pwd.
Включить блокировку новых сеансов можно командой infobase update с ключами --sessions-deny=on, --permission-code и --scheduled-jobs-deny=on. Ей нужны имя и пароль пользователя базы: --infobase-user и --infobase-pwd. Полный список ключей для вашей версии смотрите в справке rac help infobase.
Конфигуратор: обновление, когда в базе остались люди
Сам Конфигуратор не умеет выгонять пользователей. Меню Администрирование → Активные пользователи в нём только показывает список.
Монопольный режим нужен не всегда, а только для обновления структуры базы, загрузки .dt, тестирования и исправления. Если при обновлении появилась ошибка установки монопольного режима, есть два пути:
- Для серверной базы актуальные версии платформы показывают в диалоге кнопку «Завершить сеансы и повторить». Она сбрасывает сеансы и повторяет попытку.
- В любом случае можно заблокировать базу одним из способов выше, затем зайти в Конфигуратор с
/UC<код>и повторить обновление.
Для ночного пакетного обновления удобно так: блокировка через rac, затем запуск Конфигуратора в пакетном режиме с тем же кодом:
"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" DESIGNER /S"srv1c\buh" /N"Администратор" /P"пароль" /UC7788 /UpdateDBCfg /Out"C:\logs\update.log"
Перед обновлением структуры сделайте резервную копию базы : откат после неудачной реструктуризации без копии невозможен.
Программное отключение пользователей внешней обработкой
Когда отключать надо из другой программы или по своей логике, пригодятся два механизма платформы.
Запрет новых сеансов кодом
Объект БлокировкаСеансов ставит ту же блокировку, что и флажок в консоли. Код выполняется на сервере, пользователю нужны административные права:
&НаСервере
Процедура УстановитьБлокировкуНаСервере()
Блокировка = Новый БлокировкаСеансов;
Блокировка.Установлена = Истина;
Блокировка.Начало = ТекущаяДатаСеанса();
Блокировка.КодРазрешения = "7788";
Блокировка.Сообщение = "Идёт обновление. База будет доступна после 06:00.";
УстановитьБлокировкуСеансов(Блокировка);
КонецПроцедуры
Блокировка не трогает уже открытые сеансы. Их нужно завершить отдельно.
Завершение сеансов через COM-соединение с агентом
Для серверной базы обработка подключается к агенту кластера (порт 1540) и обрывает сеансы. На сервере должен быть зарегистрирован comcntr.dll той же версии, что и платформа.
&НаСервере
Процедура ЗавершитьСеансыНаСервере(ИмяБазы)
Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent("tcp://srv1c:1540");
ТекущийНомер = НомерСеансаИнформационнойБазы();
Для Каждого Кластер Из Агент.GetClusters() Цикл
Агент.Authenticate(Кластер, "", ""); // администратор кластера, если задан
Для Каждого Сеанс Из Агент.GetSessions(Кластер) Цикл
Если НРег(Сеанс.InfoBase.Name) <> НРег(ИмяБазы) Тогда
Продолжить;
КонецЕсли;
Если Сеанс.SessionID = ТекущийНомер Тогда
Продолжить; // свой сеанс не трогаем
КонецЕсли;
Агент.TerminateSession(Кластер, Сеанс);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Сначала вызовите блокировку, затем завершение. Свой сеанс пропускается: иначе обработка закроет и вас.
Сеансы на уровне SQL: что можно и чего нельзя
В базе данных нет таблицы «активных пользователей 1С», которую можно очистить. Сеансы и управляемые блокировки живут в памяти кластера и в его служебных файлах. Править эти файлы руками нельзя.
На уровне СУБД вы видите только соединения рабочих процессов rphost. Обрыв такого соединения не завершает сеанс 1С, а ломает текущую операцию. Иногда вместе с ней получат ошибку несколько пользователей сразу.
SQL-уровень оправдан в одном случае: служба сервера 1С уже остановлена, а базу надо освободить для обслуживания, например для восстановления из бэкапа.
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С. Рабочие процессы будут переподключаться и падать с ошибками, а незавершённые операции откатятся.
Автоматическое отключение пользователей по расписанию
Ночные регламенты — бэкап, обновление, тестирование — удобно запускать без человека.
Блокировка с заданным периодом
Самый простой вариант. В форме «Блокировка работы пользователей» или в свойствах базы в консоли заранее укажите начало и конец блокировки, например с 23:00 до 05:00. В нужное время вход будет закрыт сам. Программа предупредит работающих и завершит их сеансы.
Скрипт для Планировщика заданий Windows
Скрипт ставит блокировку и обрывает все сеансы одной базы. Запускайте его из Планировщика заданий от учётной записи с доступом к серверу:
@echo off
cd /d "C:\Program Files\1cv8\<версия>\bin"
set CL=<uuid кластера>
set IB=<uuid базы>
rac.exe infobase update --cluster=%CL% --infobase=%IB% --infobase-user=Admin --infobase-pwd=pass --sessions-deny=on --permission-code=7788 --scheduled-jobs-deny=on
for /f "tokens=2 delims=: " %%s in ('rac.exe session list --cluster=%CL% --infobase=%IB% ^| findstr /b "session "') do (
rac.exe session terminate --cluster=%CL% --session=%%s
)
Строка findstr /b "session " отбирает только идентификаторы сеансов и пропускает поле session-id. Утром блокировку снимает такой же вызов с --sessions-deny=off --scheduled-jobs-deny=off.
💡 Кириллица в bat-файле часто превращается в кракозябры. Пользователя базы для скриптов лучше завести с латинским именем.
На Linux те же команды rac ставят в cron.
Частые вопросы
Как отключить пользователей в файловой базе, если программа не открывается?
1Cv8.1CD. Это аварийный способ: данные из незавершённых операций потеряются. Перед этим сделайте копию папки базы.Освобождается ли лицензия после принудительного отключения?
rac или из программы она освобождается.