Книга знаний

1С:Предприятие / v8 / Приемы программирования / Запросы

v8: Полные остатки по периоду во вложенном запросе по начальному остатку

Как сделать то же самое http://kb.mista.ru/article.php?id=579& (последний запрос), только по начальному остатку?Автор статьи: 1CLama | Редакторы:
Последняя редакция №8 от 14.01.08 | История
URL: http://kb.mista.ru/article.php?id=625

Ключевые слова: запрос,остатки,полные,день,период, начальный остаток, н.о.


На примере регистра Товары на складах

ВЫБРАТЬ
   ТоварыНаСкладах.Номенклатура,
   ТоварыНаСкладах.ХарактеристикаНоменклатуры,
   ДОБАВИТЬКДАТЕ(&ДатаНач, МЕСЯЦ, РазностьДат.НомерДняИзДиапазона) КАК Период,
   ТоварыНаСкладах.КоличествоНачальныйОстаток
ИЗ
   (ВЫБРАТЬ
       МАКСИМУМ(ЗапросДатаС.ДатаС) КАК ДатаС,
       ЗапросДатаПо.Номенклатура КАК Номенклатура,
       ЗапросДатаПо.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       ЗапросДатаПо.ДатаПо КАК ДатаПо,
       ЗапросДатаПо.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток
   ИЗ
       (ВЫБРАТЬ
           ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
           ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
           КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, МЕСЯЦ) КАК ДатаПо,
           ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток
       ИЗ
           РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Месяц, , ) КАК ТоварыНаСкладахОстаткиИОбороты) КАК ЗапросДатаПо
           ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
               ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
               ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
               ВЫБОР
                   КОГДА ДОБАВИТЬКДАТЕ(ТоварыНаСкладахОстаткиИОбороты.Период, МЕСЯЦ, 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 <= &КолДнейМеждуДатами) КАК РазностьДат
       ПО (ДОБАВИТЬКДАТЕ(&ДатаНач, МЕСЯЦ, РазностьДат.НомерДняИзДиапазона) МЕЖДУ ТоварыНаСкладах.ДатаС И ТоварыНаСкладах.ДатаПо)

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2024 | Mista.ru

Яндекс.Метрика