Книга знаний

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

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

Полные остатки по периоду во вложенном запросеАвтор статьи:
Последняя редакция №1 от 15.08.07
URL: http://kb.mista.ru/article.php?id=579

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


Как получить остатки по периоду когда не было движения?

Многие знают что остатки по периоду с дополнением можно получить таким запросом
ВЫБРАТЬ

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


Но что делать когда необходимо их получить во вложенном запросе, или посчитать количество дней с отрицательными остатками?
Предлагаю следующий вариант. Регистр сведений КурсыВалют должен быть заполнен всеми днями.

ВЫБРАТЬ

   Дебиторка.СуммаВзаиморасчетовКонечныйОстаток КАК Долг,
   КурсыВалют.Период КАК Период,
   Дебиторка.ДоговорКонтрагента КАК ДоговорКонтрагента,
   Дебиторка.ДоговорКонтрагента.Владелец КАК Контрагент,
   ВЫБОР
       КОГДА Дебиторка.СуммаВзаиморасчетовКонечныйОстаток < 0
           ТОГДА 1
       ИНАЧЕ 0
   КОНЕЦ КАК КвоОтрицательных
ИЗ
   РегистрСведений.КурсыВалют КАК КурсыВалют
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           Оборот1.Дата КАК ДатаС,
           МИНИМУМ(ВЫБОР
                   КОГДА Оборот2.Дата ЕСТЬ NULL
                       ТОГДА КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
                   ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Оборот2.Дата, ДЕНЬ, -1), ДЕНЬ)
               КОНЕЦ) КАК ДатаПо,
           Оборот1.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,
           Оборот1.ДоговорКонтрагента КАК ДоговорКонтрагента
       ИЗ
           (ВЫБРАТЬ
               ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период КАК Дата,
               ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,
               ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента
           ИЗ
               РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , {(ДоговорКонтрагента.Организация).* КАК Организация, (ДоговорКонтрагента.Владелец).* КАК Контрагент, (ДоговорКонтрагента).*}) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты) КАК Оборот1
               ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период КАК Дата,
                   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента
               ИЗ
                   РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , {(ДоговорКонтрагента.Организация).* КАК Организация, (ДоговорКонтрагента.Владелец).* КАК Контрагент, (ДоговорКонтрагента).*}) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты) КАК Оборот2
               ПО Оборот1.Дата < Оборот2.Дата
                   И Оборот1.ДоговорКонтрагента = Оборот2.ДоговорКонтрагента
       
       СГРУППИРОВАТЬ ПО
           Оборот1.Дата,
           Оборот1.СуммаВзаиморасчетовКонечныйОстаток,
           Оборот1.ДоговорКонтрагента) КАК Дебиторка
       ПО (КурсыВалют.Период МЕЖДУ Дебиторка.ДатаС И Дебиторка.ДатаПо)
ГДЕ
   КурсыВалют.Период МЕЖДУ &НачалоПериода И &КонецПериода
   И КурсыВалют.Валюта = &Валюта
ИТОГИ
   СУММА(Долг),
   СУММА(КвоОтрицательных)
ПО
   ОБЩИЕ,
   Контрагент,
   ДоговорКонтрагента,
   Период
АВТОУПОРЯДОЧИВАНИЕ



Заметьте, что в итогах для слова Период нет дополнения.

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

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