Имя: Пароль:
1C
1С v8
Есть ли обработка формирование чтения XML файла?
0 ERWINS
 
20.05.14
15:06
Обработка получает на вход xml файл, а на выходе код его чтения.
Дальше в код вставляешь, что тебе надо.
1 vicof
 
20.05.14
15:09
Есть, называется "руки и мозг". Кто знает, как ты там хочешь читать этот файл, и какая стрктура у файла?
2 ERWINS
 
20.05.14
15:11
(1) структура есть в получаемом на ход файле

Результат работы обработки правлю руками, половина работы делается за меня.
3 vicof
 
20.05.14
15:14
Я отом, что никто не знает, как читать твой файл, кроме тебя
4 Йосис
 
20.05.14
15:15
(1) Если у тебя есть схема XML, никакой обработки не нужно. Грузишь ее в пакет XDTO и читаешь файл.
5 butterbean
 
20.05.14
15:16
(3) он хочет чтобы обработка за него перебрала весь XML файл, как-то выявила закономерности в его структуре и на их основе выдала код для вставки куда-нибудь
6 vicof
 
20.05.14
15:18
(5) Я понимаю, и пытаюсь втолковать, что никто за него это не сделает.
7 acsent
 
20.05.14
15:18
(4) можно и без схемы
8 butterbean
 
20.05.14
15:19
(6) но вдруг есть такая готовая обработка
9 vicof
 
20.05.14
15:21
(8) Ага, я вот вчера целых 20 таких на коленке написал. Но все разобрали, ничего не осталось.
10 bolobol
 
20.05.14
15:25
А чего, я не понял, не так с "новый ЧтениеXML"? Перестал читать? Отменили?
11 butterbean
 
20.05.14
15:26
(10) не удобно разбирать сложные XML
12 ДенисЧ
 
20.05.14
15:28
Кстати, ЧтениеXML довольно таки тормозная штучка...
13 bolobol
 
20.05.14
15:33
(12) Что мы тут частные случаи рассматриваем?, предлагаю обобщить на множество 1С.*
14 acsent
 
20.05.14
15:36
(12) Врешь ведь или пруф с замерами давай
15 ДенисЧ
 
20.05.14
15:39
16 acsent
 
20.05.14
15:45
И медленней чего же чтение XML?
17 ДенисЧ
 
20.05.14
15:46
(16) Того же DOMа.
И проц жрёт как не в себя.
18 DailyLookingOnA Sunse
 
20.05.14
15:50
Чё, DOM быстрее плоского чтения?
А ежели памяти не хватит?
19 ERWINS
 
20.05.14
17:26
Сделал

На выходе
пока XML.Прочитать() цикл
Если XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="СчетаПК" тогда
пока XML.Прочитать() цикл
  Если XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="ЗачислениеЗарплаты" тогда
  пока XML.Прочитать() цикл
   Если XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="Сотрудник" тогда
   пока XML.Прочитать() цикл
    Если XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="Фамилия" тогда
    пока XML.Прочитать() цикл
     Если XML.ТипУзла = ТипУзлаXML.Текст тогда
     // Фамилия=XML.Значение;
     ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
      Прервать;
     Иначе
      ВызватьИсключение "Не верно прочитан файл"
     КонецЕсли;
    КонецЦикла;

    ИначеЕсли XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="Имя" тогда
    пока XML.Прочитать() цикл
     Если XML.ТипУзла = ТипУзлаXML.Текст тогда
     // Имя=XML.Значение;
     ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
      Прервать;
     Иначе
      ВызватьИсключение "Не верно прочитан файл"
     КонецЕсли;
    КонецЦикла;

    ИначеЕсли XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="Отчество" тогда
    пока XML.Прочитать() цикл
     Если XML.ТипУзла = ТипУзлаXML.Текст тогда
     // Отчество=XML.Значение;
     ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
      Прервать;
     Иначе
      ВызватьИсключение "Не верно прочитан файл"
     КонецЕсли;
    КонецЦикла;

    ИначеЕсли XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="ОтделениеБанка" тогда
    пока XML.Прочитать() цикл
     Если XML.ТипУзла = ТипУзлаXML.Текст тогда
     // ОтделениеБанка=XML.Значение;
     ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
      Прервать;
     Иначе
      ВызватьИсключение "Не верно прочитан файл"
     КонецЕсли;
    КонецЦикла;

    ИначеЕсли XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="ФилиалОтделенияБанка" тогда
    пока XML.Прочитать() цикл
     Если XML.ТипУзла = ТипУзлаXML.Текст тогда
     // ФилиалОтделенияБанка=XML.Значение;
     ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
      Прервать;
     Иначе
      ВызватьИсключение "Не верно прочитан файл"
     КонецЕсли;
    КонецЦикла;

    ИначеЕсли XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="ЛицевойСчет" тогда
    пока XML.Прочитать() цикл
     Если XML.ТипУзла = ТипУзлаXML.Текст тогда
     // ЛицевойСчет=XML.Значение;
     ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
      Прервать;
     Иначе
      ВызватьИсключение "Не верно прочитан файл"
     КонецЕсли;
    КонецЦикла;

    ИначеЕсли XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="Сумма" тогда
    пока XML.Прочитать() цикл
     Если XML.ТипУзла = ТипУзлаXML.Текст тогда
     // Сумма=XML.Значение;
     ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
      Прервать;
     Иначе
      ВызватьИсключение "Не верно прочитан файл"
     КонецЕсли;
    КонецЦикла;

    ИначеЕсли XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="КодВалюты" тогда
    пока XML.Прочитать() цикл
     Если XML.ТипУзла = ТипУзлаXML.Текст тогда
     // КодВалюты=XML.Значение;
     ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
      Прервать;
     Иначе
      ВызватьИсключение "Не верно прочитан файл"
     КонецЕсли;
    КонецЦикла;

    ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
     Прервать;
    Иначе
     ВызватьИсключение "Не верно прочитан файл"
    КонецЕсли;
   КонецЦикла;

   ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
    Прервать;
   Иначе
    ВызватьИсключение "Не верно прочитан файл"
   КонецЕсли;
  КонецЦикла;

  ИначеЕсли XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="КонтрольныеСуммы" тогда
  пока XML.Прочитать() цикл
   Если XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="КоличествоЗаписей" тогда
   пока XML.Прочитать() цикл
    Если XML.ТипУзла = ТипУзлаXML.Текст тогда
    // КоличествоЗаписей=XML.Значение;
    ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
     Прервать;
    Иначе
     ВызватьИсключение "Не верно прочитан файл"
    КонецЕсли;
   КонецЦикла;

   ИначеЕсли XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="СуммаИтого" тогда
   пока XML.Прочитать() цикл
    Если XML.ТипУзла = ТипУзлаXML.Текст тогда
    // СуммаИтого=XML.Значение;
    ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
     Прервать;
    Иначе
     ВызватьИсключение "Не верно прочитан файл"
    КонецЕсли;
   КонецЦикла;

   ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
    Прервать;
   Иначе
    ВызватьИсключение "Не верно прочитан файл"
   КонецЕсли;
  КонецЦикла;

  ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
   Прервать;
  Иначе
   ВызватьИсключение "Не верно прочитан файл"
  КонецЕсли;
