Быстрый ввод строковых значений в поля составного типа
Когда нужно дать пользователю возможность вводить с клавиатуры строковые значения в поле ввода составного типа
- Описание
- Подробнее
Описание
Пример: в документе «Встреча» нужно вводить как заведенные в справочнике «Площадки» значения, так и произвольные строки. Такая необходимость может возникнуть в том случае, когда замусоривание справочника случайными значениями нежелательно.
Типовое поведение полей ввода значений составного типа не позволяет простым набором текста и нажатием Enter ввести строковое значение:
— при позиционировании в таком поле нельзя сразу начать набор текста: сначала нужно нажать на «педальку» (или F4) и выбрать тип:

2) при ненайденном элементе справочника платформа показывает всплывающее окно с кнопкой создания элемента и гиперссылкой «Показать все», от которого (без применения мышки) можно «избавиться»* только через Esc, либо стерев введенный текст:

* под «избавиться» подразумевается ввод желаемого строкового значения с клавиатуры, а не выбор из предлагаемых элементов справочника или создание нового
Далее предлагается метод, который позволяет пользователю после набора текста сразу вводить значение в поле ввода по нажатию Enter (без показа диалогов и всплывающих окон). При этом:
— можно как выбирать любое значение из справочника:

— так и вводить произвольное строковое значение:

Для реализации такого поведения требуется выполнить следующие шаги:
1. В модуле формы в ПриСозданииНаСервере() выставить для поля ввода ограничение типа:
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Строка"));
Элементы.МестоПроведенияВстречи.ОграничениеТипа = Новый ОписаниеТипов(МассивТипов, Новый КвалификаторыСтроки(200));
2. В событии НачалоВыбора() поля ввода реализовать возможность выбора элементов справочника:
&НаКлиенте
Процедура МестоПроведенияВстречиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
Если ТипЗнч(Объект.МестоПроведенияВстречи) = Тип("СправочникСсылка.Площадки") И ЗначениеЗаполнено(Объект.МестоПроведенияВстречи) Тогда
ПараметрыФормы.Вставить("ТекущаяСтрока", Объект.МестоПроведенияВстречи);
КонецЕсли;
ОткрытьФорму("Справочник.Площадки.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры
3. Наконец, реализовать возможность подбирать в поле ввода элементы из справочника простым набором текста, добавив обработчик события АвтоПодбор():
&НаКлиенте
Процедура МестоПроведенияВстречиАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка)
Если Ожидание <> 0 И НЕ ПустаяСтрока(Текст) Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = ПолучитьСписокВыбораПлощадок(Текст);
КонецЕсли;
КонецПроцедуры
// Процедура заполняет данные выбора площадки.
//
// Параметры:
// СтрокаПоиска - Строка - Набираемый текст
&НаСервереБезКонтекста
Функция ПолучитьСписокВыбораПлощадок(знач СтрокаПоиска)
СписокВыбораПлощадки = Новый СписокЗначений;
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить("Отбор", Новый Структура("ПометкаУдаления", Ложь));
ПараметрыВыбора.Вставить("СтрокаПоиска", СтрокаПоиска);
ПараметрыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
ДанныеВыбораПлощадки = Справочники.Площадки.ПолучитьДанныеВыбора(ПараметрыВыбора);
Для Каждого ЭлементСписка Из ДанныеВыбораПлощадки Цикл
СписокВыбораПлощадки.Добавить(ЭлементСписка.Значение, Новый ФорматированнаяСтрока(ЭлементСписка.Представление, " (площадка)"));
КонецЦикла;
Возврат СписокВыбораПлощадки;
КонецФункцииПосле выполнения перечисленных шагов ваши пользователи смогут вводить в поле произвольные строковые значения, а при наличии подходящих элементов в справочнике — быстро (удобно) выбирать их.
