Администрирование · 8 мин
Как прервать запрос в 1С
Как прервать зависший запрос в 1С: остановка на клиенте, в консоли СУБД, через кластер серверов 1С. Пошаговые инструкции, риски и проверка результата.
Длительный запрос в 1С способен заблокировать работу пользователя, сеанс или целую базу: отчёт строится часами, проведение документа «висит», а коллеги жалуются на блокировки. Прервать такой запрос можно несколькими способами — от штатной остановки на клиенте до принудительного завершения процесса на СУБД. Выбор зависит от того, где именно выполняется запрос и есть ли у вас доступ к серверу.
Важно понимать: запрос в 1С почти всегда выполняется на уровне СУБД (MS SQL Server, PostgreSQL, Oracle), а платформа лишь отправляет его и ждёт результата. Поэтому «отмена» на клиенте не всегда мгновенно останавливает выполнение на сервере базы данных — иногда требуется вмешательство администратора СУБД.
Ниже разобраны рабочие способы прерывания: от самого безопасного до аварийного, с указанием рисков и проверки результата.
Определите, где именно «застрял» запрос
Прежде чем что-то прерывать, выясните, на каком уровне выполняется запрос. От этого зависит и инструмент остановки. Запрос, запущенный из тонкого клиента в файловой базе, выполняется локально, а в клиент-серверном варианте — на сервере СУБД.
Признаки помогают быстро локализовать проблему: если интерфейс пользователя «заморожен», но другие пользователи работают нормально — это локальное ожидание одного сеанса. Если тормозит вся база и растут блокировки — запрос выполняется на СУБД и мешает остальным.
Попробовать Ctrl+Break, проверить его сеанс в консоли кластера
Смотреть активные запросы и блокировки в СУБД
Найти сессию-владельца транзакции в СУБД
Способ 1: штатная отмена на клиенте
Самый безопасный вариант — прервать выполнение со стороны пользователя. В толстом клиенте и конфигураторе при выполнении длительной операции работает комбинация Ctrl+Break (на некоторых клавиатурах Ctrl+Pause). В управляемых формах длительные операции часто сопровождаются индикатором с кнопкой «Отмена».
Обратите внимание: отмена на клиенте срабатывает не мгновенно. Платформа прерывает ожидание, но запрос на СУБД может продолжать выполняться, пока сервер баз данных не обработает сигнал отмены. Обычно это занимает от нескольких секунд до пары минут.
Если клиент не реагирует на Ctrl+Break и кнопку «Отмена» больше 2–3 минут, переходите к остановке сеанса на уровне кластера.
Способ 2: завершение сеанса в консоли кластера 1С
В клиент-серверном режиме администратор может завершить проблемный сеанс через консоль управления кластером (оснастка «Администрирование серверов 1С» или утилита rac). Это разрывает соединение, и СУБД получает сигнал об отмене связанного запроса.
- 1Откройте консоль кластера и перейдите в раздел «Сеансы» нужной информационной базы
- 2Найдите сеанс пользователя, запустившего длительный запрос (по имени пользователя, времени начала, признаку «спит/активен»)
- 3Убедитесь, что это именно тот сеанс — сверьте приложение и время подключения
- 4Выберите «Удалить» для завершения сеанса
- 5Проверьте в СУБД, что связанный запрос завершился, а блокировки сняты
Альтернатива — разрыв конкретного соединения в разделе «Соединения», если сеансов несколько, а зависло одно соединение с рабочим процессом. Это точечнее, когда у пользователя открыто несколько окон.
Способ 3: остановка запроса на уровне СУБД
Если доступа к консоли кластера нет или запрос продолжает жить на СУБД после завершения сеанса, остановите его напрямую в системе управления базами данных. Для MS SQL Server найдите сессию через sys.dm_exec_requests или Activity Monitor и выполните команду KILL с номером сессии.
SELECT session_id, status, command, wait_type, blocking_session_id FROM sys.dm_exec_requests WHERE blocking_session_id <> 0 OR status = 'running'; KILL 87;Для PostgreSQL используются функции pg_cancel_backend(pid) — мягкая отмена запроса, и pg_terminate_backend(pid) — принудительное завершение соединения. Начинайте с cancel: она отменяет только текущий запрос, сохраняя соединение.
После KILL возможен откат транзакции (rollback): если запрос успел изменить много данных внутри транзакции, СУБД будет откатывать изменения, и сессия может «висеть» в состоянии rollback ещё долго. Это нормально — принудительно перезапускать службу СУБД в этот момент нельзя, иначе откат продолжится после рестарта.
Способ 4: аварийные варианты для файловой базы
В файловом варианте 1С запрос выполняется в процессе клиента, поэтому завершение процесса 1cv8.exe через диспетчер задач останавливает и запрос. Это допустимо, когда клиент полностью завис и не реагирует на Ctrl+Break.
Риски: если в момент принудительного завершения шла запись в файл базы, есть вероятность повреждения файла 1Cv8.1CD. Перед повторным запуском сделайте копию файла базы, а после запуска выполните тестирование и исправление (chdbfl или штатный механизм конфигуратора).
Как проверить, что запрос действительно остановлен
После любого способа прерывания убедитесь, что проблема решена, а не переместилась. Проверьте три вещи: отсутствие активного запроса на СУБД, снятие блокировок и нормализацию нагрузки.
Как проверить результат
Зависшего запроса нет в списке выполняющихся
Запрос или его откат всё ещё выполняется
Цепочки блокировок исчезли, пользователи работают
Остались удерживаемые блокировки от «мёртвой» сессии
Проблемный сеанс отсутствует
Сеанс висит в состоянии «спит» и держит соединение
Профилактика: как не допустить зависших запросов
Прерывание — это борьба со следствием. Чтобы тяжёлые запросы не блокировали работу, настройте ограничения заранее: лимит времени выполнения запросов на СУБД, регламентные окна для тяжёлых отчётов, ограничение доступа к произвольным отчётам для рядовых пользователей.
На уровне разработки помогает типовой механизм длительных операций БСП с фоновым выполнением и возможностью отмены, а также оптимизация самих запросов: индексы, отказ от соединений с вложенными запросами и виртуальными таблицами без отборов.
Как выбрать действие
Что важно запомнить
Начинайте с мягких методов: отмена на клиенте → сеанс в кластере → запрос в СУБД. Принудительное завершение на СУБД безопасно для чтения и рискованно для транзакций записи. После прерывания всегда проверяйте блокировки и состояние отката.
Частые вопросы
Что делать, если Ctrl+Break не работает в тонком клиенте?
В тонком клиенте Ctrl+Break часто недоступен или игнорируется. Используйте кнопку «Отмена» в индикаторе длительной операции, а если её нет — попросите администратора завершить сеанс через консоль кластера.
Сколько ждать откат транзакции после KILL?
Откат занимает время, сопоставимое с тем, сколько транзакция уже работала. Состояние видно в sys.dm_exec_requests (колонка percent_complete для rollback в MS SQL). Прерывать откат нельзя — нужно дождаться завершения.
Можно ли прервать запрос, запущенный регламентным заданием?
Да. Найдите соответствующий сеанс фонового задания в консоли кластера (признак — приложение «Фоновое задание») и завершите его. Либо отмените задание штатно из консоли заданий, если она доступна в конфигурации.
Опасно ли убивать запрос SELECT?
Для чистых запросов на чтение риск минимален: данных они не меняют, отката не будет. Опасность представляют запросы внутри транзакций с изменением данных — там возможен длительный откат и временные блокировки.
Как ограничить время выполнения запросов, чтобы не прерывать вручную?
В MS SQL можно настроить query governor cost limit, в PostgreSQL — параметр statement_timeout. На уровне 1С тяжёлые операции выносят в фоновые задания с ограничением по времени и возможностью штатной отмены.