1с запрос. Некий счетчик суммы. Есть таблица с 5 числами и есть поле с суммой, поэтапно вычисть эти суммы.

1. user606894_schana1w3 18.06.21 16:19 Сейчас в теме
Здравствуйте, подскажите пожалуйста, как запросом сделать такую штуку:

Сделал некую выборку с регистра продаж

В итоге получил результат типа

Булочка 10 шт 400
Хлеб 20 шт 500
Печенье 5 шт 1000

И ввел в запрос свое поле которому задаю некую сумму которая должна распределиться на продукты.

К примеру задал в реквизите 1000

В итоге нужно так

Булочка 10 шт 400 /400
Хлеб 20 шт 500 /500
Печенье 5 шт 1000 /100
тоесть мы эту 1000 списали в 0

После запроса в цикле я понимаю как это сделать, а в самом запросе не понимаю, может быть знает кто?)
Найденные решения
2. starik-2005 3046 18.06.21 16:28 Сейчас в теме
В действительности в запросе это будет криво - сложно будет избавиться от округления. После запроса циклом в один проход - сотни статей есть (хоть вон у меня про распределение суммы по базе, хоть у Ильдаровича - есть у него целая сводная статья о том, какойй алгоритм лучше).

В запросе суть сводится к тому, что берется сумма итого, вычисляется коэффициент (итого/сумма распределения), потом каждая строка умножается на коэффициент, потом к последней строке дельту добавляют - то еще занятие.

Так что после запроса - это самое то. Но если нужен отчет на СКД, или если это какой-то конструктор собственный/купленный для отчетов, то да, придется все во временную таблицу, потом сумму во временную таблицу с коэффициентом, потом временную таблицу на коэффициент, потом еще раз к последней строке дельту, потом агрегировать. Сколько это будет работать - одному кришне известно )))
user606894_schana1w3; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 3046 18.06.21 16:28 Сейчас в теме
В действительности в запросе это будет криво - сложно будет избавиться от округления. После запроса циклом в один проход - сотни статей есть (хоть вон у меня про распределение суммы по базе, хоть у Ильдаровича - есть у него целая сводная статья о том, какойй алгоритм лучше).

В запросе суть сводится к тому, что берется сумма итого, вычисляется коэффициент (итого/сумма распределения), потом каждая строка умножается на коэффициент, потом к последней строке дельту добавляют - то еще занятие.

Так что после запроса - это самое то. Но если нужен отчет на СКД, или если это какой-то конструктор собственный/купленный для отчетов, то да, придется все во временную таблицу, потом сумму во временную таблицу с коэффициентом, потом временную таблицу на коэффициент, потом еще раз к последней строке дельту, потом агрегировать. Сколько это будет работать - одному кришне известно )))
user606894_schana1w3; +1 Ответить
3. user606894_schana1w3 18.06.21 17:21 Сейчас в теме
(2)Понял, спасибо, значит в цикле буду обрабатывать)
4. bmk74 235 18.06.21 23:02 Сейчас в теме
(2)Ну в данном случае тут не нужны коэффициенты, так как сумма распределяется сверху вниз, и сделать это совсем не сложно в запросе
Типа такого
ВЫБРАТЬ
	"Булочка" КАК Номенклатура,
	10 КАК Количество,
	400 КАК Сумма,
	1000 КАК РаспределяемаяСумма
ПОМЕСТИТЬ ВТ_Номенклатура

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	"Хлеб",
	20,
	600,
	1000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	"Печенье",
	5,
	300,
	1000
	
ОБЪЕДИНИТЬ

ВЫБРАТЬ
	"Вода",
	5,
	700,
	1000	
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Номенклатура.Номенклатура КАК Номенклатура,
	ВТ_Номенклатура.Количество КАК Количество,
	ВТ_Номенклатура.Сумма КАК Сумма,
	ВЫБОР
		КОГДА ЕСТЬNULL(СУММА(ВТ_Номенклатура1.Сумма), 0) <= ВТ_Номенклатура.РаспределяемаяСумма
			ТОГДА ВЫБОР
					КОГДА ВТ_Номенклатура.Сумма <= ВТ_Номенклатура.РаспределяемаяСумма - ЕСТЬNULL(СУММА(ВТ_Номенклатура1.Сумма), 0)
						ТОГДА ВТ_Номенклатура.Сумма
					ИНАЧЕ ВТ_Номенклатура.РаспределяемаяСумма - СУММА(ВТ_Номенклатура1.Сумма)
				КОНЕЦ
		ИНАЧЕ 0
	КОНЕЦ КАК Распределено,
	ВТ_Номенклатура.РаспределяемаяСумма КАК РаспределяемаяСумма
ИЗ
	ВТ_Номенклатура КАК ВТ_Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Номенклатура КАК ВТ_Номенклатура1
		ПО  ВТ_Номенклатура.Номенклатура > ВТ_Номенклатура1.Номенклатура

СГРУППИРОВАТЬ ПО
	ВТ_Номенклатура.Номенклатура,
	ВТ_Номенклатура.Количество,
	ВТ_Номенклатура.РаспределяемаяСумма,
	ВТ_Номенклатура.Сумма

УПОРЯДОЧИТЬ ПО Номенклатура
Показать


Другой вопрос, тут сумма должна быть заведомо меньшей то на что распределяем, ну и второй это то что суммы кинет как бы на что то :)...но у ТС вроде и не стояло задачи на что кидать и насчет суммы тоже ничего не было сказано
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот