Зависла задача или сеанс в 1С 8.3: что завершить и в каком порядке

· 9 мин

Содержание

Чтобы снять зависшую задачу в 1С 8.3 в клиент-серверном варианте, откройте Администрирование серверов 1С Предприятия, раскройте кластер → Информационные базы → нужная база → Сеансы, найдите сеанс пользователя или фонового задания и выберите в контекстном меню Удалить. Сеанс завершится, его незавершённая транзакция откатится, а блокировки освободятся.

Частая ошибка — сразу снимать в диспетчере задач процесс rphost.exe или перезапускать службу. Так «лечат» одну зависшую задачу ценой всех пользователей на этом рабочем процессе. Правильный порядок обратный: сначала точечно (один сеанс или одно фоновое задание), и только если не помогло — процесс, служба, уровень СУБД.

Сначала определите, что именно зависло

«Задачей» в 1С называют разное. От этого зависит инструмент.

Что видит пользовательЧто зависло на самом делеЧем снимать
Окно 1С не отвечает, «песочные часы»Клиентское приложение или серверный вызов сеансаКонсоль кластера → удалить сеанс
Обмен, закрытие месяца или загрузка «висят» часамиФоновое или регламентное заданиеСписок фоновых заданий → отменить; либо сеанс BackgroundJob в консоли
Документ не проводится: превышено время ожидания блокировкиЧужая транзакция держит блокировкуНайти сеанс-виновник, завершить его
Пользователь «вылетел», а лицензия занятаОсиротевший сеансКонсоль кластера → удалить сеанс
Тормозит вся база у всехРабочий процесс или СУБДКонсоль → процессы; затем СУБД

В файловом варианте консоли кластера нет. Там зависшую задачу снимают через Активные пользователи и блокировку работы пользователей в самой программе, а в крайнем случае — завершением 1cv8.exe на компьютере пользователя.

Снятие сеанса через консоль администрирования кластера

Подключение

  1. Запустите Администрирование серверов 1С Предприятия. Если оснастка не открывается, зарегистрируйте radmin.dll нужной версии платформы командой от администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"

Номер версии в пути подставьте свой — он должен совпадать с версией сервера.

  1. Добавьте центральный сервер: Действие → Новый → Центральный сервер 1С:Предприятия 8.3, укажите имя сервера и порт агента 1540.
  2. Если кластер защищён, введите логин и пароль администратора кластера.

Поиск зависшего сеанса

Раскройте нужную информационную базу и перейдите в Сеансы. Полезные колонки (их можно добавить через настройку колонок списка):

  • 🕐 Время вызова (текущее) — сколько миллисекунд длится текущий серверный вызов. Минуты здесь — главный признак зависания.
  • 🗄 Время вызова СУБД (текущее) — сколько из этого времени сеанс ждёт ответа базы данных.
  • 🔒 Заблокировано 1С и Заблокировано СУБД — номер сеанса или соединения, который держит блокировку и не даёт этому сеансу работать.
  • 🧩 Приложение — Тонкий клиент, Фоновое задание, Конфигуратор, COM-соединение.

Ориентируйтесь на цепочку: если сеанс 15 ждёт сеанс 8, а сеанс 8 никого не ждёт, проблема в сеансе 8. Его и снимают.

Завершение

Выделите сеанс → контекстное меню → Удалить. Пользователь увидит сообщение о разрыве соединения, а транзакция откатится. Документ, который он проводил, останется непроведённым.

Удаление сеанса с открытой транзакцией — это откат всех изменений этой транзакции. Если это многочасовое закрытие месяца, его придётся запускать заново. Предупредите владельца задачи.

Узел Блокировки под базой показывает управляемые блокировки 1С: кто, на какой объект и в каком режиме. Сами блокировки оттуда удалить нельзя — они снимаются вместе с сеансом, который их держит.

То же самое из командной строки: rac

На Linux-сервере или для скриптов используйте rac. Нужна запущенная служба сервера администрирования ras (по умолчанию порт 1545).

rac cluster list
rac infobase summary list --cluster=<uuid-кластера>
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если на кластере есть администратор, добавьте --cluster-user и --cluster-pwd. В выводе rac session list ищите поля blocked-by-ls и blocked-by-dbms — это те же «Заблокировано 1С» и «Заблокировано СУБД». Остальные параметры смотрите в rac help session.

Отмена фоновых заданий и завершение сеансов программно

