Почему не работает быстрый поиск по колонке при включенном отборе в 1С 7.7 и как это исправить

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Причины некорректного поведения быстрого поиска

Для понимания проблемы проанализируем внутренние механизмы работы списков справочников в платформе 1С 7.7:

  1. Привязка к активному индексу сортировки. Механизм быстрого инкрементного поиска по первым введенным символам в табличной части формы списка жестко привязан к текущему установленному порядку сортировки. Если список отсортирован по наименованию, платформа выполняет быстрый переход по индексу наименования.
  2. Фиксация порядка при установке отбора. При включении отбора (через метод ИспользоватьОтбор или стандартный фильтр) платформа переключает выборку на специализированный составной индекс базы данных, при этом порядок сортировки жестко фиксируется (как правило, по наименованию или коду) и возможность произвольной смены сортировки блокируется. В таких условиях ввод символов в колонке с другим реквизитом (например, артикулом) не может задействовать индекс этого реквизита.
  3. Позиционирование без индекса. При отсутствии возможности навигации по индексу платформа пытается сканировать строки только в текущем видимом направлении (вниз от текущей позиции), что приводит к визуально случайным прыжкам курсора либо полному отсутствию реакции на ввод символов.
  4. Индексация реквизита в метаданных. Для корректного поиска реквизит справочника обязательно должен иметь включенное свойство «Сортировка» в конфигураторе. Если флаг не установлен, платформа в принципе не строит индекс по данному полю в базе данных.

Способ 1. Использование стандартного диалога поиска по реквизиту

Самый простой штатный путь, не требующий изменения конфигурации — использование специализированного поиска платформы. Рассмотрим этот вариант:

  1. Установим курсор в нужную колонку списка (например, «Артикул»).
  2. Нажмем комбинацию клавиш Ctrl + F3 или воспользуемся кнопкой поиска на панели инструментов.
  3. В открывшемся окне введем искомое значение. В этом режиме платформа выполняет точный поиск по значению реквизита и гарантированно позиционирует курсор на найденном элементе независимо от установленного отбора.

Способ 2. Программный поиск через отдельное поле ввода на форме

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

  1. В конфигураторе откроем форму списка справочника и добавим строковый реквизит диалога (например, ПолеПоискаАртикула).
  2. В свойствах поля укажем формулу вызова процедуры обработки — ПриПоискеПоАртикулу().
  3. В модуле формы напишем процедуру, выполняющую поиск элемента и активизацию найденной строки:

Процедура ПриПоискеПоАртикулу()
    Перем СпрНоменклатура, ИскомыйАртикул;
    
    ИскомыйАртикул = СокрЛП(ПолеПоискаАртикула);
    Если ПустаяСтрока(ИскомыйАртикул) = 1 Тогда
        Возврат;
    КонецЕсли;
    
    СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
    
    // Выполняем точный поиск по реквизиту Артикул
    Если СпрНоменклатура.НайтиПоРеквизиту("Артикул", ИскомыйАртикул, 1) = 1 Тогда
        // Позиционируем список на найденном элементе
        АктивизироватьОбъект(СпрНоменклатура.ТекущийЭлемент());
    Иначе
        Предупреждение("Номенклатура с артикулом " + ИскомыйАртикул + " не найдена!", 2);
    КонецЕсли;
КонецПроцедуры

Метод АктивизироватьОбъект корректно перемещает курсор в списке даже при активных механизмах отбора, если найденный элемент удовлетворяет условиям текущего фильтра.

Способ 3. Перехват клавиатуры и отображение данных через внешние компоненты

В проектах с высокими требованиями к эргономике интерактивного интерфейса применяются специализированные решения на базе внешних компонент расширения функционала платформы 1С 7.7:

  1. Перехват событий клавиатуры. С помощью компонент перехвата событий формы отслеживается непрерывный ввод символов пользователем прямо в табличной части. По накопленной строке вызывается программный поиск с последующим вызовом АктивизироватьОбъект, что полностью имитирует штатный поиск без перехода в отдельное поле ввода.
  2. Табличные поля на прямых запросах. Стандартный список справочника заменяется на виртуальную таблицу. Данные отбираются и сортируются прямыми SQL-запросами к базе данных, что снимает любые ограничения 1С 7.7 на одновременную фильтрацию по одной колонке и произвольный поиск по другой.
← На главную