Имя: Пароль:
1C
1С v8
Как, имея значение, получить его тип в виде строки "СправочникСсылка.ХХХХХ"?
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) тип - это простой тип, не ссылочный.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.