Добрый день, Коллеги!
Задача
Смоделируем задачу: необходимо ограничить список выбора типов поля формы до необходимого количества и определить тип по умолчанию.
Пример
Есть реквизит «Водитель», составной тип: СправочникСсылка.Пользователи, СправочникСсылка.ФизическиеЛица, СправочникСсылка.Сотрудники и Строка. Необходимо реализовать диалог выбора из списка типов с ограничением до двух: СправочникСсылка.Сотрудники и Строка.
Тестовый стенд
Конфигурация 1C:ERP 2.4.6.230
Платформа 8.3.12.1714
и
Конфигурация 1C:ERP 2.4.11.56
Платформа 8.3.15.1700
Решение
Реквизит формы «ВыборТипа» (тип: Булево) – хранит состояние вызова диалога выбора типа.
Реквизит формы «Водитель» содержит составной типа, описанный в примере, для его элемента формы «Водитель» необходимо установить свойство «КнопкаОчистки» в состояние «Истина» и определим события: НачалоВыбора и Очистка.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ВыборТипа = ЛОЖЬ;
//Определяем тип по умолчанию
Элементы.Водитель.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Сотрудники");
//Если тип по умолчанию не нужен, можно использовать:
//СброситьТипы();
КонецПроцедуры
&НаКлиенте
Процедура СброситьТипы()
ВыборТипа = ИСТИНА;
//++ это делается для того, чтобы появилась кнопочка "..." выбора типа :)
ДоступныеТипы = Новый Массив;
ДоступныеТипы.Добавить("Строка");
ДоступныеТипы.Добавить("СправочникСсылка.Сотрудники");
Элементы.Водитель.ОграничениеТипа = Новый ОписаниеТипов(ДоступныеТипы);
//--
КонецПроцедуры
&НаКлиенте
Процедура ВодительОчистка(Элемент, СтандартнаяОбработка)
СброситьТипы();
КонецПроцедуры
&НаКлиенте
Процедура ВодительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если НЕ ЗначениеЗаполнено(Водитель) И ВыборТипа Тогда
СтандартнаяОбработка = ЛОЖЬ;
сзТипы = Новый СписокЗначений();
сзТипы.Добавить(0,"Сотрудники");
сзТипы.Добавить(1,"Строкой");
ооВыборЗначенияТипа = Новый ОписаниеОповещения("ВыборЗначенияТипа",ЭтотОбъект);
сзТипы.ПоказатьВыборЭлемента(
ооВыборЗначенияТипа, //Вызов процедуры оповещения
"Выберите справочник", //Заголовок диалогового окна выбора типа
сзТипы[1] //Первоначально позиционирование на значение выбора
);
ВыборТипа = ЛОЖЬ;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыборЗначенияТипа(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда Возврат КонецЕсли;
Если Результат.Значение = 0 Тогда
Элементы.Водитель.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Сотрудники");
ИначеЕсли Результат.Значение = 1 Тогда
Элементы.Водитель.ОграничениеТипа = Новый ОписаниеТипов("Строка");
КонецЕсли;
КонецПроцедуры
Результат
Резюме
Использовать данный вариант диалога выбора типов можно не только при ограничении списка, но также при задании своего порядка. Пример:
Удачного кодинга!