Сеансы 1С:Предприятия 8.3: как найти чужое подключение, завершить его и не пустить обратно
Содержание
Сеанс в 1С — это одна работающая сессия в информационной базе: конкретный пользователь (или фоновый процесс) вошёл в конкретную базу конкретным приложением. Открыли базу в тонком клиенте и параллельно Конфигуратор — получили два сеанса. Посмотреть их можно в Конфигураторе → Администрирование → Активные пользователи, а завершить чужой сеанс в клиент-серверной базе — через консоль администрирования кластера или утилиту rac.
Способов управления три, и выбирают их по варианту работы базы. В файловой базе сеанс живёт в процессе 1cv8.exe на компьютере пользователя, и «удалить» его можно только закрыв этот процесс. В клиент-серверной базе сеансы видит кластер: их снимают в консоли сервера одним кликом или скриптом. Для массовых работ (обновление, тестирование и исправление) удобнее не убивать сеансы по одному, а включить блокировку начала сеансов.
Что такое сеанс 1С и чем он отличается от соединения
Сеанс — логическое понятие. Он хранит, кто работает (пользователь информационной базы), в какой базе, каким приложением, с какого компьютера и с какого момента. У каждого сеанса есть номер, уникальный в пределах базы.
Соединение — техническое. Это канал между клиентским приложением и рабочим процессом сервера (rphost). В клиент-серверном варианте сеанс и соединение связаны, но не одно и то же:
- 🔌 соединение может оборваться (пропала сеть, уснул ноутбук), а сеанс останется на сервере;
- 💤 такой сеанс в консоли кластера помечается как спящий, пользователь может к нему вернуться;
- 🔁 одно соединение в разные моменты обслуживает разные вызовы, а сеанс живёт от входа до выхода.
Отсюда частая путаница. Администратор разрывает соединение, а пользователь продолжает «висеть» в списке активных. Чтобы убрать человека из базы, завершают именно сеанс.
Пока сеанс открыт, он занимает клиентскую лицензию (кроме служебных сеансов, о них ниже). Поэтому «зависшие» сеансы — частая причина сообщения о нехватке лицензий, хотя реально в базе работает меньше людей.
Виды сеансов: по клиенту и по назначению
Тип сеанса определяется приложением, которое его открыло. В консоли кластера и в списке активных пользователей это видно в колонке «Приложение».
| Имя приложения | Что это | Кто открывает |
|---|---|---|
1CV8C | Тонкий клиент | Пользователь |
1CV8 | Толстый клиент | Пользователь |
WebClient | Веб-клиент через браузер | Пользователь |
Designer | Конфигуратор | Администратор, разработчик |
COMConnection | Внешнее соединение через COM | Обработки, внешние программы, обмены |
WSConnection | Вызов веб-сервиса базы | Внешние системы |
HTTPServiceConnection | Вызов HTTP-сервиса базы | Сайты, мобильные приложения, интеграции |
BackgroundJob | Фоновое или регламентное задание | Сама база |
По назначению сеансы удобно делить на три группы:
- 👤 интерактивные — тонкий, толстый, веб-клиент. За ними сидит человек с открытыми формами и несохранёнными данными;
- 🛠 служебные — Конфигуратор и внешние соединения. Конфигуратор часто держит монопольный режим или ждёт его;
- ⚙️ фоновые — регламентные задания: загрузка курсов валют, обмены, полнотекстовый индекс, отправка отчётности.
Различать их нужно перед завершением. Убить тонкий клиент бухгалтера — потеря несохранённого документа. Убить фоновое задание обмена посреди пакета — риск получить частично загруженные данные, которые потом придётся догружать повторно.
Где посмотреть активные сеансы в 1С
В пользовательском режиме
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) список открывается через Администрирование → Обслуживание → Активные пользователи. Там видно пользователя, приложение, начало работы и компьютер.
Если пункта нет, выручает стандартная обработка: Все функции → Стандартные → Активные пользователи. Команда «Все функции» включается в Сервис и настройки → Параметры.
В Конфигураторе
Администрирование → Активные пользователи. Это работает и для файловой, и для клиент-серверной базы. Список только для чтения: завершить сеанс отсюда нельзя.
В консоли кластера (клиент-сервер)
Самый подробный вариант. Откройте консоль администрирования серверов 1С и разверните:
- Центральный сервер →
Кластеры→ нужный кластер. Информационные базы→ ваша база →Сеансы.- Если нужно увидеть всё сразу по всем базам — узел
Сеансыпрямо под кластером.
Полезные колонки: номер сеанса, пользователь, компьютер, приложение, начало работы, последняя активность, признак «Спящий», рабочий процесс, к которому привязан сеанс.
Из кода
Для отчёта или собственной обработки есть глобальный метод ПолучитьСеансыИнформационнойБазы():
Сеансы = ПолучитьСеансыИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
Сообщить(СтрШаблон("%1 | %2 | %3 | %4",
Формат(Сеанс.НомерСеанса, "ЧГ=0"),
Строка(Сеанс.Пользователь),
Сеанс.ИмяКомпьютера,
ПредставлениеПриложения(Сеанс.ИмяПриложения)));
КонецЦикла;
Номер своего сеанса вернёт НомерСеансаИнформационнойБазы(). У фоновых заданий пользователь может быть не заполнен — тогда в строке будет пусто.
Как завершить или удалить сеанс 1С
Завершение сеанса — это аварийный выход для пользователя. Всё, что он не записал, пропадёт. Сначала позвоните или напишите человеку, если он на связи.
Клиент-серверная база: консоль кластера
- Найдите сеанс в списке (см. выше).
- Выделите строку, в контекстном меню выберите
Удалить. - Подтвердите. Можно выделить несколько строк сразу.
У пользователя появится сообщение о завершении сеанса администратором. Если в этот момент на сервере выполнялся долгий вызов, сеанс исчезнет не мгновенно: платформа прервёт вызов при ближайшей возможности.
Клиент-серверная база: утилита rac
Нужен запущенный сервер администрирования ras (по умолчанию порт 1545). Порядок такой:
rac cluster list
rac infobase summary list --cluster=<id_кластера>
rac session list --cluster=<id_кластера> --infobase=<id_базы>
rac session terminate --cluster=<id_кластера> --session=<id_сеанса>
Если у кластера задан администратор, добавьте --cluster-user и --cluster-pwd. Посмотреть, какие сеансы держат лицензии, — rac session list --cluster=<id> --licenses. Остальные параметры смотрите в rac help session.
Файловая база
Кластера нет, поэтому и кнопки «удалить сеанс» тоже нет. Варианты:
- 🖥 попросить пользователя закрыть 1С;
- 🔪 завершить процесс
1cv8.exeили1cv8c.exeна его компьютере (или в его сессии на терминальном сервере через диспетчер задач); - 🔒 если на базу нельзя зайти никому, а пользователей не видно — перезагрузить терминальный сервер , предупредив всех, кто на нём работает.
Если сеанс не удаляется
Бывает, что после «Удалить» строка возвращается или висит дальше. Обычно это значит, что рабочий процесс застрял в долгом запросе к СУБД. Порядок действий — от мягкого к жёсткому:
- Подождите 1–2 минуты и обновите список: долгий вызов мог ещё не прерваться.
- Посмотрите, к какому рабочему процессу привязан сеанс. Если запрос висит в СУБД, его можно снять средствами самой СУБД (Activity Monitor в MS SQL,
pg_cancel_backendв PostgreSQL). - Крайняя мера — перезапуск рабочего процесса
rphostили службы сервера 1С.
Перезапуск rphost или службы оборвёт все сеансы, которые обслуживает этот процесс, а не только зависший. Делайте это вне рабочего времени или после того, как все сохранили данные.
Блокировка начала сеансов перед обслуживанием
Главный приём, без которого завершение сеансов превращается в игру «ударь крота»: вы закрываете сеанс, а через минуту пользователь заходит снова. Поэтому сначала запрещают новые входы, потом снимают оставшихся.
В консоли кластера
Откройте свойства информационной базы и заполните:
- ✅ «Блокировка начала сеансов включена»;
- 🕒 начало и конец периода блокировки;
- 💬 сообщение, которое увидят пользователи при попытке входа;
- 🔑 код разрешения — по нему администратор сможет войти, несмотря на блокировку;
- ⏸ при необходимости — «Блокировка регламентных заданий включена», чтобы фоновые задания не открывали новые сеансы.
Войти с кодом разрешения можно, добавив в строку запуска параметр /UC<код>, например /UC12345.
Тот же набор свойств задаётся через rac:
rac infobase update --cluster=<id_кластера> --infobase=<id_базы> ^
--infobase-user=Администратор --infobase-pwd=<пароль> ^
--sessions-deny=on --denied-message="Обновление базы до 20:00" ^
--permission-code=12345 --scheduled-jobs-deny=on
После работ не забудьте выключить блокировку: --sessions-deny=off --scheduled-jobs-deny=off.
В типовой конфигурации
В конфигурациях на БСП есть обработка «Блокировка работы пользователей» — в Администрирование → Обслуживание. Она сама показывает пользователям предупреждение, через заданное время завершает их сеансы и не пускает новых. Работает и в файловом варианте, где консоли кластера нет.
Помощник обновления конфигурации в типовых решениях использует тот же механизм. Если обновляете через него, вручную выгонять людей обычно не нужно.
Сеансы, блокировки и производительность
Когда «всё тормозит», список сеансов — первое место для диагностики. В консоли кластера и в выводе rac session list есть показатели текущего вызова. В выводе rac они называются так:
Поле в rac session list | Что показывает |
|---|---|
duration-current | Сколько уже идёт текущий серверный вызов |
duration-current-dbms | Сколько из этого времени ушло на ожидание СУБД |
blocked-by-ls | Номер сеанса, который держит управляемую блокировку 1С, мешающую этому |
blocked-by-dbms | Номер сеанса, который держит блокировку на уровне СУБД |
hibernate | Признак спящего сеанса |
Типичная картина: у пяти сеансов в blocked-by-ls стоит один и тот же номер. Это «виновник» — например, бухгалтер запустил закрытие месяца
или перепроведение за квартал, и остальные ждут освобождения тех же данных.
Что с этим делать:
- Найдите сеанс-виновник по номеру и посмотрите, что он делает (пользователь, приложение, длительность вызова).
- Если операция плановая — дождитесь завершения и договоритесь переносить такие операции на вечер.
- Если сеанс завис — завершите его, остальные продолжат работу.
Сами управляемые блокировки по базе выводит rac lock list --cluster=<id> --infobase=<id>. Там видно, какой сеанс и какие объекты держит.
Спящие сеансы
В свойствах информационной базы в консоли кластера есть два параметра: через сколько секунд переводить пассивный сеанс в спящий и через сколько завершать спящий. Если пользователи часто бросают 1С открытой и закрывают ноутбук, второй параметр избавляет от ручной чистки лицензий. Слишком маленькое значение не ставьте: человек, отошедший на обед, потеряет несохранённый документ.
Автоматизация контроля сеансов
Ручная чистка подходит для разовых случаев. Если обновления и выгрузки идут по расписанию, сценарий удобно собрать в скрипт:
- Включить блокировку начала сеансов и регламентных заданий (
rac infobase update ... --sessions-deny=on). - Подождать 5–10 минут, пока люди сохранят работу и выйдут по предупреждению.
- Получить список сеансов базы (
rac session list) и завершить оставшиеся (rac session terminate). - Выполнить работы: выгрузку
.dt, обновление, тестирование и исправление. - Снять блокировку.
Запускают такой скрипт планировщиком Windows или cron на Linux-сервере в ночное окно.
Что ещё стоит автоматизировать:
- 📊 ежедневный снимок сеансов в файл — видно, кто держит лицензии и в какие часы пик;
- 🔔 оповещение, если число сеансов приближается к числу лицензий;
- 🧹 параметр завершения спящих сеансов вместо ручной чистки.
Перед выгрузкой .dt и обновлением структуры базы нужен монопольный режим: в этот момент в базе не должно быть ни одного другого сеанса, включая фоновые задания. Поэтому блокировку регламентных заданий включают вместе с блокировкой входа.
Частые вопросы
Чем сеанс отличается от пользователя?
Почему пользователь вышел из 1С, а сеанс остался?
Занимает ли фоновое задание лицензию?
rac session list --licenses.