Имя: Пароль:
1C
1C 7.7
v7: Не работает выгрузка XML
0 Sergod
 
10.06.12
02:22
Я новичок в 1с 7.7
При использовании внешней обработки с таким кодом выходит ошибка:xml<<?>>.СоздатьФайл(имяф);
{C:\DB\EXTFORMS\ВЫГРУЗКАXML.ERT(18)}: Переменная не определена (xml)
xml<<?>>.ЗаписатьТег("<Товары>");
{C:\DB\EXTFORMS\ВЫГРУЗКАXML.ERT(20)}: Переменная не определена (xml)
xml<<?>>.ЗаписатьТег("<Элемент>");
{C:\DB\EXTFORMS\ВЫГРУЗКАXML.ERT(34)}: Переменная не определена (xml)
xml<<?>>.ЗаписатьЗначение("<Код>", ""+о.Код);
{C:\DB\EXTFORMS\ВЫГРУЗКАXML.ERT(36)}: Переменная не определена (xml)
xml<<?>>.ЗаписатьЗначение("<Наименование>", ""+СокрЛП(о.Наименование));
{C:\DB\EXTFORMS\ВЫГРУЗКАXML.ERT(37)}: Переменная не определена (xml)
xml<<?>>.ЗаписатьЗначение("<Цена>", ""+в.Цена);                            
{C:\DB\EXTFORMS\ВЫГРУЗКАXML.ERT(38)}: Переменная не определена (xml)
xml<<?>>.ЗаписатьТег("</Элемент>");





Перем ДОМ;  // XML instace
Перем ИмяФайла;
//+  универсальные процедуры  для выгрузки данных
//**********************************************************************
// УстановитьАтрибут(Узел, ИмяАтрибута, ЗначениеАтрибута)
// Описание
// Добавляет атрибут к узлу
// Узел - тип IXMLDOMNode
// ИмяАтрибута - строка
// ЗначениеАтрибута - любое, приводится к строке
Процедура УстановитьАтрибут(Узел, ИмяАтрибута, ЗначениеАтрибута)
 Атрибут = ДОМ.createAttribute(ИмяАтрибута);
 Атрибут.Value = Строка(ЗначениеАтрибута);
 Узел.setAttributeNode(Атрибут);
КонецПроцедуры    // УстановитьАтрибут(Имя, Значение)
//**********************************************************************
Процедура Сохранить()
 ДОМ.save(ИмяФайла);      
КонецПроцедуры    // Сохранить
//**********************************************************************
Процедура ДобавитьУзелРеквизит(Узел, Имя, Значение)
 Реквизит = ДОМ.createElement("Реквизит");
 УстановитьАтрибут(Реквизит, Имя, Значение);
КонецПроцедуры    // ДобавитьУзелРеквизит(Узел, Имя, Значение)
//**********************************************************************
Процедура Выгрузить()
 Спр = СоздатьОбъект("Справочник.Контрагенты");
 ДОМ    = СоздатьОбъект("MSXML2.DOMDocument.4.0");
 //Create a processing instruction targeted for xml.
 Узел = ДОМ.createProcessingInstruction("xml", "version='1.0'");
 ДОМ.appendChild(Узел);                                // добавляем новый подчиненный узел. Это тэг <?xml version="1.0" ?>
   Корень = ДОМ.createElement("ФайлОбмена");             // создаем корневой элемент
 УстановитьАтрибут(Корень, "ВерсияФормата", "1.0");
   УстановитьАтрибут(Корень, "ДатаВыгрузки", ТекущаяДата());
 ДОМ.appendChild(Корень);                              // добавляем корневой элемент в структуру ДОМ
 Спр.ВыбратьЭлементы();
 Пока Спр.ПолучитьЭлемент() = 1 Цикл
   Если спр.этогруппа() = 1 Тогда Продолжить;    КонецЕсли;
   Узел = ДОМ.createElement("Контрагент");                    // <ОКЕИ Тип="Справочник"></ОКЕИ>
   УстановитьАтрибут(Узел, "Код", Спр.Код);        
   УстановитьАтрибут(Узел, "НеКонтролироватьКредит", Строка(Спр.НеКонтролироватьКредит));        
   УстановитьАтрибут(Узел, "ГлубинаКредта", Строка(Спр.ГлубинаКредита));        
   УстановитьАтрибут(Узел, "СуммаКредита", Строка(Спр.СуммаКредита));        
   Корень.appendChild(Узел);
 КонецЦикла;
 Сохранить();
 Предупреждение("Выгрузка данных завершена!");
КонецПроцедуры
//**********************************************************************
Процедура Загрузить()
 xmlDoc = СоздатьОбъект("MSXML2.DOMDocument.4.0");
 xmlDoc.load (ИмяФайла);
 Если xmlDoc.parseError.errorCode <> 0 Тогда
   myErr = xmlDoc.parseError;
   Предупреждение("You have error " + myErr.reason);
 Иначе
   root = xmlDoc.documentElement;    //тэг <ФайлОбмена ...>
   Спр = СоздатьОбъект("Справочник.Контрагенты");
   Выборка = root.selectNodes("Контрагент");
   Для сч=0 По Выборка.length-1 Цикл
     Состояние("Загружено "+Строка(Окр((сч+1)/Выборка.length*100,2,1))+"%");
     текУзел = Выборка.item(сч);
     Код = текУзел.getAttribute("Код");
     Если Спр.НайтиПоКоду(Код, 0)=0 Тогда
       Сообщить("Не удалось найти контрагента с кодом "+Код);
       Продолжить;
     КонецЕсли;
   КонецЦикла;
 КонецЕсли;    
 Предупреждение("Загрузка завершена!");
КонецПроцедуры    // Загрузить
////////////////////////////////////////////////////////////////////////////////////////////////
ИмяФайла = "c:\clients.xml";
1 Злопчинский
 
10.06.12
02:50
В приведеном коде
в принципе отсутствует
xml.ЗаписатьТег("<Элемент>");
.
откуда что копипастил?
2 Sergod
 
10.06.12
08:29
Забросил эту идею, с помощью стандартного обработчика "Выгрузка коммерческих предложений" выгрузил файл.xml.
Вот только проблема чем его отпарсерить? semplexml подойдёт?
3 andrewks
 
10.06.12
09:27
гКод какой-то

нафига УстановитьАтрибут выносить в отдельную функцию, ад ещё и с кучей строк, когда можно в одну строку уложить прямо в коде?
и Сохранить() тоже радует
4 andrewks
 
10.06.12
09:30
Корень=ДОМ.appendChild(ДОМ.createElement("ФайлОбмена"));
Корень.setAttribute("ВерсияФормата","1.0");
Корень.setAttribute("ДатаВыгрузки",ТекущаяДата());
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан