LIFO запросом

1. maxis33 45 03.07.19 18:47 Сейчас в теме
Коллеги, добрый день!

Второй день бьюсь на тему LIFO запросом. Есть таблица с приходами, таблица с расходами.
по публикации https://infostart.ru/public/68225/ сделал FIFO - все отлично работает, но не получается с LIFO. вроде 3 временный тамблиц всего, но не идет..
Может подскажет кто, куда копать? Хочется именно запросом, поскольку это часть другого большого запроса...
во вложении тестовый сокращенный вариант сделанный по вышеуказанной публикации..
Прикрепленные файлы:
FIFO_LIFO_FIFO.erf
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SaschaL 03.07.19 20:22 Сейчас в теме
Добрый вечер.
Какая конфигурация, на чем пробовать вашу обработку?
Teut_Vlad; +1 Ответить
3. aka Любитель XML 03.07.19 21:36 Сейчас в теме
(2) я там вообще в обработке кода не увидел, просто пустая обработка
5. tusv 212 04.07.19 08:21 Сейчас в теме
(2)Там конфа по барабану
(1) Пилите временные таблицы, через вложенный запрос с сортировкой по ДатаСобытия Убыв
6. maxis33 45 04.07.19 11:17 Сейчас в теме
(5)
Пилите временные таблицы, через вложенный запрос с сортировкой

там всего пару-тройка временных таблиц, какую пилить? ;) Несколько вариантов перепробовал-не взлетело...
(2) - там все данные в СКД, меаданные конфигурации не используются, так что на любой запустится..
4. pm74 202 03.07.19 21:48 Сейчас в теме
удалено
 удалено

сорри невнимательно тему прочитал
7. maxis33 45 04.07.19 11:18 Сейчас в теме
Запрос из обработки:
ВЫБРАТЬ
	"Контрагент" КАК Контрагент,
	ДАТАВРЕМЯ(2017, 9, 27) КАК ДатаСобытия,
	9448.84 КАК Площадь
ПОМЕСТИТЬ ВТ_ПриходНаКонец

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2018, 4, 6),
	1507.06

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2018, 9, 15),
	3208.7

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2019, 4, 23),
	122

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2019, 5, 1),
	2100
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	"Контрагент" КАК Контрагент,
	ДАТАВРЕМЯ(2019, 12, 19) КАК ДатаСобытия,
	2100 КАК Площадь
ПОМЕСТИТЬ ВТ_РасходНаКонец

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2018, 12, 15),
	3208.7

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2020, 2, 29),
	122

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2021, 2, 14),
	10955.9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ПриходНаКонец.Контрагент КАК Контрагент,
	ВТ_ПриходНаКонец.ДатаСобытия КАК ДатаСобытия,
	ВТ_ПриходНаКонец.Площадь КАК Площадь,
	СУММА(ВТ_ПриходНаКонец1.Площадь) - ВТ_ПриходНаКонец.Площадь КАК ПлощадьДо,
	СУММА(ВТ_ПриходНаКонец1.Площадь) КАК ПлощадьПосле
ПОМЕСТИТЬ ВТ_НарПриходНаКонец
ИЗ
	ВТ_ПриходНаКонец КАК ВТ_ПриходНаКонец
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПриходНаКонец КАК ВТ_ПриходНаКонец1
		ПО ВТ_ПриходНаКонец.Контрагент = ВТ_ПриходНаКонец1.Контрагент
			И ВТ_ПриходНаКонец.ДатаСобытия >= ВТ_ПриходНаКонец1.ДатаСобытия

СГРУППИРОВАТЬ ПО
	ВТ_ПриходНаКонец.Контрагент,
	ВТ_ПриходНаКонец.ДатаСобытия,
	ВТ_ПриходНаКонец.Площадь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_РасходНаКонец.Контрагент КАК Контрагент,
	ВТ_РасходНаКонец.ДатаСобытия КАК ДатаСобытия,
	ВТ_РасходНаКонец.Площадь КАК Площадь,
	СУММА(ВТ_РасходНаКонец1.Площадь) - ВТ_РасходНаКонец.Площадь КАК ПлощадьДо,
	СУММА(ВТ_РасходНаКонец1.Площадь) КАК ПлощадьПосле
