Имя: Пароль:
1C
 
Выгрузка через XML, как добраться до "табл части"
0 ValA
 
20.09.04
10:28
Пишу выгрузку данных черех XML. При выгрузке документов (предположительно и справочников с табл частью) возникла проблема с определением типа данных реквизитов табличной части, и соответственно значений этих реквизитов. Запутался окончательно. Может неправильный алгоритм, или что другое. Кто что подскажет?
///////////////////////////////////////////////////////////
Если ВыгружаемыеДокументы.Количество()>0 Тогда
 Файл.ЗаписатьНачалоЭлемента("Документы");
 Для Каждого ВыгружаемыйДокумент Из ВыгружаемыеДокументы Цикл
   Файл.ЗаписатьНачалоЭлемента(ВыгружаемыйДокумент.Ключ);
   Выборка=Документы[ВыгружаемыйДокумент.Ключ].Выбрать    (НачалоПериода, КонецДня(КонецПериода));
   Пока Выборка.Следующий() Цикл
   Файл.ЗаписатьНачалоЭлемента("Объект");
   Файл.ЗаписатьАтрибут("Номер", XMLСтрока(Выборка.Номер));
   Файл.ЗаписатьАтрибут("Дата", XMLСтрока(Выборка.Дата));
   Для Каждого Реквизит Из ВыгружаемыйДокумент.Значение.Реквизиты Цикл
       Файл.ЗаписатьНачалоЭлемента("Реквизит");
       Файл.ЗаписатьАтрибут("Имя", Реквизит.Имя);
       Файл.ЗаписатьАтрибут("Тип", ?(Выборка[Реквизит.Имя]=Null,"",XMLТипЗнч(Выборка[Реквизит.Имя]).ИмяТипа));
       Файл.ЗаписатьТекст(XMLСтрока(Выборка[Реквизит.Имя].Наименование));
       Файл.ЗаписатьКонецЭлемента();
   КонецЦикла;
               //    выгрузим табл часть
   Для Каждого ТаблЧасть Из ВыгружаемыйДокумент.Значение.ТабличныеЧасти Цикл
       Файл.ЗаписатьНачалоЭлемента("ТабличнаяЧасть");
       Файл.ЗаписатьАтрибут("Имя", ТаблЧасть.Имя);
                   
       Для Каждого РеквизитТаблЧасти Из ВыгружаемыйДокумент.Значение.ТабличныеЧасти[ТаблЧасть.Имя].Реквизиты Цикл
                       Файл.ЗаписатьНачалоЭлемента("РеквизитТаблЧасти");
   Файл.ЗаписатьАтрибут("Имя", РеквизитТаблЧасти.Имя);
   Файл.ЗаписатьАтрибут("Тип", ??? вот тут проблема, и дальше где Файл.ЗаписатьТекст...
////////////////////////////////////
Спасибо
1 Волшебник
 
20.09.04
10:39
А зачем выгружать документ пореквизитно, если его можно выгрузить целиком?
Что-то типа: ЗаписатьXML(ЗаписьXML, ДокументОбъект);
2 ValA
 
20.09.04
10:43
Даже не думал об этом. Попробую, Спасибо.
1) А чтение таким же образом производить?
2) Если конфы будут отличаться можно ли будет производить выборочное чтение?
3 Волшебник
 
20.09.04
10:48
(2) Чтение нужно делать примерно так:

Пока ВозможностьЧтенияXML(ЧтениеXML) Тогда
 Данные = ПрочитатьXML(ЧтениеXML);
 Данные.Записать();
КонецЦикла;

Конфигурации в УРБД должны быть идентичны.
См. также www.mista.ru/v8/urbd.htm
4 ValA
 
20.09.04
11:08
А если конфы не идентичны встает вопрос выгрузки типов значений. С чего я и начал вопрос? Так как же добраться правильно до реквизитов табл части?
5 Волшебник
 
20.09.04
11:17
(4) Описание типа реквизита табличной части можно вытащить из метаданных.

Если нужен тип значения, то используется функция ТипЗнч, которая возвращает значение типа "Тип".

Для преобразования 1С-типа в XML-тип используется функция: XMLТип. Обратное преобразование выполняет функция ИзXMLТипа

Можно получить XML-тип сразу, используя функцию XMLТипЗнч