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