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

· 10 мин

Содержание

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

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

Какой способ остановки процесса 1С выбрать

Главное правило: чем «выше» уровень, на котором вы останавливаете процесс, тем больше людей это заденет.

СпособКогда применятьКого затронет
Ctrl+Break в окне 1СДолгий отчёт, запрос, групповая обработкаТолько текущую операцию
Снять задачу в диспетчере задачОкно не реагирует на клавиши дольше 2–3 минутОдин сеанс на этом компьютере
Удалить сеанс в консоли кластера или через racПользователь ушёл, компьютер недоступен, сеанс держит блокировкиОдин сеанс в любой точке сети
Отменить фоновое заданиеЗависло обновление, загрузка, регламентная операцияОдно задание
Завершить рабочий процесс rphostПроцесс съел всю память, сеансы не удаляютсяВсе сеансы на этом процессе
Перезапустить службу агента сервераКонсоль не отвечает, кластер «висит» целикомВсе базы и всех пользователей сервера

Незавершённая транзакция при любом способе остановки откатывается. Записанные до неё документы останутся, а текущий — нет. Поэтому после остановки проверьте последний документ, с которым работал пользователь.

Как прервать зависшую процедуру в самом клиенте 1С

Прерывание по Ctrl+Break

Комбинация Ctrl+Break прерывает выполнение кода и запросов в толстом и тонком клиенте. Платформа покажет вопрос о прерывании — подтвердите.

Что важно знать:

  • ⏳ Прерывание срабатывает не мгновенно. Если сервер СУБД выполняет тяжёлый запрос, ответ может прийти через десятки секунд.
  • 🖥️ На ноутбуках без клавиши Break пробуйте Ctrl+Fn+B или Ctrl+Fn+Pause: сочетание зависит от производителя.
  • 🔁 Если операция выполняется в цикле с записью документов, прервётся только текущая итерация, уже записанное останется.

Снятие задачи в диспетчере задач

Окно не реагирует 2–3 минуты и Ctrl+Break не помог — закрываем процесс:

  1. Откройте диспетчер задач: Ctrl+Shift+Esc.
  2. Перейдите на вкладку «Подробности».
  3. Найдите процесс клиента: 1cv8c.exe — тонкий клиент, 1cv8.exe — толстый клиент или Конфигуратор.
  4. Если процессов несколько, ориентируйтесь на загрузку ЦП и память: зависший обычно «ест» больше остальных.
  5. Нажмите «Снять задачу».

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

В файловой базе снятие задачи посреди записи может повредить файл 1Cv8.1CD. Если в момент зависания шла запись (проведение, обмен, обновление), после остановки запустите базу и проверьте, что она открывается. При ошибках чтения — тестирование и исправление в Конфигураторе, предварительно сделав копию каталога базы.

Как завершить сеанс пользователя через консоль администрирования

Когда зависший пользователь сидит на другом компьютере или вообще ушёл домой, процесс прекращают на сервере. Для клиент-серверной базы это делается в консоли «Администрирование серверов 1С Предприятия».

Удаление сеанса в консоли кластера

  1. Откройте консоль и разверните дерево: Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы.
  2. В списке сеансов найдите нужного пользователя. Колонки «Пользователь», «Компьютер», «Приложение» и «Время начала» помогают отличить его сеанс от других.
  3. Обратите внимание на колонку с приложением: «Фоновое задание» — это не человек, а процесс, запущенный программой.
  4. Щёлкните по сеансу правой кнопкой и выберите «Удалить». Можно ввести сообщение, которое увидит пользователь.

Сеанс завершится, транзакция откатится, удерживаемые им блокировки освободятся.

Консоль не открывается и пишет, что класс не зарегистрирован? Зарегистрируйте библиотеку от имени администратора: regsvr32 "C:\Program Files\1cv8\<версия>\bin\radmin.dll". Версия библиотеки должна совпадать с версией сервера.

Завершение сеанса из командной строки через rac

На сервере без графической консоли (или на Linux) используйте утилиту rac. Она работает через сервер администрирования ras, который должен быть запущен (по умолчанию порт 1545).

:: 1. Узнать идентификатор кластера
rac cluster list

:: 2. Получить список сеансов кластера
rac session list --cluster=<uuid-кластера>

:: 3. Завершить нужный сеанс
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

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

Если база файловая

В файловом варианте консоли кластера нет. Список подключённых видно в Конфигураторе: Администрирование → Активные пользователи. Завершить чужой сеанс оттуда нельзя — придётся закрыть 1С на том компьютере или снять процесс в диспетчере задач. В терминальной среде это делается на терминальном сервере: процесс конкретного пользователя виден в диспетчере задач с колонкой «Пользователь».

Как снять блокировки и закрыть вход в базу

Слово «блокировка» в 1С означает две разные вещи. Путать их не стоит: снимаются они по-разному.

Блокировки данных, которые держит зависший сеанс

Пока процедура выполняется в транзакции, она удерживает управляемые блокировки на записи регистров и документов. Остальные пользователи получают ошибку вида Превышено максимальное время ожидания предоставления блокировки или Конфликт блокировок при выполнении транзакции.

Как найти виновника:

  • 🔍 В консоли кластера у базы есть ветка «Блокировки». В ней видно, какой сеанс и какое соединение держат блокировку.
  • 🧾 Сопоставьте номер сеанса с веткой «Сеансы» и посмотрите, что это за пользователь.
  • ✂️ Снять отдельную блокировку нельзя. Её снимает только завершение сеанса-владельца (раздел выше).

Отдельный случай — объектная блокировка «объект уже редактируется другим пользователем». Она держится, пока открыта форма. Закрытие формы или завершение сеанса освобождает объект.

Блокировка начала сеансов: никого не пускать в базу

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

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

Чтобы самому войти в заблокированную базу, добавьте к параметрам запуска код разрешения: /UC<код>. Например, при коде 1234 — /UC1234.

Не забудьте снять блокировку после работы. Иначе утром вся бухгалтерия увидит сообщение о закрытой базе. Задайте время окончания блокировки сразу при её установке.

Файл блокировки в файловой базе

В каталоге файловой базы рядом с 1Cv8.1CD лежит служебный файл 1Cv8.1CL. Если после аварийного завершения база пишет, что занята, хотя все вышли, проверьте:

  1. Что ни на одном компьютере нет процессов 1cv8.exe и 1cv8c.exe, открытых с этой базой.
  2. Что на сервере с общей папкой нет открытых сетевых файлов базы (оснастка «Общие папки» → «Открытые файлы»).
  3. Только после этого удалите 1Cv8.1CL.

Если удалить файл блокировки при работающем пользователе, два процесса начнут писать в базу без согласования. Это прямой путь к повреждению 1Cv8.1CD.

Как остановить регламентные и фоновые задания

Часть процедур запускает не человек, а сама программа: обмен данными, загрузка классификаторов, обновление полнотекстового индекса, отложенное обновление после установки релиза. Такие процессы видны в консоли как сеансы с приложением «Фоновое задание».

Отмена фонового задания из программы

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

Если задание не реагирует, удалите его сеанс в консоли кластера — так же, как сеанс пользователя.

Полное отключение регламентных заданий

Иногда задание перезапускается по расписанию сразу после отмены. Тогда:

  • 🛑 Одно задание — в списке регламентных заданий снимите флажок «Включено» у нужной строки.
  • 🧱 Все задания базы — в свойствах информационной базы в консоли кластера включите «Блокировка регламентных заданий включена». Это стандартный шаг перед обновлением и при копировании рабочей базы в тестовую, чтобы копия не начала обмениваться с реальными контрагентами.

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

Зависшее отложенное обновление

После установки релиза БП или ЗУП обработчики отложенного обновления работают в фоне часами. Прерывать их на середине не нужно. Ход выполнения виден в разделе Администрирование → Обслуживание по ссылке о результатах обновления. Если обработчик падает с ошибкой, её текст — там же; исправьте данные и запустите обработчик повторно, а не убивайте сеанс по кругу.

Что именно зависло?

Как найти причину зависания по журналу регистрации

Остановить процесс — полдела. Если не понять, что его повесило, завтра всё повторится.

Журнал регистрации

Открывается в пользовательском режиме: Администрирование → Обслуживание → Журнал регистрации, в Конфигураторе — Администрирование → Журнал регистрации.

Что смотреть:

  1. Поставьте отбор по пользователю и интервалу времени, когда началось зависание.
  2. Найдите последние события перед остановкой: какой документ записывался, какая обработка запускалась.
  3. Проверьте события с уровнем «Ошибка» и события завершения сеанса — удалённый вами сеанс тоже оставит запись.
  4. Если зависание повторяется в одно и то же время, сопоставьте его со временем запуска регламентных заданий.

Технологический журнал для блокировок

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

  • TLOCK — установка управляемых блокировок;
  • TTIMEOUT — превышение времени ожидания блокировки;
  • TDEADLOCK — взаимоблокировка.
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\techlog" history="24">
    <event><eq property="name" value="TTIMEOUT"/></event>
    <event><eq property="name" value="TDEADLOCK"/></event>
    <property name="all"/>
  </log>
</config>

Параметр history задаёт, сколько часов хранить логи. Технологический журнал быстро занимает диск, поэтому после разбора удалите или переименуйте logcfg.xml.

Перезапуск службы сервера 1С и рабочих процессов

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

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

Сначала — рабочий процесс

В консоли кластера в ветке «Рабочие процессы» видно, сколько памяти занимает каждый rphost и сколько на нём соединений. Завершение одного процесса задевает только сеансы на нём — это мягче, чем перезапуск всей службы. Процесс можно снять в диспетчере задач сервера: менеджер кластера сам запустит новый.

Перезапуск службы в Windows

Служба называется «Агент сервера 1С:Предприятия 8.3» с уточнением разрядности. Точное системное имя проверьте:

sc query type= service state= all | findstr /i "1C"
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Если имя у вас другое (например, с номером версии), подставьте его из вывода первой команды. То же можно сделать в оснастке services.msc.

Перезапуск в Linux

systemctl list-units --all | grep -i 1c
sudo systemctl restart <имя-юнита-из-списка>

Очистка сеансовых данных

Если после перезапуска пользователи жалуются на странное поведение (не те настройки, старые формы), дополнительно чистят сеансовые данные: при остановленной службе удаляют папки snccntx* в каталоге srvinfo\reg_1541. Затем служба запускается снова.

Удаляйте только папки snccntx*. Файлы 1CV8Clst.lst и 1CV8Reg.lst в том же каталоге хранят список баз и настройки кластера — без них сервер «забудет» все базы.

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

Потеряются ли данные, если прервать проведение документа?
Нет. Незавершённая транзакция откатывается, документ останется в том состоянии, в каком был до проведения. Ранее записанные документы не пострадают.
Почему удалённый в консоли сеанс снова появляется?
Скорее всего, это фоновое задание по расписанию или пользователь с автоматическим переподключением. Отключите регламентное задание или включите блокировку начала сеансов.
Сколько ждать перед тем, как снимать задачу?
Закрытие месяца или пересчёт итогов за год может идти час и дольше. Если загрузка процессора у процесса меняется, он работает. Если неподвижна и окно не отвечает больше 10–15 минут — пора останавливать.
Можно ли снять блокировку конкретного документа, не выгоняя пользователя?
Нет. Управляемая блокировка живёт, пока жива транзакция сеанса. Освободить её можно только завершив этот сеанс.
Освобождает ли удаление сеанса лицензию?
Да. Лицензия возвращается в пул после завершения сеанса, и другой пользователь может войти.