v8: Полные остатки по периоду во вложенном запросе по начальному остатку Ключевые слова: запрос,остатки,полные,день,период, начальный остаток, н.о.
На примере регистра Товары на складах
ВЫБРАТЬ
ТоварыНаСкладах.Номенклатура,
ТоварыНаСкладах.ХарактеристикаНоменклатуры,
ДОБАВИТЬКДАТЕ(&ДатаНач, МЕСЯЦ, РазностьДат.НомерДняИзДиапазона) КАК Период,
ТоварыНаСкладах.КоличествоНачальныйОстаток
ИЗ
(ВЫБРАТЬ
МАКСИМУМ(ЗапросДатаС.ДатаС) КАК ДатаС,
ЗапросДатаПо.Номенклатура КАК Номенклатура,
ЗапросДатаПо.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ЗапросДатаПо.ДатаПо КАК ДатаПо,
ЗапросДатаПо.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток
ИЗ
(ВЫБРАТЬ
ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, МЕСЯЦ) КАК ДатаПо,
ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Месяц, , ) КАК ТоварыНаСкладахОстаткиИОбороты) КАК ЗапросДатаПо
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(ТоварыНаСкладахОстаткиИОбороты.Период, МЕСЯЦ, 1) > &ДатаКон
ТОГДА &ДатаНач
ИНАЧЕ ДОБАВИТЬКДАТЕ(ТоварыНаСкладахОстаткиИОбороты.Период, МЕСЯЦ, 1)
КОНЕЦ КАК ДатаС
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Месяц, , ) КАК ТоварыНаСкладахОстаткиИОбороты) КАК ЗапросДатаС
ПО ЗапросДатаС.Номенклатура = ЗапросДатаПо.Номенклатура
И ЗапросДатаС.ХарактеристикаНоменклатуры = ЗапросДатаПо.ХарактеристикаНоменклатуры
И ЗапросДатаС.ДатаС < ЗапросДатаПо.ДатаПо
СГРУППИРОВАТЬ ПО
ЗапросДатаПо.Номенклатура,
ЗапросДатаПо.ДатаПо,
ЗапросДатаПо.ХарактеристикаНоменклатуры,
ЗапросДатаПо.КоличествоНачальныйОстаток) КАК ТоварыНаСкладах
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d КАК НомерДняИзДиапазона
ИЗ
(ВЫБРАТЬ
0 КАК a
ОБЪЕДИНИТЬ
ВЫБРАТЬ
1
ОБЪЕДИНИТЬ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ
ВЫБРАТЬ
3
ОБЪЕДИНИТЬ
ВЫБРАТЬ
4
ОБЪЕДИНИТЬ
ВЫБРАТЬ
5
ОБЪЕДИНИТЬ
ВЫБРАТЬ
6
ОБЪЕДИНИТЬ
ВЫБРАТЬ
7
ОБЪЕДИНИТЬ
ВЫБРАТЬ
8
ОБЪЕДИНИТЬ
ВЫБРАТЬ
9) КАК aa
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК b
ОБЪЕДИНИТЬ
ВЫБРАТЬ
1
ОБЪЕДИНИТЬ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ
ВЫБРАТЬ
3
ОБЪЕДИНИТЬ
ВЫБРАТЬ
4
ОБЪЕДИНИТЬ
ВЫБРАТЬ
5
ОБЪЕДИНИТЬ
ВЫБРАТЬ
6
ОБЪЕДИНИТЬ
ВЫБРАТЬ
7
ОБЪЕДИНИТЬ
ВЫБРАТЬ
8
ОБЪЕДИНИТЬ
ВЫБРАТЬ
9) КАК bb
ПО (ИСТИНА)
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК c
ОБЪЕДИНИТЬ
ВЫБРАТЬ
1
ОБЪЕДИНИТЬ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ
ВЫБРАТЬ
3
ОБЪЕДИНИТЬ
ВЫБРАТЬ
4
ОБЪЕДИНИТЬ
ВЫБРАТЬ
5
ОБЪЕДИНИТЬ
ВЫБРАТЬ
6
ОБЪЕДИНИТЬ
ВЫБРАТЬ
7
ОБЪЕДИНИТЬ
ВЫБРАТЬ
8
ОБЪЕДИНИТЬ
ВЫБРАТЬ
9) КАК cc
ПО (ИСТИНА)
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК d
ОБЪЕДИНИТЬ
ВЫБРАТЬ
1
ОБЪЕДИНИТЬ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ
ВЫБРАТЬ
3
ОБЪЕДИНИТЬ
ВЫБРАТЬ
4
ОБЪЕДИНИТЬ
ВЫБРАТЬ
5
ОБЪЕДИНИТЬ
ВЫБРАТЬ
6
ОБЪЕДИНИТЬ
ВЫБРАТЬ
7
ОБЪЕДИНИТЬ
ВЫБРАТЬ
8
ОБЪЕДИНИТЬ
ВЫБРАТЬ
9) КАК dd
ПО (ИСТИНА)
ГДЕ
aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= &КолДнейМеждуДатами) КАК РазностьДат
ПО (ДОБАВИТЬКДАТЕ(&ДатаНач, МЕСЯЦ, РазностьДат.НомерДняИзДиапазона) МЕЖДУ ТоварыНаСкладах.ДатаС И ТоварыНаСкладах.ДатаПо)
|