Имя: Пароль:
1C
1С v8
Остатки на каждый месяц - баг или что?
,
0 D_Sergeevich
 
08.05.14
10:37
Привет.
Запрос формирует таблицу дат (месяцы) и выводит остатки на начало и конец в разрезе ИсточникаКредитования за каждый месяц в выбранном периоде.
Я не могу понять из за чего баг, не показывает остатки именно в мае этого года т.к. в мае еще не было оборотов. Но если выбрать период 15 год где вообще еще не было оборотов, то там все выводит. Может где то недоработка в запросе?

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

СГРУППИРОВАТЬ ПО
    ДенежныеСредстваОстаткиИОбороты.Период,
    ДенежныеСредстваОстаткиИОбороты.ИсточникКредитования
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, Цифры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 shuhard
 
08.05.14
10:38
(0) это фича
2 ptiz
 
08.05.14
10:40
Я бы добавил - неприятная фича.
3 D_Sergeevich
 
08.05.14
10:41
(1) Ну помогите плиз, увы я не селен в запросах...
4 Segate
 
08.05.14
10:41
(0)чумачеччий календарь!
5 Godofsin
 
08.05.14
10:42
(4) +1. И чо люди СКД не пользуются? =(
6 D_Sergeevich
 
08.05.14
10:57
Что никто в запросах не шарит? правильный он или нет?
7 ptiz
 
08.05.14
11:05
В последней выборке, по-моему надо так:
ВЫБРАТЬ
...
    ВТ_Остатки1.ОстатокНаКонец,  //  а не  ВТ_Остатки.ОстатокНаКонец
8 D_Sergeevich
 
08.05.14
11:09
(7) Не помогает
9 GROOVY
 
08.05.14
11:16
(0) Извращение какое-то.
Для вывода записей по пустым периодам нужно либо итоги подвести с периодичностью, либо в СКД дополнение юзать. А вот так извращаться как в (0) не надо.
10 ptiz
 
08.05.14
11:16
А так?

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

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Дата,
    ВТ_Остатки.ОстатокНаНачало,
    ВТ_Остатки.ОстатокНаКонец,
    ВТ_Остатки.Группа

УПОРЯДОЧИТЬ ПО
    Период
11 D_Sergeevich
 
08.05.14
11:29
(10) во теперь остатки появились, на конец месяца правильные, а вот на начало почему то не правильные
12 D_Sergeevich
 
08.05.14
11:30
(11) именно в мае
13 D_Sergeevich
 
08.05.14
11:33
(12) хм, оно показывает остаток на начало мая мартовский
14 ptiz
 
08.05.14
11:51
(13) Сдается мне, что картину еще портит
КОГДА ДенежныеСредстваОстаткиИОбороты.Валюта.Наименование = "RUP"

Убери поле "Валюта" из запроса вообще - цифры сойдутся?

Если да, то добавляй Валюту в группировки аналогично Группе, и сворачивай в самом конце, если нужно.
15 D_Sergeevich
 
08.05.14
12:13
(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 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
;

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

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

УПОРЯДОЧИТЬ ПО
    Период
16 D_Sergeevich
 
08.05.14
12:14
(14) Походу действительно в валютах дело было
17 D_Sergeevich
 
08.05.14
12:15
(14) Благодарю за помощь!