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

Администрирование · 12 мин

Ошибка «Слишком сложный поисковый запрос» в 1С: причины и способы убрать

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

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

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

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

Что означает эта ошибка и когда она появляется

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

Типичные ситуации возникновения ошибки:

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

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

Ошибка у всех пользователейСистемная причина

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

Ошибка в одном спискеПроблема конкретной формы

Проверьте произвольный запрос динамического списка и поля поиска

Ошибка при конкретном словеТяжёлое условие поиска

Попробуйте уточнить запрос или искать по другому полю

Ошибка после сбоя сервераВозможно повреждение индексов

Выполните тестирование и исправление базы

Быстрые действия для пользователя: как убрать ошибку без настроек

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

Очистите строку поиска и начните заново. Нажмите крестик в поле поиска или сочетание клавиш для сброса, затем введите более длинный и точный фрагмент: не «Ив», а «Иванов». Короткие фрагменты заставляют платформу проверять огромное количество записей, что и приводит к превышению лимита сложности.

Используйте отбор вместо поиска. Отбор (кнопка «Найти» / «Ещё — Настроить список» или стандартная панель отбора) работает по конкретному полю и использует индексы, поэтому выполняется быстро и без ограничений сложности. Например, вместо поиска контрагента по списку счетов откройте отбор по полю «Контрагент».

Ищите по коду или номеру. Поиск по индексированным полям (код, номер документа) практически никогда не вызывает ошибки. Если известен номер документа — вводите его, а не фрагмент наименования.

Порядок действий пользователя
  1. 1
    Очистите строку поиска и закройте её
  2. 2
    Откройте список заново и убедитесь, что он отображается без ошибки
  3. 3
    Используйте отбор по конкретному полю вместо общего поиска
  4. 4
    Если поиск нужен — введите более длинный и точный фрагмент
  5. 5
    Если ошибка повторяется у всех коллег — сообщите администратору

Настройка поиска в динамическом списке

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

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

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

Полнотекстовый поиск: обновление и очистка индекса

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

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

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

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

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

Что можно сделать разработчику:

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

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

Типичные ошибки
01
Добавление в поиск всех полей подряд — запрос становится слишком сложным и поиск перестаёт работать вовсе
02
Проверка исправления только на пустой тестовой базе — на рабочих объёмах ошибка возвращается
03
Очистка полнотекстового индекса без последующего построения — поиск перестаёт находить данные
04
Игнорирование индексации реквизитов, по которым постоянно выполняются отборы
05
Правка типовой конфигурации напрямую без расширения — изменения теряются при обновлении

Тестирование и исправление базы

Если ошибка появилась внезапно после аварийного завершения работы, отключения электричества или сбоя сервера, возможно повреждение индексов базы данных. В этом случае помогает штатная процедура «Тестирование и исправление» в конфигураторе (меню «Администрирование»).

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

Для клиент-серверных баз реиндексацию таблиц целесообразно выполнять средствами СУБД (MS SQL Server, PostgreSQL), а не конфигуратора — это быстрее и безопаснее для больших объёмов.

Маршрут решения

Как выбрать действие

Ошибка только у вас и только при коротком запросеОчистите строку поиска, введите более длинный фрагмент или используйте отбор
Ошибка у всех пользователей во всех спискахОбновите или перестройте полнотекстовый индекс
Ошибка в одном конкретном спискеПроверьте настройки динамического списка и поля, включённые в поиск
Ошибка началась после сбоя или выключения питанияСделайте копию и выполните тестирование и исправление с реиндексацией
Список построен на произвольном запросе разработчикаУпростите запрос и ограничьте поля поиска в свойствах списка

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

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

Для профилактики повторения ошибки:

  • настройте регламентное обновление полнотекстового индекса, если поиск используется активно;
  • обучите пользователей вводить точные фрагменты и пользоваться отборами;
  • следите за индексацией реквизитов при доработке конфигурации;
  • периодически выполняйте регламентное обслуживание базы (реиндексацию, обновление статистики на СУБД).
Контрольные точки

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

Поиск по списку с прежним фрагментом
Норма

Список фильтруется без сообщения об ошибке

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

Ошибка «Слишком сложный поисковый запрос» повторяется

Полнотекстовый поиск
Норма

Находит заведомо существующие записи

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

Поиск пустой или завершается ошибкой

Скорость открытия списка
Норма

Список открывается за приемлемое время

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

Список «зависает» даже без поиска

Работа под обычным пользователем
Норма

Ошибки нет у пользователей с типовыми правами

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

Ошибка есть только у пользователей без административных прав

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

Ошибка появляется только у одного пользователя. Что делать?

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

Можно ли вообще отключить строку поиска в списке?

Да. Разработчик может в свойствах формы списка скрыть строку поиска или установить её положение в «Нет». Пользователям в этом случае предлагают работать через отборы — это полностью устраняет ошибку сложности запроса для данного списка.

Поможет ли обновление платформы 1С?

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

Ошибка возникает только в файловой базе, а в клиент-серверной той же конфигурации её нет. Почему?

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

Опасно ли очищать полнотекстовый индекс?

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

Что делать, если ни один способ не помог?

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

Итог

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

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