Имя: Пароль:
1C
1С v8
Работа с метаданными
,
0 Baglandir
 
27.10.11
11:23
К меня есть реквизит :
ЕлРеквизит
который содержит значение "Основной Договор Контрагента" Тип "ОбъектМетаданных"

У меня есть проверка в которой мне необходимо получить "Название справочника":
Метаданные.Справочники.Содержит(Метаданные.Справочники[Строка(ЕлРеквизит.Тип)])

Но если справочник из наскольких слов - оно не работает

Возможно есть какойто другой способ получить название справочника ?
1 skunk
 
27.10.11
11:26
неасилил
2 Ненавижу 1С
 
гуру
27.10.11
11:26
"Если справочник из наскольких слов"

идентификатор справочника не может содержать НЕСКОЛЬКО слов
3 Живой Ископаемый
 
27.10.11
11:28
ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(XMLТипЗнч(ЕлРеквизит).ИмяТипа,".")[0]
4 Живой Ископаемый
 
27.10.11
11:30
правда я не понял, что это за тип - ОбъектМетаданнных
5 vmv
 
27.10.11
11:31
он имеет вввиду составной тип и Типы() и НайтиПоТипу() неведомы
6 hhhh
 
27.10.11
11:32
(0) попробуй    XMLСтрока(ЕлРеквизит.Тип)])
7 Живой Ископаемый
 
27.10.11
11:32
упс, и собственно если нужно название справочника выбратого значения, тогда так:
ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(XMLТипЗнч(ЕлРеквизит).ИмяТипа,".")[1]
8 timax
 
27.10.11
11:32
ЕлРеквизит.Метаданные().Имя;

Если я правильно понял
9 Cube
 
27.10.11
11:32
v8: работа с метаданными
Зачем темы плодить?
10 vmv
 
27.10.11
11:33
(7) Метаданные.НайтиПоТипу(ТипЗнч(ВыбранноеЗначение)).ПолноеИмя()

ни проще?
11 timax
 
27.10.11
11:34
(8) Это получаешь ВИД справочника.
Если нужен Тип объекта (справочник/документ/ПВХ) то делаешь поиском по метаданным наподобие:
Мета = ЕлРеквизит.Метаданные();
Если Метаданные.Справочники.Найти(Мета) <> Неопределено Тогда
 Сообщить("Это справочник");
ИначеЕсли ............ и так далее
12 Cube
 
27.10.11
11:35
Метаданные.Справочники.Содержит(ЕлРеквизит.Метаданные())
13 Живой Ископаемый
 
27.10.11
11:35
2(10) с чего бы это проще?
14 vmv
 
27.10.11
11:40
(13) любая привязка к функционалу общих модулей - убивает надежду на широкое применение идеи, нэ?

Тащить, например, во внешнюю обработку вызов метода общего модуля или сам метод копировать - кастрация!)
15 Живой Ископаемый
 
27.10.11
11:42
глупости... не привязывайся к общим модулям.
16 Живой Ископаемый
 
27.10.11
11:42
суть там все равно в XMLТипЗнч(ЕлРеквизит).ИмяТипа
17 vmv
 
27.10.11
11:44
(15) я и не привязывваюсь, внешние обработки должны быть мобильны и независимы. и именно в них и востребованы метаданные и типизация выбранных значений.

усе, все отсальное от лукавого)
18 Живой Ископаемый
 
27.10.11
11:46
фетишь какой-то.. откуда вообще внешняя обработка нарисовалась - непонятно. автор ни про какие обработки не говорил.
19 vmv
 
27.10.11
11:49
вероятность востребованности обращения к метаданным наиболее высока во внешних обработках - без аппеляций. доказано занусси)
20 Живой Ископаемый
 
27.10.11
11:51
вероятность слажать руководствуясь при кодирования лозунгами гораздо выше...
21 Живой Ископаемый
 
27.10.11
11:53
и собственно это доказано теми кто привязывался к ИмениТипа метаданных в своих кодах на 8.1 а потом этот код не работал на 8.2
22 vmv
 
27.10.11
11:55
(21) ОписаниеТипа и пустыессылки - наше все, вшивать в код имена типов строкой - бред сивой кобылы на любой платформе
23 DrShad
 
27.10.11
12:00
(22) имелось ввиду наверное что метданные в 8.2 изменились
24 Киборг
 
27.10.11
12:05
у объекта метаданных есть метод Родитель(), для метаданных реквизита табличной части вернет метаданные табличной части, для метаданных реквизита справочника вернет метаданные справочника
25 vmv
 
27.10.11
12:23
(24) ога, счаз - проверял?

обМД.Имя = "ВидыЗанятостиВОрганизации"  

обМД.Родитель().Имя = "ЗарплатаИУправлениеПерсоналомДляУкраины"

для значений спрвочник и док из которых получаем обМД таже хрень)
26 vmv
 
27.10.11
12:25
по реквизитам да, но зачастую нужно выйти на ТипТаблице по Ссылка,
т.е. имея некую ссылку определить что это - справочник, док, перечис...
Независимо от того, куда вы едете — это в гору и против ветра!