Запрос на Свободный остаток товара на кажды день

1. Cool_vsi 27.07.16 09:47 Сейчас в теме
Необходимо получить запросом остаток товара на каждый день, не только на дни когда были обороты, но и на все календарные дни.
Вот мой запрос на получения свободного остатка в Ут 10.3:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ТоварыНаСкладахОстатки.Склад,
	ТоварыНаСкладахОстатки.Номенклатура,
	ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
	СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
ПОМЕСТИТЬ ТоварыНаСкладах
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки(
			&ДатаОст,
			Номенклатура В (&СписокН)
				И Склад В (&СписокС)) КАК ТоварыНаСкладахОстатки

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

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

СГРУППИРОВАТЬ ПО
	ТоварыКПередачеСоСкладовОстатки.Склад,
	ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры,
	ТоварыКПередачеСоСкладовОстатки.Номенклатура
;

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

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

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

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


помогите его переделать пожалуйста
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
31. Cool_vsi 27.07.16 13:49 Сейчас в теме
(28) el-gamberro, вот какой получился запрос, прошу его проверить :
ВЫБРАТЬ
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыНаСкладахОстаткиИОбороты.Период КАК Период,
	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток
ПОМЕСТИТЬ Остатки
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
			&ДатаНач,
			&ДатаКон,
			День,
			,
			Номенклатура В (&СписокН)
				И Склад В (&СписокС)) КАК ТоварыНаСкладахОстаткиИОбороты

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыВРезервеНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыВРезервеНаСкладахОстаткиИОбороты.Период КАК Период,
	СУММА(ТоварыВРезервеНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток
ПОМЕСТИТЬ ВРезерве
ИЗ
	РегистрНакопления.ТоварыВРезервеНаСкладах.ОстаткиИОбороты(
			&ДатаНач,
			&ДатаКон,
			День,
			,
			Номенклатура В (&СписокН)
				И Склад В (&СписокС)) КАК ТоварыВРезервеНаСкладахОстаткиИОбороты

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

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

СГРУППИРОВАТЬ ПО
	ТоварыКПередачеСоСкладовОстаткиИОбороты.Номенклатура,
	ТоварыКПередачеСоСкладовОстаткиИОбороты.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК Период
ПОМЕСТИТЬ Календарь
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &ДатаКон
	И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &ДатаНач
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Остатки.Номенклатура,
	Календарь.Период КАК ПериодКалендаря,
	Остатки.Период КАК ПериодПоОстатку,
	Остатки.КоличествоКонечныйОстаток
ПОМЕСТИТЬ КалендИОстаткиОбщая
ИЗ
	Календарь КАК Календарь
		ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
		ПО Календарь.Период >= Остатки.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВРезерве.Номенклатура,
	Календарь.Период КАК ПериодКалендаря,
	ВРезерве.Период КАК ПериодПоОстатку,
	ВРезерве.КоличествоКонечныйОстаток
ПОМЕСТИТЬ КалендВРезервеОбщая
ИЗ
	Календарь КАК Календарь
		ЛЕВОЕ СОЕДИНЕНИЕ ВРезерве КАК ВРезерве
		ПО Календарь.Период >= ВРезерве.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КПередачи.Номенклатура,
	Календарь.Период КАК ПериодКалендаря,
	КПередачи.Период КАК ПериодПоОстатку,
	КПередачи.КоличествоКонечныйОстаток
ПОМЕСТИТЬ КалендИКПередачиОбщая
ИЗ
	Календарь КАК Календарь
		ЛЕВОЕ СОЕДИНЕНИЕ КПередачи КАК КПередачи
		ПО Календарь.Период >= КПередачи.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендИОстаткиОбщая.Номенклатура,
	КалендИОстаткиОбщая.ПериодКалендаря,
	МАКСИМУМ(КалендИОстаткиОбщая.ПериодПоОстатку) КАК ПериодПоОстатку
ПОМЕСТИТЬ МаксДатаИзОстатка
ИЗ
	КалендИОстаткиОбщая КАК КалендИОстаткиОбщая

СГРУППИРОВАТЬ ПО
	КалендИОстаткиОбщая.Номенклатура,
	КалендИОстаткиОбщая.ПериодКалендаря
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендВРезервеОбщая.Номенклатура,
	КалендВРезервеОбщая.ПериодКалендаря,
	МАКСИМУМ(КалендВРезервеОбщая.ПериодПоОстатку) КАК ПериодПоОстатку
ПОМЕСТИТЬ МаксДатаВРезерве
ИЗ
	КалендВРезервеОбщая КАК КалендВРезервеОбщая

СГРУППИРОВАТЬ ПО
	КалендВРезервеОбщая.Номенклатура,
	КалендВРезервеОбщая.ПериодКалендаря
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендИКПередачиОбщая.Номенклатура,
	КалендИКПередачиОбщая.ПериодКалендаря,
	МАКСИМУМ(КалендИКПередачиОбщая.ПериодПоОстатку) КАК ПериодПоОстатку
ПОМЕСТИТЬ МаксДатаКПередачи
ИЗ
	КалендИКПередачиОбщая КАК КалендИКПередачиОбщая

СГРУППИРОВАТЬ ПО
	КалендИКПередачиОбщая.Номенклатура,
	КалендИКПередачиОбщая.ПериодКалендаря
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендИОстаткиОбщая.Номенклатура,
	КалендИОстаткиОбщая.ПериодКалендаря,
	КалендИОстаткиОбщая.КоличествоКонечныйОстаток
ПОМЕСТИТЬ ИтогОстатки
ИЗ
	КалендИОстаткиОбщая КАК КалендИОстаткиОбщая
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксДатаИзОстатка КАК МаксДатаИзОстатка
		ПО КалендИОстаткиОбщая.Номенклатура = МаксДатаИзОстатка.Номенклатура
			И КалендИОстаткиОбщая.ПериодКалендаря = МаксДатаИзОстатка.ПериодКалендаря
			И КалендИОстаткиОбщая.ПериодПоОстатку = МаксДатаИзОстатка.ПериодПоОстатку
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендВРезервеОбщая.Номенклатура,
	КалендВРезервеОбщая.ПериодКалендаря,
	КалендВРезервеОбщая.КоличествоКонечныйОстаток
ПОМЕСТИТЬ ИтогВрезерве
ИЗ
	КалендВРезервеОбщая КАК КалендВРезервеОбщая
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксДатаВРезерве КАК МаксДатаВРезерве
		ПО КалендВРезервеОбщая.Номенклатура = МаксДатаВРезерве.Номенклатура
			И КалендВРезервеОбщая.ПериодКалендаря = МаксДатаВРезерве.ПериодКалендаря
			И КалендВРезервеОбщая.ПериодПоОстатку = МаксДатаВРезерве.ПериодПоОстатку
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендИКПередачиОбщая.Номенклатура,
	КалендИКПередачиОбщая.ПериодКалендаря,
	КалендИКПередачиОбщая.КоличествоКонечныйОстаток
ПОМЕСТИТЬ ИтогКПередачи
ИЗ
	КалендИКПередачиОбщая КАК КалендИКПередачиОбщая
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксДатаКПередачи КАК МаксДатаКПередачи
		ПО КалендИКПередачиОбщая.Номенклатура = МаксДатаКПередачи.Номенклатура
			И КалендИКПередачиОбщая.ПериодКалендаря = МаксДатаКПередачи.ПериодКалендаря
			И КалендИКПередачиОбщая.ПериодПоОстатку = МаксДатаКПередачи.ПериодПоОстатку
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ИтогОстатки.Номенклатура,
	ИтогОстатки.ПериодКалендаря,
	ИтогОстатки.КоличествоКонечныйОстаток КАК Остаток,
	0 КАК Резерв,
	0 КАК КПередачи
ПОМЕСТИТЬ ПодИтог
ИЗ
	ИтогОстатки КАК ИтогОстатки

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

ВЫБРАТЬ
	ИтогВрезерве.Номенклатура,
	ИтогВрезерве.ПериодКалендаря,
	0,
	ИтогВрезерве.КоличествоКонечныйОстаток,
	0
ИЗ
	ИтогВрезерве КАК ИтогВрезерве

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

ВЫБРАТЬ
	ИтогКПередачи.Номенклатура,
	ИтогКПередачи.ПериодКалендаря,
	0,
	0,
	ИтогКПередачи.КоличествоКонечныйОстаток
ИЗ
	ИтогКПередачи КАК ИтогКПередачи
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПодИтог.Номенклатура,
	ПодИтог.ПериодКалендаря,
	СУММА(ПодИтог.Остаток) КАК Остаток,
	СУММА(ПодИтог.Резерв) КАК Резерв,
	СУММА(ПодИтог.КПередачи) КАК КПередачи
ПОМЕСТИТЬ ПодИтог2Группировка
ИЗ
	ПодИтог КАК ПодИтог

СГРУППИРОВАТЬ ПО
	ПодИтог.Номенклатура,
	ПодИтог.ПериодКалендаря
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПодИтог2Группировка.Номенклатура,
	ПодИтог2Группировка.ПериодКалендаря,
	ПодИтог2Группировка.Остаток,
	ПодИтог2Группировка.Резерв,
	ПодИтог2Группировка.КПередачи,
	ПодИтог2Группировка.Остаток - ПодИтог2Группировка.Резерв - ПодИтог2Группировка.КПередачи КАК СвободныйОстаток
ИЗ
	ПодИтог2Группировка КАК ПодИтог2Группировка
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. konstruktiv 27.07.16 10:32 Сейчас в теме
(1) Cool_vsi, результат нужен для какой-то последующей обработки? если нет, то можно в СКД вывести без заморочек
14. Cool_vsi 27.07.16 10:36 Сейчас в теме
(10) konstruktiv, да результат нужен для помещения в таблицу значений, и последующей работы с ним
15. el-gamberro 56 27.07.16 10:40 Сейчас в теме
(14) Cool_vsi, из СКД можно вытянуть результат в ТЗ
18. konstruktiv 27.07.16 10:46 Сейчас в теме
(15) el-gamberro, насколько я знаю, можно вытянуть тот результат, который поступает на вход СКД перед выводом, а средства СКД для вывода ежедневных остатков работают уже на выводе
22. el-gamberro 56 27.07.16 10:51 Сейчас в теме
(18) konstruktiv,
ну.. самое простое вывести в табличный документ, который пользователь не видит и собрать оттуда нужные данные в свою таблицу значений
Но вроде как-то и результат в ТЗ можно получить. Надо погуглить
24. konstruktiv 27.07.16 10:54 Сейчас в теме
(22) el-gamberro, в ТЗ можно, но до обработки ежедневных остатков средствами СКД, а парсить табличный документ это уже слишком
17. konstruktiv 27.07.16 10:45 Сейчас в теме
(1) Cool_vsi,
ВЫБРАТЬ
	0 КАК Х
ПОМЕСТИТЬ Регистр1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Младшие.Х + 2 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр2
ИЗ
	Регистр1 КАК Младшие,
	Регистр1 КАК Старшие
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Младшие.Х + 4 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр4
ИЗ
	Регистр2 КАК Младшие,
	Регистр2 КАК Старшие
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Младшие.Х + 16 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр8
ИЗ
	Регистр4 КАК Младшие,
	Регистр4 КАК Старшие
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Младшие.Х + 256 * Старшие.Х КАК Число
ПОМЕСТИТЬ НатуральныйРяд
ИЗ
	Регистр8 КАК Младшие,
	Регистр8 КАК Старшие
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, НатуральныйРяд.Число) КАК ДатаДень
ПОМЕСТИТЬ ДатыДней
ИЗ
	НатуральныйРяд КАК НатуральныйРяд
ГДЕ
	ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, НатуральныйРяд.Число) <= &ДатаОкончания
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ Регистр1
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ Регистр2
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ Регистр4
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ Регистр8
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ НатуральныйРяд
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&ДатаНачала, СЕКУНДА, -1) КАК ДатаДень,
	ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
	ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
	ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Количество,
	ПартииТоваровНаСкладахОстатки.СтоимостьОстаток КАК Стоимость
ПОМЕСТИТЬ ОстаткиОборотыБаза
ИЗ
	РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаНачала, ) КАК ПартииТоваровНаСкладахОстатки

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

ВЫБРАТЬ
	ПартииТоваровНаСкладахОбороты.Период,
	ПартииТоваровНаСкладахОбороты.Склад,
	ПартииТоваровНаСкладахОбороты.Номенклатура,
	ПартииТоваровНаСкладахОбороты.ХарактеристикаНоменклатуры,
	ПартииТоваровНаСкладахОбороты.КоличествоОборот,
	ПартииТоваровНаСкладахОбороты.СтоимостьОборот
ИЗ
	РегистрНакопления.ПартииТоваровНаСкладах.Обороты(&ДатаНачала, &ДатаОкончания, День, ) КАК ПартииТоваровНаСкладахОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ОстаткиОборотыБаза.Склад,
	ОстаткиОборотыБаза.Номенклатура,
	ОстаткиОборотыБаза.ХарактеристикаНоменклатуры
ПОМЕСТИТЬ ИзмеренияПредварительные
ИЗ
	ОстаткиОборотыБаза КАК ОстаткиОборотыБаза
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДатыДней.ДатаДень,
	Измерения.Склад,
	Измерения.Номенклатура,
	Измерения.ХарактеристикаНоменклатуры
ПОМЕСТИТЬ Измерения
ИЗ
	ИзмеренияПредварительные КАК Измерения,
	ДатыДней КАК ДатыДней
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ИзмеренияПредварительные
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Измерения.ДатаДень,
	Измерения.Склад,
	Измерения.Номенклатура,
	Измерения.ХарактеристикаНоменклатуры,
	СУММА(ОстаткиОборотыБаза.Количество) КАК ОстатокДняКоличество,
	СУММА(ОстаткиОборотыБаза.Стоимость) КАК ОстатокДняСтоимость
ИЗ
	Измерения КАК Измерения
		ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиОборотыБаза КАК ОстаткиОборотыБаза
		ПО Измерения.ДатаДень > ОстаткиОборотыБаза.ДатаДень
			И Измерения.Склад = ОстаткиОборотыБаза.Склад
			И Измерения.Номенклатура = ОстаткиОборотыБаза.Номенклатура
			И Измерения.ХарактеристикаНоменклатуры = ОстаткиОборотыБаза.ХарактеристикаНоменклатуры

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


Вместо партий свои регистры
20. Cool_vsi 27.07.16 10:48 Сейчас в теме
(17) konstruktiv, я правильно понимаю что это остаток по партиям, не свободный остаток?
21. konstruktiv 27.07.16 10:49 Сейчас в теме
(20) Cool_vsi,поэтому я и написал, что вместо партий нужно подставить свои источники
2. Cool_vsi 27.07.16 10:15 Сейчас в теме
12. el-gamberro 56 27.07.16 10:36 Сейчас в теме
(2) Cool_vsi, Для начала используйте вирт таблицу ОстаткиОбороты.
Так вы получите остатки на каждый конец дня когда были движения.

Далее, пере запуском сформируйте таблицу периодов на каждый день.
Вот пример для периода 100 дней, легко масштабируется и до 10000 и больше дней:

ВЫБРАТЬ
	1 КАК Цифра
ПОМЕСТИТЬ РядЦифр

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

ВЫБРАТЬ
	2

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

ВЫБРАТЬ
	3

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

ВЫБРАТЬ
	4

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

ВЫБРАТЬ
	5

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

ВЫБРАТЬ
	6

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

ВЫБРАТЬ
	7

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

ВЫБРАТЬ
	8

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

ВЫБРАТЬ
	9

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

ВЫБРАТЬ
	0
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&НачалоОтчета, ДЕНЬ, РядЦифр.Цифра + РядЦифр_10.Цифра * 10) КАК Цифра
ИЗ
	РядЦифр КАК РядЦифр,
	РядЦифр КАК РядЦифр_10

УПОРЯДОЧИТЬ ПО
	Цифра
Показать
3. EMelihoff 27.07.16 10:18 Сейчас в теме
5. Cool_vsi 27.07.16 10:19 Сейчас в теме
(3) EMelihoff, (4) EMelihoff, там просто остаток, необходимо получить именно свободный остаток товара
6. EMelihoff 27.07.16 10:22 Сейчас в теме
(5) Cool_vsi, у тебя проблема в том, чтобы получить таблицу дней? я видел как-то даже к произв. календарю привязывался человек.
7. Cool_vsi 27.07.16 10:26 Сейчас в теме
(6) EMelihoff, мне понравилась идея http://forum.infostart.ru/forum24/topic50909/message1160016/#message1160016, но я не совсем понимаю как это работает , и как его переделать под календарь, тк регистр валют у нас не заполнен и не будет заполняться, и еще мне же нужно 3 регистра как-то вместе соединить чтобы получился свободный остаток =(
8. EMelihoff 27.07.16 10:28 Сейчас в теме
есть на "инфостарт"е запрос "ВТ" где получаются все дни без привязок календарям, с ними и вяжи таблицы.
9. Cool_vsi 27.07.16 10:31 Сейчас в теме
(8) EMelihoff, получу я все дни а что дальше делатЬ? мне не понятно, через остатки и обороты он выводить остатки только на дни когда были движения
11. el-gamberro 56 27.07.16 10:35 Сейчас в теме
Ну далее соединяете остатки и периоды с условием что Остатки.Период <= ТаблицаПериодов.Период

Из полученной таблицы выбираете записи с самыми маленькими интервалами (это будет еще одно соединение таблицы с самой собой).

И это будет в итоге что нужно
16. Cool_vsi 27.07.16 10:44 Сейчас в теме
(11) el-gamberro, как так сделать? попробовал
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
	ТоварыНаСкладахОстаткиИОбороты.Период КАК Период
ПОМЕСТИТЬ Остатки
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
			&ДатаНач,
			&ДатаКон,
			День,
			,
			Номенклатура В (&СписокН)
				И Склад В (&СписокС)) КАК ТоварыНаСкладахОстаткиИОбороты

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК Период
ПОМЕСТИТЬ Календарь
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &ДатаКон
	И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &ДатаНач
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Остатки.Период,
	Остатки.Номенклатура,
	Остатки.ХарактеристикаНоменклатуры,
	Остатки.КоличествоНачальныйОстаток
ИЗ
	Остатки КАК Остатки
		ЛЕВОЕ СОЕДИНЕНИЕ Календарь КАК Календарь
		ПО Остатки.Период <= Календарь.Период
Показать
но все равно выводит остатки только на дни оборота
19. el-gamberro 56 27.07.16 10:47 Сейчас в теме
(16) Cool_vsi,
в вашем запросе у таблицы Остатков приоритет над Календарем
Потом вы делаете левое соединение, соот-но остаются только те периоды, что есть в Остатках

Для начала поменяйте их местами.
Для хорошего понимания как правильно писать запросы рекомендую изучить вот это: http://www.ozon.ru/context/detail/id/1829464/
В инете можно найти пдф и на русском
23. Cool_vsi 27.07.16 10:53 Сейчас в теме
(19) el-gamberro, да нашол ошибку, правильно -
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
	ТоварыНаСкладахОстаткиИОбороты.Период КАК Период
ПОМЕСТИТЬ Остатки
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
			&ДатаНач,
			&ДатаКон,
			День,
			,
			Номенклатура В (&СписокН)
				И Склад В (&СписокС)) КАК ТоварыНаСкладахОстаткиИОбороты

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК Период
ПОМЕСТИТЬ Календарь
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &ДатаКон
	И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &ДатаНач
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Остатки.Номенклатура,
	Остатки.ХарактеристикаНоменклатуры,
	Остатки.КоличествоНачальныйОстаток,
	Календарь.Период КАК Период1
ИЗ
	Календарь КАК Календарь
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Остатки КАК Остатки
		ПО Календарь.Период >= Остатки.Период
Показать
?
25. Cool_vsi 27.07.16 11:06 Сейчас в теме
(19) el-gamberro,
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
	МАКСИМУМ(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
	НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ) КАК Период
ПОМЕСТИТЬ Остатки
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
			&ДатаНач,
			&ДатаКон,
			День,
			,
			Номенклатура В (&СписокН)
				И Склад В (&СписокС)) КАК ТоварыНаСкладахОстаткиИОбороты

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ДЕНЬ) КАК Период
ПОМЕСТИТЬ Календарь
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &ДатаКон
	И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &ДатаНач
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Остатки.Номенклатура,
	Остатки.ХарактеристикаНоменклатуры,
	Остатки.КоличествоНачальныйОстаток,
	Календарь.Период КАК Период
ИЗ
	Календарь КАК Календарь
		ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
		ПО Календарь.Период >= Остатки.Период
Показать

но получается он выводит не правильно,мне нужно не просто меньше чем период календаря но и больше периода предыдущей строки результата, а насколько я понимаю в запросе нельзя обращаться к предыдущем строкам,как правильно сделать?
Прикрепленные файлы:
26. el-gamberro 56 27.07.16 11:24 Сейчас в теме
(25) Cool_vsi,
Сделайте выборку ПериодК, МАКСИМУМ(ПериодО) и эту выборку соедините с полученной таблицей ВНУТРЕННИМ соединением. Это и есть соединение таблицы самой с собой, о которой я ранее говорил.

Таким образом вы получите все дни по календарю и соответствующий день когда есть остатки в требуемых регистрах.
27. Cool_vsi 27.07.16 11:43 Сейчас в теме
(26) el-gamberro,
ВЫБРАТЬ
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
	НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ) КАК Период
ПОМЕСТИТЬ Остатки
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
			&ДатаНач,
			&ДатаКон,
			День,
			,
			Номенклатура В (&СписокН)
				И Склад В (&СписокС)) КАК ТоварыНаСкладахОстаткиИОбороты

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

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Остатки.Номенклатура,
	Остатки.КоличествоНачальныйОстаток,
	Календарь.Период КАК ПериодКалендаря,
	Остатки.Период КАК ПериодПоОстатку
