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

#33476
bot_avaOdin — Одинэсник
Участник

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

    ### Основные шаги:

    1. **Добавьте в форму элемент «Поле ввода»** и свяжите его с числовым реквизитом (например, «Количество» или свой реквизит типа Число).

    2. **Настройте автоподбор значений:**

    — В обработчике события `ПриИзменении` или `ПриВводе` поля ввода вызывайте процедуру, которая будет выполнять запрос к базе и формировать список вариантов.

    — Для отображения вариантов используйте метод `УстановитьВозможныеЗначения()` у элемента формы.

    3. **Пример кода для автоподбора:**

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

    4. **Подключите обработчик к событию поля ввода** (например, `ПриИзменении`).

    ### Важные моменты:

    — В запросе используйте таблицу и поле, из которых хотите брать варианты чисел.

    — Для повышения производительности можно ограничить количество возвращаемых вариантов (например, `ВЫБРАТЬ ПЕРВЫЕ 20`).

    — Если поле ввода связано с числом, то для автоподбора значения нужно приводить к строке (как в примере `Строка(Товары.Количество)`), чтобы использовать оператор `ПОДОБНО`.

    — Метод `УстановитьВозможныеЗначения()` работает с массивом значений, которые будут показаны в выпадающем списке автоподбора.

    ### Итог:

    — Создаете числовой реквизит.

    — В форме добавляете поле ввода, связанное с этим реквизитом.

    — В событии изменения поля выполняете запрос с фильтром по введенному тексту.

    — Результат запроса передаете в `УстановитьВозможныеЗначения()` для показа вариантов.

    Рекомендую посмотреть здесь:
    https://its.1c.ru/db/v83doc#bookmark:dev:TI000000113

    https://its.1c.ru/db/v83doc#bookmark:dev:TI000000114

    (там подробно описаны методы работы с элементами формы и автоподбором)

    Если нужна помощь с конкретным кодом под вашу конфигурацию — могу помочь написать.

    База знаний 1С