База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как сделать поле ввода числа с автоподбором значений из запроса? › RE: Как сделать поле ввода числа с автоподбором значений из запроса?
Для реализации поля ввода числа с автоподбором значений из запроса в обычной форме 1С (управляемое приложение) можно использовать элемент формы «Поле ввода» с включенной функцией автоподбора (автозаполнения) на основе данных, получаемых из запроса.
### Основные шаги:
1. **Добавьте в форму элемент «Поле ввода»** и свяжите его с числовым реквизитом (например, «Количество» или свой реквизит типа Число).
2. **Настройте автоподбор значений:**
— В обработчике события ПриИзменении или ПриВводе поля ввода вызывайте процедуру, которая будет выполнять запрос к базе и формировать список вариантов.
— Для отображения вариантов используйте метод УстановитьВозможныеЗначения() у элемента формы.
3. **Пример кода для автоподбора:**
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
bsl Процедура ПолеВводаЧислоПриИзменении(Элемент) // Получаем введенный текст ВведенноеЗначение = Элемент.Значение; Если ПустаяСтрока(ВведенноеЗначение) Тогда Элемент.УстановитьВозможныеЗначения(Неопределено); Возврат; КонецЕсли; // Формируем запрос для поиска подходящих чисел Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ Товары.Количество КАК Количество ИЗ Документ.ПриходнаяНакладная.Товары КАК Товары ГДЕ Строка(Товары.Количество) ПОДОБНО &Шаблон УПОРЯДОЧИТЬ ПО Товары.Количество"; // Формируем шаблон для поиска (например, по началу строки) Запрос.УстановитьПараметр("Шаблон", ВведенноеЗначение + "%"); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); МассивЗначений = Новый Массив; Пока Выборка.Следующий() Цикл МассивЗначений.Добавить(Выборка.Количество); КонецЦикла; // Устанавливаем возможные значения для автоподбора Элемент.УстановитьВозможныеЗначения(МассивЗначений); КонецПроцедуры |
4. **Подключите обработчик к событию поля ввода** (например, ПриИзменении).
—
### Важные моменты:
— В запросе используйте таблицу и поле, из которых хотите брать варианты чисел.
— Для повышения производительности можно ограничить количество возвращаемых вариантов (например, ВЫБРАТЬ ПЕРВЫЕ 20).
— Если поле ввода связано с числом, то для автоподбора значения нужно приводить к строке (как в примере Строка(Товары.Количество)), чтобы использовать оператор ПОДОБНО.
— Метод УстановитьВозможныеЗначения() работает с массивом значений, которые будут показаны в выпадающем списке автоподбора.
—
### Итог:
— Создаете числовой реквизит.
— В форме добавляете поле ввода, связанное с этим реквизитом.
— В событии изменения поля выполняете запрос с фильтром по введенному тексту.
— Результат запроса передаете в УстановитьВозможныеЗначения() для показа вариантов.
—
Рекомендую посмотреть здесь:
https://its.1c.ru/db/v83doc#bookmark:dev:TI000000113
https://its.1c.ru/db/v83doc#bookmark:dev:TI000000114
(там подробно описаны методы работы с элементами формы и автоподбором)
Если нужна помощь с конкретным кодом под вашу конфигурацию — могу помочь написать.