ПОМЕСТИТЬ КалендИОстаткиОбщая
ИЗ
	Календарь КАК Календарь
		ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
		ПО Календарь.Период >= Остатки.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендИОстаткиОбщая.Номенклатура,
	СУММА(КалендИОстаткиОбщая.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
	КалендИОстаткиОбщая.ПериодКалендаря,
	МАКСИМУМ(КалендИОстаткиОбщая.ПериодПоОстатку) КАК ПериодПоОстатку
ПОМЕСТИТЬ МаксДатаИзОстатка
ИЗ
	КалендИОстаткиОбщая КАК КалендИОстаткиОбщая

СГРУППИРОВАТЬ ПО
	КалендИОстаткиОбщая.ПериодКалендаря,
	КалендИОстаткиОбщая.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендИОстаткиОбщая.Номенклатура,
	КалендИОстаткиОбщая.КоличествоНачальныйОстаток,
	КалендИОстаткиОбщая.ПериодКалендаря,
	КалендИОстаткиОбщая.ПериодПоОстатку
ИЗ
	КалендИОстаткиОбщая КАК КалендИОстаткиОбщая
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксДатаИзОстатка КАК МаксДатаИзОстатка
		ПО КалендИОстаткиОбщая.Номенклатура = МаксДатаИзОстатка.Номенклатура
			И КалендИОстаткиОбщая.ПериодКалендаря = МаксДатаИзОстатка.ПериодКалендаря
			И КалендИОстаткиОбщая.ПериодПоОстатку = МаксДатаИзОстатка.ПериодПоОстатку
Показать
правильно я сделал?
28. el-gamberro 56 27.07.16 11:48 Сейчас в теме
(27) Cool_vsi, вроде все верно
Сделайте еще

УПОРЯДОЧИТЬ ПО
КалендИОстаткиОбщая.Номенклатура, КалендИОстаткиОбщая.ПериодКалендаря

чтобы посмотреть и перепроверить, что выбрано верно
29. Cool_vsi 27.07.16 11:56 Сейчас в теме
(28) el-gamberro, вот результат и сравнение с другими отчетами, почему-то на 1 такт отстает =(, то есть показывает с запозданием на дату изменения, в примере 14.07 стало 1 штука, он показывает что 3, а это изменение было 06.07 , а 15.07 он показывает 1 , хотя на 0 уже изменилось
Прикрепленные файлы:
30. NeviD 27.07.16 12:04 Сейчас в теме
(29) Cool_vsi, У вас считается начальный остаток, а сравниваете его с конечным остатком, вот и расхождение в 1 день
31. Cool_vsi 27.07.16 13:49 Сейчас в теме
(28) el-gamberro, вот какой получился запрос, прошу его проверить :
ВЫБРАТЬ
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыНаСкладахОстаткиИОбороты.Период КАК Период,
	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток
ПОМЕСТИТЬ Остатки
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
			&ДатаНач,
			&ДатаКон,
			День,
			,
			Номенклатура В (&СписокН)
				И Склад В (&СписокС)) КАК ТоварыНаСкладахОстаткиИОбороты

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыВРезервеНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыВРезервеНаСкладахОстаткиИОбороты.Период КАК Период,
	СУММА(ТоварыВРезервеНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток
ПОМЕСТИТЬ ВРезерве
ИЗ
	РегистрНакопления.ТоварыВРезервеНаСкладах.ОстаткиИОбороты(
			&ДатаНач,
			&ДатаКон,
			День,
			,
			Номенклатура В (&СписокН)
				И Склад В (&СписокС)) КАК ТоварыВРезервеНаСкладахОстаткиИОбороты

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

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

СГРУППИРОВАТЬ ПО
	ТоварыКПередачеСоСкладовОстаткиИОбороты.Номенклатура,
	ТоварыКПередачеСоСкладовОстаткиИОбороты.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК Период
ПОМЕСТИТЬ Календарь
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &ДатаКон
	И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &ДатаНач
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Остатки.Номенклатура,
	Календарь.Период КАК ПериодКалендаря,
	Остатки.Период КАК ПериодПоОстатку,
	Остатки.КоличествоКонечныйОстаток
ПОМЕСТИТЬ КалендИОстаткиОбщая
ИЗ
	Календарь КАК Календарь
		ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
		ПО Календарь.Период >= Остатки.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВРезерве.Номенклатура,
	Календарь.Период КАК ПериодКалендаря,
	ВРезерве.Период КАК ПериодПоОстатку,
	ВРезерве.КоличествоКонечныйОстаток
ПОМЕСТИТЬ КалендВРезервеОбщая
ИЗ
	Календарь КАК Календарь
		ЛЕВОЕ СОЕДИНЕНИЕ ВРезерве КАК ВРезерве
		ПО Календарь.Период >= ВРезерве.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КПередачи.Номенклатура,
	Календарь.Период КАК ПериодКалендаря,
	КПередачи.Период КАК ПериодПоОстатку,
	КПередачи.КоличествоКонечныйОстаток
ПОМЕСТИТЬ КалендИКПередачиОбщая
ИЗ
	Календарь КАК Календарь
		ЛЕВОЕ СОЕДИНЕНИЕ КПередачи КАК КПередачи
		ПО Календарь.Период >= КПередачи.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендИОстаткиОбщая.Номенклатура,
	КалендИОстаткиОбщая.ПериодКалендаря,
	МАКСИМУМ(КалендИОстаткиОбщая.ПериодПоОстатку) КАК ПериодПоОстатку
ПОМЕСТИТЬ МаксДатаИзОстатка
ИЗ
	КалендИОстаткиОбщая КАК КалендИОстаткиОбщая

СГРУППИРОВАТЬ ПО
	КалендИОстаткиОбщая.Номенклатура,
	КалендИОстаткиОбщая.ПериодКалендаря
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендВРезервеОбщая.Номенклатура,
	КалендВРезервеОбщая.ПериодКалендаря,
	МАКСИМУМ(КалендВРезервеОбщая.ПериодПоОстатку) КАК ПериодПоОстатку
ПОМЕСТИТЬ МаксДатаВРезерве
ИЗ
	КалендВРезервеОбщая КАК КалендВРезервеОбщая

СГРУППИРОВАТЬ ПО
	КалендВРезервеОбщая.Номенклатура,
	КалендВРезервеОбщая.ПериодКалендаря
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендИКПередачиОбщая.Номенклатура,
	КалендИКПередачиОбщая.ПериодКалендаря,
	МАКСИМУМ(КалендИКПередачиОбщая.ПериодПоОстатку) КАК ПериодПоОстатку
ПОМЕСТИТЬ МаксДатаКПередачи
ИЗ
	КалендИКПередачиОбщая КАК КалендИКПередачиОбщая

СГРУППИРОВАТЬ ПО
	КалендИКПередачиОбщая.Номенклатура,
	КалендИКПередачиОбщая.ПериодКалендаря
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендИОстаткиОбщая.Номенклатура,
	КалендИОстаткиОбщая.ПериодКалендаря,
	КалендИОстаткиОбщая.КоличествоКонечныйОстаток
ПОМЕСТИТЬ ИтогОстатки
ИЗ
	КалендИОстаткиОбщая КАК КалендИОстаткиОбщая
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксДатаИзОстатка КАК МаксДатаИзОстатка
		ПО КалендИОстаткиОбщая.Номенклатура = МаксДатаИзОстатка.Номенклатура
			И КалендИОстаткиОбщая.ПериодКалендаря = МаксДатаИзОстатка.ПериодКалендаря
			И КалендИОстаткиОбщая.ПериодПоОстатку = МаксДатаИзОстатка.ПериодПоОстатку
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендВРезервеОбщая.Номенклатура,
	КалендВРезервеОбщая.ПериодКалендаря,
	КалендВРезервеОбщая.КоличествоКонечныйОстаток
ПОМЕСТИТЬ ИтогВрезерве
ИЗ
	КалендВРезервеОбщая КАК КалендВРезервеОбщая
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксДатаВРезерве КАК МаксДатаВРезерве
		ПО КалендВРезервеОбщая.Номенклатура = МаксДатаВРезерве.Номенклатура
			И КалендВРезервеОбщая.ПериодКалендаря = МаксДатаВРезерве.ПериодКалендаря
			И КалендВРезервеОбщая.ПериодПоОстатку = МаксДатаВРезерве.ПериодПоОстатку
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КалендИКПередачиОбщая.Номенклатура,
	КалендИКПередачиОбщая.ПериодКалендаря,
	КалендИКПередачиОбщая.КоличествоКонечныйОстаток
ПОМЕСТИТЬ ИтогКПередачи
ИЗ
	КалендИКПередачиОбщая КАК КалендИКПередачиОбщая
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксДатаКПередачи КАК МаксДатаКПередачи
		ПО КалендИКПередачиОбщая.Номенклатура = МаксДатаКПередачи.Номенклатура
			И КалендИКПередачиОбщая.ПериодКалендаря = МаксДатаКПередачи.ПериодКалендаря
			И КалендИКПередачиОбщая.ПериодПоОстатку = МаксДатаКПередачи.ПериодПоОстатку
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ИтогОстатки.Номенклатура,
	ИтогОстатки.ПериодКалендаря,
	ИтогОстатки.КоличествоКонечныйОстаток КАК Остаток,
	0 КАК Резерв,
	0 КАК КПередачи
ПОМЕСТИТЬ ПодИтог
ИЗ
	ИтогОстатки КАК ИтогОстатки

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

ВЫБРАТЬ
	ИтогВрезерве.Номенклатура,
	ИтогВрезерве.ПериодКалендаря,
	0,
	ИтогВрезерве.КоличествоКонечныйОстаток,
	0
ИЗ
	ИтогВрезерве КАК ИтогВрезерве

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

ВЫБРАТЬ
	ИтогКПередачи.Номенклатура,
	ИтогКПередачи.ПериодКалендаря,
	0,
	0,
	ИтогКПередачи.КоличествоКонечныйОстаток
ИЗ
	ИтогКПередачи КАК ИтогКПередачи
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПодИтог.Номенклатура,
	ПодИтог.ПериодКалендаря,
	СУММА(ПодИтог.Остаток) КАК Остаток,
	СУММА(ПодИтог.Резерв) КАК Резерв,
	СУММА(ПодИтог.КПередачи) КАК КПередачи
ПОМЕСТИТЬ ПодИтог2Группировка
ИЗ
	ПодИтог КАК ПодИтог

СГРУППИРОВАТЬ ПО
	ПодИтог.Номенклатура,
	ПодИтог.ПериодКалендаря
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПодИтог2Группировка.Номенклатура,
	ПодИтог2Группировка.ПериодКалендаря,
	ПодИтог2Группировка.Остаток,
	ПодИтог2Группировка.Резерв,
	ПодИтог2Группировка.КПередачи,
	ПодИтог2Группировка.Остаток - ПодИтог2Группировка.Резерв - ПодИтог2Группировка.КПередачи КАК СвободныйОстаток
ИЗ
	ПодИтог2Группировка КАК ПодИтог2Группировка
Показать
32. el-gamberro 56 28.07.16 04:06 Сейчас в теме
(31) Cool_vsi, вроде все верно.
Для ускорения запроса не надо делать так много временных таблиц.

Вот тн соединение таблицы с самой собой. Т.к. мы уже оперируем временными таблицами, то это не создаст затруднений для оптимизатора запроса. А вот если мы имеем дело с виртуальными таблицами, то такое нежелательно (оптимизатор с ума сходить и может очень долго думать)

Выбрать 
  КалендИКПередачиОбщая.Номенклатура,
    КалендИКПередачиОбщая.ПериодКалендаря,
    КалендИКПередачиОбщая.КоличествоКонечныйОстаток
Из
(ВЫБРАТЬ
    Остатки.Номенклатура,
    Календарь.Период КАК ПериодКалендаря,
    Остатки.Период КАК ПериодПоОстатку,
    Остатки.КоличествоКонечныйОстаток
ИЗ
    Календарь КАК Календарь
        ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
        ПО Календарь.Период >= Остатки.Период) КалендИОстаткиОбщая
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    Остатки.Номенклатура,
    Календарь.Период КАК ПериодКалендаря,
    МАКСИМУМ(Остатки.Период) КАК ПериодПоОстатку
ИЗ
    Календарь КАК Календарь
        ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
        ПО Календарь.Период >= Остатки.Период
СГРУППИРОВАТЬ ПО
    КалендИКПередачиОбщая.Номенклатура,
    КалендИКПередачиОбщая.ПериодКалендаря) КАК МаксДатаИзОстатка
ПО КалендИОстаткиОбщая.Номенклатура = МаксДатаИзОстатка.Номенклатура
            И КалендИОстаткиОбщая.ПериодКалендаря = МаксДатаИзОстатка.ПериодКалендаря
            И КалендИОстаткиОбщая.ПериодПоОстатку = МаксДатаИзОстатка.ПериодПоОстатку
Показать


Для временных таблиц имеет смысл делать "ИНДЕКСИРОВАТЬ ПО" для полей по которым потом будет идти соединение
13. el-gamberro 56 27.07.16 10:36 Сейчас в теме
Извините сообщения спутались.
Сначала 12, потом 11
33. tolyan_ekb 104 28.07.16 09:36 Сейчас в теме
что получилось в итоге?
Оставьте свое сообщение

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