Долгий поиск в 1С завис — как его остановить

· 9 мин

Содержание

Чтобы отменить поиск в списке документов или справочника, нажмите Esc — быстрый поиск сбрасывается сразу. Если по списку наложен отбор от поиска, снимается он сочетанием Ctrl+Q («Отменить поиск»). Это штатный путь, безопасный для данных: ничего не завершается принудительно, вы просто возвращаете список в исходный вид.

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

Штатная отмена поиска в списке и справочнике

Быстрый поиск в любом списке 1С (журнал документов , справочник, список регистра) включается, как только вы начинаете набирать текст, или по Ctrl+F. Он не нагружает базу — ищет по видимой колонке. Отменить его можно четырьмя способами:

  • ⌨️ Esc — закрывает строку быстрого поиска, список возвращается к полному виду.
  • 🔄 Ctrl+Q — команда «Отменить поиск»: снимает отбор, который поиск наложил на список.
  • 🧹 Очистить строку поиска — удалите введённый текст, и отбор снимется сам.
  • 🖱️ Правый клик по списку → команда отмены поиска/отбора в контекстном меню.

Если список после поиска показывает только часть строк и не возвращается к полному виду — это не зависание, а оставшийся отбор. Нажмите Ctrl+Q или проверьте панель отборов над списком: там может висеть условие, которое поиск добавил автоматически.

Такой поиск прерывается мгновенно, потому что выполняется на клиенте и не обращается к серверу с тяжёлым запросом. Если же отмена не срабатывает и интерфейс подвисает — значит, выполняется не быстрый поиск, а что-то более ресурсоёмкое. Переходим к следующим разделам.

Как прервать длительную операцию поиска

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

Ключевой момент: платформа может прервать длительную операцию только в том случае, если выполняемый код периодически проверяет прерывание пользователя. Стандартные механизмы (полнотекстовый поиск, типовые отчёты) такую проверку обычно содержат, поэтому:

  1. Дождитесь, пока появится окно прогресса с индикатором выполнения.
  2. Нажмите кнопку отмены в этом окне (обычно «Отмена» или крестик рядом с полосой прогресса).
  3. Дайте платформе 5–15 секунд: прерывание срабатывает не мгновенно, а на ближайшей проверке.

Если окна прогресса нет, а приложение просто «висит», штатной кнопки отмены не будет. В толстом клиенте в части случаев помогает Ctrl+Break, но и оно сработает только там, где проверка прерывания заложена в код. Когда и это не помогает — остаётся завершать сеанс или процесс, а это уже потеря несохранённых данных (см. ниже).

Прежде чем принудительно завершать работу, убедитесь, что операция действительно зависла, а не просто выполняется долго. Тяжёлый полнотекстовый поиск по базе в несколько гигабайт может честно считать минуту. Признак реального зависания — процесс 1cv8 не нагружает ни процессор, ни диск несколько минут подряд.

Завершение процесса через Диспетчер задач

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

  1. Откройте Диспетчер задач: Ctrl+Shift+Esc.
  2. На вкладке «Процессы» найдите 1cv8 (толстый клиент) или 1cv8c (тонкий клиент).
  3. Если открыто несколько баз — ориентируйтесь по подписи окна в столбце с именем задачи, чтобы снять именно зависшую.
  4. Выделите процесс → «Снять задачу».

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

В файловой базе после жёсткого завершения стоит проверить целостность: запустите конфигуратор и выполните тестирование и исправление информационной базы (пункт в меню Администрирование конфигуратора). Делайте это, когда в базе больше никто не работает , — тестирование требует монопольного доступа.

Завершение сеанса в клиент-серверной базе

В клиент-серверном варианте завершать 1cv8c на своей машине обычно не нужно и даже вредно: зависший сеанс останется жить на сервере. Правильнее снять именно сеанс на стороне сервера. Это задача администратора.

Способ 1 — консоль администрирования серверов 1С (оснастка MMC):

  1. Разверните кластер → «Сеансы».
  2. Найдите нужный сеанс по имени пользователя и информационной базе.
  3. Правый клик → «Удалить».

Способ 2 — утилита rac (командная строка сервера):

rac session list --cluster=<идентификатор кластера>
rac session terminate --cluster=<идентификатор кластера> --session=<номер>

Идентификатор кластера сначала посмотрите командой rac cluster list. Полный список параметров — в справке rac help; не угадывайте подкоманды, которых не знаете.

Удаление чужого сеанса оборвёт работу этого пользователя так же, как снятие процесса — его несохранённые данные пропадут. Снимайте только тот сеанс, который реально завис, и по возможности предупредите владельца. Массово «чистить» сеансы на рабочем сервере в разгар дня нельзя.

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

Почему поиск в 1С выполняется долго

