Поиск в 1С завис: как прервать его и не потерять данные

· 9 мин

Содержание

Чтобы остановить поиск в 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. Переключитесь на вкладку открытого окна в панели открытых (в интерфейсе «Такси» — вкладки внизу или сверху рабочей области).
  2. Нажмите крестик на вкладке формы, где запущен поиск.
  3. Если появился вопрос о сохранении изменений, ответьте по ситуации: несохранённые данные документа при отказе пропадут.

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

Закрытие формы освобождает интерфейс, но в клиент-серверной базе запрос к СУБД может ещё какое-то время работать. Если сразу запустить тот же поиск ещё раз, на сервере окажутся два одинаковых тяжёлых запроса.

Принудительное завершение 1С через Диспетчер задач

Окно не отвечает, вкладки не закрываются, Ctrl+Break молчит — остаётся снять процесс.

  1. Нажмите Ctrl+Shift+Esc.
  2. На вкладке «Подробности» найдите 1cv8c.exe (тонкий клиент) или 1cv8.exe (толстый клиент, конфигуратор).
  3. Если открыто несколько баз, ориентируйтесь на процесс, который потребляет процессор, или сначала закройте нормально все остальные окна 1С.
  4. Нажмите «Снять задачу».

Несохранённые документы и изменения в открытых формах пропадут. Проведённые ранее документы и данные в базе не страдают: незавершённая транзакция откатывается.

Что происходит после снятия процесса

Режим базыЧто с поискомЧто делать дальше
ФайловаяОстановлен вместе с процессомМожно снова войти в базу
Клиент-сервернаяСеанс и запрос на сервере могут продолжать работуПопросить администратора завершить сеанс
Веб-клиент через браузерЗакрытие вкладки обрывает клиент, но не серверТо же, что в клиент-серверной

В файловой базе после снятия процесса иногда остаётся «висящий» сеанс в списке активных пользователей. Он пропадает сам после перезапуска программы у пользователя.

Завершение зависшего сеанса на сервере 1С

Для клиент-серверной базы это главный шаг. Пока сеанс жив, запрос продолжает нагружать сервер и может держать блокировки, из-за которых тормозят коллеги.

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

Из самой программы

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) откройте Администрирование → Поддержка и обслуживание → Активные пользователи. В списке найдите свой сеанс по имени пользователя и времени начала, выделите и выполните команду завершения сеанса. Нужны права администратора.

Через консоль администрирования серверов

  1. Запустите «Администрирование серверов 1С Предприятия».
  2. Разверните кластер → Информационные базы → нужная база → Сеансы.
  3. Найдите сеанс по пользователю и компьютеру. Тот, что ищет, обычно выделяется большим временем текущего вызова и временем, проведённым в СУБД.
  4. Правой кнопкой мыши — «Удалить». Платформа завершит сеанс.

Как не завершить чужой сеанс

У одного пользователя может быть несколько сеансов: открыт тонкий клиент, конфигуратор, работают фоновые задания. Перед завершением сверьте:

  • 👤 имя пользователя — под ним вы входили в базу;
  • 💻 компьютер — сетевое имя вашего ПК или терминального сервера;
  • 🧩 приложение — для поиска это «Тонкий клиент» или «Толстый клиент», а не «Фоновое задание» и не «Конфигуратор»;
  • 🕒 начало работы — время входа совпадает с тем, когда вы открыли программу.

Если под одной учётной записью работают несколько человек, спросите коллег, прежде чем удалять сеанс. Иначе можно оборвать чужое проведение документов.

Из командной строки

На сервере с установленным агентом и запущенной службой 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 будет срабатывать.
Диагностика: выберите симптом

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

Пропадут ли данные, если снять 1С в Диспетчере задач во время поиска?
Пропадут только несохранённые изменения в открытых формах. Записанные и проведённые документы останутся, незавершённая транзакция откатится.
Почему коллеги жалуются на тормоза, когда я ищу?
Поиск по части строки в большой таблице грузит сервер СУБД и может ждать или держать блокировки. От этого замедляется работа других пользователей той же базы.
Можно ли поставить ограничение времени на поиск?
Штатной настройки «прервать поиск через N секунд» для пользователя нет. Ускоряют поиск правильные условия, индексы и актуальный полнотекстовый индекс.
Чем отличается строка поиска в шапке программы от поиска в списке?
Строка в шапке ищет по всей базе: по разделам, командам и данным. Поиск в списке работает только с его строками и обычно быстрее.
Нужно ли перезагружать сервер, если поиск завис?
Нет. Достаточно завершить конкретный сеанс. Перезагрузка сервера обрывает работу всех пользователей.