Имя: Пароль:
1C
 
Назначить тип реквизиту типа "Произвольный"
0 D_E_S_131
 
20.09.07
13:00
В обработке есть реквизит типа "Произвольный". Этот реквизит выведен на форму как поле ввода. Хочу присвоить этому реквизиту нужное описание типов для ограничения выбора значений.
1 zbv
 
20.09.07
13:03
Курить ОграничениеТипа
2 D_E_S_131
 
20.09.07
13:07
Процедура НазначитьТипДокумента()

   Если НЕ ПустаяСтрока(ФайлОбработки) Тогда
       ВнПечать = ВнешниеОбработки.Создать(ФайлОбработки);
       
       ДопустимыеТипыДокументов = ВнПечать.Метаданные().Реквизиты["СсылкаНаОбъект"].Тип;
       
       Док.ОграничениеТипа = ДопустимыеТипыДокументов;
   КонецЕсли;

КонецПроцедуры

Выдает:
{Форма.Форма(46)}: Значение не является значением объектного типа (ОграничениеТипа)
       Док.ОграничениеТипа = ДопустимыеТипыДокументов;
3 zbv
 
20.09.07
13:13
а док что такое?
4 Лефмихалыч
 
20.09.07
13:16
Ограничение типа - это свойство поля ввода. Надо было применять к ЭлементыФормы.ТвоеПолеВвода.ОграничениеТИпа
5 D_E_S_131
 
20.09.07
13:17
"Док" тот самый реквизит произвольного типа.
В принципе не ругается на конструкцию "ЭлементыФормы.Док.ОграничениеТипа = ДопустимыеТипыДокументов", но значение выбрать не дает и в отладчике показывает, что ТипЗнч(Док)=Неопределено.
6 D_E_S_131
 
20.09.07
13:19
т.е. кнопка выбора ввиде выбора типа ("Т") и по ее нажатию ничего не происходит.
7 Лефмихалыч
 
20.09.07
13:19
(5) а галка "Выбрать тип" установлена у поля ввода?
8 Лефмихалыч
 
20.09.07
13:21
ЭлементыФормы.Док.ТипЗначения что возвращает?
9 D_E_S_131
 
20.09.07
13:23
1) "Галка" стоит;
2) Возвращает "ОписаниеТипов"
10 Лефмихалыч
 
20.09.07
13:24
(9) а в этом описании хоть один тип есть?
ЭлементыФормы.Док.ТипЗначения.Типы()
11 Лефмихалыч
 
20.09.07
13:25
+(10) я б на твоем месте мозга не трепал и сделал бы тип реквизиту Док "ЛюбаяСсылка, +все примитивы". Вот тогда ОграничениеТипов сработает
12 Лефмихалыч
 
20.09.07
13:26
+(11) а судя по имени реквизита, можно было сделать его тип просто "ДокументСсылка"...
13 D_E_S_131
 
20.09.07
13:37
Изначально так и делал, но хотелось проверить "универсионализм". Сейчас попробую убрать реквизит и все это реализовать через поле выбора формы.
14 D_E_S_131
 
20.09.07
13:59
Все ОК, но как сделать что бы когда значение может быть всего одного типа не выводился диалог выбора типа? Т.е. ограничение срабатывает, а ТипЗначения на устанавливается.
15 D_E_S_131
 
20.09.07
14:22
Решилось:

КолТипов = ДопустимыеТипыДокументов.Типы().Количество();
   
   Если КолТипов = 1 Тогда
       НовыйТип = Новый(ДопустимыеТипыДокументов.Типы()[0]);
       ИмяДок = НовыйТип.Ссылка.Метаданные().Имя;
       ЭлементыФормы.Док.Значение = Документы[ИмяДок].ПустаяСсылка();
   КонецЕсли;
16 Лефмихалыч
 
20.09.07
14:32
(14)чтобы универсально было, перед началом выбора

Процедура ТвойРеквизитНачалоВыбора(Элемент, СтандартнаяОбработка)
   Если Элемент.Значение = Неопределено Тогда
       Элемент.Значение = Элемент.ТипЗначения.ПривестиЗначение(Неопределено);
   КонецЕсли;
КонецПроцедуры
17 D_E_S_131
 
20.09.07
14:48
Это не избавляет от необходимости выбирать тип значения в случае если тип может быть только один.
18 Лефмихалыч
 
20.09.07
14:52
(17) странно, меня избавляет...
19 Лефмихалыч
 
20.09.07
14:56
+(18) а, ну, да, не избавляет, потому, что нужно использовать не ТипЗначения, а ОграничениеТипов, это ведь именно в ограничении один тип, а в ТипЗначения - все возможные
20 Лефмихалыч
 
20.09.07
14:56
*ОграничениеТипА
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс