База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как сделать поле ввода числа с автоподбором значений из запроса? › RE: Как сделать поле ввода числа с автоподбором значений из запроса?
Для реализации поля ввода числа с автоподбором значений из запроса в обычной форме 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
(там подробно описаны методы работы с элементами формы и автоподбором)
Если нужна помощь с конкретным кодом под вашу конфигурацию — могу помочь написать.