![]() |
|
Как, имея значение, получить его тип в виде строки "СправочникСсылка.ХХХХХ"? | ☑ | ||
---|---|---|---|---|
0
dave2000
01.04.15
✎
21:29
|
Есть переменная "СсылкаНаЧтоНибудь", ее тип может быть любым. Как получить её тип в виде строки "СправочникСсылка.ХХХХХ" или "ДокументСсылка.ХХХХХ"?
Т.е. нужна такая строка, которую можно было бы использовать, например, в функции Тип(). |
|||
1
ДенисЧ
01.04.15
✎
21:31
|
Через метаданные, разумеется.
В справке описано |
|||
2
Chameleon1980
01.04.15
✎
21:41
|
конечная какая задача?
может вам вообще нужно если типзнч(Элемент)=Тип("ДокументСсылка.РКО") Тогда НЕ? |
|||
3
User_Agronom
01.04.15
✎
21:50
|
(0) В запросе можно использовать, например
ГДЕ Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг |
|||
4
mikecool
01.04.15
✎
21:56
|
Строка(ТипЗнч(КакаяТоСсылка)) не?
|
|||
5
dave2000
01.04.15
✎
22:00
|
Есть ссылка на документ. Нужно через метаданные этого документа перебрать все реквизиты и табличных частей, и записывать все это в XML. Но для реквизитов, которые имеют составной тип нужно передавать еще и тип значения.
Например, в составном реквизите "УказательНаОбъект" могут быть значения как простые типов (число, строка), так и ссылки на справочники и документы. Мне нужно получать тип этого значения в указанном в (0) представлении, чтобы потом анализировать. |
|||
6
dave2000
01.04.15
✎
22:03
|
(4) Пробовал, он возвращает синоним имени. Например, вместо "ТоварыНаСкладах" вернет "Товары на складах"
|
|||
7
D_E_S_131
01.04.15
✎
22:05
|
А почему бы всю эту информацию не посмотреть в конфигураторе?
|
|||
8
User_Agronom
01.04.15
✎
22:06
|
ТаблицаРеквизитов = МетаДанные.Справочники[ИмяОбъектаМетаданных];
Для каждого Реквизит из ТаблицаРеквизитов.Реквизиты цикл Сообщить("Имя реквизита: "+ Реквизит.Имя); КонецЦикла; |
|||
9
User_Agronom
01.04.15
✎
22:07
|
(8) к (5)
Так же и по документам можно, наверное:) |
|||
10
dave2000
01.04.15
✎
22:17
|
(9) Вот, что я делаю:
..... Для каждого Рекв Из Док.Метаданные().Реквизиты Цикл ЗаписьXML.ЗаписатьАтрибут(Рекв.Имя, ВСтроку(Док[Рекв.Имя])); Если Рекв.Тип.Типы().Количество() > 1 Тогда Запись.ЗаписатьАтрибут(Рекв.Имя+"Тип", Строка(Рекв.Тип)); КонецЕсли; КонецЦикла; ..... В указанном примере функция ВСтроку(знач) должна принимать произвольное значение и возвращать строку в зависимости от типа: Дату в виде: "20150101000000" Для справочников: Код Для документов: Номер Для перечислений: Индекс и т.д. Простые типы я еще смогу проверить, как в (4), а более сложные как? Как узнать, это справочник, документ или перечисление? |
|||
11
User_Agronom
01.04.15
✎
22:20
|
(10) Так же как в (4)
Потестируй. |
|||
12
dave2000
01.04.15
✎
22:21
|
(10) перебирать в цикле все объекты метаданных конфигурации и делать сравнение типа
ТипЗнч(Элемент)=Тип("ДокументСсылка.РКО") как-то выглядит не очень :( |
|||
13
mikeA
01.04.15
✎
22:26
|
(0) СсылкаНаЧтоНибудь.Метаданные().ПолноеИмя()
правда слова "Ссылка" там не будет, но при желании дописать можно |
|||
14
dave2000
01.04.15
✎
22:28
|
(13) ВОТ!!! Как раз то, что нужно!!!
Спасибо всем! :) |
|||
15
Drac0
01.04.15
✎
22:41
|
Извращенцы.
(10) Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(ТвояСсылка)); Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ТвояСсылка)); |
|||
16
Drac0
01.04.15
✎
22:43
|
(1) А ты бы хоть намекнул, они же дословно поняли про метаданные...
|
|||
17
D_E_S_131
01.04.15
✎
22:45
|
(16) Когда не знаешь конечной цели всех этих извращений, то можно давать любые советы.
|
|||
18
hhhh
01.04.15
✎
22:52
|
(14) xml ведь
Запись.ЗаписатьАтрибут(Рекв.Имя+"Тип", xmlСтрока(Рекв.Тип)); |
|||
19
dave2000
01.04.15
✎
23:05
|
(15) Тоже вариант, пригодится
(18) Прекрасно подходит для простых типов, а вот для ссылочных уникальный идентификатор не подходит, т.к. он мало о чем говорит при чтении в другой базе. |
|||
20
hhhh
01.04.15
✎
23:10
|
(19) тип - это простой тип, не ссылочный.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |