Как настроить подбор элемента справочника по произвольному реквизиту?

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Механизм «Ввод по строке» в конфигураторе

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

  1. Откроем дерево конфигурации и найдем нужный нам объект (например, справочник Контрагенты или Номенклатура).
  2. Перейдем на вкладку «Данные». Здесь нам нужно убедиться, что реквизит, по которому мы хотим осуществлять поиск (например, ДопРеквизит), имеет подходящий тип (Строка или Число).
  3. Важнейшим условием работы поиска является индексация. В свойствах выбранного реквизита найдем параметр Индексировать. Выберем значение «Индексировать» или, что еще лучше для производительности на больших списках, «Индексировать с дополнительным упорядочиванием». Без выполнения этого условия реквизит просто не появится в списке доступных для ввода по строке.
  4. Теперь перейдем на вкладку «Поля ввода» (в некоторых версиях платформы это может быть вкладка «Прочее» -> «Ввод по строке»).
  5. В списке «Способ выбора» (или напрямую в списке «Ввод по строке») нажмем на кнопку выбора (три точки) и отметим флажком наш ДопРеквизит.

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

Настройка приоритетов и режимов поиска

Проанализируем ситуацию, когда данные в разных полях могут пересекаться. Например, код элемента — «25», и значение дополнительного реквизита другого элемента — тоже «25». В этом случае критически важен порядок реквизитов в списке «Ввод по строке».

Система проверяет поля сверху вниз. Если вы хотите, чтобы поиск по ДопРеквизит был приоритетнее, чем по стандартному коду, переместите его в самый верх списка в настройках конфигуратора. Также стоит обратить внимание на свойство поля ввода на форме — «Способ поиска при вводе по строке». Рассмотрим два варианта:

Программное управление через модуль менеджера

Бывают случаи, когда стандартных настроек недостаточно. Например, если нам нужно искать данные с учетом определенных условий (только по активным записям) или выполнять поиск по данным из связанных регистров сведений. В таких случаях мы используем обработчик события ОбработкаПолученияДанныхВыбора в модуле менеджера справочника.

Выясним, как это работает на практике. Рассмотрим пример кода, который перехватывает стандартный поиск и добавляет свою логику:


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    
    // Если пользователь ничего не ввел, работаем штатно
    Если ПустаяСтрока(Параметры.СтрокаПоиска) Тогда
        Возврат;
    КонецЕсли;

    // Отключаем стандартный механизм поиска, чтобы реализовать свой
    СтандартнаяОбработка = Ложь;
    
    // Создаем запрос для поиска по нашему реквизиту
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 10
        |	Номенклатура.Ссылка КАК Ссылка,
        |	Номенклатура.Наименование КАК Наименование
        |ИЗ
        |	Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |	Номенклатура.ДопРеквизит ПОДОБНО &СтрокаПоиска + ""%""";
    
    Запрос.УстановитьПараметр("СтрокаПоиска", Параметры.СтрокаПоиска);
    
    РезультатЗапроса = Запрос.Выполнить();
    ТаблицаРезультатов = РезультатЗапроса.Выгрузить();
    
    // Формируем список выбора для пользователя
    СписокПоиска = Новый СписокЗначений;
    Для Каждого Строка Из ТаблицаРезультатов Цикл
        СписокПоиска.Добавить(Строка.Ссылка, Строка.Наименование);
    КонецЦикла;
    
    ДанныеВыбора = СписокПоиска;

КонецПроцедуры

Использование этого метода позволяет сделать поиск максимально гибким. Мы можем искать «Пупкина», вводя «25», даже если число «25» хранится в другой таблице или является результатом вычисления.

Особенности работы в Управляемых формах

В управляемом интерфейсе (8.3) есть дополнительные свойства элементов формы, которые влияют на удобство подбора. Рассмотрим их подробнее:

  1. Быстрый выбор: если этот флаг установлен, система при нажатии на кнопку выбора сразу открывает выпадающий список последних использованных или наиболее подходящих элементов, не открывая форму списка целиком.
  2. Автовыбор незаполненного: помогает системе автоматически предлагать варианты, если пользователь пытается покинуть поле, оставив его незаполненным.
  3. Обновление текста редактирования: этот параметр определяет, что будет отображаться в поле после выбора. Например, если вы ввели «25» и элемент нашелся, система может заменить «25» на «Пупкин» сразу после потери фокуса.

Важный нюанс: поиск по строке не будет работать эффективно, если реквизит имеет тип «Строка неограниченной длины». Старайтесь всегда ограничивать длину строковых реквизитов, по которым планируется поиск, чтобы система могла корректно построить индексы в базе данных SQL.

Поиск по связанным данным (Штрихкоды)

Часто задачу поиска по дополнительному коду решают через регистры сведений. Проанализируем ситуацию: у одного товара может быть несколько артикулов или штрихкодов. В этом случае хранить их в реквизитах справочника неудобно. Мы создаем регистр сведений Штрихкоды, где одно из измерений — Штрихкод, а ресурс — Номенклатура.

В этом случае в событии ОбработкаПолученияДанныхВыбора, которое мы рассмотрели выше, запрос будет обращаться не к справочнику Номенклатура, а к регистру Штрихкоды, соединяя его со справочником. Это обеспечит моментальный подбор «Пупкина» при вводе любого из связанных с ним кодов.

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

← На главную