Поиск в 1С завис: как прервать его и не потерять данные
Содержание
Чтобы остановить поиск в 1С, сначала нажмите Ctrl+Break: платформа спросит, прервать ли выполнение. Если фильтр поиска уже применён к списку и мешает, его снимает команда «Отменить поиск» — Ctrl+Q. Не помогло за минуту-две — закройте окно через Диспетчер задач, а в клиент-серверной базе ещё и завершите сеанс на сервере.
Частое заблуждение — «закрыл 1С, значит поиск остановился». В файловой базе это так. В клиент-серверной запрос продолжает работать на сервере 1С и в СУБД, пока не завершится сам или пока администратор не снимет сеанс. Поэтому порядок действий зависит от того, где лежит база.
Почему поиск в 1С выполняется так долго
Поиск «висит» не потому, что программа сломалась. Чаще всего она честно перебирает строки таблицы, на которой нет подходящего индекса.
Типичные причины:
- 🔍 поиск по части строки — «содержит „ромашка“» превращается в запрос с условием
ПОДОБНО "%ромашка%", индекс по такому условию не работает , СУБД читает всю таблицу; - 📚 глобальный поиск по всей базе — строка поиска в шапке программы проверяет сразу много справочников и документов;
- 📄 поиск в журнале документов без отбора по периоду — платформа перебирает документы за все годы;
- 🔒 ожидание блокировки — запрос ждёт, пока другой пользователь закончит проведение или закрытие месяца ;
- 🗂️ устаревший индекс полнотекстового поиска — платформа ищет по индексу, который давно не обновлялся, или индекс как раз перестраивается.
Отличить «долго ищет» от «зависло» помогает простая проверка. Откройте Диспетчер задач и посмотрите процесс клиента (1cv8c.exe для тонкого клиента
, 1cv8.exe для толстого). Если загрузка процессора и память меняются, работа идёт. Если в клиент-серверной базе клиент стоит на нуле — работа идёт на сервере, а клиент просто ждёт ответа.
Горячие клавиши, которые прерывают поиск
Начинайте с клавиатуры. Это безопасно: данные не теряются, база не страдает.
| Клавиши | Что делает | Когда срабатывает |
|---|---|---|
Ctrl+Break | Прерывает выполнение кода, платформа спрашивает «прервать?» | Когда выполнение можно прервать на клиенте |
Ctrl+Q | Отменяет поиск в списке и снимает отбор | Список уже показал результат или ещё отвечает |
Esc | Закрывает активную форму или диалог поиска | Окно реагирует на клавиши |
Alt+F | Открывает расширенный поиск «Найти» в списке | Чтобы задать поиск точнее и быстрее |
Ctrl+F | Переводит курсор в строку поиска списка | Для повторного, уже точного поиска |
Как правильно нажать Ctrl+Break
На многих ноутбуках нет отдельной клавиши Break. Её заменяют сочетания с Fn: Fn+B, Fn+Pause или Fn+Ctrl+B — зависит от производителя. Если ни одно не работает, включите экранную клавиатуру Windows (osk в окне «Выполнить»). На ней есть Pause, которая работает как Break.
Нажмите сочетание один раз и подождите 10–20 секунд. Многократные нажатия не ускоряют прерывание.
Ctrl+Break прерывает код, который выполняется на клиенте, и циклы, где разработчик предусмотрел проверку прерывания. Длинный запрос, отправленный на сервер, прервать с клавиатуры получается не всегда: клиент ждёт ответа и не может вмешаться.
Как снять поиск, который уже сработал
Бывает, что поиск отработал, но список теперь показывает две строки вместо тысячи. Это не зависание, а наложенный отбор. Его снимает Ctrl+Q или кнопка-крестик в строке поиска над списком. После этого список возвращается в обычный вид.
Закрытие формы поиска и окна списка
Если клавиши не дали результата, но 1С реагирует на мышь, закройте саму форму.
- Переключитесь на вкладку открытого окна в панели открытых (в интерфейсе «Такси» — вкладки внизу или сверху рабочей области).
- Нажмите крестик на вкладке формы, где запущен поиск.
- Если появился вопрос о сохранении изменений, ответьте по ситуации: несохранённые данные документа при отказе пропадут.
Когда поиск запущен из отчёта или обработки, построенных на библиотеке стандартных подсистем, часто появляется окно ожидания длительной операции. В нём есть кнопка отмены. Она останавливает фоновое задание на сервере — это лучший вариант, чем закрывать программу.
Закрытие формы освобождает интерфейс, но в клиент-серверной базе запрос к СУБД может ещё какое-то время работать. Если сразу запустить тот же поиск ещё раз, на сервере окажутся два одинаковых тяжёлых запроса.
Принудительное завершение 1С через Диспетчер задач
Окно не отвечает, вкладки не закрываются, Ctrl+Break молчит — остаётся снять процесс.
- Нажмите
Ctrl+Shift+Esc. - На вкладке «Подробности» найдите
1cv8c.exe(тонкий клиент) или1cv8.exe(толстый клиент, конфигуратор). - Если открыто несколько баз, ориентируйтесь на процесс, который потребляет процессор, или сначала закройте нормально все остальные окна 1С.
- Нажмите «Снять задачу».
Несохранённые документы и изменения в открытых формах пропадут. Проведённые ранее документы и данные в базе не страдают: незавершённая транзакция откатывается.
Что происходит после снятия процесса
| Режим базы | Что с поиском | Что делать дальше |
|---|---|---|
| Файловая | Остановлен вместе с процессом | Можно снова войти в базу |
| Клиент-серверная | Сеанс и запрос на сервере могут продолжать работу | Попросить администратора завершить сеанс |
| Веб-клиент через браузер | Закрытие вкладки обрывает клиент, но не сервер | То же, что в клиент-серверной |
В файловой базе после снятия процесса иногда остаётся «висящий» сеанс в списке активных пользователей. Он пропадает сам после перезапуска программы у пользователя.
Завершение зависшего сеанса на сервере 1С
Для клиент-серверной базы это главный шаг. Пока сеанс жив, запрос продолжает нагружать сервер и может держать блокировки, из-за которых тормозят коллеги.
Завершение сеанса обрывает работу пользователя: всё несохранённое в этом сеансе пропадёт. Предупредите его или убедитесь, что сеанс действительно ваш.
Из самой программы
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) откройте Администрирование → Поддержка и обслуживание → Активные пользователи. В списке найдите свой сеанс по имени пользователя и времени начала, выделите и выполните команду завершения сеанса. Нужны права администратора.
Через консоль администрирования серверов
- Запустите «Администрирование серверов 1С Предприятия».
- Разверните кластер →
Информационные базы→ нужная база →Сеансы. - Найдите сеанс по пользователю и компьютеру. Тот, что ищет, обычно выделяется большим временем текущего вызова и временем, проведённым в СУБД.
- Правой кнопкой мыши — «Удалить». Платформа завершит сеанс.
Как не завершить чужой сеанс
У одного пользователя может быть несколько сеансов: открыт тонкий клиент, конфигуратор, работают фоновые задания. Перед завершением сверьте:
- 👤 имя пользователя — под ним вы входили в базу;
- 💻 компьютер — сетевое имя вашего ПК или терминального сервера;
- 🧩 приложение — для поиска это «Тонкий клиент» или «Толстый клиент», а не «Фоновое задание» и не «Конфигуратор»;
- 🕒 начало работы — время входа совпадает с тем, когда вы открыли программу.
Если под одной учётной записью работают несколько человек, спросите коллег, прежде чем удалять сеанс. Иначе можно оборвать чужое проведение документов.
Из командной строки
На сервере с установленным агентом и запущенной службой ras используют утилиту rac:
rac cluster list
rac session list --cluster=<id_кластера>
rac session terminate --cluster=<id_кластера> --session=<id_сеанса>
Идентификатор кластера берите из вывода первой команды, сеанса — из второй. Если на кластере задан администратор, добавьте параметры авторизации; их точный вид подскажет rac help session.
Не перезапускайте службу «Агент сервера 1С:Предприятия» ради одного поиска. Перезапуск обрывает сеансы всех пользователей всех баз на этом сервере. Это крайняя мера и только в нерабочее время.
Если после завершения сеанса нагрузка на СУБД не спадает, запрос ещё откатывается. Обычно хватает подождать несколько минут. Принудительно снимать соединение средствами СУБД стоит только администратору базы данных.
Как найти причину медленного поиска
Один раз прервать поиск несложно. Но если тот же поиск зависает каждый день, нужно понять, какой запрос тормозит.
Замер производительности
Разработчик или администратор запускает базу из конфигуратора в режиме отладки, включает Отладка → Замер производительности и повторяет поиск. После остановки замера видно, какие строки кода заняли больше всего времени. Обычно в лидерах оказывается одна строка с выполнением запроса.
Технологический журнал
Для клиент-серверной базы надёжнее технологический журнал. Его включают файлом logcfg.xml в каталоге conf платформы на сервере 1С. Минимальная настройка для поиска тяжёлых запросов:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\1c_techlog" history="24">
<event>
<eq property="name" value="DBMSSQL"/>
</event>
<event>
<eq property="name" value="TLOCK"/>
</event>
<property name="all"/>
</log>
</config>
События DBMSSQL показывают текст запросов к СУБД и их длительность, TLOCK — управляемые блокировки. Повторите медленный поиск, затем найдите в логе записи с самой большой длительностью.
На нагруженном сервере такой журнал быстро съедает место на диске. Включайте его на час-два, следите за свободным местом и удаляйте logcfg.xml после сбора данных. Параметр history задаёт, сколько часов хранить файлы.
На что смотреть в результатах
- ⏱️ запрос долго выполняется в СУБД — не хватает индекса или поиск идёт по части строки;
- 🔒 запрос долго ждёт
TLOCK— мешает чужая транзакция, например групповое перепроведение; - 🔁 один и тот же запрос повторяется сотни раз — поиск вызывается в цикле, это ошибка кода.
Как искать в 1С быстрее, чтобы не приходилось прерывать
Большинство «вечных» поисков лечится тем, как пользователь задаёт поиск.
Настройки самого поиска
Откройте расширенный поиск через Alt+F (или «Ещё → Найти» в списке). В нём три важные настройки:
- Где искать — выберите конкретную колонку: ИНН, артикул, номер документа. Поиск по одной колонке быстрее, чем по всем.
- Как искать — «по началу строки» или «по точному совпадению» работают быстрее, чем «по части строки», если колонка проиндексирована.
- Что искать — вводите точное значение. Номер документа или ИНН найдутся мгновенно, слово из середины наименования — нет.
Сравнение подходов
| Способ | Скорость в большой базе | Когда использовать |
|---|---|---|
| По точному совпадению в колонке | Высокая | Номер, ИНН, код, артикул |
| По началу строки | Высокая при индексе | Знаете начало наименования |
| По части строки | Низкая | Помните только слово из середины |
| Полнотекстовый поиск | Высокая, если индекс актуален | Поиск по всей базе |
| Отбор по периоду в журнале | Ускоряет любой поиск | Документы за последние месяцы |
Что сделать администратору
- 🗂️ Настройте регулярное обновление индекса полнотекстового поиска
. В типовых конфигурациях это регламентное задание; управление им — в разделе
Администрирование → Поддержка и обслуживание. - 📅 Ограничьте период в журналах документов по умолчанию: пусть открываются за текущий месяц или квартал.
- 🧰 Регулярно обновляйте статистику и перестраивайте индексы СУБД в нерабочее время.
- 🧑💻 Разработчикам: добавляйте индексирование реквизитам, по которым часто ищут, и вызывайте
ОбработкаПрерыванияПользователя()в длинных клиентских циклах. ТогдаCtrl+Breakбудет срабатывать.