Имя: Пароль:
1C
1С v8
Сравнить тип реквизита
0 BoberKurit Bambuk
 
02.03.15
18:08
Бухгалтерия 3.0 на 8.3.5
В документе есть реквизит с типом "ПланВидовХарактеристикСсылка.ТипыУсловийПолученияНадбавки".
У элементов этого нового плана видов характеристик тип значения могут быть или Число или справочники.
Теперь в зависимости от типа значения выбранного элемента мне нужно выполнять определенный код. Если тип Число то одно действие, если тип какой то справочник, то другое.
Когда пишу такой код:
Тип(Объект.ТипУсловияПолучения.ТипЗначения) = Тип("Число")
для Числа работает, но если у выбранного элемента тип какой то справочник, то пишет ошибку.
Документ.НастройкаОсновныхНадбавок.Форма.ФормаДокумента.Форма(70)}: Тип не определен (Номенклатура)
1 ktvladimir
 
02.03.15
18:10
ТипЗнч(Объект) = Тип("Число")
ТипЗнч(Объект) = Тип("СправочникСсылка.Номенклатура")
2 BoberKurit Bambuk
 
02.03.15
18:11
(1) Номенклатура это пример. Там могут быть разные справочники.
3 ktvladimir
 
02.03.15
18:22
(2) какая разница?
<1c>
Если ТипЗнч(Объект) = Тип("Число")  Тогда
ИначеЕсли ТипЗнч(Объект) = Тип("СправочникСсылка.Номенклатура") Тогда
ИначеЕсли ТипЗнч(Объект) = Тип("СправочникСсылка.Справочник") Тогда
ИначеЕсли ТипЗнч(Объект) = Тип("ДокументСсылкаСсылка.Документ") Тогда
КонецЕсли;
</1c>
4 ktvladimir
 
02.03.15
18:23
p/s/ если объект это не ссылка а объект, то

Тип("СправочникОбъект.Номенклатура")
5 BoberKurit Bambuk
 
02.03.15
18:29
(3) Если будет 30 возможных справочников, то писать 30 условий?
6 ktvladimir
 
02.03.15
18:33
хм ну тогда
Если ТипЗнч(Объект) = Тип("Число") Тогда
ИначеЕсли Метаданные.Справочники.Содержит(Объект.Метаданные()) ИначеЕсли Метаданные.Документы.Содержит(Объект.Метаданные()) Тогда
...
КонецЕсли;
7 BoberKurit Bambuk
 
02.03.15
18:40
(6) У меня когда тип Число выполняется один код, иначе стандартно другой. Поэтому мне проще проверять Число ли это или нет, и все.
Но когда я пишу
Если ТипЗнч(Объект.ТипУсловияПолучения.ТипЗначения) = Тип("Число") Тогда

не работает, потому что получает значение ОписаниеТипов
8 ktvladimir
 
02.03.15
18:52
опять же
Если ТипЗнч(Объект) = Тип("Число") Тогда
одно
Иначе
  другое
КонецЕсли;

В Вашем случае
Объект.ТипУсловияПолучения.ТипЗначения
это описание типов, оно содержит все типы которые могут быть таким образом оно вам ничем не поможет. Вам Нужно работать непосредственно с тем объектом, значение которого Вы проверяете
9 ktvladimir
 
02.03.15
18:53
ну или
Если ТипЗнч(Объект.ТипУсловия) = Тип("Число") Тогда
одно
Иначе
  другое
КонецЕсли;

тут вам виднее что вы проверяете
10 BoberKurit Bambuk
 
02.03.15
18:53
Получилось вот так

Если Объект.ТипУсловияПолучения.ТипЗначения.СодержитТип(Тип("Число"))
11 ktvladimir
 
02.03.15
18:54
(10) теперь проверьте для типа не число ))) боюсь что все равно даст истину)
12 ktvladimir
 
02.03.15
18:55
хотя... что то уже голова не варит.... в Общем думаю вариант (9) в любом случае будет работать) и он проще
13 BoberKurit Bambuk
 
02.03.15
18:55
(11) нет. работает.
Когда выбираю допустим элемент с типом значения справочник, дает ложь
14 ktvladimir
 
02.03.15
18:56
(13) да я уже понял что работать будет, но это извилистый путь) (9) проще
15 ktvladimir
 
02.03.15
18:57
и кстати мне кажется Ваш вариант выдаст ошибку в случае когда Объект.ТипУсловияПолучения = Неопределено
16 BoberKurit Bambuk
 
02.03.15
18:57
(14) Спасибо за помощь. Сейчас посмотрю твой вариант)
17 BoberKurit Bambuk
 
02.03.15
19:02
(14) В 9) он возвращает описание типов и соответственно выдает ложь.
18 ktvladimir
 
02.03.15
19:13
(17) ну да. с ПВХ свои особенности.. на неопределено проверку только я думаю не помешает воткнуть