Имя: Пароль:
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.ЗаписатьКонецЭлемента();


Ну и табличные части аналогично тоже перебором метаданных.
Если все же есть способ проще, дайте знать.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn