Глобальный поиск в 1С завис: как его остановить и больше не ждать
Содержание
Прервать глобальный поиск в 1С проще всего сочетанием Ctrl+Break: платформа спросит, прервать ли выполнение, и вернёт управление программой. Если окно не реагирует минуту и дольше, поиск застрял на сервере. Тогда администратор завершает сеанс пользователя в консоли кластера серверов, а в файловой базе остаётся только закрыть процесс клиента.
Механизм общий для платформы 8.3 с интерфейсом «Такси»: в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 поле поиска одно и то же, вверху окна программы. Поэтому и способы остановить поиск, и причины зависания совпадают. Чаще всего виноват не сам поиск, а устаревший или битый полнотекстовый индекс, слишком короткая фраза или тяжёлый запрос к СУБД.
Остановить поиск, не выходя из программы
Начинайте с мягких способов. Они не трогают других пользователей и не требуют прав администратора.
Сочетание Ctrl+Break
- Не кликайте по окну много раз подряд: каждый клик встаёт в очередь и продлевает «зависание».
- Нажмите
Ctrl+Break. На ноутбуках без отдельной клавиши Break она вызывается черезFn; какое именно сочетание, указано в документации к ноутбуку. Запасной вариант — экранная клавиатура Windows, где Break есть. - В вопросе «Прервать выполнение?» ответьте «Да».
- Закройте окно результатов поиска и сформулируйте запрос заново, точнее.
Ctrl+Break прерывает код, который выполняется на клиенте, и посылает прерывание серверному вызову. Но сервер обработает его, только когда получит управление. Если в этот момент рабочий процесс ждёт ответа от СУБД, программа «очнётся» лишь после того, как запрос к базе вернётся.
Закрыть окно результатов и подождать
Глобальный поиск выдаёт результаты порциями: сначала команды и разделы интерфейса, затем найденные данные и справку. Если первые строки уже появились, а остальное ищется долго, закройте окно результатов. Новый поиск начнётся только по вашей команде.
В веб-клиенте Ctrl+Break обычно перехватывает браузер. Там надёжнее закрыть вкладку и открыть базу заново: незавершённый вызов на сервере доработает и освободится сам.
Когда закрывать программу через диспетчер задач
Если окно «Не отвечает» больше 5–10 минут, а администратора рядом нет, закройте процесс 1cv8c.exe (тонкий клиент) или 1cv8.exe (толстый) в диспетчере задач.
Несохранённые документы в этом сеансе пропадут. В клиент-серверной базе сеанс на сервере после этого ещё какое-то время висит и держит лицензию, пока сервер не обнаружит разрыв соединения.
Почему глобальный поиск в 1С зависает
Понять причину важно: от неё зависит, поможет ли повторный запуск или поиск снова встанет на том же месте.
- 📚 Индекс полнотекстового поиска давно не обновлялся. Платформа ищет по устаревшему индексу и параллельно пытается досчитать свежие данные.
- 🔤 Слишком общий запрос. Фраза из 2–3 букв или частое слово вроде «ООО» даёт десятки тысяч совпадений, и формирование списка результатов занимает минуты.
- 🧩 Повреждён индекс. Сбой при слиянии, нехватка места на диске или антивирус, заблокировавший файлы индекса, — и поиск начинает падать с ошибкой или висеть.
- 🗄 Блокировки и тяжёлые запросы в СУБД. Поиск по данным упирается в таблицы, которые в эту минуту держит закрытие месяца или обмен.
- 🖥 Нехватка ресурсов сервера. Рабочий процесс уже занят тяжёлыми отчётами, памяти не хватает, процессор загружен на 100%.
Простой тест: повторите тот же запрос в другое время, например рано утром. Если поиск отработал за секунды — дело в нагрузке и блокировках. Если снова висит — в индексе или в формулировке.
Пример из практики. В базе на 40 ГБ бухгалтер ищет «счёт» и ждёт по 4 минуты. В консоли кластера видно: вызов почти всё время проводит в СУБД, блокировок нет. Запрос «счёт 1452» по номеру документа отрабатывает за 2 секунды. Причина — сама формулировка: слово встречается почти в каждом документе. Индекс тут ни при чём, перестраивать его не нужно.
Найти и завершить зависший сеанс в консоли кластера
Для клиент-серверной базы это главный способ, когда Ctrl+Break не помог. Делает его администратор сервера 1С.
- Запустите «Администрирование серверов 1С Предприятия» (оснастка консоли кластера).
- Разверните
Кластеры → <ваш кластер> → Информационные базы → <база> → Сеансы. - Найдите сеанс нужного пользователя по колонке «Пользователь» и компьютеру.
- Посмотрите колонки с длительностью текущего вызова и текущего обращения к СУБД. Если вызов длится минутами, а время в СУБД растёт вместе с ним — сеанс ждёт базу данных.
- Выделите сеанс и выберите в контекстном меню «Удалить».
Пользователь увидит сообщение Сеанс работы завершен администратором и сможет войти заново.
Удаление сеанса обрывает всю работу этого пользователя, а не только поиск. Несохранённые документы пропадут. Сначала позвоните ему и предложите сохранить то, что открыто в других окнах.
То же самое из командной строки
Если консоли под рукой нет, тот же результат даёт утилита rac при запущенной службе ras:
rac cluster list
rac session list --cluster=<uuid_кластера>
rac session terminate --cluster=<uuid_кластера> --session=<uuid_сеанса>
В списке сеансов ищите нужного пользователя по полям user-name и host. Если кластер защищён паролем, добавьте параметры администратора кластера; их точный вид подскажет rac help session.
Чего не делать
Не перезапускайте службу сервера 1С и не завершайте рабочий процесс rphost ради одного зависшего поиска. Это оборвёт сеансы всех пользователей на этом процессе. Такой шаг оправдан только если завис весь сервер, и его делают вне рабочего времени или после предупреждения всех пользователей.
Полнотекстовый индекс и скорость поиска
Поиск по данным в глобальном поиске опирается на полнотекстовый индекс. Это отдельный набор файлов: в файловой базе — папка 1Cv8FTxt в каталоге базы, в клиент-серверной — в каталоге кластера, обычно srvinfo\reg_1541\<GUID базы>\1Cv8FTxt.
Индекс устроен из основной части и небольшой «дополнительной», куда попадают свежие изменения. Пока дополнительная часть маленькая, поиск быстрый. Если слияние неделями не запускалось, она разрастается, и каждый поиск становится медленнее.
Как проверить и обновить индекс
В Бухгалтерии 3.0 и других конфигурациях на библиотеке стандартных подсистем откройте Администрирование → Общие настройки и найдите группу «Полнотекстовый поиск». Там видно, включён ли поиск и актуален ли индекс.
| Действие | Когда применять | Риск |
|---|---|---|
| Обновить индекс | Индекс не актуален, новые документы не находятся | Нагрузка на процессор на время обновления |
| Очистить и построить заново | Поиск падает с ошибкой или висит на любом запросе | Пока индекс строится, поиск по данным не работает; большая база индексируется часами |
| Временно отключить полнотекстовый поиск | Поиск мешает работе, а перестроить индекс сейчас некогда | Глобальный поиск перестанет находить документы по содержимому |
Перестройку индекса большой базы запускайте вечером. Первое построение базы на 50 ГБ может идти несколько часов и занимать одно ядро процессора целиком.
Перед перестройкой проверьте, что на диске есть свободное место примерно на треть объёма базы, а папка 1Cv8FTxt исключена из проверки антивирусом «на лету». Иначе новый индекс повредится так же, как старый.
Что смотреть в СУБД, когда поиск висит
Если в консоли кластера видно, что вызов сеанса проводит почти всё время в СУБД, проверьте, чем занята база данных. Это работа администратора баз данных или того, у кого есть права на сервер СУБД.
Microsoft SQL Server. Текущие запросы и их ожидания показывает системное представление:
SELECT r.session_id, r.status, r.wait_type, r.blocking_session_id,
r.total_elapsed_time / 1000 AS seconds, t.text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.session_id <> @@SPID
ORDER BY r.total_elapsed_time DESC;
PostgreSQL. Аналог — pg_stat_activity:
SELECT pid, state, wait_event_type, wait_event,
now() - query_start AS duration, left(query, 200) AS query
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY duration DESC;
Как читать результат:
- 🔒 Заполнен
blocking_session_id(SQL Server) или ожидание типаLock(PostgreSQL) — запрос поиска стоит в очереди за чужой блокировкой. Найдите блокирующий процесс: часто это закрытие месяца, обмен или выгрузка. - 🐢 Блокировок нет, но запрос идёт долго и читает много данных — поиск перебирает большие таблицы. Помогает уточнить фразу и обновить статистику СУБД в регламентном обслуживании.
- 🔁 Один и тот же запрос повторяется от нескольких пользователей — люди нажимают поиск повторно, не дождавшись первого. Объясните, что так очередь только растёт.
Не завершайте процессы в СУБД напрямую (KILL в SQL Server, pg_terminate_backend в PostgreSQL) без крайней нужды. Рабочий процесс 1С получит ошибку соединения, и у пользователя оборвётся сеанс. Правильный путь — завершить сеанс в консоли кластера.
Как сузить поиск, чтобы он отвечал быстро
Большая часть «зависаний» — это поиск, которому дали слишком широкое задание. Несколько привычек снимают проблему без участия администратора.
- 🎯 Ищите по уникальному признаку. ИНН, номер документа, артикул находятся за секунды. Слово «услуги» в базе за 5 лет — нет.
- ✍️ Пишите не меньше 4–5 символов. Короткая подстрока совпадает с огромным числом записей.
- 📂 Ищите в нужном списке, а не во всей базе. Если нужен контрагент, откройте справочник «Контрагенты» и воспользуйтесь строкой поиска списка (
Ctrl+F). Поиск пройдёт по одной таблице. - 🗓 В журналах документов сначала ограничьте период. Поиск по журналу за месяц быстрее, чем за всю историю.
Администратор может сузить сам индекс: в конфигураторе у каждого справочника, документа и реквизита есть свойство «Полнотекстовый поиск» (использовать или нет). Исключение крупных служебных объектов уменьшает индекс. Но в типовой конфигурации на поддержке это изменение конфигурации: его придётся повторять или учитывать при каждом обновлении. Делайте так только после замеров и с согласования с тем, кто обслуживает базу.
Регламентные задания: профилактика зависаний
Чтобы поиск не тормозил снова, индекс должен обновляться и сливаться автоматически. В конфигурациях на библиотеке стандартных подсистем это делают два регламентных задания.
Откройте Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания и найдите в списке задания, в названии которых есть «полнотекстового поиска»: одно отвечает за обновление индекса, второе — за слияние.
Ещё три практических правила:
- 🌙 Слияние — ночью. Слияние индекса нагружает процессор и диск. Если оно запускается в 11:00, пользователи заметят это как «тормоза поиска».
- 🚫 Проверьте флажок блокировки заданий. В свойствах информационной базы в консоли кластера есть «Блокировка регламентных заданий включена». После обновления или копирования базы его часто забывают снять, и индекс перестаёт обновляться.
- 📏 Следите за размером индекса. Если папка
1Cv8FTxtза месяц выросла в разы при обычной работе, задания слияния не отрабатывают.
В файловой базе регламентные задания выполняются только при запущенном клиенте. Если по ночам базу никто не открывает, слияние может не проходить неделями. Выход — запускать его вручную раз в неделю кнопкой обновления индекса в общих настройках или держать один сеанс открытым на выделенном компьютере.