Страницы: 1
RSS
Расчет списания товара по средней себестоимости в Power Query
 
Добрый день.

Столкнулся с такой проблемой, необходимо в PQ написать запрос, который автоматом рассчитывал бы сумму списания запасов по методу средней себестоимости, т.е.
Остаток на конец периода в руб.=
(Остаток на начало периода в руб. + Сумма приход в руб.)/
(Остаток на начало периода в шт. + Сумма приход в шт.)*
Сумма расход в шт.

Чувствую, что надо писать цикл в PQ, но пока не научился ((((
Пытался сделать в PP, но не знаю как побороть ту же цикличность.

Надеюсь на помощь! Заранее спасибо!
Изменено: alex112 - 06.02.2019 20:07:29 (Перезалил скорректированый файл)
 
alex112, честно говоря, не понял, с чем у Вас возникли сложности, и причём тут цикл. Просто добавляете в PQ новые столбцы с элементарной арифметикой.

P.S. Могу только предположить, что из-за null у Вас получался некорректный результат.
Изменено: Aleksei_Zhigulin - 05.02.2019 13:00:10
 
Aleksei_Zhigulin, проблема в том, что результат вычисления конечного остатка на конец дня = один из входных значение, для расчета конечного остатка последующего дня. Немного видоизменил исходный файл. Обозначил какая есть исходная информация. Также обозначил, что нужно получить и как это сделать в Excel.
Вот и хочу выяснить можно ли повторить это в PQ?
 
alex112, понятно, задачка интересная. Уверен, что в PQ такое можно повторить, на досуге попробую.
 
Цитата
alex112 написал:
Вот и хочу выяснить можно ли повторить это в PQ?

Можно, но не самым оптимальным образом. Ранее я приводил пример рекурсивной функции, находящей стартовую дату этапаз, которая зависит от завершения множества предыдущих этапов.
Изменено: Alexey_Spb - 05.02.2019 15:02:37
 
alex112, как-то так:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица13"]}[Content],
    cols = Table.SelectColumns(Source,{"Дата", "ПриходШТ", "ПриходСумм", "РасходШТ"}),
    types = Table.TransformColumnTypes(cols,{{"Дата", type date}, {"ПриходШТ", Int64.Type}, {"ПриходСумм", Int64.Type}, {"РасходШТ", Int64.Type}}),
    replace = Table.ReplaceValue(types,null,0,Replacer.ReplaceValue,{"Дата", "ПриходШТ", "ПриходСумм", "РасходШТ"}),
    records = List.Buffer(Table.ToRecords(replace)),
    generate = List.Generate(()=>
[i=0, row = records{i},
ПриходСумм = row[ПриходСумм], ПриходШТ = row[ПриходШТ], РасходШТ = row[РасходШТ],
С2шт = ПриходШТ - РасходШТ, С2Сумм = ПриходСумм - РасходСумм,
РасходСумм = ПриходСумм/ПриходШТ*РасходШТ],
each [i]<List.Count(records),
each [i = [i]+1, row = records{i},
ПриходСумм = row[ПриходСумм], ПриходШТ = row[ПриходШТ], РасходШТ = row[РасходШТ],
С2шт = [С2шт] + ПриходШТ - РасходШТ, С2Сумм = [С2Сумм] + ПриходСумм - РасходСумм,
РасходСумм = ([С2Сумм] + ПриходСумм)/([С2шт] + ПриходШТ)*РасходШТ],
each [[РасходСумм], [С2шт], [С2Сумм]]),
    combine = List.Transform(List.Zip({records,generate}), Record.Combine),
    toTable = Table.FromList(combine, Splitter.SplitByNothing()),
    expand = Table.ExpandRecordColumn(toTable, "Column1", {"Дата", "ПриходШТ", "ПриходСумм", "РасходШТ", "РасходСумм", "С2шт", "С2Сумм"}),
    types1 = Table.TransformColumnTypes(expand,{{"Дата", type date}, {"ПриходШТ", Int64.Type}, {"ПриходСумм", Int64.Type}, {"РасходШТ", Int64.Type}, {"РасходСумм", type number}, {"С2шт", Int64.Type}, {"С2Сумм", type number}})
in
    types1
Изменено: Aleksei_Zhigulin - 06.02.2019 19:57:51
 
Aleksei_Zhigulin, Спасибо большое. То ,что надо.
Я уже сам почти решил эту задачу, но никак не получаются правильные цифры, хожу все да около, а результат неправильный))))))) Вообщем, разберу Ваш запрос по кусочкам  и пойму что не так я делаю.
Изменено: alex112 - 06.02.2019 20:08:22
Страницы: 1
Наверх