ПОМЕСТИТЬ ВТ_НарРасходНаКонец
ИЗ
	ВТ_РасходНаКонец КАК ВТ_РасходНаКонец
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_РасходНаКонец КАК ВТ_РасходНаКонец1
		ПО ВТ_РасходНаКонец.Контрагент = ВТ_РасходНаКонец1.Контрагент
			И ВТ_РасходНаКонец.ДатаСобытия >= ВТ_РасходНаКонец1.ДатаСобытия

СГРУППИРОВАТЬ ПО
	ВТ_РасходНаКонец.Контрагент,
	ВТ_РасходНаКонец.ДатаСобытия,
	ВТ_РасходНаКонец.Площадь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_НарРасходНаКонец.ДатаСобытия КАК ДатаСобытияРасход,
	ВТ_НарПриходНаКонец.ДатаСобытия КАК ДатаСобытияПриход,
	ВТ_НарРасходНаКонец.Контрагент КАК Контрагент,
	ВТ_НарРасходНаКонец.Площадь КАК ПлощадьПоДокументу,
	ВЫБОР
		КОГДА ВТ_НарПриходНаКонец.ДатаСобытия ЕСТЬ NULL
			ТОГДА 0
		ИНАЧЕ ВЫБОР
				КОГДА ВТ_НарПриходНаКонец.ПлощадьПосле < ВТ_НарРасходНаКонец.ПлощадьПосле
					ТОГДА ВТ_НарПриходНаКонец.ПлощадьПосле
				ИНАЧЕ ВТ_НарРасходНаКонец.ПлощадьПосле
			КОНЕЦ - ВЫБОР
				КОГДА ВТ_НарПриходНаКонец.ПлощадьДо > ВТ_НарРасходНаКонец.ПлощадьДо
					ТОГДА ВТ_НарПриходНаКонец.ПлощадьДо
				ИНАЧЕ ВТ_НарРасходНаКонец.ПлощадьДо
			КОНЕЦ
	КОНЕЦ КАК ПлощадьСписания,
	ВТ_НарРасходНаКонец.ДатаСобытия КАК ДатаСобытия,
	ЕСТЬNULL(ВТ_НарПриходНаКонец.Площадь, 1) КАК ПлощадьПартии
ИЗ
	ВТ_НарРасходНаКонец КАК ВТ_НарРасходНаКонец
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НарПриходНаКонец КАК ВТ_НарПриходНаКонец
		ПО ВТ_НарРасходНаКонец.Контрагент = ВТ_НарПриходНаКонец.Контрагент
			И ВТ_НарРасходНаКонец.ПлощадьПосле > ВТ_НарПриходНаКонец.ПлощадьДо
			И ВТ_НарРасходНаКонец.ПлощадьДо < ВТ_НарПриходНаКонец.ПлощадьПосле
			И ВТ_НарРасходНаКонец.ДатаСобытия > ВТ_НарПриходНаКонец.ДатаСобытия
Показать
8. Kashemir 352 04.07.19 13:13 Сейчас в теме
(7) Задача не ясна. Указаны остатки по состоянию на разные даты или обороты ? Если обороты почему не объединить в одну таблицу, где расход будет с минусом и после строить накопительный итог в ту или другую сторону. Если же остатки то опять же сперва требуется объединить в хронологию остатков, посчитать обороты между всеми неразрывными парами дат обороты и далее работать как с оборотами.

Как должен выглядеть ожидаемая результирующая таблица на данном примере данных ?
10. maxis33 45 04.07.19 14:10 Сейчас в теме
(8) указаны движения. на скрине (приложил) исходная таблица - это что-то типа прихода и расхода товаров. "Дата прихода" и есть партия. (прихода и расхода в один день нет).
Ожидаемый результат - внизу на скрине.
Прикрепленные файлы:
12. Kashemir 352 04.07.19 14:58 Сейчас в теме
(10) Судя по результату на суммы расходов в хронологии надо набрать партии приходов. Но порядок разнесения приходов смущает - 2018...2019...2017. Это опечатка либо же есть еще какое-то условие?
13. Kashemir 352 04.07.19 15:26 Сейчас в теме
(10) Если я правильно понял то так (плюс дальше еще необходимо нулевые партии отбросить)
ВЫБРАТЬ
	"Контрагент" КАК Контрагент,
	ДАТАВРЕМЯ(2017, 9, 27) КАК ДатаСобытия,
	9448.84 КАК Площадь
