Имя: Пароль:
1C
1С v8
Загрузка YML в 1С
0 Быдло замкадное
 
30.11.20
10:21
Привет.
Есть у кого шаблон загрузки из YML? Или даже XML видимо..

Вобщем из файла ниже мне нужен только блок "products", т.е. таблица товаров. С минимальным кодингом)

<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<!-- saved from url=(0052)https://XXXXXX.ru/XXXXXX_action4_yml.php?id=151 -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><yml_catalog date="2020-09-24 15:21:03">
<shop>
  <name>Заказы акции #4</name>
  <company>XXXXXX</company>
  <url>http://XXXXXX.ru/</url>;

<currencies><currency id="RUR" rate="1"></currency></currencies>

<customer>
  <user_id>95</user_id>
  <fio>Иван Тест заказа </fio>
  <city>Москва</city>
  <phone></phone>
</customer>

<offer>
  <id>151</id>
  <date>2020-09-24 15:21:03</date>
  <comment>Тестовый заказ. Если Вы получили это письмо - просьба сообщить менеджеру XXXXXX.</comment>
  <region>Свердловская область</region>
  <distributor>119</distributor>
  <kurs>87.5</kurs>
  <totalsum>61618</totalsum>
</offer>

<products>
        <product>
           <name>XXXXXX</name>
           <sku>F10638</sku>
           <fullprice>1015
           <price>559</price>
           <count>1</count>
           <currencyid>RUR</currencyid>
        </fullprice></product>

        <product>
           <name>XXXXXX</name>
           <sku>F10638</sku>
           <fullprice>1015
           <price>559</price>
           <count>1</count>
           <currencyid>RUR</currencyid>
        </fullprice></product>
        
</products>
</shop>
</yml_catalog>

</body></html>
1 Kigo_Kigo
 
30.11.20
10:25
Не, XML это не YML
YML - это формат Яндекса
2 Kassern
 
30.11.20
10:26
Чтение=Новый ЧтениеXML;
    Чтение.ОткрытьФайл(ВыбранноеИмяФайла);  
    Фабрика=Новый ФабрикаXDTO;
    ОбXDTO=Фабрика.ПрочитатьXML(Чтение);
3 fisher
 
30.11.20
10:27
(1) Зато YML - это XML
4 Быдло замкадное
 
30.11.20
10:27
(2) благодарю, для начала достаточно)
5 fisher
 
30.11.20
10:30
6 Быдло замкадное
 
30.11.20
10:37
буду основываться на:

Файл = Новый ЧтениеТекста(ФайлХМЛ,КодировкаТекста.UTF8, "</offer>");    
    ТекСтрока = Файл.ПрочитатьСтроку();
    Пока ТекСтрока <> Неопределено Цикл
        
        ТекСтрока = СокрЛП(Файл.ПрочитатьСтроку());
        ТекСтрока = ТекСтрока + "</offer>";
        Сч = Сч+1;
        ЧтениеХМЛ = Новый ЧтениеXML;
        ПараметрыЧтенияХМЛ = Новый ПараметрыЧтенияXML(,,,,,,,,Истина,Истина);
        ЧтениеХМЛ.УстановитьСтроку(ТекСтрока,ПараметрыЧтенияХМЛ);
        
        ПостроительDOM = Новый ПостроительDOM();
        ДокументDOM = ПостроительDOM.Прочитать(ЧтениеХМЛ);
        ЧтениеХМЛ.Закрыть();
        
        Списокoffer=ДокументDOM.ПолучитьЭлементыПоИмени("offer");
        Для Каждого НоменклатураУзел ИЗ Списокoffer Цикл
                 //Тута делаем все что нужно
              КонецЦикла;
         КонецЦикла;

у меня как раз оффер
7 Быдло замкадное
 
30.11.20
19:01
в итоге как-то так. Вдруг кому пример пригодится:

Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПоле) Экспорт;
    
    КаталогФАйла = "C:\";
    ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогФыбораФайла.Фильтр                        = "Файл (*.htm*)|*.htm*";
    ДиалогФыбораФайла.Каталог                        = КаталогФайла;
    ДиалогФыбораФайла.Заголовок                        = "Выберите файл";
    ДиалогФыбораФайла.ПредварительныйПросмотр        = Ложь;
    ДиалогФыбораФайла.Расширение                    = "htm";
    ДиалогФыбораФайла.ИндексФильтра                    = 0;
    ДиалогФыбораФайла.ПроверятьСуществованиеФайла    = Ложь;
    Если ДиалогФыбораФайла.Выбрать() Тогда
        Имя = ДиалогФыбораФайла.ПолноеИмяФайла;
    Иначе
        Сообщить("Файл не выбран!");
        Возврат;
    КонецЕсли;
    КаталогФайла                                    = ДиалогФыбораФайла.Каталог;
    ВыбФайл                                            = Новый Файл(ДиалогФыбораФайла.ПолноеИмяФайла);

    ЧтениеТекста = Новый ЧтениеТекста(ВыбФайл.ПолноеИмя, КодировкаТекста.UTF8);
    ФайлXML = ЧтениеТекста.Прочитать();
    НомерСимволаНачало = СтрНайти(ФайлXML, "<products>");
    НомерСимволаКонец = СтрНайти(ФайлXML, "</products>");
    КоличествоСимволов = НомерСимволаКонец - НомерСимволаНачало + 11;
    ФайлXML = Сред(ФайлXML, НомерСимволаНачало, КоличествоСимволов);
    ЧтениеХМЛ = Новый ЧтениеXML;
    ЧтениеХМЛ.УстановитьСтроку(ФайлXML);
    
    ПостроительDOM = Новый ПостроительDOM();
    ДокументDOM = ПостроительDOM.Прочитать(ЧтениеХМЛ);
    
    Для Каждого ТабличныеЧасти Из ДокументDOM.ДочерниеУзлы Цикл
        
        Для Каждого ЭлементТЧ Из ТабличныеЧасти.ДочерниеУзлы Цикл
            
            Для Каждого РеквизитНоменклатуры Из ЭлементТЧ.ДочерниеУзлы Цикл
                
                Если РеквизитНоменклатуры.ИмяУзла = "sku" Тогда
                    
                    НоваяСтрока = Объект[ИмяТабличнойЧасти].Добавить();
                    Артикул = РеквизитНоменклатуры.ТекстовоеСодержимое;    
                    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
                    
                КонецЕсли;          
        
            КонецЦикла;
          
        КонецЦикла;      
        
    КонецЦикла;    
            
КонецПроцедуры