Зависла 1С: как снять сеанс, задание или процесс без потери данных

· 10 мин

Содержание

Зависший процесс в 1С останавливают от мягкого способа к жёсткому: сначала прерывают операцию в самом клиенте (Ctrl+Break), затем удаляют сеанс через «Активные пользователи» или консоль кластера, и только в крайнем случае снимают процесс 1cv8c.exe или rphost.exe в диспетчере задач. В файловой базе всё решается на компьютере пользователя, в клиент-серверной — на сервере 1С и иногда в СУБД.

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

1. Сначала выясните, что именно зависло

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

Что видит пользовательЧто на самом делеЧем останавливать
🧊 Окно 1С «Не отвечает», у остальных всё работаетДолгая операция или зацикливание в одном сеансеCtrl+Break, затем удаление сеанса
🔒 У всех ошибки блокировок, один сеанс «висит»Транзакция держит блокировку на таблицеУдаление виновного сеанса, при необходимости — в СУБД
🐢 Тормозят все базы на сервереРабочий процесс rphost съел память или CPUАнализ процессов кластера, перезапуск процесса в окно простоя
⏳ Окно закрыто, а база «занята»Остался «фантомный» сеанс или фоновое заданиеУдаление сеанса, отмена фонового задания

Где смотреть список работающих:

  • 👥 В самой базе: Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи. Если пункта «Функции для технического специалиста» нет, включите его в Сервис и настройки → Параметры.
  • 🛠 В Конфигураторе: Администрирование → Активные пользователи.
  • 🖥 На сервере: консоль «Администрирование серверов 1С Предприятия», ветка базы → «Сеансы».

В списке сеансов смотрите не только имя пользователя, но и приложение («Тонкий клиент», «Фоновое задание», «Конфигуратор», «COM-соединение»). Зависшее закрытие месяца нередко выполняется фоновым заданием, а не в окне клиента: закрытие окна его не прерывает.

Перед остановкой спросите пользователя, что он делал и сколько уже ждёт. Перепроведение документов за квартал может законно работать час. Прерванная на 95% операция откатится целиком, и начинать придётся с нуля.

2. Как остановить процесс в файловой базе

В файловом режиме нет сервера 1С: каждый пользователь работает своим процессом на своём компьютере. Поэтому и останавливать приходится там.

Шаг 1. Прервать операцию из клиента

Нажмите Ctrl+Break в окне 1С. Платформа спросит, прервать ли выполнение. Это срабатывает, если код периодически отдаёт управление: при обработке больших выборок, проведении в цикле. Если окно совсем не реагирует на клавиши, переходите дальше.

Шаг 2. Снять процесс клиента

Откройте диспетчер задач (Ctrl+Shift+Esc), вкладку «Подробности». Процессы 1С:

  • 1cv8c.exe — тонкий клиент;
  • 1cv8.exe — толстый клиент и Конфигуратор;
  • 1cv8s.exe — стартер, его снимать не нужно.

Выделите зависший процесс и нажмите «Снять задачу». То же самое из командной строки:

tasklist /FI "IMAGENAME eq 1cv8c.exe"
taskkill /IM 1cv8c.exe /F

Команда без указания PID закроет все окна 1С этого пользователя, включая те, где он что-то не дописал. Если открыто несколько баз, снимайте конкретный процесс по номеру: taskkill /PID 7420 /F.

Шаг 3. Освободить базу для остальных

Снятый процесс откатывает незавершённую транзакцию: файловая база при следующем подключении восстанавливает целостность сама. Если после этого другие пользователи по-прежнему видят «занятого» коллегу:

  1. Проверьте, нет ли такого же процесса на другом компьютере (тот же пользователь мог зайти дважды).
  2. Посмотрите «Активные пользователи» ещё раз через минуту: запись исчезает не мгновенно.
  3. Если база лежит в сетевой папке и компьютер пользователя выключили «по питанию», перезапустите службу общего доступа к файлам или сам файловый сервер в нерабочее время.

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

3. Как завершить зависший сеанс на сервере 1С

В клиент-серверном варианте код работает в рабочем процессе rphost.exe на сервере. Снятие 1cv8c.exe у пользователя закроет окно, но серверный вызов может продолжать выполняться ещё долго и держать блокировки. Правильный путь — удалить сеанс в кластере.

Через консоль кластера

  1. Запустите «Администрирование серверов 1С Предприятия». Если оснастка не открывается, перерегистрируйте библиотеку radmin.dll нужной версии платформы командой regsvr32 от имени администратора.
  2. Раскройте Центральные серверы 1С:Предприятия → имя сервера → Кластеры → кластер → Информационные базы → база → Сеансы.
  3. Найдите виновника. Полезные колонки: «Пользователь», «Приложение», «Время начала», «Время вызова (текущее)», а также колонки блокировок СУБД и управляемых блокировок. Колонки, которых не видно, добавляются через настройку списка.
  4. Правой кнопкой по сеансу → «Удалить».

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

Сеанс не удаляется

Бывает, что сеанс исчезает и тут же появляется снова, или удаление ничего не меняет. Варианты:

  • 🔁 Это регламентное задание, и оно перезапускается по расписанию. Включите в свойствах базы флаг блокировки регламентных заданий и удалите сеанс повторно.
  • 🧷 Запрос застрял в СУБД, и откат идёт на стороне сервера баз данных. Смотрите раздел про блокировки СУБД ниже.
  • 🧨 Рабочий процесс не отвечает целиком. Тогда помогает только его перезапуск.

Когда приходится снимать rphost

В ветке «Рабочие процессы» консоли видно, сколько памяти и соединений у каждого rphost, а в «Соединениях» процесса — какие сеансы в нём живут. Если процесс завис полностью, его снимают в диспетчере задач сервера по PID, который видно в консоли.

Снятие rphost обрывает ВСЕ сеансы всех баз, обслуживаемых этим процессом. Пользователи получат ошибку соединения, несохранённые данные пропадут. Делайте это в перерыв или после предупреждения в общем чате. Кластер сам поднимет новый рабочий процесс.

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

4. Остановка сеансов из командной строки через rac

Утилита rac — консольный клиент сервера администрирования ras. Её удобно использовать, когда нет доступа к графической консоли (сервер на Linux, удалённое подключение по SSH) или когда снятие сеансов надо поставить в скрипт перед ночным обновлением.

Подготовка

На сервере должна работать служба ras. На Linux её запускают так:

/opt/1cv8/x86_64/8.3.25.1374/ras cluster --daemon

Путь с номером версии подставьте свой. По умолчанию ras слушает порт 1545, а rac по умолчанию обращается к localhost:1545. На Windows ras регистрируют как службу из каталога bin платформы.

Порядок команд

  1. Получите идентификатор кластера:
rac cluster list
  1. Найдите базу и её идентификатор:
rac infobase summary list --cluster=<uuid-кластера>
  1. Выведите сеансы базы:
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>

В выводе у каждого сеанса есть session, user-name, app-id, started-at. По ним находите виновника.

  1. Завершите сеанс:
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если у кластера заданы администраторы, к каждой команде добавьте --cluster-user= и --cluster-pwd=. Для подключения к удалённому серверу укажите адрес в конце: rac session list ... srv1c:1545.

Точный набор ключей зависит от версии платформы. Если команда ругается на параметр, загляните в rac help session — справка встроена в утилиту и отвечает текущей сборке.

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

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

#!/bin/bash
CL=$(rac cluster list | awk '/^cluster/{print $3; exit}')
IB="<uuid-базы>"
for S in $(rac session list --cluster=$CL --infobase=$IB | awk '/^session /{print $3}'); do
  rac session terminate --cluster=$CL --session=$S
done

Скрипт обрывает работу всех пользователей базы. Запускайте его только в согласованное окно и после рассылки предупреждения.

5. Если процесс держит блокировку в СУБД

Иногда сеанс в 1С уже удалён, а пользователи по-прежнему ловят ожидание на блокировке. Значит, на SQL-сервере остался активный запрос или незакрытая транзакция. Снимать его нужно там, и только понимая, чей это процесс.

MS SQL Server

Найти, кто кого блокирует:

SELECT r.session_id, r.blocking_session_id, r.wait_type,
       r.wait_time, r.command, s.host_name, s.program_name
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
WHERE r.blocking_session_id <> 0;

blocking_session_id — номер процесса-виновника. Проследите цепочку до начала: того, кто блокирует, но сам никого не ждёт. Завершить его:

KILL 87;

Быстрый обзор даёт и EXEC sp_who2; — колонка BlkBy.

PostgreSQL

SELECT pid, pg_blocking_pids(pid) AS blocked_by,
       state, now() - query_start AS duration, left(query, 80)
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;

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

SELECT pg_cancel_backend(12345);
SELECT pg_terminate_backend(12345);

Завершённое соединение СУБД откатывает свою транзакцию. Длинная транзакция откатывается долго, и в это время блокировки остаются. Не убивайте процесс повторно и не перезапускайте службу СУБД посреди отката: это продлит простой, а не сократит.

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

6. Как не допускать зависаний: таймауты и настройки кластера

Остановить процесс — полдела. Если одна и та же операция виснет каждую неделю, лечите причину.

Настройки, которые реально помогают

ГдеПараметрЗачем
Свойства рабочего сервераОбъём памяти рабочих процессов, безопасный расход памяти за один вызовНе даёт одному вызову съесть всю память сервера
Свойства кластераИнтервал перезапуска, допустимый объём памяти и интервал его превышенияПлановый перезапуск «распухших» rphost
Свойства кластера«Выключенные процессы останавливать через»Процесс, выведенный из работы, не живёт бесконечно
Свойства базыБлокировка начала сеансов, блокировка регламентных заданийЧистое окно для обслуживания без новых подключений

Значения подбирайте под сервер. Ориентир для памяти: лимит на один вызов в несколько гигабайт уже ловит «бесконечные» отчёты, не мешая обычной работе. Названия полей сверяйте в своей версии консоли: в последних релизах 8.3 часть параметров перенесена из кластера в свойства рабочего сервера.

Привычки, которые снимают половину проблем

  • 📅 Тяжёлые операции (закрытие месяца, перепроведение, пересчёт итогов) — вечером или в выходной, когда никто не работает в тех же регистрах.
  • 🧩 Большие периоды — частями: перепроведение по месяцам, а не за год сразу.
  • 🗂 Режим блокировок «Управляемый» в свойствах конфигурации: в типовых конфигурациях он уже включён, а в доработанных старых — бывает автоматический, и тогда блокировки берутся на целые таблицы.
  • 🧹 Регламентное обслуживание СУБД: обновление статистики и индексов. Устаревшая статистика делает из секундного запроса многоминутный.
  • 📜 Технологический журнал с событиями TLOCK, TDEADLOCK, TTIMEOUT — для поиска повторяющегося виновника. Включайте его на ограниченное время: журнал быстро растёт.
Что у вас зависло?

7. Зависшее фоновое задание: отдельный случай

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

Если отмена не срабатывает, задание продолжает жить как сеанс с приложением «Фоновое задание». Удаляйте его тем же способом, что и обычный сеанс: в консоли кластера или через rac. Если задание регламентное и тут же стартует заново — временно отключите его в карточке регламентного задания и разберитесь, почему оно не укладывается в расписание.

Частые вопросы об остановке процессов 1С

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