Тонкий клиент 1С завис и не закрывается: от выхода через меню до удаления сеанса на сервере

· 10 мин

Содержание

Тонкий клиент 1С закрывают через главное меню: кнопка с тремя полосками в левом верхнем углу окна, затем Файл → Выход, или сочетанием Alt+F4. Если окно не реагирует, процесс 1cv8c.exe завершают в Диспетчере задач или командой taskkill /IM 1cv8c.exe /F, а в клиент-серверной базе потом проверяют, не остался ли висеть сеанс на сервере 1С.

Типичная картина из практики: бухгалтер запустил оборотно-сальдовую ведомость за три года, окно «побелело», кнопка с крестиком не помогает. Можно ждать, можно завершить процесс силой. Ниже пять способов закрыть программу — от безопасного к жёсткому, и что делать с зависаниями, чтобы они не повторялись.

Как выйти из 1С штатно, без потери данных

Штатное завершение работы — единственный способ, при котором 1С успевает сохранить настройки форм, закрыть транзакции и корректно освободить лицензию.

Три равноценных варианта:

  1. 🖱 Кнопка с крестиком в правом верхнем углу главного окна.
  2. ⌨️ Сочетание Alt+F4, когда активно главное окно программы.
  3. 📂 Главное меню (значок с тремя полосками) → Файл → Выход.

Перед выходом программа может спросить «Завершить работу с программой?». Если вопрос мешает, его отключают в главном меню: Сервис → Параметры, флажок про запрос подтверждения при закрытии программы.

Если в открытой форме есть несохранённые изменения, 1С предложит записать документ. Ответ «Отмена» прерывает выход — программа остаётся открытой. Так бывает, когда пользователь жмёт крестик, а окно не закрывается: где-то за главным окном висит вопрос о сохранении.

Прежде чем считать программу зависшей, нажмите Alt+Tab или посмотрите на панель задач. Часто окно с вопросом или с предупреждением открыто за главным, и 1С просто ждёт ответа.

Длинный отчёт или групповое перепроведение можно прервать, не закрывая программу. Сочетание Ctrl+Break останавливает выполнение кода на клиенте — 1С спросит, прервать ли операцию. Если отчёт формируется на сервере, прерывание срабатывает не сразу: клиент ждёт ответа от сервера.

Принудительное завершение 1С через Диспетчер задач

Если окно не отвечает больше 5–10 минут, а индикатор процессора по процессу показывает 0%, ждать дальше обычно бессмысленно. Процесс закрывают вручную.

Всё, что не записано в открытых формах, пропадёт. Транзакцию, которую выполнял сервер, он откатит сам.

Порядок действий:

  1. Нажмите Ctrl+Shift+Esc — откроется Диспетчер задач.
  2. Перейдите на вкладку «Подробности».
  3. Найдите процесс по имени (таблица ниже).
  4. Если процессов несколько, ориентируйтесь на столбец «Имя пользователя» и объём памяти.
  5. Правая кнопка мыши → «Снять задачу».
ПроцессЧто это
1cv8c.exeтонкий клиент
1cv8.exeтолстый клиент или Конфигуратор
1cv8s.exe, 1cestart.exeокно запуска со списком баз
rphost.exe, rmngr.exe, ragent.exeпроцессы сервера 1С — на рабочем месте их нет

Процессы rphost.exe, rmngr.exe и ragent.exe на сервере 1С не снимайте в Диспетчере задач «на всякий случай». Каждый rphost.exe обслуживает сеансы многих пользователей, и они оборвутся все сразу.

На терминальном сервере администратор видит процессы всех пользователей. Нужный находят по столбцу «Имя пользователя», а не по первому 1cv8c.exe в списке — иначе закроете 1С коллеге.

Веб-клиент закрывается вместе с вкладкой браузера. Если вкладка зависла, закройте её или весь браузер; сеанс на сервере завершится сам после таймаута либо удаляется вручную, как описано ниже.

Командная строка: taskkill и PowerShell для процессов 1С

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

Сначала посмотрите, что запущено:

tasklist /FI "IMAGENAME eq 1cv8c.exe"

Команда выведет все процессы тонкого клиента с их PID. Закрыть один процесс по номеру:

taskkill /PID 5216 /F

Закрыть все тонкие клиенты текущего пользователя:

taskkill /IM 1cv8c.exe /F

Закрыть тонкий клиент только у пользователя ivanov на терминальном сервере (командная строка от имени администратора):

taskkill /F /IM 1cv8c.exe /FI "USERNAME eq ivanov"

Ключ /F означает принудительное завершение. Без него Windows отправит программе запрос на закрытие, и зависший клиент его проигнорирует.

Те же действия в PowerShell:

# список процессов тонкого клиента с владельцами (нужны права администратора)
Get-Process 1cv8c -IncludeUserName | Select-Object Id, UserName, StartTime, WS

# завершить конкретный процесс
Stop-Process -Id 5216 -Force

Если у пользователя завис весь сеанс Windows вместе с рабочим столом, на терминальном сервере проще завершить его сеанс Windows. Команда query user покажет номер сеанса, logoff 3 его закроет. Это оборвёт все программы пользователя, не только 1С, поэтому предупредите его заранее.

Почему тонкий клиент 1С зависает: диагностика

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

Первое, что стоит проверить, — что именно делает процесс в момент зависания. Откройте «Монитор ресурсов» (resmon в окне «Выполнить») и найдите 1cv8c.exe.

Что видноЧто это значитКуда смотреть
ЦП около 0%, сеть молчитклиент ждёт ответа серверасеанс на сервере, блокировки, долгий запрос
ЦП на одно ядро под 100%клиент выполняет код у себяобработка, внешняя печатная форма, большая форма списка
память растёт без остановкиклиент накапливает данныеогромный отчёт, выгрузка в табличный документ
диск занят на 100%работа с файламифайловая база по сети, антивирус, кэш

Частые причины зависаний тонкого клиента:

  • 📊 тяжёлый отчёт за большой период без отборов;
  • 🔒 ожидание блокировки: другой пользователь или фоновое задание держит те же данные;
  • 🌐 обрыв или медленная сеть до сервера 1С либо до сетевой папки с файловой базой;
  • 🛡 антивирус проверяет каталог базы и каталоги кэша при каждом обращении;
  • 🧩 внешние обработки и расширения с ошибкой в коде;
  • 🗂 повреждённый кэш клиента после обновления конфигурации или платформы.

Повреждённый кэш лечится просто. Запустите базу с параметром /ClearCache: в окне запуска выберите базу, нажмите Изменить, дойдите до последней страницы и впишите параметр в поле дополнительных параметров запуска. Альтернатива — при закрытой 1С удалить папки с длинными именами из GUID в каталогах %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8. Список баз (ibases.v8i) лежит в %APPDATA%\1C\1CEStart и при этом не затрагивается.

Для клиент-серверной базы полезен технологический журнал: файл logcfg.xml в каталоге conf платформы включает запись событий сервера. По событиям ожидания на блокировках и длинным вызовам видно, на каком запросе всё встало. Журнал быстро растёт, поэтому включайте его на время диагностики и с отбором по длительности.

Диагностика: выберите симптом

Зависшие сеансы на сервере 1С: консоль кластера и rac

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

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

  1. Запустите консоль администрирования серверов 1С на сервере или на компьютере администратора.
  2. Раскройте Кластеры → <кластер> → Информационные базы → <база> → Сеансы.
  3. Найдите сеанс по столбцам «Пользователь», «Компьютер» и «Приложение» (для тонкого клиента — «Тонкий клиент»).
  4. Обратите внимание на признак «Спящий»: такие сеансы остались от оборванных соединений.
  5. Правая кнопка → Удалить.

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

Через утилиту rac

Утилита rac работает через сервер администрирования RAS (по умолчанию порт 1545). Служба RAS должна быть запущена на сервере 1С.

rem идентификатор кластера
rac cluster list

rem сеансы кластера
rac session list --cluster=<uuid-кластера>

rem завершить сеанс
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если на кластере заданы администраторы, добавьте --cluster-user=<имя> --cluster-pwd=<пароль>. Остальные параметры смотрите в справке rac help session.

Если завис рабочий процесс

Бывает, что зависает не сеанс, а rphost.exe целиком: консоль не открывает сеансы базы, новые подключения не проходят. Тогда рабочий процесс перезапускают из консоли кластера или снимают на сервере.

Перезапуск rphost обрывает сеансы всех пользователей, которые на нём работают. Делайте это в обед, вечером или после предупреждения в общем чате. Чтобы рабочие процессы реже доходили до такого состояния, в свойствах кластера настраивают интервал перезапуска и допустимый объём памяти: сервер сам поднимет новый процесс и переведёт на него пользователей.

В самой конфигурации

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

Для регламентных работ, когда нужно выгнать всех, используют блокировку начала сеансов: в свойствах информационной базы в консоли кластера флажок «Блокировка начала сеансов включена» и код разрешения. Администратор подключается с параметром /UC <код>, остальные войти не смогут.

Автоматическое закрытие зависших 1С и спящих сеансов

Если сеансы-«призраки» появляются регулярно, удалять их вручную надоедает. Задачу берёт на себя скрипт по расписанию.

Сценарий для рабочего места или терминального сервера

Простой bat-файл, который в нерабочее время закрывает все тонкие клиенты. Подходит, когда пользователи уходят домой, не выходя из 1С, а ночью идут обновление и резервное копирование :

@echo off
rem закрыть все тонкие и толстые клиенты 1С
taskkill /F /IM 1cv8c.exe
taskkill /F /IM 1cv8.exe

Запуск — через Планировщик заданий Windows, например ежедневно в 23:00, от имени администратора, с флажком «Выполнить с наивысшими правами». Учтите: закрываются в том числе Конфигураторы, а в них мог остаться незаписанный код.

Сценарий для сервера 1С: удалить спящие сеансы

PowerShell-скрипт разбирает вывод rac session list (блоки строк «параметр : значение», разделённые пустой строкой) и завершает сеансы с признаком спящего:

$rac = "C:\Program Files\1cv8\8.3.24.1691\bin\rac.exe"   # путь к своей версии платформы
$cluster = ((& $rac cluster list) | Select-String '^cluster\s*:\s*(\S+)').Matches[0].Groups[1].Value

$sessions = @(); $cur = @{}
foreach ($line in (& $rac session list --cluster=$cluster)) {
    if ($line.Trim() -eq '') { if ($cur.Count) { $sessions += $cur; $cur = @{} }; continue }
    $k, $v = $line -split '\s*:\s*', 2
    $cur[$k.Trim()] = $v
}
if ($cur.Count) { $sessions += $cur }

foreach ($s in $sessions) {
    if ($s['hibernate'] -eq 'yes') {
        & $rac session terminate --cluster=$cluster --session=$($s['session'])
        "{0} удалён спящий сеанс {1} ({2})" -f (Get-Date), $s['user-name'], $s['host'] |
            Add-Content C:\Scripts\rac-clean.log
    }
}

Перед тем как ставить скрипт в расписание, запустите его вручную с закомментированной строкой terminate и посмотрите, какие сеансы он найдёт. Имена полей выведите командой rac session list один раз — они печатаются в начале каждой строки блока.

Если сеансы засыпают массово, ищите причину в сети, а не в 1С: обрывы VPN, режим сна ноутбуков, агрессивные таймауты на межсетевом экране между пользователями и сервером.

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

Освобождается ли лицензия, если снять задачу 1С в Диспетчере задач?
Клиентская лицензия освобождается, когда сервер закроет сеанс. При обрыве он сначала становится спящим, поэтому лицензия может быть занята ещё какое-то время. Удалите сеанс в консоли кластера, если лицензий не хватает прямо сейчас.
Можно ли повредить базу, принудительно закрыв тонкий клиент?
В клиент-серверной базе — практически нет: незавершённую транзакцию СУБД откатит. Файловая база чувствительнее: если процесс убит во время записи, при следующем запуске может понадобиться тестирование и исправление. Перед ним сделайте копию каталога базы.
Почему после закрытия 1С пишет, что пользователь уже работает в программе?
Старый сеанс ещё висит на сервере. Удалите его в консоли кластера или подождите, пока сервер завершит спящий сеанс сам.
Как закрыть 1С у пользователя, который ушёл домой и заблокировал компьютер?
На терминальном сервере — командой taskkill с фильтром по имени пользователя. В клиент-серверной базе проще удалить его сеанс в консоли кластера или в обработке «Активные пользователи»: процесс на его компьютере останется, но работать с базой не сможет.
Чем «Снять задачу» отличается от «Завершить дерево процессов»?
Второй вариант закрывает и дочерние процессы, например запущенные из 1С внешние программы. Для самого 1cv8c.exe обычно достаточно первого.