Имя: Пароль:
1C
1С v8
v8: Ограничение типа для списка значений на УФ продолжение
0 ARH_1980
 
20.03.13
00:28
Опять такой же случай - есть управляемая форма с реквизитом типа ТаблицаЗначений, одна из колонок которой имеет составной тип, один из которых СписокЗначений. Хотелось бы чтобы при добавлении строки в список значений можно было выбирать тип из узкого набора типов (например, число, строка, булево), а не из всех возможных.

Ответа я так и не нашёл, решил немного коряво, но работает:

Процедура ПараметрыЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   ТД = Элементы.ПараметрыФункции.ТекущиеДанные;
   Если Не ТипЗнч(ТД.Значение) = Тип("СписокЗначений")    Тогда
       ТД.Значение = Новый СписокЗначений;            
       МассивТипов = Новый Массив;
       МассивТипов.Добавить(Тип("Число"));
       МассивТипов.Добавить(Тип("Строка"));
       МассивТипов.Добавить(Тип("Булево"));
       МассивТипов.Добавить(Тип("Дата"));
       ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,Новый КвалификаторыЧисла(25, 9,ДопустимыйЗнак.Неотрицательный));
       ТД.Значение.ТипЗначения = ОписаниеТипов;
   КонецЕсли;
КонецПроцедуры

Т. е. колдовать надо было не с элементом а с значениями реквизита, и причём свойство "ТипЗначения" у него появляется только после выбора типа "СписокЗначений" из составного типа, это событие я отследить не смог, так что пришлось реквизиту присвоить новый СписокЗначений.

Работает, с одним лишь неудобством, что если Значение было например, число, то при начале выбора значение обнуляется

Может как то можно уловить событие между выбором составного типа и открытием Формочки СпискаЗначений?
1 Команданте
 
20.03.13
00:47
неудачная формализация действительности
где в реальности ты такие реляции встречал
2 ARH_1980
 
20.03.13
13:44
Разобрался, оказывается это событие ПриИзменении, только оно начтупает 2 раза : выборе типа из составного и при собственно изменении, для того чтобы отследить 1-е событие пришлось ввести меременную модуля

&НаКлиенте
Перем ЗначениеТип;

И вот собственно событие:

&НаКлиенте
Процедура ПараметрыЗначениеПриИзменении(Элемент)
   ТД = Элементы.ПараметрыФункции.ТекущиеДанные;
   Если ЗначениеТип <> ТипЗнч(ТД.Значение) Тогда
       Если ТипЗнч(ТД.Значение) = Тип("СписокЗначений") Тогда
           ТД.Значение = Новый СписокЗначений;            
           МассивТипов = Новый Массив;
           МассивТипов.Добавить(Тип("Число"));
           МассивТипов.Добавить(Тип("Строка"));
           МассивТипов.Добавить(Тип("Булево"));
           МассивТипов.Добавить(Тип("Дата"));
           ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,Новый КвалификаторыЧисла(25, 9,ДопустимыйЗнак.Неотрицательный));
           ТД.Значение.ТипЗначения = ОписаниеТипов;
       КонецЕсли;
   ЗначениеТип = ТипЗнч(ТД.Значение);
   КонецЕсли;
КонецПроцедуры
3 ARH_1980
 
20.03.13
14:05
Не, не так немного, вот эта строчка уже не нужна:

           ТД.Значение = Новый СписокЗначений;  

(для этого же всё и искалось)