Через интерфейс конфигурации

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

  • Регламентные и фоновые задания — список с колонкой состояния. Выделите задание в состоянии «Выполняется» и отмените его.
  • Активные пользователи — список сеансов. В клиент-серверной базе отсюда можно завершить выбранный сеанс: программа запросит пароль администратора кластера, если он задан.

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

Отмена фонового задания кодом

Если списка нет или нужно отменить задания по отбору, выполните код на сервере (например, во внешней обработке):

&НаСервереБезКонтекста
Процедура ОтменитьАктивныеФоновые(ИмяМетода)
	Отбор = Новый Структура;
	Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
	Отбор.Вставить("ИмяМетода", ИмяМетода);
	Задания = ФоновыеЗадания.ПолучитьФоновые(Отбор);
	Для Каждого Задание Из Задания Цикл
		Задание.Отменить();
	КонецЦикла;
КонецПроцедуры

Отменить() не обрывает задание мгновенно: платформа прерывает его на ближайшей возможности. Если задание ждёт ответа СУБД, отмена сработает только после этого ответа — тогда снимайте его сеанс в консоли.

Завершение сеанса через COM-соединение к агенту

Для автоматизации (например, ночное «выгнать всех из базы») используют V83.COMConnector:

Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent("tcp://srv1c:1540");
Кластер = Агент.GetClusters()[0];
Агент.Authenticate(Кластер, "", "");
Для Каждого Сеанс Из Агент.GetSessions(Кластер) Цикл
	Если Сеанс.infoBase.Name = "buh" И Сеанс.AppID <> "Designer" Тогда
		Агент.TerminateSession(Кластер, Сеанс);
	КонецЕсли;
КонецЦикла;

В Authenticate передайте логин и пароль администратора кластера, если он задан. Имя базы buh и сервер srv1c замените своими. Фильтр по AppID оставляет в живых Конфигуратор.

Когда консоль не помогает: процессы и службы Windows

Бывает, что сеанс после Удалить висит в списке ещё долго, или сама консоль перестаёт отвечать. Тогда спускаются на уровень ниже.

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

Перезапуск рабочего процесса

В консоли откройте Рабочие процессы, посмотрите, на каком процессе сидит проблемный сеанс (колонка Рабочий процесс в списке сеансов). Если процессов несколько, перезапуск одного затронет только его сеансы.

Если консоль недоступна, в диспетчере задач Windows на сервере найдите rphost.exe с нужным PID и завершите его. Менеджер кластера (rmngr.exe) поднимет новый рабочий процесс сам. Все сеансы на убитом процессе оборвутся, их транзакции откатятся.

Перезапуск службы сервера 1С

Последний шаг — служба Агент сервера 1С:Предприятия 8.3 в оснастке services.msc. Остановка службы завершает ragent, rmngr и все rphost — то есть всех пользователей всех баз на этом сервере.

Если после перезапуска сеансы «воскресают» в списке или сервер сразу тормозит, при остановленной службе очистите сеансовые данные: в каталоге кластера srvinfo\reg_1541\ удалите папки snccntx…. Сам каталог srvinfo и файл 1CV8Clst.lst не трогайте — в них настройки кластера.

Файловая база

В файловом варианте серверных процессов нет: каждый пользователь работает в своём 1cv8.exe (или 1cv8c.exe для тонкого клиента ), а на сервере терминалов они все видны в диспетчере задач на вкладке «Пользователи». Завершите процесс только того пользователя, у кого зависла задача.

После аварийного завершения база может ругаться, что открыта другим пользователем. Если все вышли, а сообщение осталось — проверьте, не висит ли процесс 1С у кого-то ещё на сервере терминалов, Если база лежит в сетевой папке, на компьютере с этой папкой откройте compmgmt.msc → Общие папки → Открытые файлы и закройте зависший доступ к файлу 1Cv8.1CD. Делайте это, только убедившись, что в базе никто не работает .

Ищем причину зависания в журналах

Снять задачу — полдела. Если она повиснет завтра в то же время, нужна причина.

Журнал регистрации

Откройте Администрирование → Обслуживание → Журнал регистрации (или Конфигуратор → Администрирование → Журнал регистрации). Отфильтруйте по пользователю и интервалу времени вокруг зависания. Полезные события:

  • 📌 Сеанс. Начало / Сеанс. Завершение — когда задача стартовала и как закончилась;
  • 📌 Транзакция. Отмена — откат, в том числе после вашего удаления сеанса;
  • 📌 события фоновых и регламентных заданий — запуск, ошибка, отмена;
  • 📌 ошибки с текстом Конфликт блокировок при выполнении транзакции — прямой признак, что задачи мешают друг другу.

Типичная картина: два регламентных задания (например, обмен и пересчёт итогов) стартуют в одну минуту и пишут в одни регистры. Разведите их по времени — зависания уходят.

Технологический журнал

Журнал регистрации не показывает, кто кого заблокировал. Это видно в технологическом журнале. Его включают файлом logcfg.xml в каталоге conf платформы. Для анализа блокировок собирают события TLOCK (установка управляемой блокировки), TTIMEOUT (превышено время ожидания) и TDEADLOCK (взаимоблокировка).

<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\techlog" history="24">
    <event><eq property="name" value="TLOCK"/></event>
    <event><eq property="name" value="TTIMEOUT"/></event>
    <event><eq property="name" value="TDEADLOCK"/></event>
    <property name="all"/>
  </log>
</config>

Техжурнал быстро растёт. Включайте его на время поиска причины и следите за местом на диске, параметр history — сколько часов хранить.

Зависание на стороне СУБД: MS SQL и PostgreSQL

Если в сеансе велико Время вызова СУБД, а поле Заблокировано СУБД заполнено, ждёт сама база данных. Номер соединения СУБД сеанса видно в его свойствах (в rac — поле db-proc-info).

MS SQL Server

Найти цепочку блокировок:

SELECT session_id, blocking_session_id, wait_type, wait_time, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;

blocking_session_id — виновник. Сопоставьте его с соединением СУБД в консоли 1С и завершите сеанс 1С. Только если это не помогает, завершают соединение в SQL: KILL 57 (где 57 — номер виновника).

PostgreSQL

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

Сначала мягко — SELECT pg_cancel_backend(<pid>); отменяет текущий запрос. Если не помогло — pg_terminate_backend(<pid>) закрывает соединение.

СпособКогдаРиск
Удалить сеанс в консоли 1СВсегда первымОткат транзакции одного сеанса
Отменить фоновое заданиеЗависли обмен, закрытие, загрузкаЗадание придётся запускать снова
Перезапустить rphostСеанс не удаляется, процесс «распух» по памятиПадают все сеансы процесса
Перезапустить службуНе отвечает консоль, кластерПадают все сеансы сервера
KILL / pg_terminate_backend1С не может достучаться до соединенияСеанс 1С получит ошибку СУБД

Как не допускать повторных зависаний

  • ⏱ Время ожидания блокировки. В Конфигураторе Администрирование → Параметры информационной базы задаётся время ожидания блокировки данных в секундах (по умолчанию 20). Слишком большое значение превращает короткие конфликты в долгие «висения».
  • 🧹 Перезапуск рабочих процессов. В свойствах кластера задайте интервал перезапуска и включите принудительное завершение проблемных процессов. Процесс, съевший память, будет перезапущен автоматически.
  • 📅 Расписание регламентных заданий. Разведите тяжёлые задания по времени, не ставьте обмен каждую минуту, если хватит десяти.
  • 🛑 Блокировка регламентных заданий. На время обновления или пересчёта включите в свойствах информационной базы в консоли флажок блокировки регламентных заданий — они не стартуют.
  • 🗃 Обслуживание СУБД. Обновление статистики и перестроение индексов по расписанию. Без этого запросы со временем идут дольше и дольше держат блокировки.
  • 👤 Длинные транзакции. Закрытие месяца , перепроведение за год и групповые обработки запускайте вне рабочего дня — они дольше всего держат блокировки.
Перед тем как удалить сеанс
Выполнено: 0 / 4

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

Сеанс удалён, а в списке остался. Что делать?
Подождите 1–2 минуты: сеанс исчезает, когда рабочий процесс завершит текущий вызов. Если он ждёт СУБД, снимите соединение на стороне базы данных или перезапустите рабочий процесс.
Освободится ли лицензия после удаления сеанса?
Да. Лицензия привязана к сеансу, после его завершения она возвращается в пул.
Можно ли снять задачу без прав администратора кластера?
Если у кластера назначен администратор — нет. Если администраторов нет, консолью может пользоваться любой, кто подключился к серверу. Это небезопасно: задайте администратора кластера.
Пропадут ли данные, если удалить зависший сеанс?
Пропадут только несохранённые изменения этого сеанса: открытая транзакция откатится. Уже записанные документы останутся.
Почему сеанс Конфигуратора нельзя просто удалить?
Удалить можно, но если в этот момент идёт обновление структуры базы, оно прервётся. Сначала выясните у того, кто работает в Конфигураторе, что он делает.