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