Имя: Пароль:
1C
1С v8
Сохранить документы в дерево значений
,
0 GomerSimpson
 
21.02.14
09:54
Всем привет.
Есть выборка документов. Нужно из нее получить дерево значений.
Максимальный уровень вложенности 2.
Т.е. реквизиты шапки и все табличные части.
Вместо ссылок - наименование, остальные типы как есть.
Фишка в том что код должен работать с любым типом документа.

Заранее спс за идею.
1 Godofsin
 
21.02.14
09:56
(0) для любой конфы?
2 ДенисЧ
 
21.02.14
09:56
Продаю идею: обход по метаданным...
3 GomerSimpson
 
21.02.14
10:21
(1) конфа БП 2.0, но вобще то желательно для любой.

(2) я думал создавать текст запроса обоходя метаданные, потом результат выгрузить в дерево.
Ну может просто есть какой универсальный механизм попроще.
4 ДенисЧ
 
21.02.14
10:23
(3) в XML сериализуй...
5 GomerSimpson
 
21.02.14
10:46
(4) XML тут конечно удобно, как бы всего одной строчкой кода.

ЗаписатьXML(ЗаписьXML,ВыгружаемыйОбъект);

Но там для ссылочных типов записывается уид, а мне надо наименование, если это можно поправить, подскажите, буду признателен.
6 ДенисЧ
 
21.02.14
10:48
(5) А кнопку "Сделать всё" тебе не продать?
Кстати, к ней скоро выйдет апргрейд (платный) "Сделать всё правильно"...
7 Godofsin
 
21.02.14
10:48
(6) Platinum edition ))))
8 Wobland
 
21.02.14
10:49
хочу апгрейд "Сделать всё правильно, бесплатно и кофе"!
9 GomerSimpson
 
21.02.14
10:56
Не заставляйте меня думать. А то я научусь и отберу ваш хлеб.
Лучше дайте готовый код, это в ваших же интересах ))))))
10 Wobland
 
21.02.14
11:00
только не бросай нас в терновый куст
11 ДенисЧ
 
21.02.14
11:03
(9) Тебя песполезно заставлять.. Уж если не дано, так ...
12 GomerSimpson
 
21.02.14
15:18
Вобщем пока придумал универсальный код для любых доков только в таком духе:

ЗаписьXML.ЗаписатьНачалоЭлемента(ДокОбъект.Метаданные().Имя +"___"+ДокОбъект.Ссылка.УникальныйИдентификатор());
ЗаписьXML.ЗаписатьНачалоЭлемента("Шапка");
Для Каждого Реквизит Из ДокОбъект.Метаданные().СтандартныеРеквизиты Цикл
    Если ЗначениеЗаполнено(ДокОбъект[Реквизит.Имя]) Тогда
        ЗаписьXML.ЗаписатьАтрибут(Реквизит.Имя, Строка(ДокОбъект[Реквизит.Имя]));
    КонецЕсли;    
КонецЦикла;    
Для Каждого Реквизит Из ДокОбъект.Метаданные().Реквизиты Цикл
    Если ЗначениеЗаполнено(ДокОбъект[Реквизит.Имя]) Тогда
        ЗаписьXML.ЗаписатьАтрибут(Реквизит.Имя, Строка(ДокОбъект[Реквизит.Имя]));
    КонецЕсли;    
КонецЦикла;    
ЗаписьXML.ЗаписатьКонецЭлемента();


Ну и табличные части аналогично тоже перебором метаданных.
Если все же есть способ проще, дайте знать.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.