|
v7: Как получить данные из XML файла? | ☑ | ||
---|---|---|---|---|
0
katerinaUniv
01.05.12
✎
13:31
|
Есть файл, его структура - часть, которую мне надо загрузить:
<ZAP> <N_ZAP> 2 </N_ZAP> <PR_NOV> 0 </PR_NOV> <PACIENT> <ID_PAC> 12-3308 </ID_PAC> <VPOLIS> 1 </VPOLIS> <SPOLIS> МАКС </SPOLIS> <NPOLIS> 0461844 </NPOLIS> <SMO> 30004 </SMO> <SMO_OGRN/> <SMO_OK/> <SMO_NAM/> <NOVOR> 0 </NOVOR> </PACIENT> как мне получить эти значения? файл выбирается из формы. процедуру как написать непонятно |
|||
1
nicxxx
01.05.12
✎
13:32
|
||||
2
katerinaUniv
01.05.12
✎
13:45
|
у меня пишет, что Значение не представляет агрегатный объект (ПолучитьАтрибут)
вот код загрузки Если ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"v7plus.dll")<>1 Тогда Предупреждение("Внешняя компонента не найдена"); Возврат; КонецЕсли; Анализатор=СоздатьОбъект("AddIn.XMLParser"); Файл = Анализатор.СоздатьДокумент(); Файл.Загрузить(ИмяФайла); СпрХМЛ = Файл.ВыбратьУзел("ZAP"); СпрХМЛ.ПолучитьАтрибут("N_ZAP"); в чем ошибка? |
|||
3
katerinaUniv
01.05.12
✎
13:49
|
поиск не помогает. искать долго, а сделать нужно очень быстро... помогите кто знает...
|
|||
4
Aleksey
01.05.12
✎
13:51
|
Читай как текст
|
|||
5
katerinaUniv
01.05.12
✎
13:54
|
а по узлам не получится? мне просто надо найти все PACIENT и оттуда вытащить 4 поля
|
|||
6
Мигрень
01.05.12
✎
13:54
|
Я в клюшки xml лет пять не загружал, поэтому выбрал бы простой вариант: или вбил бы руками или загрузил бы в Excel, а из него обработкой с ИТС - в 1С.
|
|||
7
katerinaUniv
01.05.12
✎
13:55
|
исправила код на
СпрХМЛ = Файл.ВыбратьУзел("PACIENT"); СпрХМЛ.ПолучитьАтрибут("ID_PAC"); в отладчике СпрХМЛ пустое, ничего не хранит и соответственно ругается |
|||
8
katerinaUniv
01.05.12
✎
13:55
|
(6)не подойдет. надо читать хмл из базы
|
|||
9
katerinaUniv
01.05.12
✎
14:14
|
в чем у меня ошибка? почему я вижу только первый тег файла и не могу поставить отбор по подчиненным?
|
|||
10
katerinaUniv
01.05.12
✎
14:17
|
никто такими вещами не занимается? не пишет выгрузку? или сложно так подсказать???
|
|||
11
Мигрень
01.05.12
✎
14:22
|
(10)Отзанималиь уже сто лет назад, а в восьмерке все по-другому. Теоретически - тебе нужен XSLT-запрос, когда-то делал такие вещи, но кому это сейчас нужно, прошлый век.
|
|||
12
katerinaUniv
01.05.12
✎
14:29
|
ну у меня старая конфа на 7.7, и мне нужно. как вытащить все подчиненные узлы? я смогла получить только верхний тег
|
|||
13
katerinaUniv
01.05.12
✎
14:29
|
а нужно добраться до подчиненных
|
|||
14
BlackSeaCat
01.05.12
✎
14:30
|
Я одного не понимаю в таких ветках - почему не посмотреть, как аналогичные вещи делаются в типовых решениях от 1С? Хотя бы в той же обработке ПроверкаКомплектаДокументовПФР из бухии, где читается и разбирается XML-файл.
|
|||
15
katerinaUniv
01.05.12
✎
14:42
|
я уже смотрю и попробовала несколько вариантов. не получается разобраться в коде, поэтому спрашиваю
|
|||
16
BlackSeaCat
01.05.12
✎
14:44
|
Ааа, сестра близнец: Помогите разобраться с кодом в 77
|
|||
17
katerinaUniv
01.05.12
✎
14:59
|
(16)к загрузке данных XML кажется не относится...
|
|||
18
katerinaUniv
01.05.12
✎
15:38
|
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"v7plus.dll")<>1 Тогда
Предупреждение("Компонента не обнаружена"); Возврат; КонецЕсли; гXMLАнализатор = СоздатьОбъект("AddIn.XMLParser"); гФайл = гXMLАнализатор.СоздатьПоследовательноСчитываемыйДокумент(); ПолноеИмяФайла = КаталогЗагрузки+ИмяФайла; гФайл.СвязатьСФайлом(ПолноеИмяФайла); //найти ZAP //найти PACIENT ТипТега0 = гФайл.Спуститься(); // ТипТега1 = ТипТега0.Спуститься(); Пока ТипТега0 <> 4 Цикл // пока не достигнут конец файла Если ТипТега0 <> 1 Тогда ТипТега0 = гФайл.Следующий(); Продолжить; КонецЕсли; // пропускаем концы уровней и инструкции ИмяТега = гФайл.СвойстваТекущегоУзла.Имя; Если ИмяТега = "ZL_LIST" Тогда //спуститься и найти PACIENT // ЗагрузитьОбъектСправочника(); ТипТега0 = гФайл.Спуститься(); ИначеЕсли ИмяТега = "ZAP" Тогда //спускаемся к тегу ТипТега0 = гФайл.Спуститься(); ИначеЕсли ИмяТега = "PACIENT" Тогда //берем данные по пациенту новые ТипТега0 = гФайл.Спуститься(); ИначеЕсли ИмяТега = "ID_PAC" Тогда //надо добавить новую строку и заполнить данные пациента НоваяСтрока(); //КодЗаписиОПациенте = ИначеЕсли ИмяТега = "VPOLIS" Тогда //это версия полиса 1, 2, 3 ИначеЕсли ИмяТега = "SPOLIS" Тогда //это серия полиса ИначеЕсли ИмяТега = "NPOLIS" Тогда //номер полиса ИначеЕсли ИмяТега = "SMO" Тогда //это код плательщика Иначе ТипТега0 = гФайл.Следующий(); Продолжить; КонецЕсли; ТипТега0 = гФайл.Следующий(); КонецЦикла; как получить значени, когда дойду до тега PACIENT? |
|||
19
katerinaUniv
01.05.12
✎
15:49
|
(14)а я другого не понимаю, почему если человек не может разобраться, не подсказать ему? просто нормально все объяснить. на работе вряд ли вы говорите бухам и другим юзерам иди посмотри, книжку почитай...
|
|||
20
noxxx
01.05.12
✎
15:57
|
(19) Да тролли тут все. Что ты думала попала на форум где программисты сидят? Пфф ..
|
|||
21
Злопчинский
01.05.12
✎
16:47
|
помогите девушке, у ней фото в личке!
|
|||
22
katerinaUniv
01.05.12
✎
17:10
|
пока тут все "топтались" разобралась и написала код загрузки из xml файла
на всякий случай выкладываю тем, кому понадобится: Если ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"v7plus.dll")<>1 Тогда Предупреждение("Компонента не обнаружена"); Возврат; КонецЕсли; гXMLАнализатор = СоздатьОбъект("AddIn.XMLParser"); гФайл = гXMLАнализатор.СоздатьПоследовательноСчитываемыйДокумент(); ПолноеИмяФайла = КаталогЗагрузки2+ИмяФайла2; гФайл.СвязатьСФайлом(ПолноеИмяФайла); //найти ZAP //найти PACIENT ТипТега0 = гФайл.Спуститься(); // ТипТега1 = ТипТега0.Спуститься(); Пока ТипТега0 <> 4 Цикл // пока не достигнут конец файла Если ТипТега0 <> 1 Тогда ТипТега0 = гФайл.Следующий(); Продолжить; КонецЕсли; // пропускаем концы уровней и инструкции ИмяТега = гФайл.СвойстваТекущегоУзла.Имя; Если ИмяТега = "PERS_LIST" Тогда //спуститься и найти PACIENT // ЗагрузитьОбъектСправочника(); ТипТега0 = гФайл.Спуститься(); ИначеЕсли ИмяТега = "PERS" Тогда //берем данные по пациенту новые ТипТега0 = гФайл.Спуститься(); Продолжить; //ТипТега0.Следующий(); ИначеЕсли ИмяТега = "ID_PAC" Тогда //надо добавить новую строку и заполнить данные пациента стр = гФайл.ТекущийЭлементВВидеСтроки(); стр = стрЗаменить(стр, "<ID_PAC>", " "); стр = стрЗаменить(стр, "</ID_PAC>", " "); стр = стрЗаменить(стр, "<ID_PAC/>", " "); стр = СокрЛП(стр); КодЗаписиОПациенте = стр; КодЗаписиОПациенте1 = стр; Спр_Пац = СоздатьОбъект("Справочник.Пациенты"); пац = Спр_Пац.НайтиПоКоду(стр); Если пац = 1 Тогда Пациент = Спр_Пац.ТекущийЭлемент(); Если Пациент.ФлагИногородние = 0 Тогда НомерДокументаОМС = ?(СокрЛП(Пациент.АГС_ЕдиныйНомерПолиса)<>"", СокрЛП(Пациент.АГС_ЕдиныйНомерПолиса), СокрЛП(Пациент.НомерПолисаИногород)); СерияДокументаОМС = Пациент.СерияПолиса; //иногородние? Иначе НомерДокументаОМС = Пациент.НомерПолисаИногород; СерияДокументаОМС = Пациент.СерияПолисаИногород; КонецЕсли; СМО_РеестровыйНомер = Пациент.Плательщик_Терапия.КодСМО; ТипДокументаОМС = ?(СокрЛП(Пациент.АГС_ЕдиныйНомерПолиса)<>"",3, 1); Если Сокрлп(Пациент.СерияПолиса)="016" Тогда ТипДокументаОМС="2"; КонецЕсли; Плательщик = Пациент.Плательщик_Терапия; КонецЕсли; ИначеЕсли ИмяТега = "VPOLIS" Тогда //это версия полиса 1, 2, 3 стр = гФайл.ТекущийЭлементВВидеСтроки(); стр = стрЗаменить(стр, "<VPOLIS>", " "); стр = стрЗаменить(стр, "</VPOLIS>", " "); стр = стрЗаменить(стр, "<VPOLIS/>", " "); стр = СокрЛП(стр); ТипДокументаОМС1 = стр; ИначеЕсли ИмяТега = "SPOLIS" Тогда //это серия полиса стр = гФайл.ТекущийЭлементВВидеСтроки(); стр = стрЗаменить(стр, "<SPOLIS>", " "); стр = стрЗаменить(стр, "</SPOLIS>", " "); стр = стрЗаменить(стр, "<SPOLIS/>", " "); стр = СокрЛП(стр); СерияДокументаОМС1 = стр; ИначеЕсли ИмяТега = "NPOLIS" Тогда //номер полиса стр = гФайл.ТекущийЭлементВВидеСтроки(); стр = стрЗаменить(стр, "<NPOLIS>", " "); стр = стрЗаменить(стр, "</NPOLIS>", " "); стр = стрЗаменить(стр, "<NPOLIS/>", " "); стр = СокрЛП(стр); НомерДокументаОМС1 = стр; ИначеЕсли ИмяТега = "SMO" Тогда //это код плательщика стр = гФайл.ТекущийЭлементВВидеСтроки(); стр = стрЗаменить(стр, "<SMO>", " "); стр = стрЗаменить(стр, "</SMO>", " "); стр = стрЗаменить(стр, "<SMO/>", " "); стр = СокрЛП(стр); СМО_РеестровыйНомер1 = стр; ТипТега0 = гФайл.Подняться(); Спр_Плат = Создатьобъект("Справочник.Плательщики_Терапия"); пл = Спр_Плат.НайтиПоРеквизиту("КодСМО",стр,1); Если пл = 1 Тогда Плательщик1 = Спр_Плат.ТекущийЭлемент(); КонецЕсли; Иначе ТипТега0 = гФайл.Следующий(); Продолжить; КонецЕсли; ТипТега0 = гФайл.Следующий(); КонецЦикла; |
|||
23
katerinaUniv
01.05.12
✎
17:10
|
причем разбиралась сама, а не по типовым кодам конфигураций. последнее не всегда удобочитаемо.
|
|||
24
Мигрень
01.05.12
✎
17:13
|
(22) От спасибо, теперь бум поциэнтов грузить!
(23) Купи себе морожено за это. |
|||
25
nicxxx
02.05.12
✎
02:44
|
(22)мда
|
|||
26
andrewks
02.05.12
✎
08:55
|
в7плюс в топку
|
|||
27
alkov
02.05.12
✎
09:16
|
Дарю:
|
|||
28
alkov
02.05.12
✎
09:16
|
блин, тег криво прописал, ну да ладно
|
|||
29
alkov
02.05.12
✎
09:20
|
Но это всё не взлетит, если в (0) не закрыть тег, дописав в конце </ZAP>
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |