&НаКлиенте Процедура ДобавитьВалюту(Команда) ТС = Объект.ТЧ.Добавить(); ТС.Имя = "Валюта"; ТС.Значение = ПредопределенноеЗначение("Справочник.Валюты.ПустаяСсылка"); Элементы.ТЧ.ПодчиненныеЭлементы.ТЧЗначение.ВыбиратьТип = Ложь; КонецПроцедурыПосле решил добавить решению универсальности и реализовать программное формирование контекстного меню для табличной части справочника с составным реквизитом с заранее неизвестным перечнем типов.
Создаем справочник, имя произвольное. Добавляем табличную часть ТЧ, реквизиты Имя, тип Строка, Значение, тип составной. Для своего примера я установил Строка, Дата, Число, СправочникСсылка. В форме элемента добавляем реквизит ФормаТипы, тип ОписаниеТипов.
Остальное за нас сделает код:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //формируем массив типов и удаляем тип текущего справочника, //поскольку у нас тип значения включает все справочники фТипы = РеквизитФормыВЗначение("Объект").Метаданные().ТабличныеЧасти.ТЧ.Реквизиты.Значение.Тип.Типы(); фИндекс = фТипы.Найти(ТипЗнч(Объект.Ссылка)); фТипы.Удалить(фИндекс); //помещаем новое описание типов в реквизит формы ФормаТипы = Новый ОписаниеТипов(фТипы); //формируем группу контекстного меню фГруппа = Элементы.Добавить("ГруппаДополнительно", Тип("ГруппаФормы"), Элементы.ТЧКонтекстноеМеню); фГруппа.Заголовок = "Добавить..."; мТипы = ФормаТипы.Типы(); Для сч = 0 По мТипы.ВГраница() Цикл //создаем команды формы, имена формируются с учетом индекса текущего типа в массиве типов //потом по этому индексу в имени будем определять необходимый тип данных ИндексКоманды = Формат(сч, "ЧН=0; ЧГ=0"); фКоманда = Команды.Добавить("КомандаДобавитьТипСтроки_" + ИндексКоманды); фКоманда.Действие = "ДобавитьЭлементТипа"; кЭлемент = Элементы.Добавить("ДобавитьТипСтроки_" + ИндексКоманды, Тип("КнопкаФормы"), фГруппа); кЭлемент.Заголовок = Строка(мТипы[сч]); кЭлемент.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; кЭлемент.ИмяКоманды = фКоманда.Имя; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ДобавитьЭлементТипа(Команда) //определяем индекс для массива типов ИндексТипа = Число(СтрЗаменить(Команда.Имя, "КомандаДобавитьТипСтроки_", "")); сТип = ФормаТипы.Типы()[ИндексТипа]; ТС = Объект.ТЧ.Добавить(); ТС.Имя = Строка(сТип); мТипы = Новый Массив; мТипы.Добавить(сТип); //формируем новое описание типов и приводим к пустому значению этого типа ТипТС = Новый ОписаниеТипов(мТипы); ТС.Значение = ТипТС.ПривестиЗначение(); Элементы.ТЧЗначение.ВыбиратьТип = Ложь; КонецПроцедуры &НаКлиенте Процедура ТЧПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) //при добавлении через стандартную команду формы будем выбирать тип Элементы.ТЧЗначение.ВыбиратьТип = Истина; КонецПроцедурыТеперь запускаем конфигурацию и добавляем элемент нашего справочника. При использовании стандартной команды формы Добавить перед выбором значения мы будем выбирать его тип. При добавлении через программно сформированные пункты контекстного меню значение будет приводиться к необходимому типу.
Комментариев нет:
Отправить комментарий