Xml 1С8

  • Автор темы ech
  • Дата начала
E
#1
Добрый день! Подскажите пож-та, как из файла .xml загрузить данные в поля ввода и табличную часть документа? Вот код, который наваял.

Процедура КнопкаВыполнитьНажатие(Кнопка)
ИмяФайла= "С:\s4et.xml";
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);
Имя = Чтение.Имя;
Массив = Новый Структура(Имя);
Пока Чтение.Прочитать() Цикл
ПолучитьXMLТип(Чтение);
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Имя = Чтение.Имя;
Пока Чтение.ПрочитатьАтрибут() Цикл
Атрибут = Чтение.Значение;
КонецЦикла;
КонецЕсли;
Если Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
Массив.Вставить(Имя,Чтение.Значение);
КонецЕсли;
Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
ДобавитьЭлемент(Массив);
КонецЕсли;
КонецЦикла
КонецПроцедуры

Записывает только номер счета, на остальные тэги ругаеться, что не обнаружены.
 
T

thinkfast

#3
Звиняй, я именно xml выгрузку ни разу не писал. А посидеть почитать/разобраться просто нету времени.
 

vbs

Well-known member
18.02.2007
1 708
1
#6
А может, если сам структуру придумываешь, использовать формат TXT или DBF - там все гораздо прозрачнее и головной боли не будет.
 
E
#7
А может, если сам структуру придумываешь, использовать формат TXT или DBF - там все гораздо прозрачнее и головной боли не будет.
дело в том, что счет фактура в последствии будет выгружаться из интернет-магазина, в формат хмл, так что по другому никак! вот я как раз придумываю структуру хмл счет фактуры, а вот как загрузить ее 1С 8.1. возникли проблемы, + как загрущить табличную часть????
 
E
#9
А в другой формат, значит, никак ?
разработчики сайта сказали, что будет формат хмл только+продумать мне структуру загрузки , т.е. какие данные нужны в этом файлике, в 1С 7.7 я загружал/выгружал данные через хмл файлы без проблем, а вот в 1С 8.1 трудновато.
Если кто поможет, бужу благодарен.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#10
Процедура КнопкаВыполнитьНажатие(Кнопка)
ИмяФайла= "C:\1.xml";
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);
Имя = Чтение.Имя;
Массив = Новый Структура(Имя);
Пока Чтение.Прочитать() Цикл
ПолучитьXMLТип(Чтение);
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Имя = Чтение.Имя;
Пока Чтение.ПрочитатьАтрибут() Цикл
Атрибут = Чтение.Значение;
КонецЦикла;
КонецЕсли;
Сообщить(Чтение.ТипУзла);
Сообщить(Чтение.Значение);
Если Чтение.ТипУзла = ТипУзлаXML.Текст Тогда

Массив.Вставить(Имя,Чтение.Значение);
Сообщить(Чтение.Имя);
КонецЕсли;
Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и Чтение.Имя = "Set" Тогда
ДобавитьЭлемент(Массив);
КонецЕсли;
КонецЦикла
КонецПроцедуры

Процедура ДобавитьЭлемент(Массив)
НовыйДокумент = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
НовыйДокумент = Документы.СчетНаОплатуПокупателю.ПолучитьФормуНовогоДокумента();
НовыйДокумент.Дата = РабочаяДата;
НовыйДокумент.Номер = Массив.schet;
НовыйДокумент.Контрагент = Массив.Client;
НовыйДокумент.ДоговорКонтрагента = Массив.Dogovor;
НовыйДокумент.Записать();
НовыйДокумент.Открыть();
КонецПроцедуры
У меня он ругался вовсе не на отсутствие тега, а на отстуствие элемента в структуре.
И дата в XML, вообще говоря, имеет другой вид.
Также непонятно, что у вас корневой элемент, а что начало документа "Счет".
 
E
#11
У меня он ругался вовсе не на отсутствие тега, а на отстуствие элемента в структуре.
И дата в XML, вообще говоря, имеет другой вид.
Также непонятно, что у вас корневой элемент, а что начало документа "Счет".
стратил, корневой элемент Сет.
Ваш вариант намного работоспособней моего, спасибо за помощь!
 

unknown181538

НеГуру
28.12.2008
1 417
0
#12
Я бы добавил еще тэг, отмечающий начало документа, т.к., как я понимаю, в одном файле может быть несколько счетов.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#15
А в массиве сколько элементов номенклатуры?
Может вам цикл использовать?)