Администрирование · 10 мин
Как закрыть соединение в 1С: все способы
Как закрыть соединение в 1С: завершение сеансов в консоли кластера, разрыв COM-соединений, закрытие фоновых заданий и соединений с базами SQL. Пошаговые инструкции.
Незакрытые соединения в 1С — частая причина ошибок «база данных заблокирована», невозможности выполнить обновление конфигурации или запустить монопольный режим. Соединение может «висеть» даже после того, как пользователь закрыл программу: сеанс остаётся активным на сервере 1С или в СУБД ещё несколько минут, а иногда и часов.
Под «закрытием соединения» понимают несколько разных задач: завершить сеанс пользователя в кластере серверов 1С, разорвать COM-соединение из внешней обработки, завершить фоновое задание, закрыть программное соединение с информационной базой из кода или убить зависший процесс rphost. Способ зависит от того, где именно возникло соединение и каким доступом вы располагаете.
Ниже разобраны все основные сценарии: от штатного завершения сеанса через консоль кластера до принудительного снятия зависших процессов. Для каждого способа указаны условия применения, риски и способы проверки результата.
Определяем, какое соединение нужно закрыть
Прежде чем что-то завершать, важно понять, о каком соединении идёт речь. В 1С существует несколько уровней: сеанс пользователя в кластере, соединение кластера с СУБД, COM-соединение между базами, HTTP- и web-сервисные вызовы, фоновые задания. У каждого уровня свой механизм завершения.
Типичный признак проблемы — сообщение «Конфликт блокировок при выполнении транзакции» или «Ошибка разделенного доступа к базе» при попытке обновить конфигурацию. Это значит, что в базе остались активные сеансы. Другой признак — файл 1Cv8.1CD в файловой базе не удаётся скопировать или переместить, хотя все пользователи «вышли».
Откройте список активных пользователей и консоль кластера
Проверьте сеансы в консоли кластера — спящие сеансы живут до таймаута
Проверьте процессы 1cv8.exe в диспетчере задач
Проверьте консоль заданий и журнал регистрации
Завершение сеанса через консоль кластера серверов 1С
Это основной и самый надёжный способ для клиент-серверного варианта работы. Консоль кластера устанавливается вместе с сервером 1С и доступна администратору сервера. Через неё видны все сеансы и соединения всех баз кластера.
Откройте оснастку «Администрирование серверов 1С Предприятия», разверните нужный кластер, затем информационную базу и выберите ветку «Сеансы». В списке будут видны пользователь, приложение (толстый клиент, веб-клиент, фоновое задание), время начала и последняя активность. Выделите сеанс и выберите «Удалить» в контекстном меню — сеанс завершится принудительно.
Обратите внимание на различие между ветками «Сеансы» и «Соединения». Соединение — это техническая связь между процессом кластера и клиентом или СУБД. Удаление соединения разрывает связь, но сеанс может остаться. Для надёжного закрытия удаляйте именно сеанс.
- 1Откройте консоль «Администрирование серверов 1С Предприятия»
- 2Разверните кластер → Информационные базы → нужная база → Сеансы
- 3Отсортируйте по колонке «Спящий» или по времени последней активности
- 4Выделите нужные сеансы и нажмите «Удалить» в контекстном меню
- 5Повторите проверку через минуту — убедитесь, что сеансы не пересоздались
Закрытие сеансов из режима 1С:Предприятие
Если доступа к консоли кластера нет, часть задач решается прямо из интерфейса. В разделе «Администрирование» → «Обслуживание» → «Активные пользователи» (в типовых конфигурациях на БСП) отображается список сеансов. Администратор с правами на администрирование может завершить чужой сеанс кнопкой «Завершить сеанс».
Для обновления конфигурации удобен механизм «Блокировка сеансов»: установите блокировку с сообщением пользователям и дождитесь завершения их работы. Учтите: штатная блокировка не выгоняет уже подключённых пользователей мгновенно — она лишь запрещает новые входы и просит текущих завершить работу. Принудительное завершение всё равно делается через консоль кластера или список активных пользователей.
Завершение через код на встроенном языке
Программно получить список сеансов можно через объект ПолучитьСеансыИнформационнойБазы() (требуются административные права). Завершить конкретный сеанс штатного метода нет — для этого используют COM-объект V83.COMConnector и административный интерфейс кластера либо внешние утилиты вроде rac.
// Завершение сеансов через rac (командная строка)
rac session --cluster=<ID_кластера> terminate --session=<ID_сеанса>Как закрыть COM-соединение с базой 1С
COM-соединение (V83.COMConnector) используется для обмена между базами и из внешних программ. Типичная ошибка разработчика — соединение создаётся, но не закрывается, и на сервере остаётся висеть сеанс, который живёт до таймаута кластера.
Правильное закрытие COM-соединения в коде: сначала обнулите все объекты, полученные через соединение (ссылки на документы, запросы, менеджеры), затем сам объект соединения присвойте Неопределено, а объект коннектора — тоже Неопределено. Порядок важен: если освободить коннектор раньше объектов базы, сборщик мусора не сможет корректно разорвать связь.
Соединение = Коннектор.Connect(СтрокаПодключения);
// ... работа с базой ...
Запрос = Неопределено;
Выборка = Неопределено;
Соединение = Неопределено;
Коннектор = Неопределено;
// Сеанс на сервере закроется в течение короткого времениДаже после корректного освобождения объектов сеанс на сервере может отображаться как спящий ещё несколько минут — это нормально, он не держит блокировок. Если же сеанс остаётся активным дольше, завершите его через консоль кластера.
Завершение фоновых заданий
Фоновое задание — тоже сеанс, и оно может блокировать монопольный режим так же, как пользователь. В типовых конфигурациях список фоновых заданий доступен в разделе «Администрирование» → «Поддержка и обслуживание» → «Регламентные и фоновые задания». Зависшее задание можно выделить и нажать «Отменить».
Программно задание отменяется методом Отменить() объекта фонового задания, найденного через ФоновыеЗадания.ПолучитьФоновыеЗадания() или по уникальному идентификатору. Учтите: отмена работает, только если код задания периодически возвращает управление; жёстко зациклившееся задание может не реагировать — тогда поможет только завершение сеанса в консоли кластера.
Зависшие процессы и соединения с СУБД
Если сеанс удалён в консоли кластера, а блокировка осталась — проблема может быть на уровне СУБД. В MS SQL Server активные соединения видны через Activity Monitor или запрос к sys.dm_exec_sessions. Зависший процесс снимается командой KILL <session_id>, но делать это стоит только после проверки, что процесс действительно относится к зависшему сеансу 1С, а не к активной транзакции.
В файловом варианте «зависшее» соединение чаще всего означает, что процесс 1cv8.exe остался в памяти после некорректного закрытия. Откройте диспетчер задач, найдите процессы 1cv8.exe без окон и завершите их. После этого файл базы освободится.
Как проверить результат
Завершённый сеанс отсутствует или помечен спящим без блокировок
Сеанс появился снова — работает автообмен или регламентное задание
Режим устанавливается без ошибок
Ошибка разделённого доступа — остались активные сеансы
Нет лишних 1cv8.exe, нагрузка rphost соответствует числу пользователей
Процессы накапливаются — ищите незакрытые COM-соединения в коде
Типичные ошибки и профилактика
Чтобы проблема не повторялась, настройте в свойствах информационной базы в консоли кластера параметры «Интервал перезапуска» и «Допустимый объём памяти» для рабочих процессов, а также время засыпания и завершения спящих сеансов. По умолчанию спящий сеанс завершается через сутки — для большинства баз разумно сократить этот срок.
В коде интеграций всегда оборачивайте работу с COM-соединением в попытку-исключение и освобождайте объекты в секции «КонецПопытки» или после неё. Иначе при любой ошибке обмена соединение останется открытым.
Что важно запомнить
Закрывайте сеансы через консоль кластера или список активных пользователей, COM-соединения — обнулением объектов в правильном порядке, фоновые задания — отменой. Зависшие сеансы завершайте точечно, не снимая рабочие процессы целиком, а для профилактики настройте таймауты спящих сеансов.
Частые вопросы
Почему сеанс остаётся в списке после выхода пользователя?
Клиентское приложение закрывается, а сеанс переходит в состояние «спящий» и хранится на сервере до истечения таймаута (по умолчанию — до суток). Спящий сеанс не держит блокировок и не мешает работе, но при необходимости его можно удалить вручную в консоли кластера.
Как закрыть все соединения сразу для обновления конфигурации?
Установите блокировку сеансов, затем в консоли кластера выделите все сеансы базы (Ctrl+A) и удалите их. Альтернатива — скрипт с утилитой rac, который завершает сеансы пакетно. Перед этим убедитесь, что у пользователей нет несохранённых данных.
Чем отличается сеанс от соединения в консоли кластера?
Сеанс — это логическая сессия пользователя или задания в информационной базе. Соединение — технический канал между клиентом, рабочим процессом и СУБД. Для освобождения базы нужно удалять именно сеансы.
Как закрыть соединение, если нет доступа к консоли кластера?
Используйте список активных пользователей в режиме Предприятия (нужны права администратора) или попросите администратора сервера выполнить завершение через rac. В файловой базе достаточно завершить процессы 1cv8.exe на компьютерах пользователей.
Можно ли закрыть COM-соединение принудительно со стороны сервера?
Да. COM-соединение создаёт обычный сеанс в кластере, который виден в консоли с типом приложения «COM-соединение» или фоновым заданием. Такой сеанс завершается стандартно — удалением в консоли кластера.
Опасно ли завершать сеанс принудительно?
Для пользователя это равнозначно аварийному закрытию программы: несохранённые данные формы будут потеряны, но целостность базы не пострадает — транзакции откатятся. Исключение — завершение сеанса в момент длительной регламентной операции, поэтому перед обновлением проверяйте, чем занят сеанс.