IT решения для Вашего бизнеса

 
Главная  |  Продукты  |  Услуги и цены  |  Клиенты  |  Контакты
 
1C Предприятие 7.7
Наши решения
Программирование
1С Предприятие 8.*
Наши решения
Партнерские разработки
Типовые решения
Программирование
Администрирование
Web проекты
Интернет-магазины
Поиск по сайту

 
Управление интернет-магазином
 

Подсистема «Управление интернет-магазином» позволяет используя типовые конфигурации 1С 8 «Управление торговлей» и «Управление торговым предприятием», «Управление небольшой фирмой» и др. организовать удобное управление интернет-продажами.

Цена: 1000$ Подробная информация о модуле

 

Главная
Обработка XML файла через объект "Microsoft.XMLDOM" Версия в формате PDF Версия для печати Отправить на e-mail
Рейтинг: / 9
ХудшаяЛучшая 
Написал Валецкий Станислав   
Обмен информацией в формате XML - это чрезвычайно удобный механизм для обмена данными между различными программами. Рассмотрим пример анализа и обработки XML файла с помощью объекта "Microsoft.XMLDOM".

У нас есть XML файл, вот его фрагмент:
 

  <Справочник.Номенклатура>
        <Наименование>Конд ARVIN AF-MS18HCL
        <Код>426
        <Артикул/>
   
  <Справочник.Номенклатура>
        <Наименование>Конд ARVIN AF-MS24HCL
        <Код>429
        <Артикул/>
  
 
  <Документ.ПеремещениеТоваров>
        <Дата>2008-08-01T15:42:55
        <Номер>ЭМ-000028
        <Примечание/>
        <ТабличнаяЧасть.Товары>
           <Номенклатура>426
           <Количество>10
           <Цена>200
           <Сумма>2000
        
        <ТабличнаяЧасть.Товары>
           <Номенклатура>429
           <Количество>1
           <Цена>283.54
           <Сумма>283.54
        
    

Вот один из вариантов обработки такого файла:

 
Перем ТабЧастьДокумента;
Перем ТаблицаРеквизитов;
 
Функция ВыборСправочника(xmlDoc, Узел)      
  
  //Получим имя справочника
  ИмяСправочника = Узел.nodename;
  
  //Очистим таблицу реквизитов для текущего объекта
  ТаблицаРеквизитов.УдалитьСтроки();
  
  
  //Выберем все ревизиты справочника
  КоличествоПодчиненныхУзлов   = Узел.childNodes.length;
  Для Инд = 1 По КоличествоПодчиненныхУзлов Цикл    
    
    ТекУзел  = Узел.childNodes.item(Инд-1);                
    
    //Занесем реквизит и его значение в таблицу
    ТаблицаРеквизитов.НоваяСтрока();
    ТаблицаРеквизитов.ИмяРеквизита     = ТекУзел.nodename;
    ТаблицаРеквизитов.ЗначениеРеквизита = ТекУзел.text;                  
  Конеццикла;  
  
  
  //Определим справочник и обновим (создадим) его
  Если Найти(Строка(ИмяСправочника),"Номенклатура") > 0 Тогда  //Спр. Товары
    
    //обработка элемента справочника ТМЦ (поиск или создание) 
    
  Конецесли;                             
  Возврат "";
КонецФункции    
 
// ------------------------------------------------------------------------------------------ //
 
Функция ВыборТЧОБъекта(xmlDoc, Узел,ТЧДокумента) 
  
  //Выбираем строки ТЧ и формирует таблицу
  
  //Создаем новую строку
  ТЧДокумента.НоваяСтрока();
  
  //Выбираем строки ТЧ
  КоличествоПодчиненныхУзлов   = Узел.childNodes.length;
  Для Инд = 1 По КоличествоПодчиненныхУзлов Цикл   
    
    //Получаем узел - текущую колонку
    ТекУзел  = Узел.childNodes.item(Инд-1); 
                                 
    //Добавляем  в таблицу значений
    Если ТекУзел.nodename = "НомерСтроки" Тогда
      ТЧДокумента.НомерСтроки = ТекУзел.text;
    иначеесли ТекУзел.nodename = "Номенклатура" Тогда
      ТЧДокумента.Номенклатура = ТекУзел.text;  
    иначеесли ТекУзел.nodename = "Количество" Тогда
      ТЧДокумента.Количество = ТекУзел.text;  
    иначеесли ТекУзел.nodename = "Цена" Тогда
      ТЧДокумента.Цена = ТекУзел.text;  
    иначеесли ТекУзел.nodename = "Сумма" Тогда
      ТЧДокумента.Сумма = ТекУзел.text;          
    Конецесли; 
    
  Конеццикла; 
  Возврат ТЧДокумента;