КонецЦикла;

ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда
  Прервать;
Иначе
  ВызватьИсключение "Не верно прочитан файл"
КонецЕсли;
20 ERWINS
 
20.05.14
17:27
Сама обработка


&НаКлиенте
Процедура Команда1(Команда)
    
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл с данными";
Диалог.ПолноеИмяФайла = "";

Если Диалог.Выбрать() Тогда
    Ткт=новый ТекстовыйДокумент;
    Ткт.Прочитать(Диалог.ПолноеИмяФайла);

    ФормированиеТекста=    ЗагрузкаXML(Ткт.ПолучитьТекст())
КонецЕсли
    
КонецПроцедуры
&НаСервере
Функция ЗагрузкаXML(Текст);

    XML= новый ЧтениеXML();
    XML.УстановитьСтроку(Текст);
    Дерево= новый ДеревоЗначений;
    Дерево.Колонки.Добавить("Имя");
    Ветвь=Дерево;
    Пока XML.Прочитать() цикл
        Если XML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            поискСтроки=Ветвь.Строки.Найти(XML.Имя);
            Если поискСтроки=неопределено тогда
                ст=Ветвь.Строки.Добавить();
                ст.Имя=XML.Имя;
                Ветвь=ст;
            иначе
                Ветвь=поискСтроки;
            КонецЕсли;
        иначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
            Ветвь=Ветвь.Родитель;
        иначеЕсли XML.ТипУзла = ТипУзлаXML.Текст Тогда
                Если Ветвь.Строки.Найти("#text")=неопределено тогда
                    ст=Ветвь.Строки.Добавить();
                    ст.Имя="#text";
                КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    возврат ОбходДерева(Дерево, "");
КонецФункции

&НаСервере
Функция ОбходДерева(ветвь, таб)
    Рез=Таб+"пока XML.Прочитать() цикл"+Символы.ПС;
    ПервыйШаг=" Если";
    для каждого ст из ветвь.Строки цикл
        Если ст.Имя="#text" тогда
            рез= рез + Таб+ПервыйШаг+" XML.ТипУзла = ТипУзлаXML.Текст тогда " +Символы.ПС;
            рез= рез + Таб+" // "+ветвь.Имя +"=XML.Значение;" +Символы.ПС;
            
        иначе
            рез= рез + Таб+ПервыйШаг+" XML.ТипУзла = ТипУзлаXML.НачалоЭлемента и  XML.Имя="""+ст.Имя+""" тогда " +Символы.ПС;
            рез= рез + ОбходДерева(ст, Таб+ " ")+Символы.ПС;
        КонецЕсли;    
        ПервыйШаг=" ИначеЕсли";
            
    КонецЦикла;    
    Рез=рез +
    Таб+ПервыйШаг+" XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда" +Символы.ПС+
//    Таб+"  XML.Прочитать();" +Символы.ПС+
    Таб+"  Прервать;" +Символы.ПС+
    Таб+" Иначе " +Символы.ПС+
    Таб+"  ВызватьИсключение ""Не верно прочитан файл""" +Символы.ПС+
    
    Таб+" КонецЕсли;" +Символы.ПС+
    Таб+"КонецЦикла;" +Символы.ПС;
    возврат рез;
КонецФункции
21 ERWINS
 
20.05.14
18:25
ап
22 ДенисЧ
 
20.05.14
18:33
Что это было?
23 ERWINS
 
20.05.14
18:44
(22) подаешь по вход обработка xml файл получаешь код 1с для загрузки данного файла и правишь как уже хочешь
24 batman69
 
20.05.14
18:48
(23) мля...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn