Имя: Пароль:
1C
 
Как установить тип значения реквизита с типом ЛюбаяСсылка.
,
0 Butch
 
13.07.07
13:49
На форме есть реквизит Субконто (тип строка) - содержит наименование субконто; РеквизитСубконто (тип строка) - содержит название требуемого реквизита субконто; и реквизит Значение (тип любая ссылка) - значение реквизита. Вопрос: как установить тип реквизита Значение, если он должен соответствовать типу РеквизитаСубконто.
1 Vozhd
 
13.07.07
13:50
(0) "Установить" тип без установки значения нельзя...
2 чувак
 
13.07.07
13:51
А в реквизите как отображается тип субконто, типа "Спарвочник сслыка: Основные средства"?
3 Butch
 
13.07.07
13:53
(2) реквизиты отображают только строкове наименования Субконто и РеквизитаСубконто соответсвенно. Т.е. например Субконто = "Номенклатура", РеквизитСубконто = "СтавкаНДС".
4 Butch
 
13.07.07
13:55
(1) это вы о чем? мне нужно узнать тип значения реквизита РеквизитСубконто и установить ограничение типа на реквизит Значение.\, чтобы пользователь выбирал элементы нужного типа, и ему не приходилось сначала самому выбирать тип реквизита Значение.
5 Vozhd
 
13.07.07
13:56
(3) А если элемент плана видов характеристик описывает составной тип данных?
6 Vozhd
 
13.07.07
13:56
(4) В общем виде Вы не можете узнать тип реквизита субконто, ибо у вас недостаточно данных даже для того, чтобы узнать тип значения субконто...
7 DK_L
 
13.07.07
14:02
Процедура ВидСубконтоПриИзменении(Элемент)
       
   ТипСубконто = ВидСубконто.ТипЗначения;
   
   ЭлементыФормы.Субконто.ВыбиратьТип = (ТипСубконто.Типы().Количество() > 1);
   
   Субконто = ТипСубконто.ПривестиЗначение(Субконто);
           
КонецПроцедуры
8 DK_L
 
13.07.07
14:03
Процедура СчетПриИзменении(Элемент)

   ЧислоСубконто = Счет.ВидыСубконто.Количество();
   
   Для Сч = 1 По ЧислоСубконто Цикл
       ТипСубконто = Счет.ВидыСубконто[Сч - 1].ВидСубконто.ТипЗначения;
       ЭлементыФормы["Субконто" + Сч].ТолькоПросмотр = Ложь;
       ЭлементыФормы["Субконто" + Сч].ВыбиратьТип = (ТипСубконто.Типы().Количество() > 1);
       
       Если ТипСубконто.ПривестиЗначение(ДокументОбъект["Субконто" + Сч]) <> ДокументОбъект["Субконто" + Сч] Тогда
           ДокументОбъект["Субконто" + Сч] = ТипСубконто.ПривестиЗначение(ДокументОбъект["Субконто" + Сч]);
       КонецЕсли;
   КонецЦикла;
   
   МаксКоличествоСубконто = Метаданные.ПланыСчетов.ОсновнойПланСчетов.МаксКоличествоСубконто;
   
   Для Сч = (ЧислоСубконто + 1) По МаксКоличествоСубконто Цикл
           
       Если Не ДокументОбъект["Субконто" + Сч] = Неопределено Тогда
           ДокументОбъект["Субконто" + Сч] = Неопределено;
       КонецЕсли;
       ЭлементыФормы["Субконто" + Сч].ТолькоПросмотр = Истина;
   КонецЦикла;
   
КонецПроцедуры
9 Butch
 
13.07.07
14:04
Процедура РеквизитНачалоВыбора(Элемент, СтандартнаяОбработка)
   Если ЗначениеНеЗаполнено(Субконто) тогда
       Сообщить("Не заполнен вид субконто!");
       Возврат;
   КонецЕсли;
   СтандартнаяОбработка = Ложь;
   СписокВыбора = Новый СписокЗначений();
   ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные[Субконто];
   Тип = ВидСубконто.ТипЗначения;
   СписокВыбораТипа = Новый СписокЗначений();
   Если Тип.Типы().Количество() > 1 Тогда    //составной тип субконто, сначала выберем один конкрентый тип
       Для Каждого Т Из Тип.Типы() Цикл
           СписокВыбораТипа.Добавить(Т, Строка(Т));
       КонецЦикла;    
       ВыбранныйТип = СписокВыбораТипа.ВыбратьЭлемент("Выберите тип субконто",СписокВыбораТипа);
       Если ВыбранныйТип = Неопределено Тогда
           Возврат;
       КонецЕсли;    
       ТипСубконто = ВыбранныйТип.Значение;
   Иначе
       ТипСубконто = Тип.Типы()[0];
   КонецЕсли;
   Для Каждого Док Из Метаданные.НайтиПоТипу(ТипСубконто).Реквизиты Цикл
       СписокВыбора.Добавить(Док.Имя);
   КонецЦикла;    
   ВыбранныйЭлемент = СписокВыбора.ВыбратьЭлемент("Выберите реквизит вида субконто",СписокВыбора);
   Если ВыбранныйЭлемент = Неопределено Тогда
       Возврат;
   КонецЕсли;    
   Реквизит = ВыбранныйЭлемент;
КонецПроцедуры


Тип субконто я могу получить
10 Butch
 
13.07.07
14:06
в переменной "ТипСубконто" содержится тип субконто. Теперь вопрос. Как установить тип реквизита значение.
11 DK_L
 
13.07.07
14:06
Субконто = ТипСубконто.ПривестиЗначение(Субконто);
12 DK_L
 
13.07.07
14:10
+ еще одна полезная функция
Процедура УстановитьВидимостьСубконто()
   
   Для Ном = 1 по 2 Цикл
       Если (Ном <= Счет.ВидыСубконто.Количество()) И (НЕ Счет.Пустая()) Тогда
           ЭлементыФормы["НадписьСубконто"+Ном].Заголовок = Строка(Счет.ВидыСубконто[Ном-1].ВидСубконто);
           ЭлементыФормы["НадписьСубконто"+Ном].Видимость = Истина;
           ЭлементыФормы["Субконто"+Ном].Видимость = Истина;
       Иначе
           ЭлементыФормы["НадписьСубконто"+Ном].Видимость = Ложь;
           ЭлементыФормы["Субконто"+Ном].Видимость = Ложь;
       КонецЕсли;

   КонецЦикла;

КонецПроцедуры
13 Butch
 
13.07.07
14:10
как ограничить тип реквизита "Значение", если он имеет тип ЛюбаяСсылка?
14 Butch
 
13.07.07
14:26
Пытаясь установить тип по субконто пишу так:

ЭлементыФормы.Значение.ОграничениеТипа.ПривестиЗначение(ТипСубконто);

//ничего не выходит....
15 Butch
 
13.07.07
14:31
Если вывести сообщением ТипСубконто, то получим на экране, например "Справочник ссылка: Договоры контрагентов"
Закон Брукера: Даже маленькая практика стоит большой теории.