![]() |
|
Чтение XML | ☑ | ||
---|---|---|---|---|
0
Начинающий_13
21.07.16
✎
11:04
|
Здравствуйте
Делаю обмен данными между базами по документам в разрезе ставок НДС (общая по суммам) В различных документах номенклатура есть в различных комбинациях по ставками, где то только 20%, где то по 20% и 10% и т.д. При формировании XML файла идет проверка на наличие значений по суммам, естественно если аналитики и данном разрезе нет, то и выгрузку(не записываю) не делаю этих сумм, они же нолю равны(т.е. нет полей). Если документ только по 20%, то у него нет полей Summa10, SummaZero Если документ имеет 20% и 10%, то у него нет полей SummaZero При загрузке файла из XML , если каких то полей нет программа выдает ошибку поле допустим SummaZero не обнаружено. Загрузка идет через XDTO. Поскажите как можно проигнорировать поля при загрузке если их нет в файле. Часть код Для Каждого ДокХДТО из СписокXDTODoc Цикл //Док = Новый Структура("general"); //// Начало general //Док.general = Новый Массив; Если ТипЗнч(ДокХДТО.general)<> Тип("СписокXDTO")Тогда СписокXDTOСостав=Новый Массив; СписокXDTOСостав.Добавить(ДокХДТО.general); Иначе СписокXDTOСостав = ДокХДТО.general; КонецЕсли; Для каждого СтрокаСостава Из СписокXDTOСостав Цикл НВС = Объект.СписокДокументов.Добавить(); //// Данные накладной НВС.ДокументСсылка = СтрокаСостава.DocumentType; НВС.КлючСвязи = СоздатьНовыйКлючСвязиСервер(ЭтаФорма); НВС.СуммаВключаетНДС = СтрокаСостава.SummaVklNDS; НВС.ДокументНомер = СокрЛП(СтрокаСостава.DocumentNumber); НВС.ДокументДата = XMLЗначение(Тип("Дата"), СтрокаСостава.DocumentData); НВС.Сумма = XMLЗначение(Тип("Число"),СтрокаСостава.DocumentSumma); НВС.СуммаНДС = XMLЗначение(Тип("Число"),СтрокаСостава.DocumentSummaNDS); НВС.Всего = XMLЗначение(Тип("Число"),СтрокаСостава.DocumentTotal); ///// Данные Склада НайденныйСклад = Справочники.Склады.НайтиПоКоду(СокрЛП(СтрокаСостава.SkladCode)); НВС.Склад = НайденныйСклад; /////// Данные Склада куда //НайденныйСкладКуда = Справочники.Склады.НайтиПоКоду(СокрЛП(СтрокаСостава.SkladCode)); //НВС.Склад = НайденныйСкладКуда; ///// Данные Контрагента НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", СокрЛП(СтрокаСостава.ClientUNP)); НВС.Контрагент = НайденныйКонтрагент; Если СтрокаСостава.StavkaNDS20 = "20" Тогда НВ = Объект.СписокДокументовАналитика.Добавить(); НВ.КлючСвязи = НВС.КлючСвязи; НайденнаяНоменклатура = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(СтрокаСостава.TovarCode20)); НВ.Номенклатура = НайденнаяНоменклатура; мРеквизитыНоменклатуры = ЗначенияРеквизитовОбъекта(НайденнаяНоменклатура, "СтавкаНДС"); НВ.СтавкаНДС = мРеквизитыНоменклатуры.СтавкаНДС; НВ.Сумма = XMLЗначение(Тип("Число"),СтрокаСостава.Summa20); НВ.СуммаНДС = XMLЗначение(Тип("Число"),СтрокаСостава.SummaNDS20); НВ.Всего = XMLЗначение(Тип("Число"),СтрокаСостава.Total20); КонецЕсли; Если СтрокаСостава.StavkaNDS10 = "10" Тогда НВ = Объект.СписокДокументовАналитика.Добавить(); НВ.КлючСвязи = НВС.КлючСвязи; НайденнаяНоменклатура = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(СтрокаСостава.TovarCode10)); НВ.Номенклатура = НайденнаяНоменклатура; мРеквизитыНоменклатуры = ЗначенияРеквизитовОбъекта(НайденнаяНоменклатура, "СтавкаНДС"); НВ.СтавкаНДС = мРеквизитыНоменклатуры.СтавкаНДС; НВ.Сумма = XMLЗначение(Тип("Число"),СтрокаСостава.Summa10); НВ.СуммаНДС = XMLЗначение(Тип("Число"),СтрокаСостава.SummaNDS10); НВ.Всего = XMLЗначение(Тип("Число"),СтрокаСостава.Total10); КонецЕсли; Если СтрокаСостава.StavkaNDSZero = "0" Тогда НВ = Объект.СписокДокументовАналитика.Добавить(); НВ.КлючСвязи = НВС.КлючСвязи; НайденнаяНоменклатура = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(СтрокаСостава.TovarCodeZero)); НВ.Номенклатура = НайденнаяНоменклатура; мРеквизитыНоменклатуры = ЗначенияРеквизитовОбъекта(НайденнаяНоменклатура, "СтавкаНДС"); НВ.СтавкаНДС = мРеквизитыНоменклатуры.СтавкаНДС; НВ.Сумма = XMLЗначение(Тип("Число"),СтрокаСостава.SummaZero); //НВ.СуммаНДС = XMLЗначение(Тип("Число"),СтрокаСостава.SummaNDSZero); НВ.СуммаНДС = СтрокаСостава.SummaNDSZero; НВ.Всего = XMLЗначение(Тип("Число"),СтрокаСостава.TotalZero); КонецЕсли; КонецЦикла; //// Конец general КонецЦикла; //// Конец все объекты ХДТО |
|||
1
Tateossian
21.07.16
✎
11:07
|
(0) Надо у свойства XDTO "SummaZero" и "Summa10" в конфигруаторе поставить "Минимальное количество" 0.
|
|||
2
Tateossian
21.07.16
✎
11:08
|
+ (1) Разумеется, у нужного пакета XDTO
|
|||
3
Начинающий_13
21.07.16
✎
11:12
|
У меня нет схемы
ЧтениеХМЛ = Новый ЧтениеXML; ЧтениеХМЛ .ОткрытьФайл("c:\123.xml"); РезультатРазборки = Новый Массив; ДокументыХДТО = ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ); |
|||
4
Начинающий_13
21.07.16
✎
11:13
|
Если ТипЗнч(ДокументыХДТО.Doc)<> Тип("СписокXDTO")Тогда
СписокXDTODoc=Новый Массив; СписокXDTODoc.Добавить(ДокументыХДТО.Doc); Иначе СписокXDTODoc = ДокументыХДТО.Doc; КонецЕсли; |
|||
5
Serginio1
21.07.16
✎
11:13
|
Свойство=ОбъектXDTO.Свойства().получить(ИмяТвоегоСвойства);
Если ОбъектXDTO.Установлено(Свойство) Тогда |
|||
6
Начинающий_13
21.07.16
✎
11:13
|
Далее цикл
|
|||
7
Начинающий_13
21.07.16
✎
11:26
|
В цикле ставить, а то с XDTO первый раз загрузку делаю.
Он загрузил, но вопрос все равно задал от том, что поля нет Свойство=ДокументыХДТО.Свойства().получить(СтрокаСостава.StavkaNDSbezNDS); Если ДокументыХДТО.Установлено(Свойство) Тогда Если СтрокаСостава.StavkaNDSbezNDS = "БезНДС" Тогда НВ = Объект.СписокДокументовАналитика.Добавить(); НВ.КлючСвязи = НВС.КлючСвязи; НайденнаяНоменклатура = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(СтрокаСостава.TovarCodebezNDS)); НВ.Номенклатура = НайденнаяНоменклатура; мРеквизитыНоменклатуры = ЗначенияРеквизитовОбъекта(НайденнаяНоменклатура, "СтавкаНДС"); НВ.СтавкаНДС = мРеквизитыНоменклатуры.СтавкаНДС; НВ.Сумма = XMLЗначение(Тип("Число"),СтрокаСостава.SummabezNDS); //НВ.СуммаНДС = XMLЗначение(Тип("Число"),СтрокаСостава.SummaNDSbezNDS); НВ.СуммаНДС = СтрокаСостава.SummaNDSbezNDS; НВ.Всего = XMLЗначение(Тип("Число"),СтрокаСостава.TotalbezNDS); КонецЕсли; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |