Имя: Пароль:
1C
1С v8
Проблема с xml
0 Insainer
 
07.05.13
04:14
Здраствуйте, помогите пожалуйста с одним вопросом - как прочитать xml документ. У меня есть обработка, которая из экселя заносит данные в xml, так вот - ее нужно переделать и тут проблема - раньше формат xml был один:
[XML]<?xml version="1.0" encoding="windows-1251"?>
<Document Name="Briefcase" Version="1.0" CreateDate="2012-08-07T12:25:44" SaveDate="2012-09-03T16:54:10" Id="312">
   <Tables>
       <Table Id="1" Name="KGTT" Title="Типы назначения земли" KeyFields="RASREFSTRID" DisplayFields="REF_STR;SEQUENCE" CanAdd="0" CanEdit="0" CanDelete="0" Hidden="1">
           <Columns>
               <Column Id="1" Name="RASREFSTRID" Title="Код строки" DataType="Integer" DataSize="0" Hidden="1"/>
               <Column Id="2" Name="REF_STR" Title="Описание" DataType="String" DataSize="200"/>
               <Column Id="3" Name="SEQUENCE" Title="Очередность" DataType="SmallInt" DataSize="0"/>
           </Columns>
           <Rows>
               <Row Id="1">
                   <Cell ColumnId="1">243</Cell>
                   <Cell ColumnId="2">Предприятие связи</Cell>
                   <Cell ColumnId="3">{{null}}</Cell>
               </Row>
               <Row Id="2">
                   <Cell ColumnId="1">244</Cell>
                   <Cell ColumnId="2">Жилые кварталы</Cell>
                   <Cell ColumnId="3">{{null}}</Cell> ...[/XML]
Теперь другой:
[XML]<Data>
 <xs:schema id="Data" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
   <xs:element name="Data" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:FILE_ID="1042" msprop:OBJ_NO_TEMP="0" msprop:LOGIN="Bars257">
     <xs:complexType>
...
</xs:complexType>
   </xs:element>
 </xs:schema>
Далее сами данные:
<ATRKINDFIELDS>
   <ATRKINDID>12</ATRKINDID>
   <FIELDNAME>NAME</FIELDNAME>
   <LABEL>Наименование</LABEL>
   <REFERENCE>0</REFERENCE>
   <DE_x0024_READONLY>0</DE_x0024_READONLY>
   <TYPE_DECLARE>varchar(250)</TYPE_DECLARE>
   <IS_REESTRTABLE_FIELD>0</IS_REESTRTABLE_FIELD>
 </ATRKINDFIELDS>
 <ATRKINDFIELDS>
   <ATRKINDID>12</ATRKINDID>
   <FIELDNAME>ADRES</FIELDNAME>
   <LABEL>Адрес (место нахождения)</LABEL>
   <REFERENCE>0</REFERENCE>
   <DE_x0024_READONLY>0</DE_x0024_READONLY>
   <TYPE_DECLARE>varchar(250)</TYPE_DECLARE>
   <IS_REESTRTABLE_FIELD>0</IS_REESTRTABLE_FIELD>
 </ATRKINDFIELDS>
...
<Data>[/XML]
Так вот, как работать с новым форматом при помощи 1С. Старая обработка читает данные от <xs:schema до </xs:schema>, то есть шапку, где объявляются названия таблиц и тому подобное, как мне добраться до самих данных, которые ниже?
1 DreamMaster
 
07.05.13
05:41
ДокXML    = ПолучитьCOMОбъект("", "MSXML2.DOMDocument");
лФайл    = Новый Файл(ПолноеИмяФайла);
ДокXML.Load(ИмяПолученногоФайла.ПолноеИмя);    
//дале просто читаешь что тебе нужно
Для i=0 по  ДокXML.DocumentElement.childNodes.length-1 цикл
Документ =ДокXML.DocumentElement.childNodes.item(инт);
переменная    = СокрЛП(Документ.SelectSingleNode("имятэга").text)
конеццикла
2 DreamMaster
 
07.05.13
05:42
(ИмяПолученногоФайла.ПолноеИмя = ПолноеИмяФайла)
3 Insainer
 