Понимание причины избавляет от необходимости прерывать поиск в принципе. Чаще всего долгое выполнение вызывают:

  • 🗂️ Неактуальный полнотекстовый индекс. Если индекс давно не обновлялся или отключён, поиск идёт прямым перебором данных — медленно.
  • 📊 Поиск по неиндексированному полю. Отбор списка по реквизиту без индекса заставляет сервер читать всю таблицу.
  • 📈 Большой объём данных. В базе с миллионами строк даже корректный поиск занимает время.
  • 🔒 Конфликты блокировок. Поиск ждёт, пока освободятся записи, занятые проведением документов другими пользователями.
  • 🐌 Файловый режим на сетевом диске. База, лежащая на общей сетевой папке, читается по сети — это главный тормоз файловых баз.
  • 🧮 Динамический список с тяжёлым запросом. Пользовательский отбор или сложное условие в настройке списка пересчитываются при каждом поиске.
  • 🔗 Поиск ссылок на объект. Команда поиска мест использования элемента (где он задействован в базе) перебирает многие таблицы и на большой базе честно работает долго — это не зависание.

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

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

Настройка полнотекстового поиска и индексов

Полнотекстовый поиск — это отдельный механизм платформы, который ищет слова по всем данным базы, а не по одной колонке списка. Чтобы он работал быстро и находил свежие записи, индекс нужно поддерживать в актуальном состоянии.

Открыть управление индексом проще всего через полный список команд:

  1. Включите команду «Все функции»: Главное меню → Сервис → Параметры (или через «Сервис и настройки») → отметьте «Отображать команду Все функции».
  2. Откройте Главное меню → Все функции → Стандартные → Управление полнотекстовым поиском.
  3. В открывшейся обработке видно состояние индекса и доступны действия: Обновить индекс и Очистить индекс.

Что делать с индексом:

  • 🔄 Обновить индекс — после массового ввода или загрузки данных, чтобы поиск находил свежие документы. На большой базе первое построение индекса идёт долго — это нормально, прерывать его не нужно.
  • 🧹 Очистить и построить заново — если поиск находит удалённые записи или работает с ошибками.
  • 🤖 Автообновление. В клиент-серверной базе индекс удобно обновлять фоновым регламентным заданием, чтобы он не отставал и не приходилось строить его вручную.

Отдельного поля «настройка скорости поиска» в 1С нет — производительность полнотекстового поиска определяется актуальностью индекса и объёмом базы. Поэтому главная настройка здесь ровно одна: регулярное обновление индекса.

Чем отличается поиск в файловой и клиент-серверной базе

Поведение поиска и способы его прервать заметно зависят от варианта работы базы. Разница — в таблице.

Что происходитФайловый режимКлиент-серверный режим
Где выполняется поискВ едином процессе клиентаНа сервере 1С
Долгий поиск влияет на другихТолько на одну машинуНагружает сервер для всех
Как прервать операциюОтмена в окне прогресса, иначе снять процесс 1cv8Отмена в прогрессе, иначе снять сеанс на сервере
Чем снять зависший процесс/сеансДиспетчер задачКонсоль кластера или rac session terminate
Полнотекстовый индекс обновляетСам пользователь вручнуюРегламентное задание на сервере
Главный тормозБаза на сетевом дискеНехватка ресурсов сервера, блокировки

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

Как не доводить поиск до зависания

Большинство «зависаний» поиска предотвращаются заранее. Базовый набор мер:

Профилактика долгого поиска
Выполнено: 0 / 6

Разработчикам, которые пишут собственную обработку поиска, пригодятся два приёма:

  • 🧩 Проверка прерывания в цикле. Вставляйте вызов, который проверяет прерывание пользователя, в длинные циклы обработки данных — тогда операцию можно будет остановить штатной кнопкой, а не снятием процесса. Без такой проверки платформа не сможет прервать ваш код.
  • 🧩 Фоновые задания для долгих выборок. Тяжёлый поиск выносите в фоновое задание и показывайте прогресс. Интерфейс остаётся отзывчивым, а пользователь получает понятную кнопку отмены вместо замершего окна.

И общий принцип: индексируйте поля, по которым реально ищут. Поиск по индексированному реквизиту отрабатывает за доли секунды даже на большой базе — и вопрос «как прервать поиск» просто не возникает.

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

Каким сочетанием клавиш отменить поиск в списке?
Esc закрывает строку быстрого поиска, Ctrl+Q снимает отбор, который поиск наложил на список. Для самого поиска используется Ctrl+F.
Почему после снятия процесса 1cv8 пропали данные?
Принудительное завершение теряет всё, что не было записано в базу: непроведённые документы, незаписанные настройки. Проведённые ранее документы остаются на месте. Поэтому снятие процесса — крайняя мера.
Можно ли прервать поиск, не закрывая программу?
Да, если выполняется штатная операция с окном прогресса — нажмите в нём отмену. Для длительного кода без окна прогресса штатной остановки нет, остаётся завершать сеанс или процесс.
Полнотекстовый поиск не находит свежие документы — что делать?
Обновить индекс: Главное меню → Все функции → Стандартные → Управление полнотекстовым поиском → «Обновить индекс». В клиент-серверной базе индексацию удобнее поручить регламентному заданию.
Как завершить зависший сеанс другого пользователя на сервере?
Через консоль администрирования серверов 1С (раздел «Сеансы» → «Удалить») или командой rac session terminate. Это оборвёт работу пользователя, поэтому снимайте только реально зависший сеанс.