Как завершить чужие сеансы в 1С 8.3 и не потерять данные

· 10 мин

Содержание

Удалить активных пользователей из 1С проще всего так: сначала включите блокировку начала сеансов, чтобы никто не зашёл повторно, а затем завершите оставшиеся сеансы. В клиент-серверной базе это делается в консоли администрирования серверов 1С (Кластер → Информационные базы → ваша база → Сеансы → Удалить) или утилитой rac. В типовых конфигурациях на БСП то же самое доступно из самой программы: Администрирование → Обслуживание → Активные пользователи.

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

СпособГде работаетЧто нужноРиск
Блокировка работы пользователей (БСП)Файловая и серверная базаПрава администратора в базеНизкий: пользователей предупреждают
Форма «Активные пользователи»Серверная база (завершение сеанса)Права администратора, пароль администратора кластера, если он заданНизкий
Консоль администрирования серверовСерверная базаДоступ к серверу 1ССредний: сеанс обрывается без предупреждения
Утилита racСерверная база, запущен rasДоступ к серверу, командная строкаСредний
Завершение рабочего процесса или соединения СУБДСерверная базаПрава на сервере и в СУБДВысокий

Почему нельзя просто выключить 1С у сотрудника

Закрыть программу на чужом компьютере или выдернуть сетевой кабель кажется быстрее. На деле это создаёт больше проблем, чем решает:

  • 📝 Несохранённые данные пропадут. Документ, который бухгалтер заполнял 20 минут и не записал, исчезнет.
  • 🔄 Транзакция откатится. Если в момент обрыва шло проведение или закрытие месяца , СУБД отменит незавершённые изменения. Это не портит базу, но работу придётся повторять.
  • 🔑 Лицензия освобождается не сразу. На сервере оборванный сеанс может ещё какое-то время висеть в списке и занимать лицензию.
  • 🔒 Блокировки данных держатся до конца сеанса. Пока сеанс жив, другие могут получать ошибки конфликта блокировок.
  • 🔁 Пользователь тут же зайдёт снова. Без блокировки начала сеансов он просто перезапустит 1С, и окно для обновления закроется.

Правильная последовательность всегда одна: предупредить → запретить новые входы → завершить сеансы → сделать работу → снять блокировку.

Договоритесь о «тихом часе». Обновление в 19:00, о котором сотрудников предупредили в обед, проходит без звонков и потерянных документов.

Способ 1. Блокировка и завершение сеансов из самой программы

Этот способ работает в типовых конфигурациях на Библиотеке стандартных подсистем: Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других. Плюс в том, что пользователи получают предупреждение и успевают сохраниться.

Блокировка работы пользователей

  1. Откройте Администрирование → Обслуживание.
  2. Перейдите по ссылке Блокировка работы пользователей.
  3. Заполните сообщение: например, «Обновление программы, работа будет доступна в 20:00».
  4. Укажите время начала и окончания блокировки.
  5. Задайте код разрешения. Это пароль, по которому вы сами сможете войти в заблокированную базу.
  6. Нажмите Установить блокировку.

За несколько минут до начала у пользователей появится предупреждение. В момент наступления блокировки программа завершит их сеансы. Тот, кто попытается войти, увидит ваше сообщение.

Чтобы зайти в заблокированную базу, добавьте в параметры запуска ключ /UC с кодом разрешения:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /IBName"Бухгалтерия" /UC1234

То же значение можно прописать в поле «Дополнительные параметры запуска» в свойствах базы в списке информационных баз.

Форма «Активные пользователи»

Список подключённых к базе людей открывается по ссылке Активные пользователи в том же разделе Администрирование → Обслуживание. Там видно имя пользователя, приложение (тонкий клиент, Конфигуратор, фоновое задание) и время начала сеанса.

В клиент-серверном режиме в этой форме есть команда завершения выбранного сеанса. Если на кластере задан администратор, программа попросит его имя и пароль. В файловом режиме завершить отдельный сеанс из формы нельзя: используйте блокировку.

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

Способ 2. Отключение через консоль администрирования серверов 1С

Консоль — основной инструмент администратора клиент-серверной базы. Она ставится вместе с платформой (компонент «Администрирование сервера 1С:Предприятия») и открывается как оснастка MMC.

Шаг 1. Запретить новые подключения

  1. Откройте консоль: Пуск → 1С Предприятие 8 → Администрирование серверов 1С Предприятия.
  2. Раскройте Central 1C:Enterprise 8.3 servers → имя сервера → Кластеры → ваш кластер → Информационные базы.
  3. Откройте свойства нужной базы.
  4. Включите флажок Блокировка начала сеансов включена.
  5. Заполните сообщение, время начала и окончания и код разрешения.
  6. Если будете обновлять конфигурацию, включите и Блокировка регламентных заданий включена, чтобы фоновые задачи не стартовали снова.

Для доступа к свойствам базы консоль спросит логин и пароль администратора этой информационной базы.

Шаг 2. Удалить сеансы

  1. Под базой раскройте ветку Сеансы.
  2. Выделите нужные строки. Колонки «Пользователь», «Компьютер», «Приложение» помогут не выбросить лишних.
  3. Нажмите правой кнопкой → Удалить.

Пользователь увидит сообщение о том, что сеанс завершён администратором. Лицензия освобождается сразу.

Ветка Сеансы есть и на уровне всего кластера. Удобно, когда на одном сервере 15 баз и нужно найти, где застрял конкретный сотрудник.

Если консоль не открывается

Самая частая причина — не зарегистрирована библиотека radmin.dll нужной разрядности. Запустите командную строку от имени администратора и выполните, подставив свою версию платформы:

regsvr32 "C:\Program Files\1cv8\8.3.24.1342\bin\radmin.dll"

Версия radmin.dll должна совпадать с версией сервера 1С. После обновления платформы регистрацию нужно повторить.

Способ 3. Завершение сеансов через rac из командной строки

Утилита rac подключается к серверу администрирования ras. Она нужна, когда консоли нет под рукой: на Linux-сервере, при работе по SSH или для скриптов.

Подготовка

Сервер ras должен быть запущен. По умолчанию он слушает порт 1545. На Windows его обычно регистрируют отдельной службой, на Linux он может работать как демон:

ras cluster --daemon

Сама rac лежит в каталоге bin платформы. Если на кластере задан администратор, к командам добавляйте --cluster-user и --cluster-pwd.

Найти кластер, базу и сеанс по ID

Получите идентификатор кластера:

rac cluster list

Скопируйте значение поля cluster. Затем найдите идентификатор базы:

rac infobase summary list --cluster=<uuid-кластера>

У каждой базы есть пара строк infobase (идентификатор) и name (имя). Теперь выведите сеансы этой базы:

rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>

В выводе ищите поля session (идентификатор сеанса), user-name и app-id. По имени пользователя легко понять, какой сеанс завершать.

Завершить один сеанс

rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если сервер администрирования запущен на другой машине, укажите её адрес первым аргументом: rac srv1c:1545 session list .... Полный перечень параметров для вашей версии платформы показывает rac help session.

Если сеанс не завершается: принудительное отключение

Иногда сеанс удаляется из консоли, но через секунду появляется снова или висит со статусом занятости. Обычно это значит, что он выполняет долгий серверный вызов: проведение тяжёлого документа, отчёт за три года, зависший обмен.

Действуйте по нарастающей:

  1. Подождите 1-2 минуты. Сервер завершает сеанс после окончания текущего вызова.
  2. Удалите соединение. В консоли у рабочего процесса есть ветка Соединения. Найдите соединение этого сеанса и удалите его.
  3. Проверьте фоновое задание. Если сеанс принадлежит фоновому заданию, которое тут же перезапускается, включите блокировку регламентных заданий в свойствах базы.
  4. Перезапустите рабочий процесс. Это крайняя мера.

Остановка процесса rphost обрывает ВСЕ сеансы, которые он обслуживает, в том числе в других базах. Делайте это только в согласованное окно, когда пользователи предупреждены, и только если пункты 1-3 не помогли.

Перезагружать весь сервер 1С ради одного зависшего сеанса не нужно. Это оборвёт работу всех баз кластера.

Отключение через СУБД: что можно, а что нельзя

SQL-способ часто описывают как «прямое удаление пользователей из базы». Это заблуждение. Сеансы 1С хранятся в реестре кластера на сервере 1С, а не в таблицах информационной базы. Прибить соединение в СУБД — не то же самое, что завершить сеанс 1С.

Через СУБД имеет смысл действовать только в одном случае: запрос 1С завис в базе данных и держит блокировки, а штатные способы не помогают.

MS SQL Server. Найдите процесс и завершите его:

EXEC sp_who2;          -- найти SPID зависшего запроса к нужной базе
KILL 57;               -- 57 — номер SPID из результата

PostgreSQL:

SELECT pid, usename, state, query_start, query
FROM pg_stat_activity
WHERE datname = 'buh';

SELECT pg_terminate_backend(12345);  -- 12345 — pid из запроса выше

После этого рабочий процесс 1С получит ошибку СУБД, транзакция откатится, а сеанс пользователя, скорее всего, завершится с сообщением об ошибке.

Не удаляйте записи из служебных таблиц информационной базы через SQL. Этим вы не отключите пользователей, зато рискуете повредить базу. Пользователей информационной базы правят только средствами 1С.

Как выгнать пользователей из файловой базы

В файловом режиме нет ни кластера, ни консоли, ни rac. Каждый пользователь открывает файл 1Cv8.1CD напрямую по сети. Инструментов меньше:

  • ✅ Блокировка работы пользователей из раздела Администрирование → Обслуживание работает и в файловой базе. Это основной способ.
  • 👀 Список активных пользователей покажет, кто сейчас в базе. Его же можно открыть в Конфигураторе: Администрирование → Активные пользователи. Завершить сеанс оттуда нельзя, только посмотреть.
  • 🗂 Закрыть открытый файл на сервере. На Windows-сервере, где лежит база: Управление компьютером → Общие папки → Открытые файлы. Найдите 1Cv8.1CD, нажмите правой кнопкой → Закрыть открытый файл.

Закрывать файл базы на сервере стоит, только когда пользователь уже не работает (ушёл домой, компьютер завис). Если в этот момент шла запись, данные последней операции могут потеряться. После такого отключения сделайте резервную копию и при сомнениях запустите тестирование и исправление.

Если база опубликована на веб-сервере, сеансы держит и он. Перезапуск пула приложений IIS или службы Apache отключит всех, кто работает через браузер или по HTTP.

Какая у вас ситуация?

Автоматическое отключение пользователей по расписанию

Если обновление или выгрузка .dt идёт ночью по расписанию, сеансы удобно завершать скриптом.

Ключи запуска БСП

Типовые конфигурации понимают параметры запуска, которые включают и снимают блокировку:

1cv8.exe ENTERPRISE /S"srv1c\buh" /N"Администратор" /P"пароль" /C"ЗавершитьРаботуПользователей" /UC"КодРазрешения"

После обновления блокировку снимают командой с параметром /C"РазрешитьРаботуПользователей". Код разрешения в обоих запусках должен совпадать.

Скрипт PowerShell на rac

Скрипт находит базу по имени и завершает все её сеансы. Подставьте свой путь к платформе и имя базы:

$rac = "C:\Program Files\1cv8\8.3.24.1342\bin\rac.exe"
$ibName = "buh"

# идентификатор первого кластера
$cluster = (& $rac cluster list | Select-String '^cluster\s+:\s+(\S+)').Matches[0].Groups[1].Value

# идентификатор базы по имени
$ibId = $null
$current = $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+(.+)$' -and $Matches[1].Trim() -eq $ibName) { $ibId = $current }
}
if (-not $ibId) { Write-Error "База $ibName не найдена"; exit 1 }

# завершить все сеансы базы
& $rac session list --cluster=$cluster --infobase=$ibId |
    Select-String '^session\s+:\s+(\S+)' |
    ForEach-Object {
        $sid = $_.Matches[0].Groups[1].Value
        & $rac session terminate --cluster=$cluster --session=$sid
        Write-Output "Завершён сеанс $sid"
    }

Если на кластере есть администратор, добавьте --cluster-user=... --cluster-pwd=... к каждой команде после cluster list. Запускайте скрипт из Планировщика заданий Windows под учётной записью, у которой есть доступ к rac.

Перед скриптом включите блокировку начала сеансов в свойствах базы. Иначе пользователи, которых он выбросит, зайдут обратно раньше, чем стартует обновление.

Частые ошибки при отключении пользователей

  • ❌ Выбросили всех, но забыли про блокировку. Через минуту в базе снова пять человек, а обновление пишет, что не удалось установить монопольный режим.
  • ❌ Забыли код разрешения. Блокировка стоит, а сами войти не можете. В серверной базе её снимают в свойствах базы в консоли. В файловой — дождитесь времени окончания блокировки или запустите базу с ключом /UC и верным кодом.
  • ❌ Не сняли блокировку после работы. Утром бухгалтерия видит «Работа в программе запрещена». Снимайте блокировку сразу после проверки.
  • ❌ Удалили сеанс Конфигуратора коллеги. Если программист в этот момент сохранял изменения конфигурации, работа может пропасть. Сначала спросите.
  • ❌ Перезапустили рабочий процесс ради одного человека. Вместе с ним вылетели все пользователи других баз на этом сервере.
Освобождается ли лицензия после удаления сеанса?
Да. При удалении сеанса в консоли или через rac лицензия сразу возвращается в пул. Если клиент просто потерял связь, сеанс может ещё какое-то время числиться активным.
Можно ли завершить сеанс, не будучи администратором базы?
Удалить сеанс в консоли может тот, кто имеет доступ к кластеру. Если администратор кластера задан, нужен его логин и пароль. Права пользователя в самой базе для этого не требуются.
Как узнать, с какого компьютера зашёл пользователь?
В списке сеансов консоли есть колонка «Компьютер». В rac это поле host в выводе session list.
Почему после удаления сеанса пользователь сразу появляется снова?
Клиент автоматически переподключился или человек перезапустил программу. Включите блокировку начала сеансов, прежде чем удалять сеансы.
Можно ли отключить пользователей из 1С 8.3 удалённо, без входа на сервер?
Да. Консоль администрирования подключается к серверу 1С по сети, а rac — к серверу ras по порту 1545. Нужен сетевой доступ к этим портам.