helpf.pro
Регистрация

v7 Загрузка данных из XML файла в 1с 7.7

sergiymirosh
21.01.2014 17:24Прочитано: 5258
Народ ! Подскажыте, как загрузить данные из XML файла в справочник, без использования внешней компоненты. пример части XML кода

<Row ss:AutoFitHeight="0" ss:Height="15.75">
<Cell ss:StyleID="s65"><Data ss:Type="String">РГС-35</Data></Cell>
<Cell ss:StyleID="s66"><Data ss:Type="String">4</Data></Cell>
<Cell ss:StyleID="s66"><Data ss:Type="String">Q004</Data></Cell>
<Cell ss:StyleID="s67"><Data ss:Type="String">34,920</Data></Cell>
<Cell ss:StyleID="s66"><Data ss:Type="String">2370</Data></Cell>
<Cell ss:StyleID="s68"><Data ss:Type="String">06.10.2008</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="String">40810400</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">Києво-Святошинський р-н, с.Софіївська Борщагівка, Велика Кільцева, 54</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="38.25">
<Cell ss:StyleID="s71"><Data ss:Type="String">ВИСОТА НАПОВНЕННЯ ММ.</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String">ОБ'ЄМ ПРОДУКТУ КУБ .М.</Data></Cell>
<Cell ss:StyleID="s73"><Data ss:Type="String">ОБ'ЄМ НА 1ММ ВИСОТИ НАПОВНЕННЯ КУБ.М.</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s74"><Data ss:Type="Number">10</Data></Cell>
<Cell ss:StyleID="s75"><Data ss:Type="String">0,056</Data></Cell>
<Cell ss:StyleID="s76"><Data ss:Type="String">0,0035</Data></Cell>
<Cell ss:StyleID="s77"/>
<Cell ss:StyleID="s77"/>
</Row>
Изменено 21.01.14 18:34:53
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
22.01.2014 14:46Ответ № 1
(0) sergiymirosh, как вариант, можно убрать все <****> и потом построчно грузить, но в этом случае надо быть уверенным - что структура файла не меняется для разных элементов
Jonsony
22.01.2014 18:14Ответ № 2
(0) sergiymirosh, а исходные данные нельзя снова выгрузить? но уже у тексте голом
sergiymirosh
23.01.2014 13:11Ответ № 3
Код 1C v 7.x
 
// тб74 = СоздатьОбъект("таблицазначений");
// тб75 = СоздатьОбъект("таблицазначений");
// тб76 = СоздатьОбъект("таблицазначений");
Справ = СоздатьОбъект("Справочник.КолибровочниеТаблициНП");
СправРез =СоздатьОбъект("Справочник.Резервуары");

objDom=СоздатьОбъект("MSXML.DOMDocument");
objDom.load(ИмяФайла);
objL = objDom.S_electNodes("//Cell[@ss:StyleID='s65' or @ss:StyleID='s66' or @ss:StyleID='s66' or @ss:StyleID='s67' or @ss:StyleID='s66' or @ss:StyleID='s68'or @ss:StyleID='s69' or @ss:StyleID='s70']") ;
obj = objDom.S_electNodes("//Cell[@ss:StyleID='s74' or @ss:StyleID='s75' or @ss:StyleID='s76']") ;


count = 0;
к=0;

////////////////////////////////////////////////////////////////
Для i1 = 0 По objL.length - 1 Цикл

objK=objL.item(i1);

count = count + 1;

If (objK.attributes.getNamedItem("ss:StyleID").value="s65") Then
el4 = 0;
стр = objK.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el4 =cell.text;

КонецЦикла;
EndIf;

//робимо лычильник для рядків з одинаковим s
/////////////////////////////////
If (objK.attributes.getNamedItem("ss:StyleID").value="s66") Then
к=к+1;
EndIf;
/////////////////////////////////
If (objK.attributes.getNamedItem("ss:StyleID").value="s66") Then
Если к = 1 Тогда
el5 = 0;
стр = objK.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el5 =cell.text;

КонецЦикла;
КонецЕСли;
EndIf;

If (objK.attributes.getNamedItem("ss:StyleID").value="s66") Then
Если к = 2 Тогда
el6 = 0;
стр = objK.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el6 =cell.text;

КонецЦикла;
КонецЕСли;
EndIf;
If (objK.attributes.getNamedItem("ss:StyleID").value="s67") Then
el7 = 0;
стр = objK.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el7 =cell.text;

КонецЦикла;
EndIf;
If (objK.attributes.getNamedItem("ss:StyleID").value="s66") Then
el8 = 0;
стр = objK.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el8 =cell.text;

КонецЦикла;
EndIf;
If (objK.attributes.getNamedItem("ss:StyleID").value="s68") Then
el9 = 0;
стр = objK.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el9 =cell.text;

КонецЦикла;
EndIf;
If (objK.attributes.getNamedItem("ss:StyleID").value="s69") Then
el10 = 0;
стр = objK.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el10 =cell.text;

КонецЦикла;
EndIf;
If (objK.attributes.getNamedItem("ss:StyleID").value="s70") Then
el11 = 0;
стр = objK.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el11 =cell.text;

КонецЦикла;
EndIf;

if (el4<>0) or (el5<>0) or (el6<>0) or (el7<>0) or (el8<>0) or (el9<>0) or (el10<>0) or (el11<>0) then
if (count = 8) then


Если Справ.ЭтоГруппа() = 1 Тогда
Если Справ.НайтиПоКоду(el5)= 0 Тогда

Справ.НоваяГруппа();

справ.тип = el4;
справ.КодРез = el5;
справ.Обєкт = el6;
справ.НомМисткисть = el7;
справ.ГранВисНаповнення = el8;
справ.ДатаПровВим = el9;
справ.КодАЗС = el10;
справ.Адрес = el11;
справ.код = el5;
Если Константа.видЕККА = Перечисление.видЕККА.Датекс Тогда
Рез = Число(справ.КодРез) - 1; //зменшуем код резервуару на одиничку
иначеЕсли Константа.видЕККА = Перечисление.видЕККА.Калина Тогда
Рез = Число(справ.КодРез);
КонецЕсли;
СправРез.ВыбратьЭлементы();
Пока СправРез.ПолучитьЭлемент() = 1 цикл
Если Рез = Число(СправРез.код) Тогда
справ.наименование = Строка(СправРез.Топливо);
КонецЕсли;
конецЦикла;
справ.НазваНП = справ.наименование ;
иначе
справ.тип = el4;
справ.КодРез = el5;
справ.Обєкт = el6;
справ.НомМисткисть = el7;
справ.ГранВисНаповнення = el8;
справ.ДатаПровВим = el9;
справ.КодАЗС = el10;
справ.Адрес = el11;
справ.НазваНП = справ.наименование ;
КонецЕсли;
справ.записать();
конецЕсли;

ГрупСправ = СоздатьОбъект("Справочник.КолибровочниеТаблициНП");
ГрупСправ = справ.ТекущийЭлемент();


сообщить(" "+el4+ " "+el5+" "+el6 +" "+el7+" "+el8+" "+el9+" "+el10+" "+el11);
count = 0;
endif;
endif;

конеццикла;
//////////////////////////////////////////////////////////////////////
Для i1 = 0 По obj.length - 1 Цикл
obj1=obj.item(i1);

count = count + 1;

If (obj1.attributes.getNamedItem("ss:StyleID").value="s74") Then
el1 = 0;
стр = obj1.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el1 =cell.text;
КонецЦикла;
EndIf;
If (obj1.attributes.getNamedItem("ss:StyleID").value="s75") Then
el2 = 0;
стр = obj1.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el2 =cell.text;
КонецЦикла;
EndIf;
If (obj1.attributes.getNamedItem("ss:StyleID").value="s76") Then
el3 = 0;
стр = obj1.childNodes;
Для к3 = 0 По стр.length - 1 Цикл
cell = стр.item(к3);
el3 =cell.text;
КонецЦикла;
EndIf;

if (el1<>0) or (el2<>0) or (el3<>0) then
if (count = 3) then

//записуєм дані елементів, в потрібну нам групу
Если Справ.НайтиПоКоду(el5)= 1 Тогда

справ. Новый();
справ.ВисНаповнення = Строка(el1);
справ.ОБємПродукту = el2;
справ.ОбємВисНаповн = el3;
справ.Родитель =ГрупСправ.ТекущийЭлемент(); //визначаєм потрібну нам групу,в яку йде запис даних

справ.записать();
КонецЕсли;

//сообщить(" "+el1+ " "+el2+" "+el3);
count = 0;
endif;
endif;

конеццикла;


КонецПроцедуры
//***************************************************************************************************************
Процедура ВыборФайла()
ИмяПути="";
Если ФС.ВыбратьФайл(0,ИмяФайла,ИмяПути,"Выберите файл загрузки","Все файлы(*.*)|*.*",,)=1 Тогда
ИмяФайла = ИмяПути+ИмяФайла;
КонецЕсли;
КонецПроцедуры

Изменено 23.01.14 13:13:58
sergiymirosh
23.01.2014 13:12Ответ № 4
Вопрос закрыт!
sergiymirosh
23.01.2014 13:14Ответ № 5
Вопрос закрыт!
Подсказка: Вы получили ответ на свой вопрос - закройте вопрос!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.