Зависла 1С: как снять сеанс, задание или процесс без потери данных
Содержание
Зависший процесс в 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. Освободить базу для остальных
Снятый процесс откатывает незавершённую транзакцию: файловая база при следующем подключении восстанавливает целостность сама. Если после этого другие пользователи по-прежнему видят «занятого» коллегу:
- Проверьте, нет ли такого же процесса на другом компьютере (тот же пользователь мог зайти дважды).
- Посмотрите «Активные пользователи» ещё раз через минуту: запись исчезает не мгновенно.
- Если база лежит в сетевой папке и компьютер пользователя выключили «по питанию», перезапустите службу общего доступа к файлам или сам файловый сервер в нерабочее время.
Не удаляйте вручную служебные файлы из каталога базы, даже если они кажутся «лишними». Кроме основного файла 1Cv8.1CD там лежат журнал регистрации и временные файлы платформы, и ошибка здесь может стоить данных.
3. Как завершить зависший сеанс на сервере 1С
В клиент-серверном варианте код работает в рабочем процессе rphost.exe на сервере. Снятие 1cv8c.exe у пользователя закроет окно, но серверный вызов может продолжать выполняться ещё долго и держать блокировки. Правильный путь — удалить сеанс в кластере.
Через консоль кластера
- Запустите «Администрирование серверов 1С Предприятия». Если оснастка не открывается, перерегистрируйте библиотеку
radmin.dllнужной версии платформы командойregsvr32от имени администратора. - Раскройте
Центральные серверы 1С:Предприятия → имя сервера → Кластеры → кластер → Информационные базы → база → Сеансы. - Найдите виновника. Полезные колонки: «Пользователь», «Приложение», «Время начала», «Время вызова (текущее)», а также колонки блокировок СУБД и управляемых блокировок. Колонки, которых не видно, добавляются через настройку списка.
- Правой кнопкой по сеансу → «Удалить».
Сеанс получит команду завершения. Если в нём шёл серверный вызов, платформа прервёт его и откатит транзакцию. На больших документах откат занимает время: сеанс может «висеть» в списке ещё несколько минут. Это нормально.
Сеанс не удаляется
Бывает, что сеанс исчезает и тут же появляется снова, или удаление ничего не меняет. Варианты:
- 🔁 Это регламентное задание, и оно перезапускается по расписанию. Включите в свойствах базы флаг блокировки регламентных заданий и удалите сеанс повторно.
- 🧷 Запрос застрял в СУБД, и откат идёт на стороне сервера баз данных. Смотрите раздел про блокировки СУБД ниже.
- 🧨 Рабочий процесс не отвечает целиком. Тогда помогает только его перезапуск.
Когда приходится снимать 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 платформы.
Порядок команд
- Получите идентификатор кластера:
rac cluster list
- Найдите базу и её идентификатор:
rac infobase summary list --cluster=<uuid-кластера>
- Выведите сеансы базы:
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>
В выводе у каждого сеанса есть session, user-name, app-id, started-at. По ним находите виновника.
- Завершите сеанс:
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?
Нужны ли права администратора кластера для rac?
--cluster-user и --cluster-pwd. Без администраторов кластера команды выполняются без них.