Имя: Пароль:
1C
 
Распределить пересорт запросом.
☑
0 егаис
 
24.09.26
✎
08:44
БП, партионка на 10 счете.
На остатке
Костюм / Основной склад / партия1...партия 5 / 100 шт

Условно надо распределить по партиям (по фифо) по такому пересорту:
Костюм 42р / основной склад / 20 шт
Костюм 43р / основной склад / 30 шт
Костюм 44р / основной склад / 50 шт

На выходе условно должны получить такое распределение по партиям
Костюм 42р / основной склад / партия1..партия 2 / 20 шт
Костюм 43р / основной склад / партия2..партия 3 / 30 шт
Костюм 44р / основной склад / партия4..партия 5 / 50 шт

В цикле распределить не проблема. А вот решается ли задача через запрос? Накидайте идей, пожалуйста.
1 2mugik
 
24.09.26
✎
09:53
(0)Циклом по моему оптимальней будет.
2 егаис
 
24.09.26
✎
09:59
(1) Уже сделано. Просто стало интересно решение запросом.
3 lubitelxml
 
24.09.26
✎
10:23
(2) нормальное решение такие задачи решать постобработкой результата запроса. Придет кто-то после тебя, посмотрит на запрос, выкинет и напишет через постобработку
4 Garykom
 
гуру
24.09.26
✎
10:40
(2) Если интересно то погугли про "нарастающие итоги в запросах"
https://infoblog.mywebguide.ru/articles/page_252362.html
5 Garykom
 
гуру
24.09.26
✎
10:42
(4)+ но лучше подобные задачи чисто через запросы не решать
есть риск уронить СУБД, когда кол-во партий превысит некий предел
6 Homer
 
24.09.26
✎
12:52
накидал)

ВЫБРАТЬ
	"Партия0" КАК Ссылка,
	1 КАК Кол,
	"МехКрокодила" КАК Аналитика1
ПОМЕСТИТЬ мТаб

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Партия1",
	9,
	"МехКрокодила"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Партия2",
	20,
	"МехКрокодила"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Партия3",
	20,
	"МехКрокодила"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Партия4",
	20,
	"МехКрокодила"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Партия5",
	30,
	"МехКрокодила"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Партия6",
	30,
	"МехКрокодила"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	"Шуба1" КАК Ссылка,
	20 КАК Кол
ПОМЕСТИТЬ мТабПолучатель

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Шуба2",
	30

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Шуба3",
	50
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	мТаб.Ссылка,
	мТаб.Кол,
	мТаб.Аналитика1,
	АВТОНОМЕРЗАПИСИ() КАК НН
ПОМЕСТИТЬ мТаб1
ИЗ
	мТаб КАК мТаб
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	мТаб1.Аналитика1,
	мТаб11.НН,
	мТаб1.НН КАК Отбор
ПОМЕСТИТЬ мТаб2
ИЗ
	мТаб1 КАК мТаб1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТаб1 КАК мТаб11
		ПО мТаб1.Аналитика1 = мТаб11.Аналитика1
			И мТаб1.НН <= мТаб11.НН
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	СУММА(мТаб1.Кол) КАК Кол,
	мТаб1.Аналитика1,
	мТаб2.НН
ПОМЕСТИТЬ мТаб3
ИЗ
	мТаб2 КАК мТаб2
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТаб1 КАК мТаб1
		ПО мТаб2.Отбор = мТаб1.НН

СГРУППИРОВАТЬ ПО
	мТаб2.НН,
	мТаб1.Аналитика1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	мТабПолучатель.Ссылка,
	мТабПолучатель.Кол,
	АВТОНОМЕРЗАПИСИ() КАК НН
ПОМЕСТИТЬ мТабПолучатель1
ИЗ
	мТабПолучатель КАК мТабПолучатель
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	мТабПолучатель11.НН КАК НН,
	мТабПолучатель1.НН КАК отбор
ПОМЕСТИТЬ мТабПолучатель2
ИЗ
	мТабПолучатель1 КАК мТабПолучатель1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТабПолучатель1 КАК мТабПолучатель11
		ПО мТабПолучатель1.НН <= мТабПолучатель11.НН
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	СУММА(мТабПолучатель1.Кол) КАК Кол,
	мТабПолучатель2.НН
ПОМЕСТИТЬ мТабПолучатель3
ИЗ
	мТабПолучатель1 КАК мТабПолучатель1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТабПолучатель2 КАК мТабПолучатель2
		ПО мТабПолучатель1.НН = мТабПолучатель2.отбор

СГРУППИРОВАТЬ ПО
	мТабПолучатель2.НН
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	мТаб3.НН КАК Материал,
	мТаб3.Кол КАК КолМатериал,
	мТабПолучатель3.НН КАК Изделие,
	мТабПолучатель3.Кол КАК КолИзделие
ПОМЕСТИТЬ мТабПеребор
ИЗ
	мТаб3 КАК мТаб3
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТаб1 КАК мТаб1
		ПО мТаб3.НН = мТаб1.НН
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТабПолучатель3 КАК мТабПолучатель3
		ПО (мТаб3.Кол - мТаб1.Кол < мТабПолучатель3.Кол)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	мТабПеребор.Изделие,
	МАКСИМУМ(мТабПеребор.Материал) КАК Материал,
	СУММА(ВЫБОР
			КОГДА мТабПеребор.КолМатериал = мТабПеребор.КолИзделие
				ТОГДА 1
			ИНАЧЕ 0
		КОНЕЦ) КАК Корректировка
ПОМЕСТИТЬ мТабПеребор1
ИЗ
	мТабПеребор КАК мТабПеребор

СГРУППИРОВАТЬ ПО
	мТабПеребор.Изделие
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	мТабПеребор11.Изделие КАК Изделие,
	мТабПеребор1.Материал + мТабПеребор1.Корректировка КАК Материал
ПОМЕСТИТЬ мТабПеребор2
ИЗ
	мТабПеребор1 КАК мТабПеребор1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТабПеребор1 КАК мТабПеребор11
		ПО (мТабПеребор1.Изделие = мТабПеребор11.Изделие - 1)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1,
	0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	мТабПолучатель1.Ссылка,
	мТабПолучатель1.Кол,
	мТаб1.Ссылка КАК Партия,
	мТаб1.Аналитика1
ПОМЕСТИТЬ мТабИтого
ИЗ
	мТабПеребор КАК мТабПеребор
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТабПеребор2 КАК мТабПеребор2
		ПО мТабПеребор.Изделие = мТабПеребор2.Изделие
			И мТабПеребор.Материал >= мТабПеребор2.Материал
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТаб1 КАК мТаб1
		ПО мТабПеребор.Материал = мТаб1.НН
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТабПолучатель1 КАК мТабПолучатель1
		ПО мТабПеребор.Изделие = мТабПолучатель1.НН
;
7 Злопчинский
 
24.09.26
✎
13:02
На инфостарте почитай статьи Ильдаровича - там как раз про это
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший