Сейчас расскажу про одну из самых больных тем — подбор номенклатуры в документ. Это, конечно, очень спорный момент, особенно сейчас, когда большое количество документов создается с помощью загрузки (с сайтов, из прайс-листов или каталогов, мобильных устройств, ЭДО, EDI и т.д.), но все равно есть еще компании, которые работают по-старинке, создавая документы «по-телефону», с бумажных носителей. И в этом случае на первый план выходит скорость и удобство подбора номенклатуры в документ.
Сейчас разработчики 1С всех склоняют к полнотекстовому поиску. Это достаточно удобно, но далеко не всегда. Например:
- Полнотекстовый поиск постоянно обращается к серверу, а это задержки. Я, как ни старался настроить этот поиск, все-равно выходило около 0.2 секунды задержка после ввода символа. Оператор, когда быстро вводит, постоянно попадал на «проглатываемые» системой буквы (ввел 3 символа, пробел — система задумывается, а оператор нажимает кнопки, которые система уже не воспринимает)
- Второй минус — когда 1С сделала отбор, а товар закончился. Покупатель просит «дайте что-то похожее». И тогда надо очистить отбор и начинается эпопея заново.
- Иногда полнотекстовый поиск задумывается на 1-2 секунды. А это уже очень много и сильно нервирует пользователей.
Именно поэтому решил написать быстро работающий подбор и похожий по функционалу на то, что было в 1С 7.7 — по первым буквам. У нас в базе и номенклатура именуется соответственно — по «типам», т.е. вначале наименования «предопределенные» слова: мыло, смс, м.ср., шамп и т.д.
Когда первый раз занялся этим вопросом, то все оказалось достаточно просто. До версии 8.3.8.х (если мне не изменяет память) у размещенного на форме дерева значений поиск осуществлялся как раз по первым символам наименования. Было очень удобно, работало быстро и все были счастливы.
Но по каким-то причинам, разработчики 1С закрыли эту возможность и влупили туда несчастный полнотекстовый поиск. И все опять стало плохо. Обращения к серверу, отбор списка, лишние нажатия кнопок очистки поиска и т.д.
Пришлось «пораскинуть» мозгами и написать новую обработку, в которой использовать внешнюю компоненту перехвата нажатия кнопок клавиатуры. Вот как выглядит:

Простенько, без наворотов, но все пользователи довольны. И работает по принципу поиска в 1С 7.7 — при вводе символов позиционируемся на нужной строке, если введенного сочетания уже нет, то символ не вводится. При перемещении по списку введенный текст очищается.
Не могу не сказать и про минус, который есть в этой обработке. Чтобы сделать высокую скорость работы полностью убираются серверные вызовы при вводе символов и перед началом поиска создается «индекс» строк таблицы. На создание «индекса» требуется время и поэтому сделано ограничение на количество вводимых символов (чем меньше символов, тем меньше требуется времени на создание «индекса»). Методом «научного тыка» для используемой у меня конфигурации оборудования было установлено ограничение в 20 символов — на создание «индекса» 20 символов для 20+ тысяч товаров при открытии формы система тратит примерно 2 секунды. Это значение приемлемо для пользователей. У вас, возможно, при меньшей номенклатуре или более мощном компьютере (сервере) можно будет установить и большее количество индексируемых символов, но, на мой взгляд, этого количество (20 символов) вполне достаточно.
Еще один минус — использование внешней компоненты. Не помню, откуда я ее скачал (давно дело было) и кто разработчик. Компоненты, которые есть у меня в примере работают для windows (32 и 64 бита). Для других ОС не искал.
Если у вас будут какие-либо вопросы, пожелания — пишите в комментариях. Постараюсь ответить в ближайшее время.