ПОМЕСТИТЬ ВТ_ПриходНаКонец

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2018, 4, 6),
	1507.06

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2018, 9, 15),
	3208.7

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2019, 4, 23),
	122

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2019, 5, 1),
	2100
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	"Контрагент" КАК Контрагент,
	ДАТАВРЕМЯ(2018, 12, 15) КАК ДатаСобытия,
	3208.7 КАК Площадь
ПОМЕСТИТЬ ВТ_РасходНаКонец

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2019, 12, 19),
	2100

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2020, 2, 29),
	122

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2021, 2, 14),
	10955.9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_РасходНаКонец.Контрагент КАК Контрагент,
	ВТ_РасходНаКонец.ДатаСобытия КАК ДатаСобытия,
	ВТ_РасходНаКонец.Площадь КАК Площадь,
	СУММА(ВТ_РасходНаКонец1.Площадь) КАК ПлощадьРасходНакопительно
ПОМЕСТИТЬ РасходыНакопительно
ИЗ
	ВТ_РасходНаКонец КАК ВТ_РасходНаКонец
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_РасходНаКонец КАК ВТ_РасходНаКонец1
		ПО ВТ_РасходНаКонец.Контрагент = ВТ_РасходНаКонец1.Контрагент
			И ВТ_РасходНаКонец.ДатаСобытия <= ВТ_РасходНаКонец1.ДатаСобытия

СГРУППИРОВАТЬ ПО
	ВТ_РасходНаКонец.ДатаСобытия,
	ВТ_РасходНаКонец.Контрагент,
	ВТ_РасходНаКонец.Площадь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ПриходНаКонец.Контрагент КАК Контрагент,
	ВТ_ПриходНаКонец.ДатаСобытия КАК ДатаСобытия,
	ВТ_ПриходНаКонец.Площадь КАК ПлощадьПоПартии,
	СУММА(ВТ_ПриходНаКонец1.Площадь) КАК ЧастьПлощадиПоПартииДо
ПОМЕСТИТЬ ПартииПриходаНакопительно
ИЗ
	ВТ_ПриходНаКонец КАК ВТ_ПриходНаКонец
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПриходНаКонец КАК ВТ_ПриходНаКонец1
		ПО ВТ_ПриходНаКонец.Контрагент = ВТ_ПриходНаКонец1.Контрагент
			И ВТ_ПриходНаКонец.ДатаСобытия >= ВТ_ПриходНаКонец1.ДатаСобытия

СГРУППИРОВАТЬ ПО
	ВТ_ПриходНаКонец.Контрагент,
	ВТ_ПриходНаКонец.ДатаСобытия,
	ВТ_ПриходНаКонец.Площадь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПлощадиРасходов.Контрагент КАК Контрагент,
	ПлощадиРасходов.ДатаСобытия КАК ДатаСобытия,
	ПлощадиПриходовПоПартиям.ДатаСобытия КАК Партия,
	СУММА(ВЫБОР
			КОГДА ПлощадиРасходов.ИнтервалРасходаПо < ПлощадиПриходовПоПартиям.ИнтервалПриходаДо
				ТОГДА ПлощадиРасходов.ИнтервалРасходаПо
			ИНАЧЕ ПлощадиПриходовПоПартиям.ИнтервалПриходаДо
		КОНЕЦ - ВЫБОР
			КОГДА ПлощадиРасходов.ИнтервалРасходаОт < ПлощадиПриходовПоПартиям.ИнтервалПриходаОт
				ТОГДА ПлощадиПриходовПоПартиям.ИнтервалПриходаОт
			ИНАЧЕ ПлощадиРасходов.ИнтервалРасходаОт
		КОНЕЦ) КАК ПриходПоПартии,
	ПлощадиПриходовПоПартиям.ИнтервалПриходаОт КАК ИнтервалПриходаОт,
	ПлощадиПриходовПоПартиям.ИнтервалПриходаДо КАК ИнтервалПриходаДо,
	ПлощадиРасходов.ИнтервалРасходаОт КАК ИнтервалРасходаОт,
	ПлощадиРасходов.ИнтервалРасходаПо КАК ИнтервалРасходаПо
