Получение остатков регистра накопления

1. ilnur75 29.12.20 10:18 Сейчас в теме
Можно ли как-то запросом получить корректные начальные и конечные остатки из регистра накопления, если у РН несколько регистраторов, а нужно взять записи, например, только по двум: 1) приобретениеТУ(приход) и 2) реализацияТУ(расход)?

пример:
тек.период:
нач.ост = 0
приход по ПТУ = 10
расход по РТУ =3
кон.ост = 7

остатки на след.период:
нач.ост = 7
приход = 0
расход = 0
кон.ост = 7

т.е. не учитывать записи др.регистраторов - перемещение товаров, возвраты и т.п.
По теме из базы знаний
Найденные решения
6. dhurricane 29.12.20 11:26 Сейчас в теме
(1) Если уж очень хочется, при этом Вы уверены в корректности результата, а на производительность можно не обращать внимание, то просто не используйте виртуальную таблицу итогов, а собирайте данные "вручную":
ВЫБРАТЬ
	НАЧАЛОПЕРИОДА(ТоварыНаСкладе.Период, МЕСЯЦ) КАК Период,
	ТоварыНаСкладе.Склад КАК Склад,
	ТоварыНаСкладе.Номенклатура КАК Номенклатура,
	СУММА(ВЫБОР
			КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
				ТОГДА ТоварыНаСкладе.Количество
			ИНАЧЕ 0
		КОНЕЦ) КАК КоличествоПриход,
	СУММА(ВЫБОР
			КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
				ТОГДА ТоварыНаСкладе.Количество
			ИНАЧЕ 0
		КОНЕЦ) КАК КоличествоРасход,
	СУММА(ВЫБОР
			КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
				ТОГДА ТоварыНаСкладе.Количество
			ИНАЧЕ -ТоварыНаСкладе.Количество
		КОНЕЦ) КАК КоличествоОборот
ПОМЕСТИТЬ ВтВсеОбороты
ИЗ
	РегистрНакопления.ТоварыНаСкладе КАК ТоварыНаСкладе
ГДЕ
	ТоварыНаСкладе.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
	ИЛИ ТоварыНаСкладе.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг

СГРУППИРОВАТЬ ПО
	НАЧАЛОПЕРИОДА(ТоварыНаСкладе.Период, МЕСЯЦ),
	ТоварыНаСкладе.Склад,
	ТоварыНаСкладе.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыНаСкладе.Период КАК Период,
	ТоварыНаСкладе.Склад КАК Склад,
	ТоварыНаСкладе.Номенклатура КАК Номенклатура,
	ЕСТЬNULL(СУММА(СтарыеОбороты.КоличествоОборот), 0) КАК КоличествоНачальныйОстаток,
	ТоварыНаСкладе.КоличествоПриход КАК КоличествоПриход,
	ТоварыНаСкладе.КоличествоРасход КАК КоличествоРасход,
	ТоварыНаСкладе.КоличествоОборот КАК КоличествоОборот,
	ЕСТЬNULL(СУММА(СтарыеОбороты.КоличествоОборот), 0) + ТоварыНаСкладе.КоличествоОборот КАК КоличествоКонечныйОстаток
ИЗ
	ВтВсеОбороты КАК ТоварыНаСкладе
		ЛЕВОЕ СОЕДИНЕНИЕ ВтВсеОбороты КАК СтарыеОбороты
		ПО ТоварыНаСкладе.Период > СтарыеОбороты.Период
			И ТоварыНаСкладе.Склад = СтарыеОбороты.Склад
			И ТоварыНаСкладе.Номенклатура = СтарыеОбороты.Номенклатура
ГДЕ
	ТоварыНаСкладе.Период МЕЖДУ &НачалоПериода И &КонецПериода

СГРУППИРОВАТЬ ПО
	ТоварыНаСкладе.Период,
	ТоварыНаСкладе.Склад,
	ТоварыНаСкладе.Номенклатура,
	ТоварыНаСкладе.КоличествоПриход,
	ТоварыНаСкладе.КоличествоРасход,
	ТоварыНаСкладе.КоличествоОборот
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. PhoenixAOD 62 29.12.20 10:24 Сейчас в теме
(1)ну в запросе и укажи в параметре Регистратор.Ссылка Ссылка Документ.Поступление или Регистратор.Ссылка Ссылка Документ.Реализация, только корректные ты остатки не получишь, так как исключаешь другие документы складского учета
6. dhurricane 29.12.20 11:26 Сейчас в теме
(1) Если уж очень хочется, при этом Вы уверены в корректности результата, а на производительность можно не обращать внимание, то просто не используйте виртуальную таблицу итогов, а собирайте данные "вручную":
ВЫБРАТЬ
	НАЧАЛОПЕРИОДА(ТоварыНаСкладе.Период, МЕСЯЦ) КАК Период,
	ТоварыНаСкладе.Склад КАК Склад,
	ТоварыНаСкладе.Номенклатура КАК Номенклатура,
	СУММА(ВЫБОР
			КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
				ТОГДА ТоварыНаСкладе.Количество
			ИНАЧЕ 0
		КОНЕЦ) КАК КоличествоПриход,
	СУММА(ВЫБОР
			КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
				ТОГДА ТоварыНаСкладе.Количество
			ИНАЧЕ 0
		КОНЕЦ) КАК КоличествоРасход,
	СУММА(ВЫБОР
			КОГДА ТоварыНаСкладе.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
				ТОГДА ТоварыНаСкладе.Количество
			ИНАЧЕ -ТоварыНаСкладе.Количество
		КОНЕЦ) КАК КоличествоОборот
ПОМЕСТИТЬ ВтВсеОбороты
ИЗ
	РегистрНакопления.ТоварыНаСкладе КАК ТоварыНаСкладе
ГДЕ
	ТоварыНаСкладе.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
	ИЛИ ТоварыНаСкладе.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг

СГРУППИРОВАТЬ ПО
	НАЧАЛОПЕРИОДА(ТоварыНаСкладе.Период, МЕСЯЦ),
	ТоварыНаСкладе.Склад,
	ТоварыНаСкладе.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыНаСкладе.Период КАК Период,
	ТоварыНаСкладе.Склад КАК Склад,
	ТоварыНаСкладе.Номенклатура КАК Номенклатура,
	ЕСТЬNULL(СУММА(СтарыеОбороты.КоличествоОборот), 0) КАК КоличествоНачальныйОстаток,
	ТоварыНаСкладе.КоличествоПриход КАК КоличествоПриход,
	ТоварыНаСкладе.КоличествоРасход КАК КоличествоРасход,
	ТоварыНаСкладе.КоличествоОборот КАК КоличествоОборот,
	ЕСТЬNULL(СУММА(СтарыеОбороты.КоличествоОборот), 0) + ТоварыНаСкладе.КоличествоОборот КАК КоличествоКонечныйОстаток
ИЗ
	ВтВсеОбороты КАК ТоварыНаСкладе
		ЛЕВОЕ СОЕДИНЕНИЕ ВтВсеОбороты КАК СтарыеОбороты
		ПО ТоварыНаСкладе.Период > СтарыеОбороты.Период
			И ТоварыНаСкладе.Склад = СтарыеОбороты.Склад
			И ТоварыНаСкладе.Номенклатура = СтарыеОбороты.Номенклатура
ГДЕ
	ТоварыНаСкладе.Период МЕЖДУ &НачалоПериода И &КонецПериода

СГРУППИРОВАТЬ ПО
	ТоварыНаСкладе.Период,
	ТоварыНаСкладе.Склад,
	ТоварыНаСкладе.Номенклатура,
	ТоварыНаСкладе.КоличествоПриход,
	ТоварыНаСкладе.КоличествоРасход,
	ТоварыНаСкладе.КоличествоОборот
Показать
8. ilnur75 29.12.20 12:58 Сейчас в теме
(6) Ваш ответ более чем убедителен. спасибо. попробую.
3. ilnur75 29.12.20 10:29 Сейчас в теме
это делал, только если были приходы - расходы по др.регистраторам , то они тоже отражаются по строке , например :
когда-то был приход по перемещениям =10.
тогда если отбор сделать по ПТУ будет:
нач.ост = 10
приход ПТУ = 10
расход РТУ = 3
кон.ост = 17

а такой результат мне не нужен.
4. PhoenixAOD 62 29.12.20 10:31 Сейчас в теме
(3)а другого ты и не получешь, почитай про складской учет для начала, ты не можешь исключить из товарооборота перемещения и тд, для получения чего ты хочешь
5. VictorRGB2 14 29.12.20 11:12 Сейчас в теме
(3) это только если заморочиться или в запросе или уже после результаты запроса пересчитать для каждой строки
по условию регистратора
если регистратор такой-то то начальный\конечный остаток = начальный\конечный остаток минус\плюс приход\расход (в зависимости от движения по регистратору)
тогда получите, что хотите
7. ilnur75 29.12.20 12:57 Сейчас в теме
(5) я делаю отчет на скд. Переходящие остатки по Вашей схеме будут корректными, если мне надо вывести в колонках разные периоды (янв-фев-март)?
9. VictorRGB2 14 29.12.20 14:26 Сейчас в теме
(7) ну по идее, да
PS пока придумывал пример, как это можно сделать, уже ответили в (6)
хотя я бы по старинке, вручную все пересчитал
10. dhurricane 31.12.20 14:10 Сейчас в теме
(9) Тут вопрос в том, а как бы Вы получили начальный остаток для самой первой записи?
11. salikoff 01.01.21 11:17 Сейчас в теме
(6) ЕСТЬNULL(СУММА(СтарыеОбороты.КоличествоОборот), 0) КАК КоличествоНачальныйОстаток
приравнивает начальный остаток к нулю, однако, в общем случае, это совершенно нет так.
Или в качестве начала периода нужно использовать ДАТАВРЕМЯ(1,1,1) и тащить абсолютно все записи регистра.
12. dhurricane 02.01.21 00:39 Сейчас в теме
(11) Не уверен, что правильно Вас понял, но да, для получения начального остатка в моем примере используются все движения от начала времен. Обратите внимание, отбор по периоду установлен не в первом, а во втором запросе пакета.
13. user1503726 02.01.21 00:50 Сейчас в теме
Можно еще выбирать колонки количество и сумма в приходных, расходных накладных, перемещениях и списаниях, только отчеты при записи документов будут притормаживать.
А если в качестве начального остатка в произвольный момент времени брать ближайший пересчет остатков (инвентаризацию), и данные суммировать с этого момента, то при работе бухгалтера ничего не летит и не ломается.
Но отчеты по движениям на складе выглядеть будут немного экзотически.
И еще остатки от инвентаризации до инвентаризации (а не от даты до даты) были бы логичным продолжением времени документа в 8ке, но обычно их пишут с начала дня по конец дня и это не совсем то, что ожидается.
Оставьте свое сообщение

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