Сеансы 1С:Предприятия 8.3: как найти чужое подключение, завершить его и не пустить обратно

· 9 мин

Содержание

Сеанс в 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. Если нужно увидеть всё сразу по всем базам — узел Сеансы прямо под кластером.

Полезные колонки: номер сеанса, пользователь, компьютер, приложение, начало работы, последняя активность, признак «Спящий», рабочий процесс, к которому привязан сеанс.

Из кода

Для отчёта или собственной обработки есть глобальный метод ПолучитьСеансыИнформационнойБазы():

Сеансы = ПолучитьСеансыИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
    Сообщить(СтрШаблон("%1 | %2 | %3 | %4",
        Формат(Сеанс.НомерСеанса, "ЧГ=0"),
        Строка(Сеанс.Пользователь),
        Сеанс.ИмяКомпьютера,
        ПредставлениеПриложения(Сеанс.ИмяПриложения)));
КонецЦикла;

Номер своего сеанса вернёт НомерСеансаИнформационнойБазы(). У фоновых заданий пользователь может быть не заполнен — тогда в строке будет пусто.

Как завершить или удалить сеанс 1С

Завершение сеанса — это аварийный выход для пользователя. Всё, что он не записал, пропадёт. Сначала позвоните или напишите человеку, если он на связи.

Клиент-серверная база: консоль кластера

  1. Найдите сеанс в списке (см. выше).
  2. Выделите строку, в контекстном меню выберите Удалить.
  3. Подтвердите. Можно выделить несколько строк сразу.

У пользователя появится сообщение о завершении сеанса администратором. Если в этот момент на сервере выполнялся долгий вызов, сеанс исчезнет не мгновенно: платформа прервёт вызов при ближайшей возможности.

Клиент-серверная база: утилита 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. Подождите 1–2 минуты и обновите список: долгий вызов мог ещё не прерваться.
  2. Посмотрите, к какому рабочему процессу привязан сеанс. Если запрос висит в СУБД, его можно снять средствами самой СУБД (Activity Monitor в MS SQL, pg_cancel_backend в PostgreSQL).
  3. Крайняя мера — перезапуск рабочего процесса 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 стоит один и тот же номер. Это «виновник» — например, бухгалтер запустил закрытие месяца или перепроведение за квартал, и остальные ждут освобождения тех же данных.

Что с этим делать:

  1. Найдите сеанс-виновник по номеру и посмотрите, что он делает (пользователь, приложение, длительность вызова).
  2. Если операция плановая — дождитесь завершения и договоритесь переносить такие операции на вечер.
  3. Если сеанс завис — завершите его, остальные продолжат работу.

Сами управляемые блокировки по базе выводит rac lock list --cluster=<id> --infobase=<id>. Там видно, какой сеанс и какие объекты держит.

Спящие сеансы

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

Автоматизация контроля сеансов

Ручная чистка подходит для разовых случаев. Если обновления и выгрузки идут по расписанию, сценарий удобно собрать в скрипт:

  1. Включить блокировку начала сеансов и регламентных заданий (rac infobase update ... --sessions-deny=on).
  2. Подождать 5–10 минут, пока люди сохранят работу и выйдут по предупреждению.
  3. Получить список сеансов базы (rac session list) и завершить оставшиеся (rac session terminate).
  4. Выполнить работы: выгрузку .dt, обновление, тестирование и исправление.
  5. Снять блокировку.

Запускают такой скрипт планировщиком Windows или cron на Linux-сервере в ночное окно.

Что ещё стоит автоматизировать:

  • 📊 ежедневный снимок сеансов в файл — видно, кто держит лицензии и в какие часы пик;
  • 🔔 оповещение, если число сеансов приближается к числу лицензий;
  • 🧹 параметр завершения спящих сеансов вместо ручной чистки.

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

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

Чем сеанс отличается от пользователя?
Пользователь — учётная запись в списке пользователей базы. Сеанс — факт его входа. Один пользователь может держать несколько сеансов: тонкий клиент, Конфигуратор и веб-клиент одновременно.
Почему пользователь вышел из 1С, а сеанс остался?
Скорее всего, клиент закрылся аварийно или оборвалась сеть. В клиент-серверной базе такой сеанс становится спящим и висит, пока не истечёт время завершения спящих сеансов или пока его не удалят в консоли.
Занимает ли фоновое задание лицензию?
Нет, лицензии расходуют клиентские сеансы. Проверить, какие именно сеансы взяли лицензию, можно командой rac session list --licenses.
Можно ли завершить сеанс из пользовательского режима?
В клиент-серверных базах на БСП — да, в списке активных пользователей есть команда завершения, если указаны параметры администрирования кластера. В файловой базе — только через закрытие процесса или обработку блокировки работы пользователей.
Что будет с документом, который пользователь не записал?
Он пропадёт. Записанные и проведённые документы останутся. Если в момент завершения шла запись, транзакция откатится целиком — данные не останутся «наполовину».