Как ограничить количество элементов в выпадающем списке поля ввода в 1С?

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

При вводе текста в поле, ссылающееся на объемный справочник (например, ФизическиеЛица или Сотрудники), платформа «1С:Предприятие» автоматически инициирует подбор и выводит список подходящих совпадений. Однако стандартного свойства поля ввода (например, «Количество строк выпадающего списка»), позволяющего жестко задать числовое ограничение в конфигураторе, не предусмотрено. Рассмотрим подробнее, какими программными и административными способами можно управлять количеством выпадающих элементов и оптимизировать автоподбор.

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

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

  1. Откроем модуль менеджера нужного справочника (например, Справочники.ФизическиеЛица).
  2. Добавим экспортную процедуру ОбработкаПолученияДанныхВыбора.
  3. Установим флаг СтандартнаяОбработка = Ложь, чтобы отключить платформенный механизм по умолчанию.
  4. Выполним запрос с конструкцией ВЫБРАТЬ ПЕРВЫЕ N, передав в условие строку поиска, и поместим результат в параметр ДанныеВыбора.

Посмотрим на пример реализации кода:


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

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

Способ 2. Ограничение списка на конкретной форме (события «АвтоПодбор» и «ОкончаниеВводаТекста»)

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

Проанализируем реализацию с помощью события АвтоПодбор:


&НаКлиенте
Процедура ОтветственныйАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
	
	Если СтрДлина(СокрЛП(Текст)) < 2 Тогда
		Возврат;
	КонецЕсли;
	
	СтандартнаяОбработка = Ложь;
	ДанныеВыбора = ПолучитьСписокОтветственныхНаСервере(Текст);

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

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

КонецФункции

Способ 3. Альтернативные методы оптимизации выпадающего списка

Сократить избыточный объем элементов в выпадающем меню можно не только прямым ограничением выборки через запрос, но и настройкой типовых механизмов платформы:

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