КонецФункции //
 
// ------------------------------------------------------------------------------------------ //    
 
Функция ВыборДокумента(xmlDoc, Узел)   
  
  //Получим имя документа
  ИмяДокумента = Узел.nodename;
  
  //Очистим таблицы реквизитов и ТЧ
  ТаблицаРеквизитов.УдалитьСтроки();
  ТабЧастьДокумента.УдалитьСтроки();  
    
  //Выбираем реквизиты и ТЧ документа
  КоличествоПодчиненныхУзлов   = Узел.childNodes.length;
  Для Инд = 1 По КоличествоПодчиненныхУзлов Цикл       
    ТекУзел  = Узел.childNodes.item(Инд-1); 
                                              
    //Если ТЧ, выбираем строки
    Если Найти(Строка(ТекУзел.nodename),"ТабличнаяЧасть.Товары") > 0 Тогда //Т.Ч Товары  
      ТабЧастьДокумента =  ВыборТЧОБъекта(xmlDoc, ТекУзел, ТабЧастьДокумента)        
      
    //обрабатываем реквизиты шапки
    Иначе
      ТаблицаРеквизитов.НоваяСтрока();
      ТаблицаРеквизитов.ИмяРеквизита     = ТекУзел.nodename;
      ТаблицаРеквизитов.ЗначениеРеквизита = ТекУзел.text;  
    Конецесли;  
    
  Конеццикла;        
  
  //Определим документ и обновим (создадим) его
  Если Найти(Строка(ИмяДокумента),"ПеремещениеТоваров") > 0 Тогда  //Док перемещение, здесь ПН
 
    //обработка документа
    
  Конецесли;  
  
  Возврат "";
КонецФункции 
 
// ------------------------------------------------------------------------------------------ //
 
Функция ВыборУзлов(xmlDoc, Узел, Уровень=0)   
  
  //Определим количество подчиненных узлов у данного узла
  КоличествоПодчиненныхУзлов   = Узел.childNodes.length;  
  
  //Прочитаем каждый подчиненный уровень и выберем данные
  Для Инд = 1 По КоличествоПодчиненныхУзлов Цикл   
    
    //Получим очередной узел    
    ТекУзел  = Узел.childNodes.item(Инд-1); 
    
    Если Найти(Строка(ТекУзел.nodename),"Справочник") > 0 Тогда //Справочник     
      ВыборСправочника(xmlDoc, ТекУзел)
    иначеесли Найти(Строка(ТекУзел.nodename),"Документ") > 0 Тогда //Документ          
      ВыборДокумента(xmlDoc, ТекУзел);
    Конецесли;  
    
    //обработаем подчиненные узлы
    ВыборУзлов(xmlDoc, ТекУзел, Уровень + 1);
  Конеццикла;
КонецФункции
                                                                                                
// ------------------------------------------------------------------------------------------ //
 
Процедура ПриемФайлаXML()     
  
  //Проверка выбора файла
  Если ИмяФайлаДанных = "" Тогда
    Предупреждение("Выберите Имя Файла загрузки");
    Возврат;
  Конецесли;   
  
    //Создадим объект и откроем файл
  xmlDoc =СоздатьОбъект("Microsoft.XMLDOM");
  xmlDoc.Load(ИмяФайлаДанных);    
  
  //Получим корневой элемент
  RootNode = xmlDoc.DocumentElement;
  
  //Начнем обработку файла
  ВыборУзлов(xmlDoc, RootNode, 0);     
  
  xmlDoc=0;
  
КонецПроцедуры                                         
 
//Таблица для хранения реквизитов и значений по объекту
ТаблицаРеквизитов = СоздатьОбъект("ТаблицаЗначений");
ТаблицаРеквизитов.НоваяКолонка("ИмяРеквизита");
ТаблицаРеквизитов.НоваяКолонка("ЗначениеРеквизита"); 
                                                       
//Таблица для хранения реквизитов и значений таб. части по объекту
ТабЧастьДокумента = СоздатьОбъект("ТаблицаЗначений");
ТабЧастьДокумента.НоваяКолонка("НомерСтроки");
ТабЧастьДокумента.НоваяКолонка("Номенклатура");
ТабЧастьДокумента.НоваяКолонка("Количество");
ТабЧастьДокумента.НоваяКолонка("Цена");
ТабЧастьДокумента.НоваяКолонка("Сумма");
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:
Жирный Курсив Подчеркнутый Зачеркнутый Цитата


Защитный код
Обновить

< Пред.
Карта сайта
1C-PROFI © 2019
Использование материалов разрешено только с указанием ссылки (для web сайтов гиперссылки)
www.megastock.ru