Остановить зависшее в 1С без потери данных: от одного пользователя до рабочего процесса сервера
Содержание
Корректно завершить процесс в 1С можно тремя способами, и выбор зависит от того, что именно зависло. Свой сеанс пользователь закрывает сам: Файл → Выход или крестик окна, а при зависании — снятие процесса 1cv8c.exe в диспетчере задач. Чужие сеансы и фоновые задания администратор завершает из программы (Администрирование → Обслуживание → Активные пользователи) или из консоли кластера серверов. Снимать процесс на уровне СУБД или рабочий процесс rphost — крайняя мера.
Правило простое: начинайте с самого мягкого способа и спускайтесь ниже, только если он не сработал. Чем ниже уровень, тем больше людей заденет остановка и тем выше риск откатить чужую незаписанную работу.
Что именно нужно завершить: выбор способа
Сначала определите, что висит. От этого зависит, кто может это остановить и чем.
| Что зависло | Кто завершает | Чем | Кого заденет |
|---|---|---|---|
| Своё окно 1С | Пользователь | Выход из программы, диспетчер задач | Только вас |
| Чужой сеанс | Администратор базы | «Активные пользователи», консоль кластера | Одного пользователя |
| Фоновое или регламентное задание | Администратор базы | «Регламентные и фоновые задания», консоль кластера | Одну операцию |
| Обновление конфигурации | Администратор | Ожидание, затем консоль кластера | Всю базу |
| Долгий запрос | Администратор СУБД | Средства MS SQL или PostgreSQL | Одну транзакцию |
| Весь рабочий процесс | Администратор сервера | Консоль кластера, диспетчер задач сервера | Всех на этом процессе |
Файловая база и клиент-серверная устроены по-разному. В файловой нет консоли кластера и нет фоновых заданий в отдельном процессе: всё работает внутри клиентских сеансов. Поэтому серверные способы ниже к ней не относятся.
Как завершить сеанс пользователя 1С
Свой сеанс
Обычный выход — Файл → Выход в главном меню (значок с тремя полосками) или крестик окна. Программа сама допишет данные и снимет лицензию.
Если окно не отвечает больше 5–10 минут, а в строке состояния нет признаков длинной операции, откройте диспетчер задач (Ctrl+Shift+Esc) и завершите процесс:
- 🖥️
1cv8c.exe— тонкий клиент; - 🖥️
1cv8.exe— толстый клиент или Конфигуратор.
Незаписанный документ при этом пропадёт. Уже записанные данные останутся.
В клиент-серверном варианте снятие процесса на компьютере не всегда сразу освобождает сеанс на сервере. Он может провисеть до таймаута и держать лицензию. Если после повторного входа пишет, что лицензий нет, попросите администратора удалить старый сеанс.
Чужой сеанс из самой программы
В типовых конфигурациях на Библиотеке стандартных подсистем (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА, ERP) путь один:
- Откройте
Администрирование → Обслуживание. - Перейдите по ссылке «Активные пользователи».
- Выделите нужный сеанс и выполните команду завершения сеанса в командной панели списка.
- В клиент-серверной базе программа запросит логин и пароль администратора кластера, если он задан.
Список показывает пользователя, компьютер, приложение (тонкий клиент, фоновое задание, веб-клиент) и время начала. По колонке «Приложение» легко отличить живого человека от фонового процесса.
В Конфигураторе тоже есть Администрирование → Активные пользователи, но там список только для просмотра — завершить чужой сеанс оттуда нельзя.
Выгнать всех сразу: блокировка работы пользователей
Когда нужно освободить базу под обновление или загрузку архива, сеансы удобнее завершать не по одному:
Администрирование → Обслуживание→ ссылка «Блокировка работы пользователей».- Укажите время начала и окончания блокировки, текст сообщения для пользователей.
- Задайте код разрешения — он понадобится, чтобы войти самому.
- Включите блокировку.
Пользователи получат предупреждение, а через несколько минут программа сама закроет их сеансы. Войти в заблокированную базу можно с параметром запуска /UC и кодом разрешения:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC"0101"
Снять блокировку можно в той же форме или запуском с параметром /C"РазрешитьРаботуПользователей".
Файловая база: «призрачный» сеанс
В файловой базе сеанс держит открытый файл 1Cv8.1CD. Если компьютер пользователя выключился аварийно, база может считать его ещё подключённым.
Порядок действий:
- Попросите пользователя перезагрузить компьютер — обычно этого хватает.
- Если компьютер недоступен, на машине с папкой базы откройте
Управление компьютером → Общие папки → Открытые файлы. - Найдите
1Cv8.1CDот нужного пользователя и закройте открытый файл.
Закрытие открытого файла работающего пользователя может повредить файловую базу . Делайте это только для сеанса, который точно мёртв.
Как остановить фоновое и регламентное задание
Фоновые задания — это загрузки курсов валют, обмены, обновление полнотекстового индекса, отложенная обработка данных после обновления. Регламентные задания запускают их по расписанию.
Остановка из программы
- Откройте
Администрирование → Обслуживание→ «Регламентные и фоновые задания». - На закладке фоновых заданий найдите активное (колонка состояния).
- Выполните команду отмены задания.
Отмена работает «мягко»: платформа просит задание остановиться, и оно прервётся, когда дойдёт до точки проверки. Тяжёлый запрос в это время дорабатывает до конца, поэтому задание может гаснуть несколько минут.
Временно запретить запуск
Если задание сразу стартует снова, отключите его, а не только отменяйте:
- 🔧 в списке регламентных заданий снимите флажок «Использование» у конкретного задания;
- 🔧 для всей базы — в консоли кластера откройте свойства информационной базы и включите «Блокировка регламентных заданий включена».
Второй способ удобен перед обновлением: ни один обмен не стартует посреди работ. После работ флажок нужно снять, иначе загрузка курсов и обмены перестанут работать.
Остановка из консоли кластера
Каждое фоновое задание в клиент-серверной базе — отдельный сеанс с приложением «Фоновое задание». Его можно удалить в консоли, как обычный сеанс (см. раздел про сервер). Это жёстче отмены: задание обрывается сразу, его транзакция откатывается.
Из кода
Для разработчика и обработок обслуживания — отмена всех активных фоновых заданий:
Отбор = Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно);
Задания = ФоновыеЗадания.ПолучитьФоновые(Отбор);
Для Каждого Задание Из Задания Цикл
Задание.Отменить();
КонецЦикла;
Код выполняется на сервере. Метод Отменить() тоже мягкий — он не убивает задание мгновенно.
Если зависло обновление конфигурации
Обновление проходит две стадии, и останавливать их можно по-разному.
Реструктуризация в Конфигураторе («Обновление конфигурации базы данных»). Платформа меняет таблицы. На крупной базе это занимает от десятков минут до нескольких часов, и прогресс-бар может долго стоять на месте.
- ⏳ Сначала проверьте, работает ли процесс: в диспетчере задач у
1cv8.exe(файловая) или уrphost.exeна сервере должна меняться загрузка процессора и диска. - ⏳ Если нагрузка есть — ждите. Операция живая.
- 🛑 Если 30–60 минут нагрузки нет совсем, процесс завис.
Обрыв реструктуризации — самое рискованное завершение в 1С. На MS SQL и PostgreSQL изменения обычно откатываются транзакцией, и база остаётся в старой версии. В файловой базе обрыв может оставить файл в несогласованном состоянии. Перед обновлением обязательна резервная копия, а после аварийного обрыва файловую базу проверяют утилитой chdbfl.exe из папки bin платформы или режимом «Тестирование и исправление» в Конфигураторе.
Обработка данных после обновления (первый запуск в режиме Предприятие). Основная часть обработчиков выполняется до входа, остальное — отложенно, в фоне. Отложенное обновление останавливается как обычное фоновое задание. Ход обработки смотрят в Администрирование → Обслуживание в разделе результатов обновления программы.
Не завершайте процесс в момент, когда идёт монопольная операция и на экране окно с прогрессом. Сначала убедитесь, что процесс действительно мёртв.
Завершение сеансов и процессов на сервере 1С
В клиент-серверном варианте главный инструмент — консоль администрирования серверов 1С:Предприятия. Она подключается к агенту сервера (порт 1540).
Удалить сеанс в консоли
- Откройте консоль и разверните
Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер>. - Перейдите в
Информационные базы → <база> → Сеансы. - Найдите сеанс по пользователю, компьютеру или приложению.
- В контекстном меню выберите «Удалить». Можно указать сообщение пользователю.
Если сеанс висит в состоянии ожидания на блокировке, полезно посмотреть ветку «Блокировки»: там видно, кто кого держит. Удалять стоит того, кто держит, а не всех ожидающих.
Перезапустить рабочий процесс
В ветке Рабочие процессы видны процессы rphost с памятью и числом соединений. Если один процесс съел память и не отвечает, его можно выключить из контекстного меню. Кластер поднимет новый.
Остановка рабочего процесса обрывает все сеансы, которые на нём работают. Предупредите пользователей и делайте это в обед или после работы.
Снимать процессы сервера через диспетчер задач Windows — последний вариант:
| Процесс | Что это | Что будет при снятии |
|---|---|---|
rphost.exe | Рабочий процесс | Оборвутся сеансы на нём, кластер запустит новый |
rmngr.exe | Менеджер кластера | Работа кластера встанет до перезапуска службы |
ragent.exe | Агент сервера | Перестанут подключаться новые клиенты |
Если не помогает ничего, перезапускают службу «Агент сервера 1С:Предприятия» — это выбросит из базы всех.
Командная строка: rac
Утилита rac работает через сервер администрирования ras (порт по умолчанию 1545). Его нужно предварительно запустить как службу или командой ras cluster.
rem список кластеров — берём UUID кластера
rac localhost:1545 cluster list
rem список сеансов кластера
rac localhost:1545 session list --cluster=<uuid-кластера>
rem завершить один сеанс
rac localhost:1545 session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Если у кластера есть администратор, добавьте --cluster-user=<логин> --cluster-pwd=<пароль>. Полный список параметров — в справке rac help session.
Остановка запроса на уровне СУБД
Спускаться на уровень СУБД нужно, когда сеанс в 1С уже удалён, а запрос продолжает грузить сервер или держит блокировку. Платформа соединяется с СУБД от имени рабочего процесса, поэтому в СУБД не видно имени пользователя 1С — ориентируйтесь на время старта, длительность и текст запроса.
MS SQL Server
-- кто сейчас выполняет запросы и кто кого блокирует
EXEC sp_who2;
-- завершить соединение по номеру SPID
KILL 87;
То же самое удобно делать в Management Studio через «Монитор активности». После KILL сервер откатывает транзакцию. Для крупной транзакции откат идёт долго, и его нельзя прервать — дождитесь окончания.
PostgreSQL
-- активные запросы к базе, самые долгие сверху
SELECT pid, usename, state, now() - query_start AS dur, left(query, 80)
FROM pg_stat_activity
WHERE datname = 'buh' AND state <> 'idle'
ORDER BY dur DESC;
-- мягко: отменить текущий запрос
SELECT pg_cancel_backend(12345);
-- жёстко: закрыть соединение
SELECT pg_terminate_backend(12345);
Начинайте с pg_cancel_backend: соединение остаётся, рабочий процесс 1С не теряет связь. pg_terminate_backend закрывает соединение целиком, и сеансы, которые через него работали, получат ошибку.
Никогда не снимайте серверный процесс PostgreSQL командой kill -9. Сервер СУБД аварийно перезапустит все соединения, и упадёт работа всех баз на нём.
Как автоматизировать завершение процессов
Ручная чистка каждое утро — повод настроить автоматику.
Таймауты в свойствах базы
В консоли кластера, в свойствах информационной базы, есть два параметра:
- ⏱️ «Время засыпания пассивного сеанса» — через сколько секунд бездействующий сеанс «засыпает» и отдаёт лицензию;
- ⏱️ «Время завершения спящего сеанса» — через сколько секунд спящий сеанс удаляется совсем.
Типичная настройка — 1800 и 3600 секунд: полчаса бездействия усыпляют сеанс, ещё час — и он закрывается. Это решает проблему «забытых» окон без скриптов.
Защита от разросшихся rphost
В свойствах кластера задают допустимый объём памяти рабочих процессов, интервал превышения и флажок принудительного завершения проблемных процессов. Тогда кластер сам перезапустит процесс, который вышел за лимит.
Скрипт ночной очистки
Перед ночным регламентом (архивация, пересчёт итогов) удобно выгнать всех. Пример .bat на базе rac:
@echo off
set RAC="C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
set SRV=localhost:1545
for /f "tokens=2 delims=: " %%c in ('%RAC% %SRV% cluster list ^| findstr /b "cluster "') do set CL=%%c
for /f "tokens=2 delims=: " %%s in ('%RAC% %SRV% session list --cluster=%CL% ^| findstr /b "session "') do (
%RAC% %SRV% session terminate --cluster=%CL% --session=%%s
)
Путь к rac.exe замените на свою версию платформы. Скрипт ставят в Планировщик заданий Windows на время после окончания рабочего дня. Для одной базы список сеансов фильтруют параметром --infobase=<uuid-базы>; UUID базы покажет rac infobase summary list --cluster=<uuid>.
Альтернатива для типовых конфигураций — запуск с параметром /C"ЗавершитьРаботуПользователей". Он включает ту же блокировку, что и форма в программе, и выводит пользователей из базы.