Имя: Пароль:
1C
 
Строковое представление типа реквизита
, ,
0 Pakestanez
 
08.09.14
16:45
И снова здрасти! Возможно ли в восьмерке получить строковое представление типа данных? К примеру, у реквизита тип СправочникСсылка.Контрагенты. Нужно получить строку "СправочникСсылка.Контрагент".
1 Fish
 
08.09.14
16:49
Возможно
2 КонецЦикла
 
08.09.14
16:50
У Дениса купить СП
3 Pakestanez
 
08.09.14
16:57
А по делу сказать?
4 ДенисЧ
 
08.09.14
16:58
.Метаданные().ПолноеИмя()

(3) с тебя 1000 рублей
5 Maxus43
 
08.09.14
17:02
переходите на 8.1, там реализовано)
6 Pakestanez
 
08.09.14
17:03
(4) это не то, нужно так, как я в первом посте писал.
7 Ёпрст
 
08.09.14
17:03
(5) а если у него 8.3 ? даунгрейд ?
8 ДенисЧ
 
08.09.14
17:03
(6) Уже проверил?
9 Maxus43
 
08.09.14
17:04
(6) тогда (5)
(7) ага... в (0) - стандартное 8.1.
Скорей всего у автора код, анализирующий это, пережиток 8.1, и чтоб не разбираться в овнокоде хотит получить представление 8.1...
10 Pakestanez
 
08.09.14
17:04
(8) проверил, значение "Документ.РеализацияТоваровУслуг.Реквизит.Контрагент"
11 Ёпрст
 
08.09.14
17:07
(9) аа... наверное
12 Pakestanez
 
08.09.14
17:12
(9) Я объясню, зачем это нужно. Я хочу написать обработку, которая выгружает в XML документы РеализацияТоваровУслуг. Когда она проходит по реквизитам и встречает сыложный тип, например, ссылку на справочник, берет из него тоже все данные и выгружает.
Например, есть документ, в нем используется контрагент, договор контрагента, номенклатура, ну и так далее. Обработка доходит до реквизита, получает тип в том виде, в котором я написал, соответственно, можно будет обратиться к справочнику, выбрать этого контрагента по наименованию, выгрузить все его реквизиты таким же образом.
13 hhhh
 
08.09.14
17:17
(12) пользуйся КД
14 Maxus43
 
08.09.14
17:17
(12) зачем тут вид как в (0)? и зачем искать что-либо по наименованию? У тебя уже есть ссылка на справочник, обходи его реквизиты, выгружай
15 Pakestanez
 
08.09.14
17:17
РеализацияТоваровУслуг
...
-Контрагент --> ведет в СправочникСсылка.Контрагенты
--начинаем выгружать все реквизиты этого контрагента
--ОсновнойБанковскийСчет
---начинаем выгружать все реквизиты из справочника БанковскиеСчета

Ну и так далее, то есть выгружается все, что как-то связано с этим документом РеализацияТоваровУслуг
16 Pakestanez
 
08.09.14
17:18
(13) Если бы мне нужно было КД, я бы взял и воспользовался. Про существование КД я знаю, но мне не нужно КД.
17 Pakestanez
 
08.09.14
17:21
(14) Не получится так. Нужна унификация. Код пишется, исходя из полной автоматизации. Ты не знаешь, в какой момент у тебя какой реквизит выгружается, ты можешь оперировать только абстрактным понятием "Реквизит".
18 hhhh
 
08.09.14
17:21
(16) тогда читай (4)
19 hhhh
 
08.09.14
17:22
(16) берешь метаданные не у реквизита, а у ссылки.
20 Maxus43
 
08.09.14
17:23
(17) я не понимаю почему ты привязался именно к "СправочникСсылка.Контрагент", когда тот же (4) ничем не отличается по сути. Теже йайца, только в профиль
21 Pakestanez
 
08.09.14
17:25
Вот, грубо говоря, в таком виде я представлял:

РТУ = Документы.РеализацияТоваровУслуг.Выбрать(НачалоДня(ЭтаФорма.НачПериода), КонецДня(ЭтаФорма.КонПериода));
    
    РеквизитыРТУ = Метаданные.Документы.РеализацияТоваровУслуг.Реквизиты;
    Пока РТУ.Следующий() Цикл
        Для Каждого Реквизит Из РеквизитыРТУ Цикл
            //Здесь планировалось получить в переменную конструкцию вида СправочникСсылка.Контрагенты, модифицировать ее, чтобы осталось Справочники.КОнтрагенты и после этого обойти реквизиты этого справочника. Ну и так далее, соблюсти всю вложенность
        КонецЦикла;
    КонецЦикла;
22 hhhh
 
08.09.14
17:27
(21) а если реквизит составного типа? Например.
23 Pakestanez
 
08.09.14
17:29
(20) там возвращается значение вида "Документ.РеализацияТоваровУслуг.Реквизит.Контрагент" , что нам ничего не дает при поставленной задаче.

(22)  а если он составного типа, то я видел в сп функцию, которая вроде возвращает перечень типов. Но это потом. НАчать можно со случая, когда только один тип. Москва не сразу строилась.
24 Maxus43
 
08.09.14
17:32
Дак и делай так же дальше, вот по реквизитам контрагента пробежаться, если составной будет - по указанному пойдёт

Для Каждого Рекв Из РТУ.Контрагент.Метаданные().реквизиты Цикл
25 Maxus43
 
08.09.14
17:35
Чтобы определить справочник это или число например в реквизите:
ЭтоСправочник = Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(РТУ.Контрагент))
26 Pakestanez
 
08.09.14
17:39
(24) Ага, то есть для каждого реквизита, если он ссылка на справочник к примеру, можно методом Метаданные() получить доступ ко всем его реквизитам? Это интересно. Попробую завтра, сегодня уже не успею.

Только вот ветка закроется, нельзя будет, увы, тут продолжить. Можно с этим что-нибудь сделать, чтобы новую потом не открывать?
27 РенеДекарт
 
08.09.14
17:54
(26) все равно воткнешься в ограничение.
В 1с нельзя ничего универсального написать.
Ну проверишь тип. А тебе оно зачем? Тебе еще и значение проверять нужно....