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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как сделать поле ввода числа с автоподбором значений из запроса?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33475
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

      • #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 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С