![]() |
![]() |
![]() |
|
Выгрузка через 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ТипЗнч |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |