Имя: Пароль:
1C
1С v8
Заезженная тема. Остатки на каждый месяц
0 D_Sergeevich
 
23.02.20
19:23
Всем привет и с праздником!
Не могу понять почему если в первом месяце в разрезе одной группы (Гр3) на конец периода остаток 0, то на остальные месяцы по этой группе записей уже нету.
Например: https://yadi.sk/i/qyFaUnQjkxZDjA
Помогите плиз, а то меня скоро сожрут.


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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачПериода, МЕСЯЦ, Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1) КАК Период
ПОМЕСТИТЬ ВТ_Календарь
ИЗ
    (ВЫБРАТЬ 0 КАК Цифра
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ    1
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ 2
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ 3
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ    4
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ    5
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ    6
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ    7
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ    8
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ    9) КАК Цифры1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК Цифра
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    1
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    2
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    3
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    4
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    5
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    6
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    7
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    8
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    9) КАК Цифры2
        ПО (Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ    0 КАК Цифра
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    1
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    2
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    3
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    4
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    5
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    6
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    7
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    8
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    9) КАК Цифры3
        ПО (Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    1
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    2
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    3
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    4
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    5
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    6
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    7
        ОБЪЕДИНИТЬ ВСЕ
        ВЫБРАТЬ    8    
        ОБЪЕДИНИТЬ ВСЕ        
        ВЫБРАТЬ    9) КАК Цифры4
        ПО (Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ));

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

УПОРЯДОЧИТЬ ПО
    Группа,
    Период
1 RomanYS
 
23.02.20
20:09
(0) пипец ты там вложенных нагородил. Проще заново написать чем это прочитать.
2 D_Sergeevich
 
23.02.20
20:30
(1) это мне досталось по наследству. Переписать пробовал, не получается нужный результат.
3 palsergeich
 
23.02.20
20:40
Если надо по быстрому - СКД из коробки2мя способами умеет получать остатки на каджый день, даже если нет движений.
1) Расширение периода
2) связь через параметр
4 RomanYS
 
23.02.20
20:41
(2) Надо себя заставить. Пытаться править то, что не понимаешь - только в закопаешься в этом г.
Примеров как это делается полно и там ничего сложного
5 RomanYS
 
23.02.20
20:41
6 palsergeich
 
23.02.20
20:42
(5) Пока база маленькая - это будет работать.
Но при оборотистых базах - это смерть.
Выхода 2 - или получать в цикле/скд.
или хранить расчитанными
7 palsergeich
 
23.02.20
20:43
(6) тетта соежинение на больших таблицах штука прожорливая
8 RomanYS
 
23.02.20
20:44
(5) хотя пример возможно не лучший
9 RomanYS
 
23.02.20
20:45
(7) у него месяцы. Месяцев обычно не больше 100, от соединения 100*100 ни одна база не умрет
10 palsergeich
 
23.02.20
20:45
(8) Пример то хороший, но последствия - как бомбу заложить. Рано или поздно рванет
11 palsergeich
 
23.02.20
20:46
(9) Ну если месяц, то да
12 RomanYS
 
23.02.20
20:49
(10) Оптимальнее наверное получить периоды действия остатков, а потом соединять с таблицей периодов. Тогда расчет суммы в группировке не нужен будет.
А пример хорош тем, что очень коротко)
13 RomanYS
 
23.02.20
20:51
+(12) в примере по сути идет расчет нарастающего итога, а имея таблицу остатков без этого можно обойтись.
14 D_Sergeevich
 
23.02.20
21:21
(5) пытаюсь сделать по этому примеру, результат выходит странный, либо остаток суммируется (если делать сумма) за весь период либо он вообще какй то левый. Я не пойму как его группировать или нужно обороты прибавлять?


ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачПериода, МЕСЯЦ, Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1) КАК Период
ПОМЕСТИТЬ ВТ_Календарь
ИЗ
    (ВЫБРАТЬ
        0 КАК Цифра
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        1
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        3
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        4
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        5
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        6
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        7
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        8
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        9) КАК Цифры1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры2
        ПО (Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры3
        ПО (Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры4
        ПО (Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
;

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

СГРУППИРОВАТЬ ПО
    Движения.ИсточникКредитования,
    ВТ_Календарь.Период,
    Движения.Период,
    Движения.СуммаВалКонечныйОстаток
УПОРЯДОЧИТЬ ПО
    ИсточникКредитования,
    Период
15 D_Sergeevich
 
23.02.20
21:29
(14) Коряво форматнулся


ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачПериода, МЕСЯЦ, Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1) КАК Период
ПОМЕСТИТЬ ВТ_Календарь
ИЗ
    (ВЫБРАТЬ
        0 КАК Цифра
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        1
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        3
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        4
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        5
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        6
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        7
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        8
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        9) КАК Цифры1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры2
        ПО (Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры3
        ПО (Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры4
        ПО (Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
;

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

СГРУППИРОВАТЬ ПО
    Движения.ИсточникКредитования,
    ВТ_Календарь.Период,
    Движения.Период,
    Движения.СуммаВалКонечныйОстаток
УПОРЯДОЧИТЬ ПО
    ИсточникКредитования,
    Период
16 RomanYS
 
23.02.20
21:42
(14) конечно, там идёт расчет нарастающего итога: к начальному остатку добавляются обороты до даты.
В такой ситуации возможно корректнее брать отдельно таблицу остатков и отдельно оборотов
17 D_Sergeevich
 
23.02.20
22:58
Вроде остаток на конец работает верно, а как сделать тоже самое только на НАЧАЛО ПЕРИОДА?


ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачПериода, МЕСЯЦ, Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1) КАК Период
ПОМЕСТИТЬ ВТ_Календарь
ИЗ
    (ВЫБРАТЬ
        0 КАК Цифра
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        1
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        3
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        4
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        5
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        6
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        7
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        8
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        9) КАК Цифры1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры2
        ПО (Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры3
        ПО (Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры4
        ПО (Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ))
;

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

СГРУППИРОВАТЬ ПО
    Движения.ИсточникКредитования,
    ВТ_Календарь.Период
УПОРЯДОЧИТЬ ПО
    ИсточникКредитования,
    Период
18 RomanYS
 
23.02.20
23:09
сумма(ВЫБОР
            КОГДА Движения.Период = &НачПериода
                ТОГДА Движения.СуммаВалНачальныйОстаток
            КОГДА Движения.Период < ВТ_Календарь.Период
                ТОГДА Движения.СуммаВалОборот
           ИНАЧЕ 0
          КОНЕЦ) КАК СуммаВалНачальныйОстаток
19 RomanYS
 
23.02.20
23:11
(17) и засунь уже цифры в ВТ. Зачем их четыре раза собирать во вложенном, если можно один раз поместить и 4 раза использовать.
20 D_Sergeevich
 
23.02.20
23:32
(18) Я так уже делал, оно не верно. Получается на конец февраля по одной из групп остаток 0, значит на начало марта должно быть 0, а оно выводит то что было в начале января
21 RomanYS
 
24.02.20
00:03
(20) да, ошибка. Обороты первого периода теряются. Поэтому кстати и удобнее брать отдельно остатки и обороты
22 D_Sergeevich
 
24.02.20
00:10
(21) Есть примерчик? я не гуру в 1с поэтому сваять самому чет не выходит