07.05.13
17:01
Спасибо DreamMaster, я тут разобрался что нужно сделать. Я написал код, который должен записывать из Excel в таблицу значений, а потом добавлять записи в xml - файл - конечная цель всего этого, знаю, что код не рабочий, у кого нибудь есть примеры как добавить в !существующий! xml дополнительные записи? Есть ли какой - то смысл в моём коде и как его можно было бы доработать. Задача вообще стоит проверить есть ли между Excel и XML совпадающие ОС. Если да, то перезаписать XML данными из таблицы значений, если нет, добавить недостающие. Но я в коде сделал просто добавить (от простого к сложному). Прошу кого-нибудь ответить, просто первый раз с xml столкнулся - как котёнок :)
Процедура КнопкаВыполнитьНажатие(Кнопка)
   ТЗДвиж = Новый ТаблицаЗначений;
   ТЗДвиж.Колонки.Добавить("Наименование",,"Наименование");
   ТЗДвиж.Колонки.Добавить("ИнвентарныйНомер",,"ИнвентарныйНомер");
   ТЗДвиж.Колонки.Добавить("ПервоначальнаяСтоимость",,"ПервоначальнаяСтоимость");
   ТЗДвиж.Колонки.Добавить("ОстаточнаяСтоимость",,"ОстаточнаяСтоимость");
   ТЗДвиж.Колонки.Добавить("ПроцентИзноса",,"ПроцентИзноса");
   НомерАвто = 0;
   НомерДвиж = 0;
   НомерОбъекта = 0;
   Чтение = Новый ЧтениеXML();
   Попытка
       Чтение.Прочитать();    
   Исключение
       Возврат;
   КонецПопытки;
   ВыбФайл = Новый Файл(ИмяФайла1);
   Если НЕ ВыбФайл.Существует() Тогда
       Сообщить("Файл эксель не существует!");
       Возврат;
   КонецЕсли;
   //
   Попытка
       Excel = Новый COMОбъект("Excel.Application");
       Excel.WorkBooks.Open(ИмяФайла1);
       ExcelЛист = Excel.Sheets(1);
   Исключение
       Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
       Возврат;
       
   КонецПопытки;
   ТЗДвиж.Очистить();
   Стр = 10;
   Состояние("Запись в таблицу значений");
   Пока Не ПустаяСтрока(ExcelЛист.Cells(Стр,2).Value) Цикл
       ИнвентарныйНомер = СокрЛП(ExcelЛист.Cells(Стр,3).Value);
               НоваяСтрока = ТЗДвиж.Добавить();
               НоваяСтрока.Наименование = СокрЛП(ExcelЛист.Cells(Стр, 2).Value);
   НоваяСтрока.ИнвентарныйНомер = СокрЛП(ExcelЛист.Cells(Стр, 3).Value);
   НоваяСтрока.ПервоначальнаяСтоимость = СокрЛП(ExcelЛист.Cells(Стр, 12).Value) + СокрЛП(ExcelЛист.Cells(Стр, 14).Value);
   НоваяСтрока.ОстаточнаяСтоимость = СокрЛП(ExcelЛист.Cells(Стр, 15).Value);
   НоваяСтрока.ПроцентИзноса = СокрЛП(ExcelЛист.Cells(Стр, 11).Value);
       Стр = Стр + 1;
   КонецЦикла;
   Excel.WorkBooks.Close();
   Excel = 0;
   Зап();
КонецПроцедуры

Процедура Зап()
   Состояние("Запись файла xml");
   Чтение = Новый ЧтениеXML();
   Чтение.ОткрытьФайл(ИмяФайла);
   Запись = Новый ЗаписьXML();
   Запись.ОткрытьФайл(ФайлНаДиске.Путь + ФайлНаДиске.ИмяБезРасширения + "~" + ФайлНаДиске.Расширение, "windows-1251");
   Запись.ЗаписатьОбъявлениеXML();    
   Пока Чтение.Прочитать() Цикл
       Если Чтение.Имя = "OBJECT_6" Тогда
           Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
               Для Каждого СтрокаТЗ из ТЗДвиж Цикл
                   Запись.ЗаписатьНачалоЭлемента("OBJECT_6");
                   Запись.ЗаписатьНачалоЭлемента("NAME");
                   Запись.ЗаписатьТекст(СтрокаТЗ.Наименование);
                   Запись.ЗаписатьКонецЭлемента("NAME");
                   Запись.ЗаписатьНачалоЭлемента("OBJ_NO_BAL");
                   Запись.ЗаписатьТекст(СтрокаТЗ.ИнвентарныйНомер);
                   Запись.ЗаписатьКонецЭлемента("OBJ_NO_BAL");
                   Запись.ЗаписатьНачалоЭлемента("COMIS_COAST");
                   Запись.ЗаписатьТекст(СтрокаТЗ.ПервоначальнаяСтоимость);
                   Запись.ЗаписатьКонецЭлемента("COMIS_COAST");
                   Запись.ЗаписатьНачалоЭлемента("CUR_COAST");
                   Запись.ЗаписатьТекст(СтрокаТЗ.ОстаточнаяСтоимость);
                   Запись.ЗаписатьКонецЭлемента("CUR_COAST");
                   Запись.ЗаписатьНачалоЭлемента("OBJECT_IZNOS_PROC");
                   Запись.ЗаписатьТекст(СтрокаТЗ.ПроцентИзноса);
                   Запись.ЗаписатьКонецЭлемента("OBJECT_IZNOS_PROC");
               КонецЦикла;
           КонецЕсли;
       Прервать;    
   КонецЕсли;
   КонецЦикла;
