При работе в интерфейсе «Такси» пользователи часто сталкиваются с тем, что при поиске в поле ввода (например, в табличной части документа) система отображает ровно 10 подходящих элементов. Это ограничение может замедлять работу, если нужный элемент оказывается одиннадцатым или двенадцатым в списке. В данной статье мы подробно разберем, от чего зависит этот лимит и какими способами его можно увеличить или обойти.
Прежде всего, проанализируем техническую основу проблемы. В ранних версиях платформы 1С:Предприятие 8.3 (до версии 8.3.10) ограничение в 10 элементов было жестко зашито в программный код платформы для обеспечения производительности. Однако в современных релизах, начиная с 8.3.15 и выше, поведение выпадающих списков изменилось. Теперь платформа стремится отобразить максимальное количество элементов, которое физически умещается на экране, добавляя полосу прокрутки для остальных результатов.
Если в вашей конфигурации вы все еще видите строго 10 строк, рекомендуем проверить следующие настройки:
Рассмотрим программный способ управления списком через модуль менеджера объекта. У каждого прикладного объекта (Справочники, Документы и др.) существует событие ОбработкаПолученияДанныхВыбора. Это событие срабатывает, когда пользователь начинает вводить текст в поле. В параметрах этого события передается структура Параметры, содержащая свойство ЛимитВыбора.
Разберем, как мы можем изменить этот лимит. Нам необходимо зайти в модуль менеджера соответствующего справочника и добавить следующий код:
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
// Увеличиваем лимит, если он установлен платформой по умолчанию
Параметры.ЛимитВыбора = 15;
// Если мы хотим полностью контролировать список, можем отключить стандартную обработку
// и выполнить собственный запрос с конструкцией ВЫБРАТЬ ПЕРВЫЕ 15
КонецПроцедуры
Важно понимать, что установка Параметры.ЛимитВыбора сообщает платформе о необходимости получить больше данных. Однако визуальное отображение все равно будет зависеть от того, сколько строк платформа решит отрисовать в конкретном окне. Чтобы гарантированно увидеть 12 или более элементов, иногда требуется подмена стандартного механизма формирования списка ДанныеВыбора.
Если изменения в модуле менеджера не принесли желаемого результата (например, из-за специфических настроек конфигурации), рассмотрим более гибкий метод — использование события АвтоПодбор у элемента формы. Этот метод позволяет нам полностью перехватить процесс поиска и сформировать список любой длины.
Выполним следующие шаги:
АвтоПодбор и создадим обработчик на клиенте.Пример кода для реализации:
&НаКлиенте
Процедура ТоварыНоменклатураАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка)
Если СтрДлина(Текст) > 2 Тогда // Начинаем поиск от 3-х символов
СтандартнаяОбработка = Ложь;
ДанныеВыбора = ПолучитьСписокНоменклатурыНаСервере(Текст);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьСписокНоменклатурыНаСервере(ТекстПоиска)
Список = Новый СписокЗначений;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 15
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование ПОДОБНО &Текст";
Запрос.УстановитьПараметр("Текст", "%" + ТекстПоиска + "%");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Список.Добавить(Выборка.Ссылка, Выборка.Наименование);
КонецЦикла;
Возврат Список;
КонецФункции
Используя этот подход, мы обходим любые стандартные ограничения платформы, так как передаем в ДанныеВыбора ровно столько элементов, сколько считаем нужным. Платформа отобразит весь переданный список значений, добавив скроллбар, если элементы не влезают в экран.
Проанализируем еще одну причину, по которой список кажется коротким. Платформа 1С часто разделяет выпадающее меню на две части: История выбора (недавно использованные элементы) и Результаты поиска. По умолчанию под историю отводится до 5 строк. Если история заполнена, на результаты текущего поиска остается меньше визуального пространства.
Выясним, как это можно оптимизировать:
ОбновлениеТекстаРедактирования или программная очистка истории).Также обратим внимание на Способ поиска при вводе по строке в метаданных объекта. Если установлен режим «Любая часть», платформа тратит больше времени на индексацию. В некоторых старых релизах 8.3 это приводило к принудительной обрезке списка для ускорения отклика интерфейса. Переключение на поиск «По началу строки» может визуально расширить список в некоторых сценариях работы платформы.
Иногда ограничение в 10 элементов является чисто визуальным и связано с настройками отображения. Проверим масштаб в самой программе 1С (Главное меню — Изменить масштаб). При масштабе 120% или 150% платформа может физически не иметь возможности отрисовать длинный список, так как он перекроет границы формы или экрана. В таких случаях 1С:Предприятие автоматически сокращает количество видимых строк. Попробуйте установить масштаб 100% и проверить, не увеличилось ли количество строк в списке выбора автоматически.
Резюмируя: для гарантированного увеличения списка до 12 элементов в современных версиях лучше всего использовать событие АвтоПодбор, так как оно дает разработчику полный контроль над количеством и составом данных, передаваемых пользователю.