Зависла операция или сеанс в 1С: как корректно выйти и освободить базу

· 9 мин

Содержание

Чтобы выйти из процедуры 1С, которая выполняется слишком долго, нажмите Ctrl+Break: платформа прервёт выполнение кода и вернёт управление в форму. Если окно не реагирует совсем, сеанс закрывают снаружи. В клиент-серверной базе это делают через консоль администрирования кластера, в файловой базе снимают процесс 1cv8c.exe или 1cv8.exe в диспетчере задач.

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

1. Штатный выход из процедуры и из сеанса 1С

Начинайте с самого мягкого способа. Каждый следующий шаг жёстче предыдущего.

Прервать выполняющийся код

  1. Подождите 1–2 минуты: проведение месяца, перепроведение документов или большой отчёт могут честно работать долго.
  2. Нажмите Ctrl+Break. Платформа спросит или сразу прервёт текущую операцию.
  3. Если операция шла в транзакции (проведение, запись), изменения откатятся. Документ останется в том состоянии, в каком был до нажатия.

Ctrl+Break срабатывает не мгновенно. Длинный запрос на сервере или долгий серверный вызов может завершиться только после того, как отработает текущий шаг. Не жмите сочетание десятки раз подряд.

Закрыть сеанс штатно

  • 🚪 В интерфейсе «Такси»: главное меню (кнопка с тремя полосками слева вверху) → Файл → Выход.
  • ⌨️ Сочетание Alt+F4 на главном окне программы.
  • ❓ Если 1С спрашивает о незаписанных данных, ответьте на вопрос. Выход без ответа оставляет окно открытым, и сеанс продолжает жить.

Выход из веб-клиента и из 1С:Фреш

В браузере закрытие вкладки тоже не всегда завершает сеанс сразу: сервер ждёт, пока соединение не отвалится по таймауту. Поэтому выходите через главное меню программы, а не крестиком вкладки. Это особенно важно, если число одновременных подключений ограничено тарифом или лицензиями: брошенная вкладка может занять место коллеги на несколько минут.

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

2. Как понять, что процедура зависла, а не работает

Прежде чем что-то «убивать», убедитесь, что операция действительно стоит. Иначе можно прервать закрытие месяца на 90% готовности.

Признаки, что процесс работает:

  • 📈 в диспетчере задач у 1cv8c.exe (тонкий клиент) или 1cv8.exe (толстый клиент) меняется загрузка процессора;
  • 🖥️ на сервере 1С нагружен рабочий процесс rphost.exe, а на сервере СУБД растёт активность;
  • 🔄 в строке состояния или в окне длительной операции меняется процент.

Признаки зависания:

  • 🧊 нулевая нагрузка процессора у клиента и у rphost.exe больше 5–10 минут;
  • 🔒 другие пользователи получают ошибки блокировки при записи тех же документов;
  • ⏳ окно с надписью «Не отвечает» и курсор-песочные часы при нулевой нагрузке.

Где посмотреть, кто сидит в базе

Где смотретьКак открытьЧто видно
Режим «Предприятие»Все функции → Стандартные → Активные пользователиПользователи, компьютеры, приложение, начало сеанса
КонфигураторАдминистрирование → Активные пользователиТо же, без входа в программу
Консоль кластераКластер → Информационные базы → база → СеансыСеансы, их номера, занятая лицензия, рабочий процесс
Журнал регистрацииВсе функции → Стандартные → Журнал регистрацииЧто делал сеанс перед зависанием

Если «Все функции» нет в меню, включите их: главное меню → Сервис → Параметры → флажок «Отображать команду “Все функции”».

Блокировки данных

В консоли кластера у базы есть узел «Блокировки». Там видно, какой сеанс держит блокировку и на каком объекте. Если один сеанс висит и держит блокировку, на которую ждут остальные, вы нашли виновника.

3. Принудительно завершить сеанс через консоль кластера

Этот способ для клиент-серверного варианта. Консоль называется «Администрирование серверов 1С Предприятия» и ставится вместе с платформой.

  1. Запустите консоль и раскройте: центральный сервер → «Кластеры» → нужный кластер → «Информационные базы».
  2. Откройте базу → узел «Сеансы».
  3. Найдите сеанс по пользователю, компьютеру и времени начала.
  4. Щёлкните правой кнопкой → «Удалить» и подтвердите.

Пользователь увидит сообщение о том, что сеанс завершён администратором. Незаписанные данные в его формах пропадут, незавершённая транзакция откатится.

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

Если консоль не открывается

Консоль работает через агент сервера по порту 1540. Если на сервере обновили платформу, а консоль выдаёт ошибку подключения, перерегистрируйте библиотеку консоли нужной версии от имени администратора:

"C:\Program Files\1cv8\8.3.xx.xxxx\bin\RegMSC.cmd"

Вместо 8.3.xx.xxxx подставьте номер установленной версии. Если файла RegMSC.cmd нет, регистрируют radmin.dll из той же папки командой regsvr32 "...\bin\radmin.dll".

Через командную строку rac

Если консоли нет под рукой, сеансы завершают утилитой rac. Для неё на сервере должен работать ras (сервер администрирования, по умолчанию порт 1545).

rac cluster list
rac session --cluster=<UUID_кластера> list
rac session --cluster=<UUID_кластера> terminate --session=<UUID_сеанса>

Первая команда покажет идентификатор кластера, вторая — список сеансов с их идентификаторами, третья завершит нужный. Если на кластере задан администратор, добавьте --cluster-user и --cluster-pwd. Остальные параметры смотрите в справке rac help session.

4. Как выйти из зависшего сеанса в файловой базе

В файловом варианте нет кластера и консоли. Сеанс живёт ровно столько, сколько процесс клиента на компьютере пользователя.

Пошагово

  1. Узнайте компьютер через «Активные пользователи» (с любого другого рабочего места или из конфигуратора).
  2. На том компьютере откройте диспетчер задач (Ctrl+Shift+Esc).
  3. Найдите 1cv8c.exe или 1cv8.exe, выделите → «Снять задачу».
  4. На терминальном сервере откройте вкладку «Пользователи», раскройте нужного пользователя и снимите его процесс 1С, а не чужой.
  5. Подождите 10–20 секунд и обновите список активных пользователей.

Не удаляйте файлы из каталога базы, даже если кажется, что в нём «лишние» служебные файлы. Удаление не того файла рядом с 1Cv8.1CD может сломать базу. Служебные файлы платформа убирает сама, когда все сеансы закрыты.

Если сеанс всё равно висит в списке

  • Проверьте, не осталось ли процесса 1С у того же пользователя под другой учётной записью Windows или в другой терминальной сессии.
  • Проверьте, не запущен ли конфигуратор: он тоже сеанс.
  • Если база лежит в сетевой папке, файл может держать сеанс на другом компьютере. На файловом сервере это видно в оснастке «Общие папки» → «Открытые файлы». Закрыть открытый файл можно там же, но это оборвёт сеанс пользователя, поэтому сначала договоритесь с ним.

5. Фоновые и регламентные задания: как их остановить

Иногда «зависшая процедура» — это не сеанс человека, а фоновое задание: загрузка курсов, обмен, обновление полнотекстового индекса.

  • 🖥️ В консоли кластера такие сеансы видны в списке «Сеансы» с приложением «Фоновое задание». Их удаляют так же, правой кнопкой.
  • 📋 В БП 3.0, ЗУП 3.1 и УТ 11 список заданий открывают из раздела Администрирование → Обслуживание, группа регламентных операций, ссылка «Регламентные и фоновые задания». Там у выполняющегося задания есть команда отмены.
  • 🛑 Чтобы задание не перезапустилось сразу, в свойствах базы в консоли кластера включите флажок «Блокировка регламентных заданий включена». После работ снимите его.

Из кода фоновое задание останавливают методом Отменить():

Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
Если Задание <> Неопределено Тогда
    Задание.Отменить();
КонецЕсли;

6. Выход из процедуры в коде и в отладчике

Тот же запрос задают программисты: как досрочно выйти из процедуры встроенного языка.

ЗадачаОператор
Выйти из процедурыВозврат;
Выйти из функции со значениемВозврат Результат;
Выйти только из циклаПрервать;
Перейти к следующей итерацииПродолжить;
Процедура ПроверитьИЗаписать(Документ)
    Если Не ЗначениеЗаполнено(Документ.Контрагент) Тогда
        Сообщить("Не заполнен контрагент");
        Возврат; // дальше процедура не выполняется
    КонецЕсли;
    Документ.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры

В отладчике конфигуратора выйти из текущей процедуры в вызывающую помогает команда «Шагнуть из» (Shift+F11). F10 проходит строку без захода внутрь вызова, F11 заходит внутрь.

Чтобы длинный цикл можно было прервать по Ctrl+Break, на клиенте вызывайте в теле цикла ОбработкаПрерыванияПользователя(). Без этого вызова клиентский цикл может не реагировать на прерывание.

Программно закрыть сам сеанс можно методом ЗавершитьРаботуСистемы(): он закрывает программу штатно, с вопросами о несохранённых данных. ПрекратитьРаботуСистемы() закрывает её без вопросов.

7. Автоматизация: блокировка входа и скрипты завершения

Перед обновлением или закрытием периода всех пользователей нужно вывести из базы. Ловить каждого по телефону долго.

Блокировка начала сеансов

В клиент-серверной базе откройте свойства базы в консоли кластера и заполните:

  • ✅ флажок «Блокировка начала сеансов включена»;
  • 🕘 «Начало» и «Конец» блокировки;
  • 💬 «Сообщение» — его увидят пользователи при входе;
  • 🔑 «Код разрешения» — с ним сможет войти администратор.

Новые сеансы в это окно не откроются: пользователь получит сообщение Начало сеанса с информационной базой запрещено и ваш текст. Уже открытые сеансы блокировка не закрывает, их завершают отдельно.

В типовых конфигурациях есть своя обработка: Администрирование → Обслуживание, ссылка «Блокировка работы пользователей». Она работает и в файловой базе: предупреждает открытых пользователей, через заданное время завершает их сеансы и не пускает новых.

Чтобы войти в заблокированную базу самому, запустите 1С с параметром кода разрешения:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /UC12345

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

Если после смены на терминальном сервере остаются брошенные клиенты, их снимают по расписанию из планировщика заданий Windows:

@echo off
rem Завершает все тонкие клиенты 1С на этом сервере
taskkill /IM 1cv8c.exe /F

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

Для клиент-серверной базы надёжнее скрипт на rac: получить список сеансов, отфильтровать по пользователю или приложению и завершить нужные командой terminate.

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

8. Профилактика: чтобы не приходилось выходить аварийно

  • 🌙 Тяжёлые операции (закрытие месяца, перепроведение за год) запускайте вне рабочих часов, когда никто не держит блокировки.
  • 📅 Перепроведение и групповую обработку делайте частями: за месяц, а не за год сразу. Так прерванная операция теряет меньше.
  • 💾 Перед обновлением, реструктуризацией и групповыми изменениями делайте резервную копию базы .
  • 🔁 Обновляйте платформу в одно окно для сервера и клиентов: версия клиента должна совпадать с версией сервера.
  • ⏱️ Настройте в обработке «Блокировка работы пользователей» запас времени на предупреждение, хотя бы 5–10 минут.

Частые ошибки при выходе из 1С

  • ❌ Снимают rphost.exe целиком вместо одного сеанса. Рабочий процесс обслуживает сразу многих пользователей, и все они потеряют соединение.
  • ❌ Перезагружают сервер 1С днём из-за одного зависшего пользователя. Хватит удаления одного сеанса.
  • ❌ Удаляют сеанс, который выполняет обновление конфигурации базы данных.
  • ❌ Забывают снять блокировку начала сеансов после работ: утром никто не может войти.

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

Освобождается ли лицензия после принудительного удаления сеанса?
Да. После удаления сеанса в консоли кластера или через rac лицензия освобождается сразу.
Что будет с документом, который проводился в момент прерывания?
Транзакция откатится. Документ останется в состоянии до начала проведения: если он был непроведённым, таким и останется.
Можно ли завершить чужой сеанс из режима «Предприятие»?
Да, в списке «Активные пользователи» типовых конфигураций есть команда завершения сеанса. Нужны права администратора, а в клиент-серверной базе ещё и доступ к кластеру.
Почему Ctrl+Break не прерывает отчёт?
Если отчёт выполняет один длинный запрос на сервере, прерывание сработает только после завершения запроса. В таком случае завершают сеанс в консоли.
Нужно ли перезапускать службу сервера 1С, если зависла одна процедура?
Нет. Достаточно завершить сеанс. Перезапуск службы обрывает работу всех пользователей и нужен только при отказе самого сервера.