Имя: Пароль:
1C
 
Отчет по периодам в СКД
,
0 Zombi
 
05.04.16
12:39
Пишу отчет в СКД, вот запрос:

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

Вывожу по периодам, например по неделям, поля "ПросроченоДней" и просроченные остатки считаются только в тех периодах, где есть движения. Как сделать так, чтобы во всех периодах считались?
1 Zombi
 
05.04.16
13:15
ап.
2 NoiseRND
 
05.04.16
13:25
Делаешь таблицу дней периода, и к ней связываешь свои взаиморасчеты, по каждому дню периода. Работать будет не шустро...
3 TolikoSprosit
 
05.04.16
13:26
Тип дополнения в группировке скд
4 Zombi
 
05.04.16
13:31
(3) Ставил дополнение в группировке СКД. То же самое.
5 Zombi
 
05.04.16
13:31
(2) Возможно...
6 Zombi
 
05.04.16
13:34
(2) Только вот периодичность может быть по дням, неделям, месяцам
7 Zombi
 
06.04.16
09:31
Подкиньте пример с соединением с каждой датой в запросе. Таблицу дней в запросе я получил, как на каждый этот день остаток получить?
8 hhhh
 
06.04.16
11:19
наверно надо в два этапа, сначала формируешь просто остатки, со всеми дополнениями и пишешь в ВТ. Потом уже когда всё есть, уже делаешь РАЗНОСТЬДАТ, выбираешь просроченные.
9 Zombi
 
06.04.16
11:38
ВЫБРАТЬ
    ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
    ВзаиморасчетыСКонтрагентамиОстатки.Организация,
    ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента
ПОМЕСТИТЬ вт_Контрагенты
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&КонецПериода, ) КАК ВзаиморасчетыСКонтрагентамиОстатки
ГДЕ
    ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток > 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    0 КАК Цифра
ПОМЕСТИТЬ Цифры

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1000 * Тысячи.Цифра + 100 * Сотни.Цифра + 10 * Десятки.Цифра + Единицы.Цифра КАК Чиселко
ПОМЕСТИТЬ Числа
ИЗ
    Цифры КАК Единицы,
    Цифры КАК Десятки,
    Цифры КАК Сотни,
    Цифры КАК Тысячи
;

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

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

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Организация,
    ВложенныйЗапрос.Контрагент,
    ВложенныйЗапрос.ДоговорКонтрагента,
    ВложенныйЗапрос.НачалоПериода
;

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

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

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

УПОРЯДОЧИТЬ ПО
    Контрагент

Я вот что нагородил. Только в результате дни все в периоде, только начальный остаток я вижу только в периодах, где движения были. Что не так сделал?
10 Zombi
 
06.04.16
12:15
Остатки периодами вроде я правильно получил. Косяк в последнем пакете получается?
11 Zombi
 
07.04.16
06:41
Тему я победил, сделал обычный запрос:

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

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

В СКД у начального и конечного остатка указал роль "Остатки" и в отчете стали остатки за каждый период выводиться. Теперь вопрос с полем "ПросроченоДней". Как это поле в СКД заставить выводиться в каждом периоде, а не только там где движения были?
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший