К статье
Практический материал

Администрирование · 10 мин

Как закрыть соединение в 1С: все способы

Как закрыть соединение в 1С: завершение сеансов в консоли кластера, разрыв COM-соединений, закрытие фоновых заданий и соединений с базами SQL. Пошаговые инструкции.

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

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

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

Определяем, какое соединение нужно закрыть

Прежде чем что-то завершать, важно понять, о каком соединении идёт речь. В 1С существует несколько уровней: сеанс пользователя в кластере, соединение кластера с СУБД, COM-соединение между базами, HTTP- и web-сервисные вызовы, фоновые задания. У каждого уровня свой механизм завершения.

Типичный признак проблемы — сообщение «Конфликт блокировок при выполнении транзакции» или «Ошибка разделенного доступа к базе» при попытке обновить конфигурацию. Это значит, что в базе остались активные сеансы. Другой признак — файл 1Cv8.1CD в файловой базе не удаётся скопировать или переместить, хотя все пользователи «вышли».

Ошибка монопольного режимаВ базе есть активные сеансы

Откройте список активных пользователей и консоль кластера

База недоступна после выхода всехЗависший сеанс на сервере

Проверьте сеансы в консоли кластера — спящие сеансы живут до таймаута

COM-объект не освобождаетсяСоединение не закрыто в коде

Проверьте процессы 1cv8.exe в диспетчере задач

Фоновое задание висит часамиЗадание зависло или зациклилось

Проверьте консоль заданий и журнал регистрации

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

Это основной и самый надёжный способ для клиент-серверного варианта работы. Консоль кластера устанавливается вместе с сервером 1С и доступна администратору сервера. Через неё видны все сеансы и соединения всех баз кластера.

Откройте оснастку «Администрирование серверов 1С Предприятия», разверните нужный кластер, затем информационную базу и выберите ветку «Сеансы». В списке будут видны пользователь, приложение (толстый клиент, веб-клиент, фоновое задание), время начала и последняя активность. Выделите сеанс и выберите «Удалить» в контекстном меню — сеанс завершится принудительно.

Обратите внимание на различие между ветками «Сеансы» и «Соединения». Соединение — это техническая связь между процессом кластера и клиентом или СУБД. Удаление соединения разрывает связь, но сеанс может остаться. Для надёжного закрытия удаляйте именно сеанс.

Порядок действий в консоли кластера
  1. 1
    Откройте консоль «Администрирование серверов 1С Предприятия»
  2. 2
    Разверните кластер → Информационные базы → нужная база → Сеансы
  3. 3
    Отсортируйте по колонке «Спящий» или по времени последней активности
  4. 4
    Выделите нужные сеансы и нажмите «Удалить» в контекстном меню
  5. 5
    Повторите проверку через минуту — убедитесь, что сеансы не пересоздались

Закрытие сеансов из режима 1С:Предприятие

Если доступа к консоли кластера нет, часть задач решается прямо из интерфейса. В разделе «Администрирование» → «Обслуживание» → «Активные пользователи» (в типовых конфигурациях на БСП) отображается список сеансов. Администратор с правами на администрирование может завершить чужой сеанс кнопкой «Завершить сеанс».

Для обновления конфигурации удобен механизм «Блокировка сеансов»: установите блокировку с сообщением пользователям и дождитесь завершения их работы. Учтите: штатная блокировка не выгоняет уже подключённых пользователей мгновенно — она лишь запрещает новые входы и просит текущих завершить работу. Принудительное завершение всё равно делается через консоль кластера или список активных пользователей.

Завершение через код на встроенном языке

Программно получить список сеансов можно через объект ПолучитьСеансыИнформационнойБазы() (требуются административные права). Завершить конкретный сеанс штатного метода нет — для этого используют COM-объект V83.COMConnector и административный интерфейс кластера либо внешние утилиты вроде rac.

bsl
// Завершение сеансов через rac (командная строка)
rac session --cluster=<ID_кластера> terminate --session=<ID_сеанса>

Как закрыть COM-соединение с базой 1С

COM-соединение (V83.COMConnector) используется для обмена между базами и из внешних программ. Типичная ошибка разработчика — соединение создаётся, но не закрывается, и на сервере остаётся висеть сеанс, который живёт до таймаута кластера.

Правильное закрытие COM-соединения в коде: сначала обнулите все объекты, полученные через соединение (ссылки на документы, запросы, менеджеры), затем сам объект соединения присвойте Неопределено, а объект коннектора — тоже Неопределено. Порядок важен: если освободить коннектор раньше объектов базы, сборщик мусора не сможет корректно разорвать связь.

bsl
Соединение = Коннектор.Connect(СтрокаПодключения);
// ... работа с базой ...
Запрос = Неопределено;
Выборка = Неопределено;
Соединение = Неопределено;
Коннектор = Неопределено;
// Сеанс на сервере закроется в течение короткого времени

Даже после корректного освобождения объектов сеанс на сервере может отображаться как спящий ещё несколько минут — это нормально, он не держит блокировок. Если же сеанс остаётся активным дольше, завершите его через консоль кластера.

Завершение фоновых заданий

Фоновое задание — тоже сеанс, и оно может блокировать монопольный режим так же, как пользователь. В типовых конфигурациях список фоновых заданий доступен в разделе «Администрирование» → «Поддержка и обслуживание» → «Регламентные и фоновые задания». Зависшее задание можно выделить и нажать «Отменить».

Программно задание отменяется методом Отменить() объекта фонового задания, найденного через ФоновыеЗадания.ПолучитьФоновыеЗадания() или по уникальному идентификатору. Учтите: отмена работает, только если код задания периодически возвращает управление; жёстко зациклившееся задание может не реагировать — тогда поможет только завершение сеанса в консоли кластера.

Зависшие процессы и соединения с СУБД

Если сеанс удалён в консоли кластера, а блокировка осталась — проблема может быть на уровне СУБД. В MS SQL Server активные соединения видны через Activity Monitor или запрос к sys.dm_exec_sessions. Зависший процесс снимается командой KILL <session_id>, но делать это стоит только после проверки, что процесс действительно относится к зависшему сеансу 1С, а не к активной транзакции.

В файловом варианте «зависшее» соединение чаще всего означает, что процесс 1cv8.exe остался в памяти после некорректного закрытия. Откройте диспетчер задач, найдите процессы 1cv8.exe без окон и завершите их. После этого файл базы освободится.

Контрольные точки

Как проверить результат

Список сеансов в консоли кластера
Норма

Завершённый сеанс отсутствует или помечен спящим без блокировок

Тревожный признак

Сеанс появился снова — работает автообмен или регламентное задание

Монопольный режим / обновление конфигурации
Норма

Режим устанавливается без ошибок

Тревожный признак

Ошибка разделённого доступа — остались активные сеансы

Процессы на сервере
Норма

Нет лишних 1cv8.exe, нагрузка rphost соответствует числу пользователей

Тревожный признак

Процессы накапливаются — ищите незакрытые COM-соединения в коде

Типичные ошибки и профилактика

Чтобы проблема не повторялась, настройте в свойствах информационной базы в консоли кластера параметры «Интервал перезапуска» и «Допустимый объём памяти» для рабочих процессов, а также время засыпания и завершения спящих сеансов. По умолчанию спящий сеанс завершается через сутки — для большинства баз разумно сократить этот срок.

В коде интеграций всегда оборачивайте работу с COM-соединением в попытку-исключение и освобождайте объекты в секции «КонецПопытки» или после неё. Иначе при любой ошибке обмена соединение останется открытым.

Типичные ошибки
01
Удаление соединения вместо сеанса в консоли кластера — сеанс остаётся и продолжает держать блокировки
02
Снятие процесса rphost целиком вместо завершения конкретного сеанса — страдают все пользователи процесса
03
Освобождение коннектора раньше объектов соединения — COM-соединение не закрывается, сеанс висит до таймаута
04
Отсутствие обработки исключений в коде обмена — при ошибке соединение остаётся открытым
05
Ожидание мгновенного исчезновения спящего сеанса — это нормальное поведение, а не зависание
Итог

Что важно запомнить

Закрывайте сеансы через консоль кластера или список активных пользователей, COM-соединения — обнулением объектов в правильном порядке, фоновые задания — отменой. Зависшие сеансы завершайте точечно, не снимая рабочие процессы целиком, а для профилактики настройте таймауты спящих сеансов.

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

Почему сеанс остаётся в списке после выхода пользователя?

Клиентское приложение закрывается, а сеанс переходит в состояние «спящий» и хранится на сервере до истечения таймаута (по умолчанию — до суток). Спящий сеанс не держит блокировок и не мешает работе, но при необходимости его можно удалить вручную в консоли кластера.

Как закрыть все соединения сразу для обновления конфигурации?

Установите блокировку сеансов, затем в консоли кластера выделите все сеансы базы (Ctrl+A) и удалите их. Альтернатива — скрипт с утилитой rac, который завершает сеансы пакетно. Перед этим убедитесь, что у пользователей нет несохранённых данных.

Чем отличается сеанс от соединения в консоли кластера?

Сеанс — это логическая сессия пользователя или задания в информационной базе. Соединение — технический канал между клиентом, рабочим процессом и СУБД. Для освобождения базы нужно удалять именно сеансы.

Как закрыть соединение, если нет доступа к консоли кластера?

Используйте список активных пользователей в режиме Предприятия (нужны права администратора) или попросите администратора сервера выполнить завершение через rac. В файловой базе достаточно завершить процессы 1cv8.exe на компьютерах пользователей.

Можно ли закрыть COM-соединение принудительно со стороны сервера?

Да. COM-соединение создаёт обычный сеанс в кластере, который виден в консоли с типом приложения «COM-соединение» или фоновым заданием. Такой сеанс завершается стандартно — удалением в консоли кластера.

Опасно ли завершать сеанс принудительно?

Для пользователя это равнозначно аварийному закрытию программы: несохранённые данные формы будут потеряны, но целостность базы не пострадает — транзакции откатятся. Исключение — завершение сеанса в момент длительной регламентной операции, поэтому перед обновлением проверяйте, чем занят сеанс.