Как настроить поле ввода в 1С для выбора из списка с возможностью ручного редактирования

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При разработке интерфейсов в 1С часто возникает задача: предоставить пользователю готовый набор значений для быстрого выбора, но при этом оставить возможность вписать что-то свое, если подходящего варианта в списке не оказалось. По умолчанию стандартное поле ввода со списком выбора часто блокирует ввод произвольного текста. В этой статье мы подробно разберем, как правильно настроить реквизит на форме, чтобы совместить удобство выбора и гибкость ручного ввода.

Способ 1. Отключение строгого режима выбора из списка

Проанализируем самое простое и эффективное решение, к которому пришел автор темы. В платформе 1С у элементов формы типа «Поле ввода» есть свойство, которое определяет поведение системы при попытке ввода текста. Если нам нужно разрешить свободное редактирование, выполним следующие шаги:

  1. Откроем палитру свойств нужного нам элемента формы.
  2. Найдем свойство Режим выбора из списка (ChoiceModeFromList).
  3. Снимем галочку с этого свойства (установим в значение «Ложь»).
  4. При этом свойство Список выбора (ChoiceList) должно оставаться заполненным.

Когда мы отключаем этот режим, система перестает ограничивать пользователя только теми значениями, которые содержатся в списке. Пользователь может нажать на кнопку выбора (или кнопку списка), выбрать элемент, а затем дописать в поле любой текст. Это превращает обычное поле в полноценный «Combo Box».

Способ 2. Программное добавление введенных данных в список

Рассмотрим ситуацию, когда мы хотим не просто разрешить ручной ввод, но и сделать так, чтобы новые введенные значения автоматически попадали в список выбора. Это удобно, если пользователь часто вводит одни и те же «нестандартные» данные. Для реализации такого поведения воспользуемся событием ОкончаниеВводаТекста. Разберем пример кода для обычных форм:


Процедура ЗаголовокОтчётаОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
    // Если система не смогла автоматически сопоставить текст со значением из списка
    Если Значение = Неопределено Тогда 
        // Добавляем новый текст в список выбора программно
        ЭлементыФормы.ЗаголовокОтчёта.СписокВыбора.Добавить(Текст, Текст);
        // Устанавливаем введенный текст как значение реквизита
        Значение = Текст;
    КонецЕсли;    
КонецПроцедуры

В данном примере мы проверяем параметр Значение. Если он не определен, значит, пользователь ввел текст, которого нет в текущем списке. Мы программно добавляем этот текст в СписокВыбора, чтобы при следующем открытии формы пользователь увидел его среди доступных вариантов. Обратите внимание, что для работы этого метода реквизит должен иметь тип Строка.

Способ 3. Использование кнопки списка выбора (Combo Box)

Посмотрим на профессиональный прием настройки внешнего вида поля. Помимо стандартной «Кнопки выбора» (с тремя точками), в 1С существует свойство Кнопка списка выбора (ChoiceListButton). Разберем, чем это полезно:

  1. При включении этого свойства у поля ввода появляется маленькая стрелка справа (как в классических выпадающих списках).
  2. Нажатие на эту стрелку мгновенно открывает список доступных значений.
  3. При этом само текстовое поле остается активным для ввода символов с клавиатуры.

Такой подход визуально подсказывает пользователю, что поле поддерживает оба режима взаимодействия. Выясним причину, почему это лучше стандартной кнопки выбора: пользователю не нужно открывать отдельное диалоговое окно, список выпадает прямо под полем, экономя время и клики.

Способ 4. Настройка автоподбора и истории выбора

Чтобы сделать работу пользователя еще более комфортной, проанализируем возможности механизма Автоподбор. Если включить свойство АвтоОтметкаЭлемента и настроить событие АвтоПодбор, система будет фильтровать список выбора прямо в процессе набора текста.

Выясним, как это работает вместе с ручным вводом:

Также рекомендуем обратить внимание на свойство Обновление текста редактирования. Чтобы данные, введенные вручную, корректно сохранялись и не «сбрасывались» к значению из списка, установите для этого свойства значение При изменении. Это гарантирует, что система будет фиксировать каждое действие пользователя.

Нюансы для Управляемых форм (8.3)

Хотя в обсуждении на форуме речь шла об обычных формах, проанализируем реализацию этой задачи в современном интерфейсе «Такси». В управляемых формах логика схожа, но есть свои тонкости:

  1. Проверьте, что Тип значения реквизита — строго Строка. Если реквизит будет ссылочным (например, СправочникСсылка.Склады), вы не сможете сохранить в нем произвольный текст, система потребует выбора существующего объекта.
  2. Используйте свойство Список выбора в палитре свойств или заполняйте его программно в обработчике ПриСозданииНаСервере.
  3. Убедитесь, что свойство Режим выбора из списка выключено. Это критически важно для активации свободного редактирования.
  4. Для автоматического сохранения истории ввода включите свойство История выбора при вводе. Это избавит вас от необходимости писать лишний код для добавления новых элементов в список, так как платформа сделает это за вас.

Обработка события «Очистка»

Рассмотрим важный момент, который часто упускают из виду. При активном использовании ручного ввода и списков выбора, важно правильно настроить поведение кнопки «Очистить» (крестик в поле). Если пользователь хочет полностью изменить строку, он нажимает на очистку. Однако, если вы программно конкатенируете (складываете) текст, проверьте обработчик ОбработкаВыбора. В нем можно реализовать логику, когда новый выбор из списка не заменяет текущий текст, а добавляется к нему через запятую или пробел:


&НаКлиенте
Процедура РеквизитОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ТекущийТекст = Объект.Реквизит;
    Если ПустаяСтрока(ТекущийТекст) Тогда
        Объект.Реквизит = ВыбранноеЗначение;
    Иначе
        Объект.Реквизит = ТекущийТекст + ", " + ВыбранноеЗначение;
    КонецЕсли;
КонецПроцедуры

Таким образом, мы рассмотрели все основные способы настройки поля ввода. Комбинируя свойства Режим выбора из списка, Кнопка списка выбора и программные обработчики, вы можете создать максимально гибкий и удобный интерфейс для конечного пользователя. Для оперативной проверки и изменения параметров элементов прямо в пользовательском интерфейсе можно использовать обработку для редактирования форм в режиме предприятия.

← На главную