КонецПроцедуры
4 Insainer
 
07.05.13
17:07
Вот XML:

<OBJECT_5>
   <NAME>Земельный участок площадью 12123 кв.м (кадастровый номер 25:28:05 00 49:0168)</NAME>
   <OBJECT_INON>0067000008</OBJECT_INON>
   <REESTR_NO_DATE>2006-06-16T00:00:00+11:00</REESTR_NO_DATE>
   <ADRES>Ориентир: зд. онколог. диспансера. Адрес ор.: г. Владивосток, Русская, 59, ориентира находится в границах участка</ADRES>
   <PL_COMMON>12123</PL_COMMON>
   <KADASTR>25:28:05 00 49:0168</KADASTR>
   <OBJECT_HISTORY_NO />
   <OBJECT_RIGHT_OTHER_RASPNO />
   <RIGHT_OTHER_NO />
   <OBJECT_RIGHT_OTHER_AKTNO />
   <RIGHT_OTHER_DOC_NO />
   <OBJ_NO>00122903</OBJ_NO>
   <OBJKINDID>5</OBJKINDID>
   <ARXIV />
   <BAL_INN>42</BAL_INN>
   <DE_x0024_ACCESS_DATE>2013-04-24T14:19:59+11:00</DE_x0024_ACCESS_DATE>
   <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG>
   <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG>
 </OBJECT_5>

<OBJECT_6>
   <NAME>2-канальный теплосчетчик ТСК7</NAME>
   <DESTINATION />
   <ADRES>г.Владивосток, ул.Русская, 59</ADRES>
   <RIGHT_OTHER_TYPE>оперативное управление</RIGHT_OTHER_TYPE>
   <OBJ_NO_BAL>000000000002064</OBJ_NO_BAL>
   <COMIS_COAST>37000</COMIS_COAST>
   <CUR_COAST>25000</CUR_COAST>
   <COAST_DATE>2011-01-01T00:00:00+11:00</COAST_DATE>
   <OBJECT_IZNOS_PROC>68</OBJECT_IZNOS_PROC>
   <RIGHT_OTHER_DOC_NO />
   <OBJ_NO>00014602</OBJ_NO>
   <OBJECT_GODV>27.08.2008</OBJECT_GODV>
   <OBJECT_MARKA />
   <OBJECT_CENNOE>0</OBJECT_CENNOE>
   <OBJECT_VVOD />
   <PRIVATE>13</PRIVATE>
   <OBJKINDID>6</OBJKINDID>
   <BAL_INN>42</BAL_INN>
   <ARXIV />
   <DE_x0024_ACCESS_DATE>2013-04-24T14:20:00+11:00</DE_x0024_ACCESS_DATE>
   <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG>
   <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG>
 </OBJECT_6>
 <OBJECT_6>
   <NAME>Автоматическая телефонная станция</NAME>
   <DESTINATION />
   <ADRES>г.Владивосток, ул.Русская, 59</ADRES>
   <RIGHT_OTHER_TYPE>оперативное управление</RIGHT_OTHER_TYPE>
   <OBJ_NO_BAL>000000000002825</OBJ_NO_BAL>
   <COMIS_COAST>86000</COMIS_COAST>
   <CUR_COAST>41000</CUR_COAST>
   <COAST_DATE>2011-01-01T00:00:00+11:00</COAST_DATE>
   <OBJECT_IZNOS_PROC>48</OBJECT_IZNOS_PROC>
   <RIGHT_OTHER_DOC_NO />
   <OBJ_NO>00014603</OBJ_NO>
   <OBJECT_GODV>01.05.2008</OBJECT_GODV>
   <OBJECT_MARKA />
   <OBJECT_CENNOE>0</OBJECT_CENNOE>
   <OBJECT_VVOD />
   <PRIVATE>13</PRIVATE>
   <OBJKINDID>6</OBJKINDID>
   <BAL_INN>42</BAL_INN>
   <ARXIV />
   <DE_x0024_ACCESS_DATE>2013-04-24T14:20:00+11:00</DE_x0024_ACCESS_DATE>
   <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG>
   <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG>
 </OBJECT_6>
 <OBJECT_6>
   <NAME>Автоматический анализатор глюкозы и лактата АГМК-01</NAME>
   <DESTINATION />
   <ADRES>г.Владивосток, ул.Русская, 59</ADRES>
   <RIGHT_OTHER_TYPE>оперативное управление</RIGHT_OTHER_TYPE>
   <OBJ_NO_BAL>000000000000382</OBJ_NO_BAL>
   <COMIS_COAST>82000</COMIS_COAST>
   <CUR_COAST>58000</CUR_COAST>
   <COAST_DATE>2011-01-01T00:00:00+11:00</COAST_DATE>
   <OBJECT_IZNOS_PROC>71</OBJECT_IZNOS_PROC>
   <RIGHT_OTHER_DOC_NO />
   <OBJ_NO>00014604</OBJ_NO>
   <OBJECT_GODV>08.12.2008</OBJECT_GODV>
   <OBJECT_MARKA />
   <OBJECT_CENNOE>0</OBJECT_CENNOE>
   <OBJECT_VVOD />
   <PRIVATE>13</PRIVATE>
   <OBJKINDID>6</OBJKINDID>
   <BAL_INN>42</BAL_INN>
   <ARXIV />
   <DE_x0024_ACCESS_DATE>2013-04-24T14:20:00+11:00</DE_x0024_ACCESS_DATE>
   <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG>
   <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG>
</OBJECT_6>

СЮДА НУЖНО ДОБАВИТЬ ЗАПИСИ ИЗ EXCEL (3000 штук) тоже OBJECT6 :(


   <OBJECT_7>
   <NAME>Автомашина "Лэнд Крузер" Х 567СМ</NAME>
   <DESTINATION />
   <ADRES>г.Владивосток, ул.Русская, 59</ADRES>
   <RIGHT_OTHER_TYPE>оперативное управление</RIGHT_OTHER_TYPE>
   <OBJ_NO_BAL>000000000000307</OBJ_NO_BAL>
   <COMIS_COAST>110000</COMIS_COAST>
   <CUR_COAST>0</CUR_COAST>
   <COAST_DATE>2011-01-01T00:00:00+11:00</COAST_DATE>
   <OBJECT_IZNOS_PROC>100</OBJECT_IZNOS_PROC>
   <RIGHT_OTHER_DOC_NO />
   <OBJ_NO>00015808</OBJ_NO>
   <OBJECT_GODV>01.07.2001</OBJECT_GODV>
   <OBJECT_DVGNO />
   <OBJECT_MARKA />
   <OBJECT_KUZOV />
   <OBJECT_SHASSI />
   <OBJECT_AVTO_KAT />
   <OBJECT_GOSNUMBER />
   <OBJECT_AVTOCOLOR />
   <OBJECT_AVTO_TYPE />
   <OBJECT_AVTO_BORT_NO />
   <OBJECT_AVTO_ZAVOD_NO />
   <OBJECT_CENNOE>1</OBJECT_CENNOE>
   <PRIVATE>13</PRIVATE>
   <OBJKINDID>7</OBJKINDID>
   <ARXIV />
   <BAL_INN>42</BAL_INN>
   <DE_x0024_ACCESS_DATE>2013-04-24T14:20:19+11:00</DE_x0024_ACCESS_DATE>
   <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG>
   <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG>
 </OBJECT_7>
 <OBJECT_7>
   <NAME>Автомашина "Нисан-Патрол" К 104 ВУ</NAME>
   <DESTINATION />
   <ADRES>г.Владивосток, ул.Русская, 59</ADRES>
   <RIGHT_OTHER_TYPE>оперативное управление</RIGHT_OTHER_TYPE>
   <OBJ_NO_BAL>000000000000308</OBJ_NO_BAL>
   <COMIS_COAST>170000</COMIS_COAST>
   <CUR_COAST>0</CUR_COAST>
   <COAST_DATE>2011-01-01T00:00:00+11:00</COAST_DATE>
   <OBJECT_IZNOS_PROC>100</OBJECT_IZNOS_PROC>
   <RIGHT_OTHER_DOC_NO />
   <OBJ_NO>00015809</OBJ_NO>
   <OBJECT_GODV>01.04.1994</OBJECT_GODV>
   <OBJECT_DVGNO />
   <OBJECT_MARKA />
   <OBJECT_KUZOV />
   <OBJECT_SHASSI />
   <OBJECT_AVTO_KAT />
   <OBJECT_GOSNUMBER />
   <OBJECT_AVTOCOLOR />
   <OBJECT_AVTO_TYPE />
   <OBJECT_AVTO_BORT_NO />
   <OBJECT_AVTO_ZAVOD_NO />
   <OBJECT_CENNOE>1</OBJECT_CENNOE>
   <PRIVATE>13</PRIVATE>
   <OBJKINDID>7</OBJKINDID>
   <ARXIV />
   <BAL_INN>42</BAL_INN>
   <DE_x0024_ACCESS_DATE>2013-04-24T14:20:20+11:00</DE_x0024_ACCESS_DATE>
   <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG>
   <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG>
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший