Книга знаний |
|
1С:Предприятие / Приемы программирования / Обмен данными, УРБД |
Ключевые слова: XML, генерация кода, 1с Часто бывает надо прочитать файл 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.ТипУзла = ТипУзлаXML.КонецЭлемента тогда Прервать; Иначе ВызватьИсключение "Не верно прочитан файл" КонецЕсли; КонецЦикла; ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда Прервать; Иначе ВызватьИсключение "Не верно прочитан файл" КонецЕсли; КонецЦикла; ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента тогда Прервать; Иначе ВызватьИсключение "Не верно прочитан файл" КонецЕсли; КонецЦикла; сама обработка &НаКлиенте Процедура Команда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.Прочитать();" +Символы.ПС+ Таб+" Прервать;" +Символы.ПС+ Таб+" Иначе " +Символы.ПС+ Таб+" ВызватьИсключение ""Не верно прочитан файл""" +Символы.ПС+ Таб+" КонецЕсли;" +Символы.ПС+ Таб+"КонецЦикла;" +Символы.ПС; возврат рез; КонецФункции Мог бы доработать, но меня результат вполне устроил, а работы пока дофига. |
Описание
| Рубрикатор
| Поиск
| ТелепатБот
| Захваченные статьи
| Установки
| Форум
|