Создание начального и конечного остатка без виртуальных таблиц

1. user1202776 30.03.20 13:53 Сейчас в теме
Как получить начальный и конечный остаток без виртуальных таблиц?Виртуальные таблицы не подходят из-за того,что нужны остатки в разрезе того,что нет в регистрах накопления.
Пробую сделать так, как в этой статье: https://its.1c.ru/db/metod8dev/content/4049/hdoc , но выдает не корректную информацию.
Буду очень,если кто-то сможет скинуть пример запроса.
По теме из базы знаний
Найденные решения
8. DenisCh 30.03.20 14:25 Сейчас в теме
выбрать товар, сумма(
выбор когда видДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) тогда 1
иначе -1 конец * количество) КАК НачОст
где Период <&ДатаНачальногоОстатка
и Регистратор.ТорговаяТочка = &тт
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1202776 30.03.20 13:57 Сейчас в теме
Так попробовал сделать:
ВЫБРАТЬ
	РасходТовара.Ссылка КАК РасходныйДокумент,
	РасходТовара.Дата КАК ПериодРасходногоДокумента,
	РасходТовара.СуммаДокумента КАК СуммаРасходногоДокумента
ПОМЕСТИТЬ РасходныеДокументы
ИЗ
	Документ.РеализацияТоваровУслуг КАК РасходТовара
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеДенег
		ПО (ПоступлениеДенег.Ссылка = РасходТовара.Ссылка)
			И (ПоступлениеДенег.Дата < &НачалоПериода)
ГДЕ
	РасходТовара.Дата < &НачалоПериода

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

ИМЕЮЩИЕ
	МАКСИМУМ(РасходТовара.СуммаДокумента) - ЕСТЬNULL(СУММА(ПоступлениеДенег.СуммаДокумента), 0) <> 0

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	РасходТовара.Ссылка,
	РасходТовара.Дата,
	РасходТовара.СуммаДокумента
ИЗ
	Документ.РеализацияТоваровУслуг КАК РасходТовара
ГДЕ
	РасходТовара.Дата >= НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ)
	И РасходТовара.Дата <= КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
;

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

СГРУППИРОВАТЬ ПО
	ВложенныйЗапрос.РасходныйДокументПокупатель,
	ВЫБОР
		КОГДА ВложенныйЗапрос.Период < НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ)
			ТОГДА НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ)
		ИНАЧЕ ВложенныйЗапрос.Период
	КОНЕЦ
;

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

СГРУППИРОВАТЬ ПО
	ВременныйЗапрос.РасходныйДокументПокупатель
Показать
3. karamazoff 96 30.03.20 13:59 Сейчас в теме
а начальный остаток = дата0 по датаНачала с суммированием, по регистру конечный остаток = Дата0 по ДатаОкончания с суммированием не подходит?
4. user1202776 30.03.20 14:07 Сейчас в теме
(3)там же еще есть документы,которые нужно вычитать, а не суммировать.
Так тоже попробовал,но выводит также не корректные данные:
ВЫБРАТЬ
	СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК РТУСумма,
	NULL КАК ПоступлениеСумма,
	РеализацияТоваровУслуг.ТорговаяТочка КАК ТорговаяТочка,
	РеализацияТоваровУслуг.Ссылка КАК Документ
ПОМЕСТИТЬ ВТ_Начало
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
	РеализацияТоваровУслуг.ТорговаяТочка = &ТорговаяТочка
	И РеализацияТоваровУслуг.Дата < НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ)

СГРУППИРОВАТЬ ПО
	РеализацияТоваровУслуг.ТорговаяТочка,
	РеализацияТоваровУслуг.Ссылка

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

ВЫБРАТЬ
	NULL,
	СУММА(ПоступлениеТоваровУслуг.СуммаДокумента),
	ПоступлениеТоваровУслуг.ТорговаяТочка,
	ПоступлениеТоваровУслуг.Ссылка
ИЗ
	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
	ПоступлениеТоваровУслуг.ТорговаяТочка = &ТорговаяТочка
	И ПоступлениеТоваровУслуг.Дата < НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ)

СГРУППИРОВАТЬ ПО
	ПоступлениеТоваровУслуг.ТорговаяТочка,
	ПоступлениеТоваровУслуг.Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК РТУСумма,
	NULL КАК ПоступлениеСумма,
	РеализацияТоваровУслуг.ТорговаяТочка КАК ТорговаяТочка,
	РеализацияТоваровУслуг.Ссылка КАК Документ
ПОМЕСТИТЬ ВТ_Конец
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
	РеализацияТоваровУслуг.ТорговаяТочка = &ТорговаяТочка
	И РеализацияТоваровУслуг.Дата < КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ)

СГРУППИРОВАТЬ ПО
	РеализацияТоваровУслуг.ТорговаяТочка,
	РеализацияТоваровУслуг.Ссылка

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

ВЫБРАТЬ
	NULL,
	СУММА(ПоступлениеТоваровУслуг.СуммаДокумента),
	ПоступлениеТоваровУслуг.ТорговаяТочка,
	ПоступлениеТоваровУслуг.Ссылка
ИЗ
	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
	ПоступлениеТоваровУслуг.ТорговаяТочка = &ТорговаяТочка
	И ПоступлениеТоваровУслуг.Дата < КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ)

СГРУППИРОВАТЬ ПО
	ПоступлениеТоваровУслуг.ТорговаяТочка,
	ПоступлениеТоваровУслуг.Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СУММА(ЕСТЬNULL(ВТ_Начало.РТУСумма, 0) - ЕСТЬNULL(ВТ_Начало.ПоступлениеСумма, 0)) КАК НачальныйОстаток,
	СУММА(ЕСТЬNULL(ВТ_Конец.РТУСумма, 0) - ЕСТЬNULL(ВТ_Конец.ПоступлениеСумма, 0)) КАК КонечныйОстаток,
	ВТ_Конец.ТорговаяТочка
ИЗ
	ВТ_Начало КАК ВТ_Начало
		ПОЛНОЕ СОЕДИНЕНИЕ ВТ_Конец КАК ВТ_Конец
		ПО ВТ_Начало.ТорговаяТочка = ВТ_Конец.ТорговаяТочка

СГРУППИРОВАТЬ ПО
	ВТ_Конец.ТорговаяТочка
Показать
5. DenisCh 30.03.20 14:11 Сейчас в теме
Типа
выбрать товар, сумма(
выбор когда видДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) тогда 1
иначе -1 конец * количество) КАК НачОст
где Период <&ДатаНачальногоОстатка

И накладывать условия в где...
starik-2005; user1202776; +2 Ответить
6. user1202776 30.03.20 14:22 Сейчас в теме
(5)не понял.
В регистрах накопления нет реквизита "Торговая точка", а мне нужно получить начальный и конечный остаток в разрезе торговой точки.
Сможете привести пример,как получить начальный и конечный остаток, например на примере примере документов Реализация товаров и услуг и Поступление товаров и услуг? В этих документах есть реквизит "торговая точка".
7. DenisCh 30.03.20 14:24 Сейчас в теме
(6) Зато есть реквизит в документах движений. Вот по ним и фильтруй...
8. DenisCh 30.03.20 14:25 Сейчас в теме
выбрать товар, сумма(
выбор когда видДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) тогда 1
иначе -1 конец * количество) КАК НачОст
где Период <&ДатаНачальногоОстатка
и Регистратор.ТорговаяТочка = &тт
9. user1202776 30.03.20 15:43 Сейчас в теме
(8)сделал так,но выводит не корректные данные . в десятки раз преувеличивает:
ВЫБРАТЬ
	СУММА(ВЫБОР
			КОГДА ВзаиморасчетыСКонтрагентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
				ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетов
			ИНАЧЕ -ЕСТЬNULL(ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетов, 0)
		КОНЕЦ) КАК СуммаВзаиморасчетов
ИЗ
	РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами
ГДЕ
	(ВзаиморасчетыСКонтрагентами.Регистратор.ТорговаяТочка = &ТорговаяТочка
			ИЛИ ВзаиморасчетыСКонтрагентами.Регистратор.СуммыДолга.ДокументРасчетовСКонтрагентом.ТорговаяТочка = &ТорговаяТочка)
	И ВзаиморасчетыСКонтрагентами.Период < КОНЕЦПЕРИОДА(&ДатаНачальногоОстатка, ДЕНЬ)
Показать
11. user1202776 31.03.20 14:35 Сейчас в теме
(8)
где Период <&ДатаНачальногоОстатка
нужно получать так, а не так
где Период <=НачалоПериода(&ДатаНачальногоОстатка,день)
?
12. DenisCh 01.04.20 06:36 Сейчас в теме
(11) Остаток мы хотим получить на куда? На момент или на начало дня? Вот из этого и надо исходить
13. user1202776 01.04.20 09:35 Сейчас в теме
(12)так как берется остаток в регистре накопления Взаиморасчеты с контрагентами
14. DenisCh 01.04.20 09:52 Сейчас в теме
(13) Так он так и берётся... На тот момент, который указывается в параметре виртуальной таблицы.
15. user1202776 01.04.20 10:49 Сейчас в теме
10. DenisCh 30.03.20 15:50 Сейчас в теме
Ну выгрузи в ексель и посчитай руками...
Оставьте свое сообщение

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