структура СтруктураПоискТовары
обз пер Товары: Множество<СтруктураПоискТовар>
;
структура СтруктураПоискТовар
обз пер Код: Строка
обз пер КодСклада: Строка
обз пер ОбщееКоличество: Число
обз пер ЕИ: Строка
;
метод НайтиОстаткиТовараНаСкладе(ДокументXml: Файл)
знч КодСклада = "M002"
исп ПотокЧтения = ДокументXml.ОткрытьПотокЧтения()
знч ПрефиксыПространствИмен = {"": "http://company/data/stock"}
знч ПараметрыПоиска = {"КодСклада": КодСклада}
знч ВыражениеXPath = новый ВыражениеXPath("/ОстаткиТоваров/Склад[@Код = \$КодСклада]", ПрефиксыПространствИмен)
знч Поиск = новый ПоискXPath(ВыражениеXPath, ПараметрыПоиска)
знч УзелСклад = Поиск.НайтиПервый(ПотокЧтения)
если УзелСклад == Неопределено
возврат
;
знч ОбщееКоличество = ВычислитьОбщееКоличествоXPath(УзелСклад, ПрефиксыПространствИмен)
знч Товары = НайтиТовары(УзелСклад)
знч ВыражениеXPath2 = новый ВыражениеXPath("Товар[Запас[@Вид = \$ВидЗапаса]/@Количество > \$Количество)]/@Код", ПрефиксыПространствИмен)
знч ПоискКодовТоваров = новый ПоискXPath(ВыражениеXPath2)
пер ПараметрВидЗапаса = 2
пер ПараметрК оличество = 5
пер КодыТоваров = НайтиКодыТоваровСОстаткамиПоВидуЗапаса(ПоискКодовТоваров, УзелСклад, ПараметрВидЗапаса, ПараметрКоличество)
ПараметрВидЗапаса = 1
ПараметрКоличество = 5.4
КодыТоваров = НайтиКодыТоваровСОстаткамиПоВидуЗапаса(ПоискКодовТоваров, УзелСклад, Пара метрВидЗапаса, ПараметрКоличество)
;
метод ВычислитьОбщееКоличествоXPath(УзелСклад: УзелXmlDom, ПрефиксыПространствИмен: ЧитаемоеСоответствие<Строка, Строка>): Число
знч ВыражениеXPath = новый ВыражениеXPath("sum(Товар/Запас/@Количество)", ПрефиксыПространствИмен)
знч Поиск = новый ПоискXPath(ВыражениеXPath)
знч ОбщееКоличество = Поиск.НайтиПервый(УзелСклад).ЗначениеКакЧисло()
возврат ОбщееКоличество
;
метод НайтиТовары(УзелСклад: УзелXmlDom): СтруктураПоискТовары
пер ТоварыРезультат = новый СтруктураПоискТовары(новый Множество<СтруктураПоискТовар>())
знч Товары = УзелСклад.ПолучитьДочерниеУзлы("Товар")
для Товар из Товары
пер ОбщееКоличество: Число
знч КодТовара = Товар.ПолучитьАтрибут("Код").ЗначениеКакСтрока()
знч КодСклада = Товар.ПолучитьРодительскийУзел().ПолучитьАтрибут("Код").ЗначениеКакСтрока()
знч ЕИ = Товар.ПолучитьАтрибут("ЕИ").ЗначениеКакСтрока()
знч Запасы = Товар.ПолучитьДочерниеУзлы("Запас")
для Запас из Запасы
ОбщееКоличество += новый Число(Запас.ПолучитьАтрибут("Количество").ЗначениеКакСтрока())
;
ТоварыРезультат.Товары.Добавить(новый СтруктураПоискТовар(КодТовара, КодСклада, ОбщееКоличество, ЕИ))
;
возврат ТоварыРезультат
;
метод НайтиКодыТоваровСОстаткамиПоВидуЗапаса(Поиск: ПоискXPath, УзелСклад: УзелXmlDom, ПараметрВидЗапаса: Число, ПараметрКоличество: Число): ЧитаемоеМножество<Строка>
знч КодыТоваров = новый Множест во<Строка>()
Поиск.УстановитьПараметр("ВидЗапаса", ПараметрВидЗапаса.ВСтроку())
Поиск.УстановитьПараметр("Количество", ПараметрКоличество.ВСтроку())
знч УзлыКодыТоваров = Поиск.Найти(УзелСклад)
если УзлыКодыТоваров.Пусто()
возврат КодыТоваров
;
для УзелКодТовара из УзлыКодыТоваров
КодыТоваров.Добавить(УзелКодТовара.ЗначениеКакСтрока())
;
возврат КодыТоваров
;