Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Заезженная тема. Остатки на каждый месяц

Заезженная тема. Остатки на каждый месяц
Я
   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.Период

УПОРЯДОЧИТЬ ПО
    Группа,
    Период

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

                //КОНЕЦ

        //КОНЕЦ) КАК СуммаВалКонечныйОстаток

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

СГРУППИРОВАТЬ ПО
    Движения.ИсточникКредитования,
    ВТ_Календарь.Период,
    Движения.Период,
    Движения.СуммаВалКонечныйОстаток
УПОРЯДОЧИТЬ ПО
    ИсточникКредитования,
    Период
   D_Sergeevich
 
15 - 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

                //КОНЕЦ

        //КОНЕЦ) КАК СуммаВалКонечныйОстаток

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

СГРУППИРОВАТЬ ПО
    Движения.ИсточникКредитования,
    ВТ_Календарь.Период,
    Движения.Период,
    Движения.СуммаВалКонечныйОстаток
УПОРЯДОЧИТЬ ПО
    ИсточникКредитования,
    Период

   RomanYS
 
16 - 23.02.20 - 21:42
(14) конечно, там идёт расчет нарастающего итога: к начальному остатку добавляются обороты до даты.
В такой ситуации возможно корректнее брать отдельно таблицу остатков и отдельно оборотов
   D_Sergeevich
 
17 - 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
                КОНЕЦ
        КОНЕЦ) КАК СуммаВалКонечныйОстаток
ИЗ
    ВТ_Календарь КАК ВТ_Календарь
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДенежныеСредства.ОстаткиИОбороты(
                &НачПериода,
                &КонПериода,
                МЕСЯЦ,
                ,
                ИсточникКредитования.ЭтоГруппа = ЛОЖЬ
                    И Валюта = &Валюта) КАК Движения
        ПО (Движения.Период <= ВТ_Календарь.Период)

СГРУППИРОВАТЬ ПО
    Движения.ИсточникКредитования,
    ВТ_Календарь.Период
УПОРЯДОЧИТЬ ПО
    ИсточникКредитования,
    Период

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.