Как получить остаток на дату последнего расхода в запросе

1. psih12 132 13.12.18 18:00 Сейчас в теме
Добрый вечер коллеги!
Есть запрос, который выдает последнюю дату расхода номенклатуры:
ВЫБРАТЬ
	ТоварыНаСкладах.Склад КАК Склад,
	ТоварыНаСкладах.Номенклатура КАК Номенклатура,
	МАКСИМУМ(ТоварыНаСкладах.Период) КАК ДатаПоследнегоРасхода
ИЗ
	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
	ТоварыНаСкладах.Период <= КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)
	И ТоварыНаСкладах.Склад В ИЕРАРХИИ(&Склад)
	И ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)

СГРУППИРОВАТЬ ПО
	ТоварыНаСкладах.Склад,
	ТоварыНаСкладах.Номенклатура
Показать

А как получить конечный остаток после этого расхода?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dream_kz 129 13.12.18 18:14 Сейчас в теме
(1) Есть же таблица ОстаткиИОбороты, там можно глянуть остаток на позицию регистратора, но надо знать начальный период (можно брать начало времен, но считаться долго будет), ее можно соединить с этим запросом
4. psih12 132 13.12.18 20:52 Сейчас в теме
(2) Пробовал, не выполняет, памяти не хватает. Как раз в этом и затык.
12. ben19791010 14.12.18 09:56 Сейчас в теме
(1)
ВЫБРАТЬ
	ТоварыНаСкладах.Склад,
	ТоварыНаСкладах.Номенклатура,
	МАКСИМУМ(ТоварыНаСкладах.Период) КАК ДатаПоследнегоРасхода,
	ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
	ЕСТЬNULL(ХозрасчетныйОстатки.СуммаОстаток,0) КАК СуммаОстаток 
ИЗ
	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет.Код = "10.09", , ) КАК ХозрасчетныйОстатки
		ПО (Субконто1 = ТоварыНаСкладах.Номенклатура)
ГДЕ
	ТоварыНаСкладах.Период <= КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)
	И ТоварыНаСкладах.Склад В ИЕРАРХИИ(&Склад)
	И ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)

СГРУППИРОВАТЬ ПО
	ТоварыНаСкладах.Склад,
	ТоварыНаСкладах.Номенклатура,
	ХозрасчетныйОстатки.Субконто1,
	ХозрасчетныйОстатки.СуммаОстаток
Показать


попробуй так
3. Nigmatul 13.12.18 19:00 Сейчас в теме
А вы проверяли точно Ваш запрос корректно получает период максимум? А так используйте товарынаскладахостатки
5. psih12 132 13.12.18 20:52 Сейчас в теме
6. psih12 132 13.12.18 20:56 Сейчас в теме
Если пользоваться только регистром "Товары на складах", то решение вроде бы логичное такое - вычислить разницу между суммарным оборотом прихода на дату последнего расхода и суммарным оборотом расхода. Вычислить суммарный оборот расхода не представляет сложности:
7. psih12 132 13.12.18 20:58 Сейчас в теме
ВЫБРАТЬ
    ТоварыНаСкладах.Склад КАК Склад,
    ТоварыНаСкладах.Номенклатура КАК Номенклатура,
    МАКСИМУМ(ТоварыНаСкладах.Период) КАК ДатаПоследнегоРасхода,
    СУММА (ТоварыНаСкладах.КоличествоОборот) КАК РасходНаДатуПоследнегоРасхода
ИЗ
    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
    ТоварыНаСкладах.Период <= КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)
    И ТоварыНаСкладах.Склад В ИЕРАРХИИ(&Склад)
    И ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладах.Склад,
    ТоварыНаСкладах.Номенклатура
Показать
8. psih12 132 13.12.18 21:01 Сейчас в теме
А вот как вычислить суммарный приход на дату последнего расхода, т.е. вместо параметра "Дата", передать "ДатаПоследнегоРасхода" для каждого товара, не понятно
9. Sapiens_bru 4 13.12.18 21:51 Сейчас в теме
Без соединения регистра Товары на складах с самим собой никак. Но на этом видимо и падает база.

Если нельзя но очень хочется - ваш выбор запросы в цикле.
На первом шаге получаете свою незаполненную таблицу номенклатуры
На втором шаге ВНЕ запроса делите её на блоки по 10-100-1000 номенклатурынх позиций и запускаете цикл по блокам.
На каждой итерации цикла запрос, который первым делом из всей таблицы движения товаров во временную таблицу собирает только движения выбранного списка позиций , индексирует и далее уже сильно меньшая таблица приходов перемножается с сильно уменьшенной таблицей расходов, выдавая результат для части товаров.
Остаётся склеить результат в постобработке
10. psih12 132 14.12.18 08:59 Сейчас в теме
11. antonio_i 80 14.12.18 09:32 Сейчас в теме
Как вариант пришло в голову:
Может попробовать воспользоваться изменённым методом получения остатков на каждую дату.
Описано тут: Остатки на каждый день

Но сначала выполнить ваш запрос, в котором выбрать минимальную и максимальную даты - как начало и конец периода, будет ограничение по номенклатуре (В) и складу(=).
А после запрос по остатком на каждую дату. При этом период не выбирать, периодичность запись.
Оставьте свое сообщение

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