![]() |
![]() |
|
Как получить тип объекта метаданных? | ☑ | ||
---|---|---|---|---|
0
Oven2009
09.06.10
✎
11:37
|
Вопрос такой. В платформе 8.1 была возможность вывести все реквизиты документа и определить тип каждого реквизита реквизита в виде например: Справочник.Валюты. В платформе 8.2 та же процедура выводит тип такого вида: Валюты. Каким образом определить является данный реквизит справочником или документом?
|
|||
1
H A D G E H O G s
09.06.10
✎
11:38
|
(0) Ткнуть его
|
|||
2
H A D G E H O G s
09.06.10
✎
11:39
|
ЭтоДокумент=Истина;
Попытка тмп=Объект.Метаданные().ДлинаНомера; Исключение ЭтоДокумент=Ложь; КонецПопытки |
|||
3
Дикообразко
09.06.10
✎
11:43
|
(2) а что метод содержит, у метаданных убрали?
|
|||
4
Defender aka LINN
09.06.10
✎
11:47
|
(0) При чем тут строковое представление?
Или это очередная волна массового наступления на грабли? (2) Да вы, батенька, извращенец :) |
|||
5
H A D G E H O G s
09.06.10
✎
11:50
|
Кто здесь?
Медленнный этот метод Содержит() Надо мне определить - к какому КЛАССу метаданных относится объект - замучаешься Содержит() вызывать. А тут - раз метаданные получил - живи и радуйся. |
|||
6
Дикообразко
09.06.10
✎
11:53
|
(5) так он же не один раз будет проверять... можно и за кэшировать...
а с попыткой потом отлаживать морока, остановку по ошибке толком не поюзаешь |
|||
7
Oven2009
09.06.10
✎
11:53
|
Нет текст кода такой:
имеется объектметаданных - какой-то документ реквизиты = объект.реквизиты для каждого реквизит из реквизиты цикл типы = реквизит.тип.типы() для каждого типр из типы цикл //////////////// тип этого типр такой: контрагент, валюты и т.д., а раньше был справочник. контрагент, справочник.валюты и т.д. |
|||
8
Defender aka LINN
09.06.10
✎
11:56
|
(7) "тип этого типр такой: контрагент, валюты и т.д., а раньше был справочник. контрагент, справочник.валюты и т.д." - атомный феерический бред. Тип как был типом, так и остался.
(5) "Медленнный этот метод Содержит()" - зато правильный. А если кэшировать в Соответствии, то и вообще разницы не будет. Еще есть СодержитТип(). В разы быстрее и тоже правильно. |
|||
9
H A D G E H O G s
09.06.10
✎
11:56
|
(6) Что ты там закешируешь?
Если Метаданные.Справочники.Содержит(МетаданныеОбъекта) Тогда Возврат "Справочник"; ИначеЕсли Метаданные.Документы.Содержит(МетаданныеОбъекта) Тогда ..... |
|||
10
Дикообразко
09.06.10
✎
11:56
|
(9) Метаданные().ПолноеИмя() в 8.2 тоже нет?
|
|||
11
Дикообразко
09.06.10
✎
11:57
|
(9) оно при первом обращение закэшируется
|
|||
12
Дикообразко
09.06.10
✎
11:58
|
О_о в 8.1 еще можно так
Если Объект.Метаданные().Родитель = Метаданные.Справочники Тогда ЭтоСправочник = Истина; КонецЕсли; |
|||
13
Oven2009
09.06.10
✎
11:59
|
Метаданные().ПолноеИмя() выдает такого видат строку например:
Документ.Событие.Реквизит.Важность Класса объекта метаданных тоже здесь нет |
|||
14
Oven2009
09.06.10
✎
12:00
|
В 8.1 документ работал отлично, после перехода на 8.2 возникла описываемая мною проблема
|
|||
15
H A D G E H O G s
09.06.10
✎
12:00
|
Мне лениво спорить.
|
|||
16
Дикообразко
09.06.10
✎
12:00
|
(15) в (12) наврал
|
|||
17
Дикообразко
09.06.10
✎
12:01
|
(7) Метаданные.НайтиПоТипу() в 8,2 тоже убрали?
|
|||
18
Oven2009
09.06.10
✎
12:02
|
Если я вставляю в найтипотипу слово Валюты без слова справочник, то он ничего не находит
|
|||
19
Oven2009
09.06.10
✎
12:03
|
Видимо придется использовать Содержит(). Непонятно просто зачем были внесены такие изменения в платформу.
|
|||
20
Дикообразко
09.06.10
✎
12:04
|
(18) ты не слово вставляй... а тип
реквизиты = объект.реквизиты для каждого реквизит из реквизиты цикл типы = реквизит.тип.типы() для каждого тип из типы цикл МетаТипа = Метаданные.НайтиПоТипу(Тип); |
|||
21
Дикообразко
09.06.10
✎
12:05
|
+20
а уж потом МетаТипа.ПолноеИмя() |
|||
22
Oven2009
09.06.10
✎
12:05
|
Пробую. Ставит слово Валюты тип- ОбъектМетаданных
|
|||
23
Oven2009
09.06.10
✎
12:06
|
О получилось, спасибо!!!
|
|||
24
Дикообразко
09.06.10
✎
12:06
|
реквизиты = объект.реквизиты
для каждого реквизит из реквизиты цикл Типы = реквизит.тип.типы() Для каждого тип из Типы цикл Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Справочник") > 0 Тогда // это справочник; КонецЕсли; КонецЦикла; |
|||
25
Oven2009
09.06.10
✎
12:06
|
После ПолноеИмя() выдал правильно
|
|||
26
Oven2009
09.06.10
✎
12:07
|
Спасибо еще раз
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |