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

Как сделать поле вв...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

хочу сделать поле ввода числа, при ведении данных он предлагал варианты, беря возможные из запроса. обычная форма



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

Для реализации поля ввода числа с автоподбором значений из запроса в обычной форме 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

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

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



   
ОтветитьЦитата