При разработке интерфейсов в 1С часто возникает задача: предоставить пользователю готовый набор значений для быстрого выбора, но при этом оставить возможность вписать что-то свое, если подходящего варианта в списке не оказалось. По умолчанию стандартное поле ввода со списком выбора часто блокирует ввод произвольного текста. В этой статье мы подробно разберем, как правильно настроить реквизит на форме, чтобы совместить удобство выбора и гибкость ручного ввода.
Проанализируем самое простое и эффективное решение, к которому пришел автор темы. В платформе 1С у элементов формы типа «Поле ввода» есть свойство, которое определяет поведение системы при попытке ввода текста. Если нам нужно разрешить свободное редактирование, выполним следующие шаги:
ChoiceModeFromList).ChoiceList) должно оставаться заполненным.Когда мы отключаем этот режим, система перестает ограничивать пользователя только теми значениями, которые содержатся в списке. Пользователь может нажать на кнопку выбора (или кнопку списка), выбрать элемент, а затем дописать в поле любой текст. Это превращает обычное поле в полноценный «Combo Box».
Рассмотрим ситуацию, когда мы хотим не просто разрешить ручной ввод, но и сделать так, чтобы новые введенные значения автоматически попадали в список выбора. Это удобно, если пользователь часто вводит одни и те же «нестандартные» данные. Для реализации такого поведения воспользуемся событием ОкончаниеВводаТекста. Разберем пример кода для обычных форм:
Процедура ЗаголовокОтчётаОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
// Если система не смогла автоматически сопоставить текст со значением из списка
Если Значение = Неопределено Тогда
// Добавляем новый текст в список выбора программно
ЭлементыФормы.ЗаголовокОтчёта.СписокВыбора.Добавить(Текст, Текст);
// Устанавливаем введенный текст как значение реквизита
Значение = Текст;
КонецЕсли;
КонецПроцедуры
В данном примере мы проверяем параметр Значение. Если он не определен, значит, пользователь ввел текст, которого нет в текущем списке. Мы программно добавляем этот текст в СписокВыбора, чтобы при следующем открытии формы пользователь увидел его среди доступных вариантов. Обратите внимание, что для работы этого метода реквизит должен иметь тип Строка.
Посмотрим на профессиональный прием настройки внешнего вида поля. Помимо стандартной «Кнопки выбора» (с тремя точками), в 1С существует свойство Кнопка списка выбора (ChoiceListButton). Разберем, чем это полезно:
Такой подход визуально подсказывает пользователю, что поле поддерживает оба режима взаимодействия. Выясним причину, почему это лучше стандартной кнопки выбора: пользователю не нужно открывать отдельное диалоговое окно, список выпадает прямо под полем, экономя время и клики.
Чтобы сделать работу пользователя еще более комфортной, проанализируем возможности механизма Автоподбор. Если включить свойство АвтоОтметкаЭлемента и настроить событие АвтоПодбор, система будет фильтровать список выбора прямо в процессе набора текста.
Выясним, как это работает вместе с ручным вводом:
"Доставка"."Доставка курьером", "Доставка почтой").Enter и выбрать подсказку, либо проигнорировать её и дописать свой уникальный текст, например: "Доставка через дрон".Также рекомендуем обратить внимание на свойство Обновление текста редактирования. Чтобы данные, введенные вручную, корректно сохранялись и не «сбрасывались» к значению из списка, установите для этого свойства значение При изменении. Это гарантирует, что система будет фиксировать каждое действие пользователя.
Хотя в обсуждении на форуме речь шла об обычных формах, проанализируем реализацию этой задачи в современном интерфейсе «Такси». В управляемых формах логика схожа, но есть свои тонкости:
Строка. Если реквизит будет ссылочным (например, СправочникСсылка.Склады), вы не сможете сохранить в нем произвольный текст, система потребует выбора существующего объекта.ПриСозданииНаСервере.Рассмотрим важный момент, который часто упускают из виду. При активном использовании ручного ввода и списков выбора, важно правильно настроить поведение кнопки «Очистить» (крестик в поле). Если пользователь хочет полностью изменить строку, он нажимает на очистку. Однако, если вы программно конкатенируете (складываете) текст, проверьте обработчик ОбработкаВыбора. В нем можно реализовать логику, когда новый выбор из списка не заменяет текущий текст, а добавляется к нему через запятую или пробел:
&НаКлиенте
Процедура РеквизитОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущийТекст = Объект.Реквизит;
Если ПустаяСтрока(ТекущийТекст) Тогда
Объект.Реквизит = ВыбранноеЗначение;
Иначе
Объект.Реквизит = ТекущийТекст + ", " + ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры
Таким образом, мы рассмотрели все основные способы настройки поля ввода. Комбинируя свойства Режим выбора из списка, Кнопка списка выбора и программные обработчики, вы можете создать максимально гибкий и удобный интерфейс для конечного пользователя. Для оперативной проверки и изменения параметров элементов прямо в пользовательском интерфейсе можно использовать обработку для редактирования форм в режиме предприятия.