|
|
|
покажите пример работы с XML | ☑ | ||
|---|---|---|---|---|
|
0
nitrat
28.06.05
✎
11:50
|
Продемонстрируйте пожалуйста на примере, как выгружать загружать документы определённого типа в XML.
|
|||
|
1
Парижская фанера
28.06.05
✎
11:52
|
(0) Может лучше картинку нарисовать, а то вообще комикс?
|
|||
|
2
nitrat
28.06.05
✎
11:55
|
(1) да, картинку нарисуй, а потом сотри её
|
|||
|
3
GrayT
28.06.05
✎
11:55
|
Выгрузка
//******************************************* Процедура Сформировать() Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда Предупреждение("Компонента v7plus.dll не найдена!"); Возврат; КонецЕсли; КонецЕсли; Анализатор = СоздатьОбъект("AddIn.XMLParser"); //Теперь начнем строить дерево документа. Заодно занесем служебную информацию о файле выгрузки в атрибуты корневого элемента Корень=Анализатор.СоздатьДокумент(); Данные =Корень.СоздатьПодчиненныйЭлемент("data"); Данные.УстановитьАтрибут("base_catalog" ,КаталогИБ()); Данные.УстановитьАтрибут("operator" ,ИмяПользователя()); Документы=Данные.СоздатьПодчиненныйЭлемент("Documents"); Документы.УстановитьАтрибут("Kind","ПоступлениеМатериалов"); Док = СоздатьОбъект("Документ.ПоступлениеМатериалов"); счДок=0; Док.ВыбратьДокументы(НачДата, КонДата); Пока Док.ПолучитьДокумент()=1 Цикл счДок = счДок+1; Документ=Документы.СоздатьПодчиненныйЭлемент("Document"); Документ.УстановитьАтрибут("DocNum", Док.НомерДок); Документ.УстановитьАтрибут("DocDate", Док.ДатаДок); // и т.д. по шапке Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку()=1 Цикл СтрокаДок = Документ.СоздатьПодчиненныйЭлемент("Line"); СтрокаДок.УстановитьАтрибут("Material", Док.Материал.Наименование); //А потом думай как синхронизироваться СтрокаДок.УстановитьАтрибут("Quantity", Док.Количество); // и т.д. по табличной части КонецЦикла; КонецЦикла; ФайлЭксп = КаталогИБ()+"\Export.xml"; Если ФС.СуществуетФайл(ФайлЭксп)=1 Тогда Если Вопрос("Файл с данными уже существует! Перезаписать?",1,120)<>1 Тогда Возврат; КонецЕсли; КонецЕсли; Корень.Записать(ФайлЭксп); Сообщить("файл записан: "+ФайлЭксп+" --- выгруженно "+счДок+" документов"); Анализатор=""; КонецПроцедуры Загрузка //******************************************* Процедура Сформировать() спрМ = СоздатьОбъект("Справочник.Материалы"); Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда Предупреждение("Компонента v7plus.dll не найдена!"); Возврат; КонецЕсли; КонецЕсли; Анализатор = СоздатьОбъект("AddIn.XMLParser"); ФайлИмп = КаталогИБ()+"\Export.xml"; //Найдем нужный файл Если ФС.СуществуетФайл(ФайлИмп)=0 Тогда Предупреждение("Файл для загрузки в текущем каталоге обмена не найден!"); Возврат; КонецЕсли; ФайлДанных=Анализатор.СоздатьДокумент(); ФайлДанных.Загрузить(ФайлИмп); ВсеУзлы=ФайлДанных.ВыбратьУзлы("data"); Данные=ВсеУзлы.ПолучитьУзел(0); Сообщить("Идет загрузка данных из базы: " +Данные.ПолучитьАтрибут("base_catalog")); Сообщить("Выгрузку произвел пользователь: " +Данные.ПолучитьАтрибут("operator")); Документы=Данные.ВыбратьУзлы("Documents"); Для счВидовДок = 0 по Документы.КоличествоУзлов-1 Цикл ВидДок = Документы.ПолучитьУзел(счВидовДок); Док = СоздатьОбъект("Документ."+ВидДок.ПолучитьАтрибут("Kind")); Документ = ВидДок.ВыбратьУзлы("Document"); Для счДок = 0 по Документ.КоличествоУзлов()-1 Цикл текДок = Документ.ПолучитьУзел(счДок); Док.Новый(); //Гружу в ту-же базу ==> Префикс "Д"(дубль) + Маленькая защита по длине текстового номера Док.НомерДок = "Д"+Сред(Прав("00000000"+СокрЛП(текДок.ПолучитьАтрибут("DocNum")),8),2); Док.ДатаДок = текДок.ПолучитьАтрибут("DocDate"); Док.Записать(); СтрокиДок = текДок.ВыбратьУзлы("Line"); Для счСтр = 0 по СтрокиДок.КоличествоУзлов()-1 Цикл текСтр = СтрокиДок.ПолучитьУзел(счСтр); Док.НоваяСтрока(); Если спрМ.НайтиПоНаименованию(СокрЛП(текСтр.ПолучитьАтрибут("Material")),0,0)=0 Тогда СпрМ.Новый(); //грубо, но для демки нормально - чтоб не загружать код СпрМ.Наименование = текСтр.ПолучитьАтрибут("Material"); СпрМ.Записать(); КонецЕсли; Док.Материал = СпрМ.ТекущийЭлемент(); Док.Количество = текСтр.ПолучитьАтрибут("Quantity"); КонецЦикла; //по строкам Док.Записать(); КонецЦикла; //по документам КонецЦикла; //по видам документов Анализатор=""; КонецПроцедуры |
|||
|
4
nitrat
28.06.05
✎
11:56
|
(3) спасибо
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |