|
Получение остатков за каждый день в СКД (с условием) | ☑ | ||
---|---|---|---|---|
0
AlStorm
21.07.11
✎
02:37
|
Всем привет!
Вобщем, есть такой код: ВЫБРАТЬ ОсновнойЗапрос.ДатаОтчета, ОсновнойЗапрос.Агент, ОсновнойЗапрос.Сумма, ОсновнойЗапрос.Сумма2 ИЗ (ВЫБРАТЬ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Период КАК ДатаОтчета, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДоговорКонтрагента.Агент КАК Агент, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК Сумма, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток КАК Сумма2, НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ) КАК ДеньЗадолженности, НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Период, ДЕНЬ, -14), ДЕНЬ) КАК Минус14Дней ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты( &НачалоПериода, &КонецПериода, День, , (ДокументРасчетовСКонтрагентом ССЫЛКА Документ.РеализацияТоваровУслуг ИЛИ ДокументРасчетовСКонтрагентом ССЫЛКА Документ.ДокументРасчетовСКонтрагентом ИЛИ ДокументРасчетовСКонтрагентом ССЫЛКА Документ.КорректировкаДолга) И ВидРасчетовСКонтрагентом = &ВидРасчетовСКонтрагентом И ДоговорКонтрагента.ВидДоговора = &ВидДоговора) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты ГДЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток >= 0) КАК ОсновнойЗапрос ГДЕ ОсновнойЗапрос.Минус14Дней > ОсновнойЗапрос.ДеньЗадолженности Он выводит динамику задолженностей по контрагентам в разрезе агентов за период. Причем считается только задолженность свыше 14 дней (это важно!) В СКД сделал дополнение, все работает, но с одним НО. Как я понял, работает СКД так: Запрос выдает данные остатков только на те дни, где были движения. Например, я строю отчет с 1го по 10е января, движение было только 5го. Собственно, в запросе выдаст только остаток на 5е число, и на 10е - на конец периода. СКД не дурак, берет и копирует остатки, полученные 5го числа на все даты в периоде с 1го по 4е января - и верно делает (движений-то не было!). Но в моем случае это не прокатывает. Почему? Да потому, что мне нужны не просто остатки по долгам, мне нужны остатки по долгам свыше 14 дней! И когда СКД копирует данные с 5го числа на числа ранее - это неправильно, так как с 1го по 4е число долг по какому-нибудь документу выйдет за рамки 14ти дней, но общая задолженность не изменится. Как обойти эту проблему? Может, как-то модифицировать запрос? |
|||
1
AlStorm
21.07.11
✎
13:28
|
Победил:)
|
|||
2
AlStorm
21.07.11
✎
13:29
|
ВЫБРАТЬ
ВерхнийЗапрос.Дата, СУММА(ВерхнийЗапрос.Сумма) КАК Сумма, ВерхнийЗапрос.Агент ИЗ (ВЫБРАТЬ Даты.Дата КАК Дата, СУММА(ОсновнойЗапрос.СуммаВзаиморасчетов) КАК Сумма, ОсновнойЗапрос.Агент КАК Агент, ОсновнойЗапрос.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом ИЗ (ВЫБРАТЬ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&Началопериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d), ДЕНЬ) КАК Дата, КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&Началопериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d - &КоличествоДнейЗадолженности + 1), ДЕНЬ) КАК Минус14Дней ИЗ (ВЫБРАТЬ 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 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) КАК Даты ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ СУММА(ВЫБОР КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.СуммаВзаиморасчетов ИНАЧЕ -ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.СуммаВзаиморасчетов КОНЕЦ) КАК СуммаВзаиморасчетов, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДоговорКонтрагента.Агент КАК Агент, КОНЕЦПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Период, ДЕНЬ) КАК Период, КОНЕЦПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ) КАК ДеньДолга, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов ГДЕ (ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом ССЫЛКА Документ.РеализацияТоваровУслуг ИЛИ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом ССЫЛКА Документ.ДокументРасчетовСКонтрагентом ИЛИ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом ССЫЛКА Документ.КорректировкаДолга) И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДоговорКонтрагента.ВидДоговора = &ДоговорСПокупателем И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ВидРасчетовСКонтрагентом = &ВидРасчетовСКонтрагентом СГРУППИРОВАТЬ ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДоговорКонтрагента.Агент, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом, КОНЕЦПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Период, ДЕНЬ), КОНЕЦПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ)) КАК ОсновнойЗапрос ПО Даты.Дата > ОсновнойЗапрос.Период И Даты.Минус14Дней > ОсновнойЗапрос.ДеньДолга СГРУППИРОВАТЬ ПО Даты.Дата, ОсновнойЗапрос.Агент, ОсновнойЗапрос.ДокументРасчетовСКонтрагентом) КАК ВерхнийЗапрос ГДЕ ВерхнийЗапрос.Сумма >= 0 СГРУППИРОВАТЬ ПО ВерхнийЗапрос.Дата, ВерхнийЗапрос.Агент Вобщем, вот такой запросик получился. Виртуальные таблицы вообще не использовал, остатки считаю сам по таблице регистра. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |