Зависла операция или сеанс в 1С: как корректно выйти и освободить базу
Содержание
Чтобы выйти из процедуры 1С, которая выполняется слишком долго, нажмите Ctrl+Break: платформа прервёт выполнение кода и вернёт управление в форму. Если окно не реагирует совсем, сеанс закрывают снаружи. В клиент-серверной базе это делают через консоль администрирования кластера, в файловой базе снимают процесс 1cv8c.exe или 1cv8.exe в диспетчере задач.
Частое заблуждение: закрыли окно крестиком, значит, сеанс завершён. Нет. Если клиент «повис», а потом его сняли некорректно, сеанс может ещё какое-то время висеть на сервере, держать лицензию и блокировки. Поэтому после аварийного выхода стоит проверить список активных пользователей.
1. Штатный выход из процедуры и из сеанса 1С
Начинайте с самого мягкого способа. Каждый следующий шаг жёстче предыдущего.
Прервать выполняющийся код
- Подождите 1–2 минуты: проведение месяца, перепроведение документов или большой отчёт могут честно работать долго.
- Нажмите
Ctrl+Break. Платформа спросит или сразу прервёт текущую операцию. - Если операция шла в транзакции (проведение, запись), изменения откатятся. Документ останется в том состоянии, в каком был до нажатия.
Ctrl+Break срабатывает не мгновенно. Длинный запрос на сервере или долгий серверный вызов может завершиться только после того, как отработает текущий шаг. Не жмите сочетание десятки раз подряд.
Закрыть сеанс штатно
- 🚪 В интерфейсе «Такси»: главное меню (кнопка с тремя полосками слева вверху) →
Файл → Выход. - ⌨️ Сочетание
Alt+F4на главном окне программы. - ❓ Если 1С спрашивает о незаписанных данных, ответьте на вопрос. Выход без ответа оставляет окно открытым, и сеанс продолжает жить.
Выход из веб-клиента и из 1С:Фреш
В браузере закрытие вкладки тоже не всегда завершает сеанс сразу: сервер ждёт, пока соединение не отвалится по таймауту. Поэтому выходите через главное меню программы, а не крестиком вкладки. Это особенно важно, если число одновременных подключений ограничено тарифом или лицензиями: брошенная вкладка может занять место коллеги на несколько минут.
Штатный выход освобождает лицензию и снимает управляемые блокировки сразу. Это всегда лучше, чем принудительное снятие.
2. Как понять, что процедура зависла, а не работает
Прежде чем что-то «убивать», убедитесь, что операция действительно стоит. Иначе можно прервать закрытие месяца на 90% готовности.
Признаки, что процесс работает:
- 📈 в диспетчере задач у
1cv8c.exe(тонкий клиент) или1cv8.exe(толстый клиент) меняется загрузка процессора; - 🖥️ на сервере 1С нагружен рабочий процесс
rphost.exe, а на сервере СУБД растёт активность; - 🔄 в строке состояния или в окне длительной операции меняется процент.
Признаки зависания:
- 🧊 нулевая нагрузка процессора у клиента и у
rphost.exeбольше 5–10 минут; - 🔒 другие пользователи получают ошибки блокировки при записи тех же документов;
- ⏳ окно с надписью «Не отвечает» и курсор-песочные часы при нулевой нагрузке.
Где посмотреть, кто сидит в базе
| Где смотреть | Как открыть | Что видно |
|---|---|---|
| Режим «Предприятие» | Все функции → Стандартные → Активные пользователи | Пользователи, компьютеры, приложение, начало сеанса |
| Конфигуратор | Администрирование → Активные пользователи | То же, без входа в программу |
| Консоль кластера | Кластер → Информационные базы → база → Сеансы | Сеансы, их номера, занятая лицензия, рабочий процесс |
| Журнал регистрации | Все функции → Стандартные → Журнал регистрации | Что делал сеанс перед зависанием |
Если «Все функции» нет в меню, включите их: главное меню → Сервис → Параметры → флажок «Отображать команду “Все функции”».
Блокировки данных
В консоли кластера у базы есть узел «Блокировки». Там видно, какой сеанс держит блокировку и на каком объекте. Если один сеанс висит и держит блокировку, на которую ждут остальные, вы нашли виновника.
3. Принудительно завершить сеанс через консоль кластера
Этот способ для клиент-серверного варианта. Консоль называется «Администрирование серверов 1С Предприятия» и ставится вместе с платформой.
- Запустите консоль и раскройте: центральный сервер → «Кластеры» → нужный кластер → «Информационные базы».
- Откройте базу → узел «Сеансы».
- Найдите сеанс по пользователю, компьютеру и времени начала.
- Щёлкните правой кнопкой → «Удалить» и подтвердите.
Пользователь увидит сообщение о том, что сеанс завершён администратором. Незаписанные данные в его формах пропадут, незавершённая транзакция откатится.
Перед удалением чужого сеанса предупредите человека: он потеряет всё, что не записал. Если сеанс выполняет обновление или реструктуризацию, удалять его нельзя без крайней нужды: прерванная реструктуризация может оставить базу в неконсистентном состоянии.
Если консоль не открывается
Консоль работает через агент сервера по порту 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. Как выйти из зависшего сеанса в файловой базе
В файловом варианте нет кластера и консоли. Сеанс живёт ровно столько, сколько процесс клиента на компьютере пользователя.
Пошагово
- Узнайте компьютер через «Активные пользователи» (с любого другого рабочего места или из конфигуратора).
- На том компьютере откройте диспетчер задач (
Ctrl+Shift+Esc). - Найдите
1cv8c.exeили1cv8.exe, выделите → «Снять задачу». - На терминальном сервере откройте вкладку «Пользователи», раскройте нужного пользователя и снимите его процесс 1С, а не чужой.
- Подождите 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С днём из-за одного зависшего пользователя. Хватит удаления одного сеанса.
- ❌ Удаляют сеанс, который выполняет обновление конфигурации базы данных.
- ❌ Забывают снять блокировку начала сеансов после работ: утром никто не может войти.