ИЗ
	(ВЫБРАТЬ
		РасходыНакопительно.Контрагент КАК Контрагент,
		РасходыНакопительно.ДатаСобытия КАК ДатаСобытия,
		РасходыНакопительно.Площадь КАК ПлощадьРасхода,
		РасходыНакопительно.ПлощадьРасходНакопительно - РасходыНакопительно.Площадь КАК ИнтервалРасходаОт,
		РасходыНакопительно.ПлощадьРасходНакопительно КАК ИнтервалРасходаПо
	ИЗ
		РасходыНакопительно КАК РасходыНакопительно) КАК ПлощадиРасходов
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ПартииПриходаНакопительно.Контрагент КАК Контрагент,
			ПартииПриходаНакопительно.ДатаСобытия КАК ДатаСобытия,
			ПартииПриходаНакопительно.ПлощадьПоПартии КАК ПлощадьПоПартии,
			ПартииПриходаНакопительно.ЧастьПлощадиПоПартииДо - ПартииПриходаНакопительно.ПлощадьПоПартии КАК ИнтервалПриходаОт,
			ПартииПриходаНакопительно.ЧастьПлощадиПоПартииДо КАК ИнтервалПриходаДо
		ИЗ
			ПартииПриходаНакопительно КАК ПартииПриходаНакопительно) КАК ПлощадиПриходовПоПартиям
		ПО ПлощадиРасходов.Контрагент = ПлощадиПриходовПоПартиям.Контрагент
			И ПлощадиРасходов.ИнтервалРасходаПо >= ПлощадиПриходовПоПартиям.ИнтервалПриходаОт
			И ПлощадиРасходов.ИнтервалРасходаОт <= ПлощадиПриходовПоПартиям.ИнтервалПриходаДо

СГРУППИРОВАТЬ ПО
	ПлощадиПриходовПоПартиям.ДатаСобытия,
	ПлощадиРасходов.ДатаСобытия,
	ПлощадиРасходов.Контрагент,
	ПлощадиПриходовПоПартиям.ИнтервалПриходаОт,
	ПлощадиПриходовПоПартиям.ИнтервалПриходаДо,
	ПлощадиРасходов.ИнтервалРасходаОт,
	ПлощадиРасходов.ИнтервалРасходаПо

УПОРЯДОЧИТЬ ПО
	Контрагент,
	ДатаСобытия,
	Партия УБЫВ
ИТОГИ
	СУММА(ПриходПоПартии)
ПО
	ОБЩИЕ,
	Контрагент,
	ДатаСобытия,
	Партия
Показать
9. starik-2005 3052 04.07.19 13:17 Сейчас в теме
(7)
И ВТ_РасходНаКонец.ДатаСобытия >= ВТ_РасходНаКонец1.ДатаСобытия
И ВТ_РасходНаКонец.ДатаСобытия < ВТ_РасходНаКонец1.ДатаСобытия


В принципе все подобные алгоритмы строят треугольную таблицу:
х
х х
х х х

или

х х х
х х
х

В одном случае это будет фифо, во втором - лифо. Т.е. нужно перевернуть таблицу, а для этого достаточно поменять условие соединения с ">="на "<".
11. maxis33 45 04.07.19 14:14 Сейчас в теме
(9)
(7)
И ВТ_РасходНаКонец.ДатаСобытия >= ВТ_РасходНаКонец1.ДатаСобытия

И ВТ_РасходНаКонец.ДатаСобытия ="на "<".

Если готовить таблицу для "расхода на одну дату"(например при проведении документа реализации) - это срабатывает, а если дат расхода несколько обрабатывается - это не прокатило.. это первым делом попробовал..
14. MICK77 14 05.07.19 17:41 Сейчас в теме
скидывай это все в еще один пакет запросов и там уже сортируй
как то так получиться

ВЫБРАТЬ
	"Контрагент" КАК Контрагент,
	ДАТАВРЕМЯ(2017, 9, 27) КАК ДатаСобытия,
	9448.84 КАК Площадь
ПОМЕСТИТЬ ВТ_ПриходНаКонец

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2018, 4, 6),
	1507.06

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2018, 9, 15),
	3208.7

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2019, 4, 23),
	122

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2019, 5, 1),
	2100
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	"Контрагент" КАК Контрагент,
	ДАТАВРЕМЯ(2018, 12, 15) КАК ДатаСобытия,
	3208.7 КАК Площадь
ПОМЕСТИТЬ ВТ_РасходНаКонец

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2019, 12, 19),
	2100

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2020, 2, 29),
	122

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

ВЫБРАТЬ
	"Контрагент",
	ДАТАВРЕМЯ(2021, 2, 14),
	10955.9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_РасходНаКонец.Контрагент КАК Контрагент,
	ВТ_РасходНаКонец.ДатаСобытия КАК ДатаСобытия,
	ВТ_РасходНаКонец.Площадь КАК Площадь,
	СУММА(ВТ_РасходНаКонец1.Площадь) КАК ПлощадьРасходНакопительно
ПОМЕСТИТЬ РасходыНакопительно
ИЗ
	ВТ_РасходНаКонец КАК ВТ_РасходНаКонец
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_РасходНаКонец КАК ВТ_РасходНаКонец1
		ПО ВТ_РасходНаКонец.Контрагент = ВТ_РасходНаКонец1.Контрагент
			И ВТ_РасходНаКонец.ДатаСобытия <= ВТ_РасходНаКонец1.ДатаСобытия

СГРУППИРОВАТЬ ПО
	ВТ_РасходНаКонец.ДатаСобытия,
	ВТ_РасходНаКонец.Контрагент,
	ВТ_РасходНаКонец.Площадь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ПриходНаКонец.Контрагент КАК Контрагент,
	ВТ_ПриходНаКонец.ДатаСобытия КАК ДатаСобытия,
	ВТ_ПриходНаКонец.Площадь КАК ПлощадьПоПартии,
	СУММА(ВТ_ПриходНаКонец1.Площадь) КАК ЧастьПлощадиПоПартииДо
ПОМЕСТИТЬ ПартииПриходаНакопительно
ИЗ
	ВТ_ПриходНаКонец КАК ВТ_ПриходНаКонец
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПриходНаКонец КАК ВТ_ПриходНаКонец1
		ПО ВТ_ПриходНаКонец.Контрагент = ВТ_ПриходНаКонец1.Контрагент
			И ВТ_ПриходНаКонец.ДатаСобытия >= ВТ_ПриходНаКонец1.ДатаСобытия

СГРУППИРОВАТЬ ПО
	ВТ_ПриходНаКонец.Контрагент,
	ВТ_ПриходНаКонец.ДатаСобытия,
	ВТ_ПриходНаКонец.Площадь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПлощадиРасходов.Контрагент КАК Контрагент,
	ПлощадиРасходов.ДатаСобытия КАК ДатаСобытия,
	ПлощадиПриходовПоПартиям.ДатаСобытия КАК Партия,
	ВЫБОР
		КОГДА ПлощадиРасходов.ИнтервалРасходаПо < ПлощадиПриходовПоПартиям.ИнтервалПриходаДо
			ТОГДА ПлощадиРасходов.ИнтервалРасходаПо
		ИНАЧЕ ПлощадиПриходовПоПартиям.ИнтервалПриходаДо
	КОНЕЦ - ВЫБОР
		КОГДА ПлощадиРасходов.ИнтервалРасходаОт < ПлощадиПриходовПоПартиям.ИнтервалПриходаОт
			ТОГДА ПлощадиПриходовПоПартиям.ИнтервалПриходаОт
		ИНАЧЕ ПлощадиРасходов.ИнтервалРасходаОт
	КОНЕЦ КАК ПриходПоПартии,
	ПлощадиПриходовПоПартиям.ИнтервалПриходаОт КАК ИнтервалПриходаОт,
	ПлощадиПриходовПоПартиям.ИнтервалПриходаДо КАК ИнтервалПриходаДо,
	ПлощадиРасходов.ИнтервалРасходаОт КАК ИнтервалРасходаОт,
	ПлощадиРасходов.ИнтервалРасходаПо КАК ИнтервалРасходаПо
ПОМЕСТИТЬ вр3
ИЗ
	(ВЫБРАТЬ
		РасходыНакопительно.Контрагент КАК Контрагент,
		РасходыНакопительно.ДатаСобытия КАК ДатаСобытия,
		РасходыНакопительно.Площадь КАК ПлощадьРасхода,
		РасходыНакопительно.ПлощадьРасходНакопительно - РасходыНакопительно.Площадь КАК ИнтервалРасходаОт,
		РасходыНакопительно.ПлощадьРасходНакопительно КАК ИнтервалРасходаПо
	ИЗ
		РасходыНакопительно КАК РасходыНакопительно) КАК ПлощадиРасходов
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ПартииПриходаНакопительно.Контрагент КАК Контрагент,
			ПартииПриходаНакопительно.ДатаСобытия КАК ДатаСобытия,
			ПартииПриходаНакопительно.ПлощадьПоПартии КАК ПлощадьПоПартии,
			ПартииПриходаНакопительно.ЧастьПлощадиПоПартииДо - ПартииПриходаНакопительно.ПлощадьПоПартии КАК ИнтервалПриходаОт,
			ПартииПриходаНакопительно.ЧастьПлощадиПоПартииДо КАК ИнтервалПриходаДо
		ИЗ
			ПартииПриходаНакопительно КАК ПартииПриходаНакопительно) КАК ПлощадиПриходовПоПартиям
		ПО ПлощадиРасходов.Контрагент = ПлощадиПриходовПоПартиям.Контрагент
			И ПлощадиРасходов.ИнтервалРасходаПо >= ПлощадиПриходовПоПартиям.ИнтервалПриходаОт
			И ПлощадиРасходов.ИнтервалРасходаОт <= ПлощадиПриходовПоПартиям.ИнтервалПриходаДо
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	вр3.Контрагент КАК Контрагент,
	вр3.ДатаСобытия КАК ДатаСобытия,
	вр3.Партия КАК Партия,
	вр3.ПриходПоПартии КАК ПриходПоПартии,
	вр3.ИнтервалПриходаОт КАК ИнтервалПриходаОт,
	вр3.ИнтервалПриходаДо КАК ИнтервалПриходаДо,
	вр3.ИнтервалРасходаОт КАК ИнтервалРасходаОт,
	вр3.ИнтервалРасходаПо КАК ИнтервалРасходаПо
ИЗ
	вр3 КАК вр3

УПОРЯДОЧИТЬ ПО
	Партия УБЫВ
Показать
15. maxis33 45 08.07.19 11:54 Сейчас в теме
(14)
как то так получиться

Спасибо за участие!
В этом варианте партия 2019 года списывается в 2018том.
Попробовал в этом запросе добавить
И ПлощадиРасходов.ДатаСобытия > ПлощадиПриходовПоПартиям.ДатаСобытия
- пока не взлетело..
16. MICK77 14 11.07.19 17:28 Сейчас в теме
сделай сортировку как необходимо. Не понял зачем еще доп. условия? Если они уж так необходимы то отбирай в конечной таблице - это не совсем кошерно но данные во всяком случае уже одинаковые
17. maxis33 45 15.07.19 17:20 Сейчас в теме
(16)
делай сортировку как необходимо. Не понял зачем еще доп. условия? Если они уж так необходимы то отбирай в конечной таблице - это не совсем кошерно но данные во всяком случае уже одинаковые

Какие данные одинаковые?
С картинкой на (10) не совпадают партии... не получается LIFO. Доп условия не нужны, нужно получить результат как на картинке... пока не получилось..
18. Kashemir 352 26.07.19 15:23 Сейчас в теме
(17) Решение в (13) решает поставленную задачу. А итоговая картинка в (10) содержит ошибку - расход от 29.02.2020 должен был по лифо списать партию 15.09.2018.
19. user832965 21.02.24 21:36 Сейчас в теме
Добрый день!
Я для LIFO (когда остатки склада распределяю например по приходам) использую тот же метод ( https://infostart.ru/public/68225/ ), только когда получаю нарастающую таблицу поступлений то в "Приход.МоментВремени >= Приход1.МоментВремени" меняю ">=" наоборот на "<=" получается "Приход.МоментВремени <= Приход1.МоментВремени" и тогда таблица "от / до" выстраивается в обратном порядке и распределение идет в другом порядке от позднего к раннему.
Если я правильно понял вопрос)
Оставьте свое сообщение

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