Выгнать коллег из базы 1С без потери данных: консоль, rac, файловый вариант

· 9 мин

Содержание

В клиент-серверной 1С 8.3 работу других пользователей завершают в консоли кластера: Кластер → Информационные базы → <база> → Сеансы, правый клик по сеансу → Удалить. Чтобы люди не зашли обратно через минуту, в свойствах базы там же включают «Блокировку начала сеансов». В файловой базе консоли нет: пользователей просят выйти, ставят блокировку из самой программы или закрывают открытый файл 1Cv8.1CD на сервере, где лежит база.

Сеанс, завершённый принудительно, теряет несохранённые данные: открытый документ, который человек не записал, пропадёт. Поэтому порядок всегда один: предупредить, закрыть вход, дать 5–10 минут, и только потом удалять оставшиеся сеансы.

Перед отключением: кто сидит в базе и что именно мешает

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

Где увидеть активных пользователей:

  • 🖥 Конфигуратор → Администрирование → Активные пользователи. Список есть, кнопки завершения нет.
  • 📋 Пользовательский режим типовых конфигураций → форма «Активные пользователи». В БП 3.0 она в разделе Администрирование → Обслуживание, в ЗУП 3.1 и УТ 11 — в Администрирование → Поддержка и обслуживание.
  • ⚙️ Консоль кластера → узел Сеансы у нужной базы. Здесь видно больше всего: компьютер, приложение, время начала, занятая лицензия.

Обратите внимание на колонку «Приложение». Она подсказывает, что за сеанс перед вами:

Что в колонкеКто этоМожно ли удалять
Тонкий клиент, толстый клиентОбычный пользовательДа, после предупреждения
КонфигураторРазработчик или администраторТолько согласовав: потеряет несохранённую конфигурацию
Фоновое заданиеРегламентное задание (обмен, загрузка курсов)Да, но лучше сначала заблокировать регламентные задания
COM-соединениеВнешняя программа, интеграцияДа, но она может переподключиться сама
Веб-клиентРабота через браузерДа
Консоль кластераВаш сеанс администрированияНет смысла
Как устроена ваша база?

Завершение сеанса пользователя через консоль администрирования серверов 1С

Консоль — это оснастка MMC «Администрирование серверов 1С:Предприятия». Она ставится вместе с платформой, если при установке отмечен компонент администрирования серверов.

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

  1. Запустите консоль из меню «Пуск» (ищите по слову «Администрирование серверов»).
  2. На узле Central 1C:Enterprise 8.3 servers правый клик → Создать → Центральный сервер 1С:Предприятия 8.3.
  3. Укажите имя сервера и порт агента — по умолчанию 1540.
  4. Раскройте Кластеры → Локальный кластер → Информационные базы.
  5. Откройте нужную базу. Консоль спросит логин и пароль пользователя информационной базы с правами администратора. Если в кластере заданы администраторы, сначала спросит и их.

Удаление сеансов

  1. Откройте Информационные базы → <база> → Сеансы.
  2. Выделите сеансы. Работают Shift и Ctrl для группового выделения.
  3. Правый клик → Удалить.

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

Узел Соединения рядом с Сеансами — не то же самое. Разрыв соединения без удаления сеанса часто ведёт к тому, что клиент переподключается сам. Удаляйте именно сеансы.

Блокировка начала сеансов

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

  1. Правый клик по базе → Свойства.
  2. Отметьте «Блокировка начала сеансов включена».
  3. Задайте время начала и окончания блокировки, текст сообщения («Обновление до 19:30»).
  4. В поле «Код разрешения» впишите любое слово, например upd2610. С ним сможете зайти вы сами.
  5. Если идёт обновление или загрузка .dt, отметьте и «Блокировка регламентных заданий включена».

Запуск с кодом разрешения — параметр /UC:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC upd2610

Не забудьте снять блокировку после работ. Иначе утром никто не войдёт, а сообщение будет висеть с вашим текстом про обновление.

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

Типичная ситуация после обновления платформы: оснастка выдаёт ошибку или пустое окно. Консоль использует библиотеку radmin.dll конкретной версии платформы. Перерегистрируйте её от имени администратора:

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

Номер версии в пути подставьте свой — тот, что совпадает с версией сервера. Для 32-битной платформы путь будет в Program Files (x86).

Завершить работу пользователей из самой программы

В типовых конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11, ERP, КА) есть форма «Блокировка работы пользователей». Она лежит рядом с «Активными пользователями» в тех же разделах администрирования.

Как это работает:

  1. Вы задаёте сообщение, время начала блокировки и код разрешения.
  2. Нажимаете «Установить блокировку».
  3. Программа рассылает пользователям предупреждение и через несколько минут сама закрывает их сеансы.
  4. Новые входы блокируются до снятия блокировки.

Плюс этого способа — людям не нужно ничего объяснять: они видят сообщение заранее и успевают записать документы. Он работает и в файловом, и в клиент-серверном варианте.

Для клиент-серверной базы форма может спросить параметры администрирования кластера. Без них она поставит блокировку, но не сможет удалить «упрямые» сеансы — например, повисший клиент, который не реагирует на предупреждение.

Те же действия запускаются параметрами командной строки — удобно для ночного обновления по расписанию:

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

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

Эти параметры понимают конфигурации на БСП. В самописной или сильно старой конфигурации они ничего не сделают.

В форме «Активные пользователи» клиент-серверной базы есть и точечная команда завершения выбранного сеанса. Это удобнее консоли, когда нужно выгнать одного человека, а прав на сервер у вас нет.

Файловая база: как отключить пользователей без консоли

У файловой базы нет кластера и нет списка сеансов, которыми можно управлять снаружи. Есть только файл 1Cv8.1CD, который открыт у каждого работающего клиента.

Порядок действий:

  1. Блокировка из программы (раздел выше). Это основной путь, если конфигурация типовая.
  2. Сообщение коллегам в мессенджере. Банально, но решает половину ситуаций.
  3. Закрытие файла на сервере. Для тех, кто ушёл домой с открытой 1С.

Если база лежит в общей папке на Windows-компьютере, откройте на нём «Управление компьютером» → Общие папки → Открытые файлы. Найдите строку с 1Cv8.1CD, правый клик → «Закрыть открытый файл».

То же из командной строки на компьютере с базой:

rem Список открытых по сети файлов с их ID
net file

rem Закрыть файл по ID из списка
net file 1207 /close

Закрытие файла — аварийный способ. Клиент на другом конце теряет несохранённые данные и получит ошибку. Если в этот момент шла запись, базу потом стоит проверить через «Тестирование и исправление» в Конфигураторе. Делайте так только с теми, кто точно ушёл.

Если база на NAS или Linux-сервере (Samba), «Открытые файлы» Windows вам не помогут. Смотрите открытые файлы средствами самого хранилища или перезапустите службу общего доступа, предупредив всех: оборвутся все сеансы разом.

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

Журнал нужен в двух случаях. Первый — понять, кто держал базу ночью и почему не прошло обновление. Второй — найти пользователя, чей клиент постоянно «висит».

Где открыть:

  • В БП 3.0: Администрирование → Обслуживание → Журнал регистрации.
  • В ЗУП и УТ: Администрирование → Поддержка и обслуживание → Журнал регистрации.
  • В Конфигураторе: Администрирование → Журнал регистрации.

Что фильтровать:

  • 🔑 События «Сеанс. Начало» и «Сеанс. Завершение» — время входа и выхода. Сеанс с началом и без завершения — кандидат на зависший.
  • 👤 Пользователь и компьютер — с какого рабочего места заходили.
  • 🔢 Номер сеанса — совпадает с номером в консоли кластера. По нему видно, что именно делал сеанс перед зависанием: какой документ записывал, какой отчёт формировал.
  • ⛔ Ошибки за тот же период — часто рядом лежит причина: тяжёлый отчёт, обмен, ошибка блокировки данных.

Если удалённый сеанс снова и снова появляется с одного компьютера, загляните на этот компьютер. Часто это 1С в свёрнутом окне на терминальном сервере или незакрытая сессия RDP.

Автоматическое завершение сеансов: rac и скрипт через COM

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

Утилита rac

rac работает через сервер администрирования ras. Его запускают на сервере 1С (порт по умолчанию 1545), лучше как службу.

rem Список кластеров — нужен UUID
rac cluster list

rem Сеансы кластера
rac session list --cluster=<uuid-кластера>

rem Завершить конкретный сеанс
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если в кластере есть администратор, добавьте --cluster-user и --cluster-pwd. Полный список параметров — в rac help session. В вывод rac session list попадают сеансы всех баз кластера, поэтому в скрипте фильтруйте по UUID базы (его даёт rac infobase summary list).

Обработка на встроенном языке через COM

Второй путь — внешняя обработка, которая подключается к агенту сервера через V83.COMConnector. На сервере, где выполняется код, должна быть зарегистрирована comcntr.dll нужной версии (regsvr32 из папки bin платформы).

&НаСервере
Процедура ЗавершитьСеансыБазыНаСервере(ИмяСервера, ИмяБазы, АдминКластера, ПарольКластера)

	Коннектор = Новый COMОбъект("V83.COMConnector");
	Агент = Коннектор.ConnectAgent("tcp://" + ИмяСервера + ":1540");
	МойНомерСеанса = НомерСеансаИнформационнойБазы();

	Для Каждого Кластер Из Агент.GetClusters() Цикл
		Агент.Authenticate(Кластер, АдминКластера, ПарольКластера);

		Для Каждого Сеанс Из Агент.GetSessions(Кластер) Цикл
			Если НРег(Сеанс.infoBase.Name) <> НРег(ИмяБазы) Тогда
				Продолжить;
			КонецЕсли;
			// свой сеанс и сеанс консоли не трогаем
			Если Сеанс.SessionID = МойНомерСеанса Или Сеанс.AppID = "SrvrConsole" Тогда
				Продолжить;
			КонецЕсли;
			Агент.TerminateSession(Кластер, Сеанс);
		КонецЦикла;
	КонецЦикла;

КонецПроцедуры

Код удаляет все сеансы указанной базы, кроме своего. Пароль администратора кластера не храните в тексте обработки: передавайте его параметром или берите из защищённого хранилища.

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

Как реже выгонять людей: таймауты и регламент

Принудительное завершение — следствие. Причина обычно в том, что работы не согласованы, а забытые сеансы никто не закрывает.

Что помогает:

  • ⏰ Регламентное окно. Обновления и тяжёлые операции — в фиксированное время, например по четвергам после 19:00. Люди привыкают и сохраняются заранее.
  • 💤 Засыпание пассивных сеансов. В свойствах базы в консоли кластера есть «Время засыпания пассивного сеанса» и «Время завершения спящего сеанса» (в секундах). Например, 3600 и 7200: через час простоя сеанс уснёт и освободит лицензию, ещё через два часа завершится.
  • 🔒 Блокировка заранее. Поставьте её с временем начала в будущем — предупреждение пользователи увидят до старта работ.
  • 🖥 Терминальный сервер. Настройте завершение отключённых RDP-сессий через несколько часов. Тогда «свёрнутые» 1С не будут жить неделями.
  • 📊 Журнал регистрации раз в неделю: кто чаще всего оставляет открытую базу.

Когда принудительно выгонять не нужно:

  • Для формирования отчётов и обычного резервного копирования средствами СУБД монопольный доступ не требуется.
  • Для загрузки обновления в Конфигураторе без обновления структуры базы — тоже. Монопольный режим нужен для обновления конфигурации базы данных, загрузки .dt, тестирования и исправления.
Перед принудительным завершением сеансов
Выполнено: 0 / 5

Частые вопросы

Пользователь потеряет данные при удалении сеанса?
Да, всё, что не записано. Проведённые и записанные документы остаются в базе. Открытый незаписанный документ пропадёт.
Почему после удаления сеанс появляется снова?
Клиент переподключается автоматически или человек просто входит заново. Включите блокировку начала сеансов, потом удаляйте.
Можно ли завершить чужой сеанс без прав администратора?
Нет. Нужны права администратора информационной базы, а в клиент-серверном варианте — ещё и администратора кластера, если он задан.
Почему сеанс не удаляется из консоли?
Чаще всего сеанс ждёт ответа от зависшего запроса к СУБД. Подождите пару минут. Если не помогло, остаётся перезапуск рабочего процесса, а это оборвёт все сеансы на нём — делайте в нерабочее время.
Освобождается ли лицензия сразу после удаления сеанса?
Да, программная лицензия возвращается в момент завершения сеанса. Спящий сеанс лицензию тоже не держит.