Как увеличить количество элементов в списке быстрого выбора 1С с 10 до 12 и более

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

При работе в интерфейсе «Такси» пользователи часто сталкиваются с тем, что при поиске в поле ввода (например, в табличной части документа) система отображает ровно 10 подходящих элементов. Это ограничение может замедлять работу, если нужный элемент оказывается одиннадцатым или двенадцатым в списке. В данной статье мы подробно разберем, от чего зависит этот лимит и какими способами его можно увеличить или обойти.

Анализируем влияние версии платформы и режима совместимости

Прежде всего, проанализируем техническую основу проблемы. В ранних версиях платформы 1С:Предприятие 8.3 (до версии 8.3.10) ограничение в 10 элементов было жестко зашито в программный код платформы для обеспечения производительности. Однако в современных релизах, начиная с 8.3.15 и выше, поведение выпадающих списков изменилось. Теперь платформа стремится отобразить максимальное количество элементов, которое физически умещается на экране, добавляя полосу прокрутки для остальных результатов.

Если в вашей конфигурации вы все еще видите строго 10 строк, рекомендуем проверить следующие настройки:

  1. Режим совместимости: Если конфигурация работает в режиме совместимости с версиями 8.3.10 или ниже, платформа будет имитировать старое поведение интерфейса.
  2. Вариант интерфейса: Убедимся, что используется интерфейс «Такси». В старых вариантах интерфейса (например, «Версия 8.2») ограничения на выпадающие списки более жесткие.

Использование события ОбработкаПолученияДанныхВыбора

Рассмотрим программный способ управления списком через модуль менеджера объекта. У каждого прикладного объекта (Справочники, Документы и др.) существует событие ОбработкаПолученияДанныхВыбора. Это событие срабатывает, когда пользователь начинает вводить текст в поле. В параметрах этого события передается структура Параметры, содержащая свойство ЛимитВыбора.

Разберем, как мы можем изменить этот лимит. Нам необходимо зайти в модуль менеджера соответствующего справочника и добавить следующий код:


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    
    // Увеличиваем лимит, если он установлен платформой по умолчанию
    Параметры.ЛимитВыбора = 15; 
    
    // Если мы хотим полностью контролировать список, можем отключить стандартную обработку
    // и выполнить собственный запрос с конструкцией ВЫБРАТЬ ПЕРВЫЕ 15
    
КонецПроцедуры

Важно понимать, что установка Параметры.ЛимитВыбора сообщает платформе о необходимости получить больше данных. Однако визуальное отображение все равно будет зависеть от того, сколько строк платформа решит отрисовать в конкретном окне. Чтобы гарантированно увидеть 12 или более элементов, иногда требуется подмена стандартного механизма формирования списка ДанныеВыбора.

Реализация через событие АвтоПодбор на форме

Если изменения в модуле менеджера не принесли желаемого результата (например, из-за специфических настроек конфигурации), рассмотрим более гибкий метод — использование события АвтоПодбор у элемента формы. Этот метод позволяет нам полностью перехватить процесс поиска и сформировать список любой длины.

Выполним следующие шаги:

  1. Откроем форму документа и выберем нужный элемент табличной части (поле ввода).
  2. В свойствах элемента найдем событие АвтоПодбор и создадим обработчик на клиенте.
  3. Внутри обработчика вызовем серверную функцию, которая подготовит массив или список значений.

Пример кода для реализации:


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

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

Используя этот подход, мы обходим любые стандартные ограничения платформы, так как передаем в ДанныеВыбора ровно столько элементов, сколько считаем нужным. Платформа отобразит весь переданный список значений, добавив скроллбар, если элементы не влезают в экран.

Особенности истории выбора и полнотекстового поиска

Проанализируем еще одну причину, по которой список кажется коротким. Платформа 1С часто разделяет выпадающее меню на две части: История выбора (недавно использованные элементы) и Результаты поиска. По умолчанию под историю отводится до 5 строк. Если история заполнена, на результаты текущего поиска остается меньше визуального пространства.

Выясним, как это можно оптимизировать:

Также обратим внимание на Способ поиска при вводе по строке в метаданных объекта. Если установлен режим «Любая часть», платформа тратит больше времени на индексацию. В некоторых старых релизах 8.3 это приводило к принудительной обрезке списка для ускорения отклика интерфейса. Переключение на поиск «По началу строки» может визуально расширить список в некоторых сценариях работы платформы.

Влияние масштабирования интерфейса

Иногда ограничение в 10 элементов является чисто визуальным и связано с настройками отображения. Проверим масштаб в самой программе 1С (Главное меню — Изменить масштаб). При масштабе 120% или 150% платформа может физически не иметь возможности отрисовать длинный список, так как он перекроет границы формы или экрана. В таких случаях 1С:Предприятие автоматически сокращает количество видимых строк. Попробуйте установить масштаб 100% и проверить, не увеличилось ли количество строк в списке выбора автоматически.

Резюмируя: для гарантированного увеличения списка до 12 элементов в современных версиях лучше всего использовать событие АвтоПодбор, так как оно дает разработчику полный контроль над количеством и составом данных, передаваемых пользователю.

← На главную