![]() |
![]() |
|
Чтение xml и заполнение реквизита | ☑ | ||
---|---|---|---|---|
0
Warior
28.07.21
✎
16:18
|
Всем привет! Столкнулся с такой проблемой:
При чтении xml файла не заполняет реквизит "Валюта" Кусок xml файла: <?xml version = '1.0' encoding = 'windows-1251'?> <ROOT> <QUERY TYPE="1" ACCOUNT="1" NAME="Один"> <INPUT> <Date>01.01.2012</Date> <CurrCode>RUB</CurrCode> <SortBy>0</SortBy> <Name>Один</Name>у <UNN>123123123</UNN> <Version>1</Version> </INPUT> Часть кода, где хочу записать значение в реквизит "Валюта" Если Чтение.Имя = "QUERY" И Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда СчетОрганизации = Справочники.БанковскиеСчета.НайтиПоРеквизиту("НомерСчета", Чтение.ПолучитьАтрибут("ACCOUNT")); Валюта = Справочники.Валюты.НайтиПоКоду(Чтение.ПолучитьАтрибут("CURR")); ВыпискаРублевая = Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); ИначеЕсли Чтение.Имя = "INPUT" И Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Пока Чтение.Прочитать() И НЕ (Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента И Чтение.Имя = "INPUT") Цикл Если Чтение.Имя = "CurrCode" Тогда Чтение.Прочитать(); Если Чтение.Имя = "#text" И Чтение.Значение = "RUB" Тогда Валюта = Справочники.Валюты.НайтиПоКоду("643"); КонецЕсли; КонецЕсли; Если Чтение.Имя = "UNN" Тогда Чтение.Прочитать(); Если Чтение.Имя = "#text" Тогда Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", Чтение.Значение); КонецЕсли; ИначеЕсли Чтение.Имя = "Date" Тогда Чтение.Прочитать(); Если Чтение.Имя = "#text" Тогда ВхДата = Чтение.Значение; ДатаВыписки = Дата(Прав(ВхДата, 4), Сред(ВхДата, 4, 2), Лев(ВхДата, 2)); КонецЕсли; КонецЕсли; КонецЦикла; ИначеЕсли Чтение.Имя = "OUTPUT" И Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Пока Чтение.Прочитать() И НЕ (Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента И Чтение.Имя = "OUTPUT") Цикл Если Чтение.Имя = "Header7" Тогда Чтение.Прочитать(); Если Чтение.Имя = "#text" И Чтение.Значение = "BYN" Тогда Валюта = Справочники.Валюты.НайтиПоКоду("933"); ВыпискаРублевая = Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); КонецЕсли; |
|||
1
Beduin
28.07.21
✎
16:19
|
Вы троллите нас сегодня. Второй человек с регистрацией 1 день
Валюта = Справочники.Валюты.НайтиПоКоду("933"); ВыпискаРублевая = Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); |
|||
2
Warior
28.07.21
✎
16:22
|
Так это с условием, что в Header7 у меня стоит "BYN"
|
|||
3
Beduin
28.07.21
✎
16:24
|
(2) А как ты пришел вот к этому.
ВыпискаРублевая = Валюта Что ты хочешь в этой строчке сделать? |
|||
4
Warior
28.07.21
✎
16:26
|
Если ВыпискаРублевая Тогда
СтрокаВыписки.Приход = Чтение.ПолучитьАтрибут("Credit"); СтрокаВыписки.Расход = Чтение.ПолучитьАтрибут("Db"); КонецЕсли; |
|||
5
Beduin
28.07.21
✎
16:29
|
(4) Покажи просто строчку кода, где пишешь в реквизит "Валюта".
|
|||
6
Мультук
гуру
28.07.21
✎
16:30
|
(0) Смотрим в XML
<QUERY TYPE="1" ACCOUNT="1" NAME="Один"> Тэг - "QUERY" есть Атрибут -- ACCOUNT - есть Где здесь атрибут "CURR" ? Если Чтение.Имя = "QUERY" И Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда СчетОрганизации = Справочники.БанковскиеСчета.НайтиПоРеквизиту("НомерСчета", Чтение.ПолучитьАтрибут("ACCOUNT")); Валюта = Справочники.Валюты.НайтиПоКоду(Чтение.ПолучитьАтрибут("CURR")); |
|||
7
Warior
28.07.21
✎
16:31
|
Дело в том, что не во всех xml есть CURR.
|
|||
8
Warior
28.07.21
✎
16:31
|
Если CURR нет, оно выставляет основную валюту, которая указана в Header7
|
|||
9
Warior
28.07.21
✎
16:32
|
А мне нужно, если CURR нет, то проверяло CurrCode из INPUT
|
|||
10
Warior
28.07.21
✎
16:33
|
Если нет CURR и CurrCode, то тогда брало значение из Header7
|
|||
11
Warior
28.07.21
✎
16:35
|
Почему-то пропускает этот интервал:
Если Чтение.Имя = "CurrCode" Тогда Чтение.Прочитать(); Если Чтение.Имя = "#text" И Чтение.Значение = "RUB" Тогда Валюта = Справочники.Валюты.НайтиПоКоду("643"); ВыпискаРублевая = Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); КонецЕсли; КонецЕсли; |
|||
12
Мультук
гуру
28.07.21
✎
16:41
|
(11)
ИначеЕсли Чтение.Имя = "INPUT" И Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда >>> Вот тут если условие сработало, а оно сработало и имя = INPUT то мы идем дальше и запускаем цикл, который Пока Чтение.Прочитать() И НЕ (Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента И Чтение.Имя = "INPUT") Цикл >>> читает следующий элемент и это уже <Date>. Это не конец элемента, но уже и не "INPUT" >>> Цикл прекращается на условии И Чтение.Имя = "INPUT" даже не начавшись. |
|||
13
Fragster
гуру
28.07.21
✎
16:49
|
у меня возникло желание сжечь код из (0), описать XSD схему или пакет XDTO и грузить практически одной строкой (ну ладно, строк больше, по одной на каждое присвоение реквизитов).
|
|||
14
Warior
28.07.21
✎
16:58
|
(12) Получается так?
<code>ИначеЕсли Чтение.Имя = "INPUT" И Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Пока Чтение.Прочитать() И НЕ (Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента И Чтение.Имя = "INPUT") Цикл Если Чтение.Имя = "UNN" Тогда Чтение.Прочитать(); Если Чтение.Имя = "#text" Тогда Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", Чтение.Значение); КонецЕсли; ИначеЕсли Чтение.Имя = "Date" Тогда Чтение.Прочитать(); Если Чтение.Имя = "#text" Тогда ВхДата = Чтение.Значение; ДатаВыписки = Дата(Прав(ВхДата, 4), Сред(ВхДата, 4, 2), Лев(ВхДата, 2)); КонецЕсли; ИначеЕсли Чтение.Имя = "CurrCode" Тогда Чтение.Прочитать(); Если Чтение.Имя = "#text" И Чтение.Значение = "RUB" Тогда Валюта = Справочники.Валюты.НайтиПоКоду("643"); ВыпискаРублевая = Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); КонецЕсли; КонецЕсли; КонецЦикла;</code> |
|||
15
Вафель
28.07.21
✎
17:00
|
а что бы фабрику не заюзать?
|
|||
16
Warior
28.07.21
✎
17:01
|
Не понял (15)
|
|||
17
Вафель
28.07.21
✎
17:01
|
||||
18
Warior
28.07.21
✎
17:05
|
Там слишком просто)
|
|||
19
Warior
28.07.21
✎
17:08
|
Всё получалось, но вот что-то застрял на одном месте.
|
|||
20
Warior
28.07.21
✎
17:11
|
Все заполняет, но вот только значение не хочет заполнять в реквизит.
|
|||
21
Fragster
гуру
28.07.21
✎
17:12
|
(19) тебе за количество строк платят, чтоли? или за время работы программы? помню, ускорил один процесс с 6 часов до 12 минут (а потом организационно его вообще устранили) - так меня тот, кто этим занимался сильно не полюбил.
|
|||
22
Warior
28.07.21
✎
17:12
|
Если в xml указан CURR или Header7 то работает все прекрасно, всё подставляет.
Как только хочу прочитать данные из CurrCode, так сразу беда. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |