К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как остановить выполнение запроса в консоли запросов 1С

Как остановить выполнение запроса в консоли запросов 1С: клавиша Esc, прерывание на сервере, отмена в толстом клиенте и что делать, если запрос завис.

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

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

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

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

Толстый клиент выполняет запрос в рамках собственного процесса, поэтому платформа позволяет прервать длительную операцию штатно. Пока запрос выполняется, нажмите клавишу Esc — выполнение остановится, а управление вернётся в форму консоли запросов. В ряде версий платформы срабатывает и комбинация Ctrl+Break.

Прерывание происходит не мгновенно: платформа завершает текущий этап обработки (например, очередную порцию выборки), и только потом возвращает управление. Если запрос уже передан на сервер СУБД в файловом варианте, ожидание обычно короткое — от нескольких секунд до минуты.

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

Остановка запроса в толстом клиенте
  1. 1
    Нажмите Esc, пока запрос выполняется
  2. 2
    Дождитесь возврата управления в форму консоли
  3. 3
    Скорректируйте текст запроса: добавьте отборы или ПЕРВЫЕ N
  4. 4
    Запустите запрос повторно и проверьте время выполнения

Почему в тонком и веб-клиенте Esc не работает

В тонком и веб-клиенте запрос выполняется на сервере 1С:Предприятия, а клиентское приложение лишь ждёт ответа. Нажатие Esc в этом случае не прерывает серверный вызов: платформа не передаёт сигнал отмены в рабочий процесс кластера. Форма консоли остаётся заблокированной до завершения запроса или до срабатывания тайм-аута.

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

Единственные реальные варианты — дождаться завершения, дождаться тайм-аута соединения или завершить сеанс со стороны сервера. Закрытие окна тонкого клиента не остановит запрос: рабочий процесс продолжит выполнение до конца, пока кластер не зафиксирует обрыв соединения.

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

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

Откройте консоль кластера, перейдите в ветку нужного сервера, затем в раздел «Сеансы». Найдите сеанс пользователя, запустившего запрос — его можно опознать по имени пользователя, имени компьютера и времени начала. В свойствах сеанса видно текущий вызов СУБД, что подтверждает: именно этот сеанс выполняет тяжёлый запрос.

Выделите сеанс и выполните команду «Удалить» (завершить сеанс). Рабочий процесс прервёт выполнение запроса, транзакция откатится, блокировки будут сняты. Пользователь получит сообщение о разрыве соединения и сможет переподключиться.

Файловая база: особенности остановки

В файловом варианте запрос выполняется внутри процесса самого клиентского приложения, поэтому Esc в толстом клиенте работает надёжно. В тонком клиенте с файловой базой через веб-сервер ситуация аналогична клиент-серверной: выполнение идёт на стороне веб-сервера, и клиентское прерывание недоступно.

Если толстый клиент с файловой базой завис настолько, что Esc не помогает, крайняя мера — завершение процесса 1cv8.exe через диспетчер задач Windows. При этом файл базы, как правило, не повреждается, но при следующем входе стоит дождаться завершения фоновых проверок и убедиться, что база открывается штатно.

После аварийного завершения может остаться lock-файл (1Cv8.1CL), блокирующий вход. Если база не открывается с сообщением о том, что она занята, проверьте, что процесс действительно завершён, и при необходимости удалите файл блокировки в каталоге базы.

Как заранее ограничить запрос, чтобы его не пришлось останавливать

Большинство «зависаний» в консоли запросов — следствие запроса без ограничений по объёму. Самое простое средство — конструкция ПЕРВЫЕ N: она ограничивает количество возвращаемых строк и резко сокращает время выполнения при отладке логики запроса.

Всегда добавляйте отборы по периоду и ключевым измерениям. Запрос по регистру накопления за весь период учёта и тот же запрос за один месяц отличаются по времени выполнения на порядки. Для отладки достаточно одного-двух дней данных.

Используйте временные таблицы и индексацию: поместите отобранные данные во временную таблицу с конструкцией ИНДЕКСИРОВАТЬ ПО, а затем соединяйтесь с ней. Соединение двух больших таблиц без индексов — самая частая причина запросов, которые приходится останавливать.

bsl
ВЫБРАТЬ ПЕРВЫЕ 100
	Продажи.Номенклатура,
	СУММА(Продажи.Количество) КАК Количество
ИЗ
	РегистрНакопления.Продажи КАК Продажи
ГДЕ
	Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
	Продажи.Номенклатура

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

Что делать, если запрос завис регулярно

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

Для диагностики используйте технологический журнал с событиями DBMSSQL/DBPOSTGRS и длительностью вызовов, либо средства мониторинга СУБД (активные запросы, блокировки). Так можно увидеть, на каком этапе запрос «застревает»: на сканировании таблицы, на блокировке или на сортировке.

Если запрос нужен регулярно, перенесите его из консоли в отчёт на СКД или фоновое задание с ограничением по времени. Фоновое задание можно штатно отменить из списка заданий, не завершая сеанс пользователя.

Типичные ошибки
01
Запуск запроса без ПЕРВЫЕ N и отборов на полной базе — зависание и блокировки таблиц
02
Закрытие тонкого клиента в надежде остановить запрос — сервер продолжает выполнение, блокировки остаются
03
Завершение чужого сеанса в консоли кластера без проверки — потеря несохранённых данных пользователя
04
Повторный запуск того же зависшего запроса без изменений — повторное зависание и рост нагрузки на сервер

Проверка результата после остановки

После прерывания запроса убедитесь, что система вернулась в рабочее состояние: форма консоли отвечает, текст запроса на месте, другие пользователи не жалуются на блокировки. Если запрос останавливали через завершение сеанса, проверьте в консоли кластера, что сеанс исчез из списка, а в мониторинге СУБД — что нет зависших активных запросов и длительных транзакций.

Контрольные точки

Как проверить результат

Форма консоли запросов
Норма

Форма отвечает, текст и параметры сохранены

Тревожный признак

Форма не отвечает более нескольких минут после Esc

Сеанс в консоли кластера
Норма

Сеанс завершён, активных вызовов СУБД нет

Тревожный признак

Сеанс висит с длительным вызовом СУБД

Блокировки в базе
Норма

Другие пользователи работают без ошибок блокировок

Тревожный признак

Массовые ошибки превышения времени ожидания блокировки

Часто задаваемые вопросы

Можно ли остановить запрос в тонком клиенте без прав администратора?

Штатно — нет: серверный вызов не прерывается с клиента. Без прав администратора кластера остаётся дождаться завершения или тайм-аута соединения, после которого сеанс будет разорван. Практический выход — договориться с администратором о завершении сеанса через консоль кластера.

Что произойдёт с данными, если прервать запрос на середине?

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

Почему после нажатия Esc форма консоли всё равно висит?

Платформа прерывает выполнение не мгновенно, а на ближайшей контрольной точке — например, после получения очередной порции данных от СУБД. Если сервер баз данных сам обрабатывает тяжёлый запрос, ожидание может занять заметное время. В клиент-серверном варианте ускорить отмену можно только со стороны СУБД или завершением сеанса.

Как остановить запрос, выполняемый фоновым заданием?

Откройте список фоновых заданий (через стандартную обработку администрирования или консоль заданий), найдите нужное задание и выполните команду «Отменить». Если задание не поддаётся отмене, завершите соответствующий сеанс в консоли кластера — у фоновых заданий есть собственные сеансы.

Опасно ли завершать процесс 1cv8.exe через диспетчер задач?

Для файловой базы это допустимая крайняя мера: запросы на чтение не повреждают файл. Риск появляется, если в момент завершения шла запись данных — возможны ошибки при следующем входе. После такого завершения проверьте, что база открывается, и при необходимости удалите оставшийся файл блокировки 1Cv8.1CL.

Как понять, что запрос завис, а не просто долго выполняется?

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

Итог

Что важно запомнить

В толстом клиенте запрос останавливается клавишей Esc, в тонком и веб-клиенте — только через завершение сеанса в консоли кластера или тайм-аут. Лучшая защита от зависаний — отборы, ПЕРВЫЕ N и индексированные временные таблицы. Перед завершением чужого сеанса всегда проверяйте, что именно он выполняет проблемный запрос.