Зависла задача или сеанс в 1С 8.3: что завершить и в каком порядке
Содержание
Чтобы снять зависшую задачу
в 1С 8.3 в клиент-серверном варианте, откройте Администрирование серверов 1С Предприятия, раскройте кластер → Информационные базы → нужная база → Сеансы, найдите сеанс пользователя или фонового задания и выберите в контекстном меню Удалить. Сеанс завершится, его незавершённая транзакция откатится, а блокировки освободятся.
Частая ошибка — сразу снимать в диспетчере задач процесс rphost.exe или перезапускать службу. Так «лечат» одну зависшую задачу ценой всех пользователей на этом рабочем процессе. Правильный порядок обратный: сначала точечно (один сеанс или одно фоновое задание), и только если не помогло — процесс, служба, уровень СУБД.
Сначала определите, что именно зависло
«Задачей» в 1С называют разное. От этого зависит инструмент.
| Что видит пользователь | Что зависло на самом деле | Чем снимать |
|---|---|---|
| Окно 1С не отвечает, «песочные часы» | Клиентское приложение или серверный вызов сеанса | Консоль кластера → удалить сеанс |
| Обмен, закрытие месяца или загрузка «висят» часами | Фоновое или регламентное задание | Список фоновых заданий → отменить; либо сеанс BackgroundJob в консоли |
| Документ не проводится: превышено время ожидания блокировки | Чужая транзакция держит блокировку | Найти сеанс-виновник, завершить его |
| Пользователь «вылетел», а лицензия занята | Осиротевший сеанс | Консоль кластера → удалить сеанс |
| Тормозит вся база у всех | Рабочий процесс или СУБД | Консоль → процессы; затем СУБД |
В файловом варианте консоли кластера нет. Там зависшую задачу снимают через Активные пользователи и блокировку работы пользователей в самой программе, а в крайнем случае — завершением 1cv8.exe на компьютере пользователя.
Снятие сеанса через консоль администрирования кластера
Подключение
- Запустите
Администрирование серверов 1С Предприятия. Если оснастка не открывается, зарегистрируйтеradmin.dllнужной версии платформы командой от администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"
Номер версии в пути подставьте свой — он должен совпадать с версией сервера.
- Добавьте центральный сервер:
Действие → Новый → Центральный сервер 1С:Предприятия 8.3, укажите имя сервера и порт агента1540. - Если кластер защищён, введите логин и пароль администратора кластера.
Поиск зависшего сеанса
Раскройте нужную информационную базу и перейдите в Сеансы. Полезные колонки (их можно добавить через настройку колонок списка):
- 🕐 Время вызова (текущее) — сколько миллисекунд длится текущий серверный вызов. Минуты здесь — главный признак зависания.
- 🗄 Время вызова СУБД (текущее) — сколько из этого времени сеанс ждёт ответа базы данных.
- 🔒 Заблокировано 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_backend | 1С не может достучаться до соединения | Сеанс 1С получит ошибку СУБД |
Как не допускать повторных зависаний
- ⏱ Время ожидания блокировки. В Конфигураторе
Администрирование → Параметры информационной базызадаётся время ожидания блокировки данных в секундах (по умолчанию 20). Слишком большое значение превращает короткие конфликты в долгие «висения». - 🧹 Перезапуск рабочих процессов. В свойствах кластера задайте интервал перезапуска и включите принудительное завершение проблемных процессов. Процесс, съевший память, будет перезапущен автоматически.
- 📅 Расписание регламентных заданий. Разведите тяжёлые задания по времени, не ставьте обмен каждую минуту, если хватит десяти.
- 🛑 Блокировка регламентных заданий. На время обновления или пересчёта включите в свойствах информационной базы в консоли флажок блокировки регламентных заданий — они не стартуют.
- 🗃 Обслуживание СУБД. Обновление статистики и перестроение индексов по расписанию. Без этого запросы со временем идут дольше и дольше держат блокировки.
- 👤 Длинные транзакции. Закрытие месяца , перепроведение за год и групповые обработки запускайте вне рабочего дня — они дольше всего держат блокировки.