1с запрос. Некий счетчик суммы. Есть таблица с 5 числами и есть поле с суммой, поэтапно вычисть эти суммы.
Здравствуйте, подскажите пожалуйста, как запросом сделать такую штуку:
Сделал некую выборку с регистра продаж
В итоге получил результат типа
Булочка 10 шт 400
Хлеб 20 шт 500
Печенье 5 шт 1000
И ввел в запрос свое поле которому задаю некую сумму которая должна распределиться на продукты.
К примеру задал в реквизите 1000
В итоге нужно так
Булочка 10 шт 400 /400
Хлеб 20 шт 500 /500
Печенье 5 шт 1000 /100
тоесть мы эту 1000 списали в 0
После запроса в цикле я понимаю как это сделать, а в самом запросе не понимаю, может быть знает кто?)
Сделал некую выборку с регистра продаж
В итоге получил результат типа
Булочка 10 шт 400
Хлеб 20 шт 500
Печенье 5 шт 1000
И ввел в запрос свое поле которому задаю некую сумму которая должна распределиться на продукты.
К примеру задал в реквизите 1000
В итоге нужно так
Булочка 10 шт 400 /400
Хлеб 20 шт 500 /500
Печенье 5 шт 1000 /100
тоесть мы эту 1000 списали в 0
После запроса в цикле я понимаю как это сделать, а в самом запросе не понимаю, может быть знает кто?)
Найденные решения
В действительности в запросе это будет криво - сложно будет избавиться от округления. После запроса циклом в один проход - сотни статей есть (хоть вон у меня про распределение суммы по базе, хоть у Ильдаровича - есть у него целая сводная статья о том, какойй алгоритм лучше).
В запросе суть сводится к тому, что берется сумма итого, вычисляется коэффициент (итого/сумма распределения), потом каждая строка умножается на коэффициент, потом к последней строке дельту добавляют - то еще занятие.
Так что после запроса - это самое то. Но если нужен отчет на СКД, или если это какой-то конструктор собственный/купленный для отчетов, то да, придется все во временную таблицу, потом сумму во временную таблицу с коэффициентом, потом временную таблицу на коэффициент, потом еще раз к последней строке дельту, потом агрегировать. Сколько это будет работать - одному кришне известно )))
В запросе суть сводится к тому, что берется сумма итого, вычисляется коэффициент (итого/сумма распределения), потом каждая строка умножается на коэффициент, потом к последней строке дельту добавляют - то еще занятие.
Так что после запроса - это самое то. Но если нужен отчет на СКД, или если это какой-то конструктор собственный/купленный для отчетов, то да, придется все во временную таблицу, потом сумму во временную таблицу с коэффициентом, потом временную таблицу на коэффициент, потом еще раз к последней строке дельту, потом агрегировать. Сколько это будет работать - одному кришне известно )))
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В действительности в запросе это будет криво - сложно будет избавиться от округления. После запроса циклом в один проход - сотни статей есть (хоть вон у меня про распределение суммы по базе, хоть у Ильдаровича - есть у него целая сводная статья о том, какойй алгоритм лучше).
В запросе суть сводится к тому, что берется сумма итого, вычисляется коэффициент (итого/сумма распределения), потом каждая строка умножается на коэффициент, потом к последней строке дельту добавляют - то еще занятие.
Так что после запроса - это самое то. Но если нужен отчет на СКД, или если это какой-то конструктор собственный/купленный для отчетов, то да, придется все во временную таблицу, потом сумму во временную таблицу с коэффициентом, потом временную таблицу на коэффициент, потом еще раз к последней строке дельту, потом агрегировать. Сколько это будет работать - одному кришне известно )))
В запросе суть сводится к тому, что берется сумма итого, вычисляется коэффициент (итого/сумма распределения), потом каждая строка умножается на коэффициент, потом к последней строке дельту добавляют - то еще занятие.
Так что после запроса - это самое то. Но если нужен отчет на СКД, или если это какой-то конструктор собственный/купленный для отчетов, то да, придется все во временную таблицу, потом сумму во временную таблицу с коэффициентом, потом временную таблицу на коэффициент, потом еще раз к последней строке дельту, потом агрегировать. Сколько это будет работать - одному кришне известно )))
(2)Ну в данном случае тут не нужны коэффициенты, так как сумма распределяется сверху вниз, и сделать это совсем не сложно в запросе
Типа такого
Другой вопрос, тут сумма должна быть заведомо меньшей то на что распределяем, ну и второй это то что суммы кинет как бы на что то :)...но у ТС вроде и не стояло задачи на что кидать и насчет суммы тоже ничего не было сказано
Типа такого
ВЫБРАТЬ
"Булочка" КАК Номенклатура,
10 КАК Количество,
400 КАК Сумма,
1000 КАК РаспределяемаяСумма
ПОМЕСТИТЬ ВТ_Номенклатура
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Хлеб",
20,
600,
1000
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Печенье",
5,
300,
1000
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Вода",
5,
700,
1000
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Номенклатура.Номенклатура КАК Номенклатура,
ВТ_Номенклатура.Количество КАК Количество,
ВТ_Номенклатура.Сумма КАК Сумма,
ВЫБОР
КОГДА ЕСТЬNULL(СУММА(ВТ_Номенклатура1.Сумма), 0) <= ВТ_Номенклатура.РаспределяемаяСумма
ТОГДА ВЫБОР
КОГДА ВТ_Номенклатура.Сумма <= ВТ_Номенклатура.РаспределяемаяСумма - ЕСТЬNULL(СУММА(ВТ_Номенклатура1.Сумма), 0)
ТОГДА ВТ_Номенклатура.Сумма
ИНАЧЕ ВТ_Номенклатура.РаспределяемаяСумма - СУММА(ВТ_Номенклатура1.Сумма)
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК Распределено,
ВТ_Номенклатура.РаспределяемаяСумма КАК РаспределяемаяСумма
ИЗ
ВТ_Номенклатура КАК ВТ_Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Номенклатура КАК ВТ_Номенклатура1
ПО ВТ_Номенклатура.Номенклатура > ВТ_Номенклатура1.Номенклатура
СГРУППИРОВАТЬ ПО
ВТ_Номенклатура.Номенклатура,
ВТ_Номенклатура.Количество,
ВТ_Номенклатура.РаспределяемаяСумма,
ВТ_Номенклатура.Сумма
УПОРЯДОЧИТЬ ПО Номенклатура
ПоказатьДругой вопрос, тут сумма должна быть заведомо меньшей то на что распределяем, ну и второй это то что суммы кинет как бы на что то :)...но у ТС вроде и не стояло задачи на что кидать и насчет суммы тоже ничего не было сказано
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот