Имя: Пароль:
1C
1С v8
Остатки на каждый день по регистру бухгалтерии
0 Быдло замкадное
 
25.05.20
17:02
Привет, подскажите что неправильно.
Пишу запрос выдающий остаток на 51 счете за каждый день.
К начальным остаткам прибавляю обороты, до даты Х, но эти обороты у меня почему то задваиваются, не пойму почему.
На примере:

ДЕНЬ            ОстатокНаКонец        СуммаОборотНаКонец
01.05.2020 0:00:00            5 569 486,75        <NULL>
02.05.2020 0:00:00            5 569 486,75        <NULL>
03.05.2020 0:00:00            5 569 486,75        <NULL>
04.05.2020 0:00:00            5 569 486,75        <NULL>
05.05.2020 0:00:00            5 569 486,75        <NULL>
06.05.2020 0:00:00            12 023 789,55        6 454 302,8

Вот эти первые обороты за день 06.05.2020 на самом деле 3 227 151,4 т.е. ровно в 2 раза меньше того что считает программа

"ВЫБРАТЬ РАЗЛИЧНЫЕ
|    НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.Дата, ДЕНЬ) КАК ДЕНЬ
|ПОМЕСТИТЬ Календарь
|ИЗ
|    РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ
|    РегламентированныйПроизводственныйКалендарь.Дата МЕЖДУ &ДатаНач И &ДатаКон
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Календарь.ДЕНЬ КАК ДЕНЬ,
|    СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК СуммаОстатокНаНачало
|ПОМЕСТИТЬ ОстаткиНаНачало
|ИЗ
|    Календарь КАК Календарь,
|    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаНач, Счет = &Счет51, , ) КАК ХозрасчетныйОстатки
|
|СГРУППИРОВАТЬ ПО
|    Календарь.ДЕНЬ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    Календарь.ДЕНЬ,
|    0
|ИЗ
|    Календарь КАК Календарь,
|    РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, ДЕНЬ, Счет = &Счет51, , , , ) КАК ХозрасчетныйОбороты
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаНач, Счет = &Счет51, , ) КАК ХозрасчетныйОстатки
|        ПО ХозрасчетныйОбороты.Организация = ХозрасчетныйОстатки.Организация
|            И ХозрасчетныйОбороты.Субконто1 = ХозрасчетныйОстатки.Субконто1
|            И ХозрасчетныйОбороты.Субконто2 = ХозрасчетныйОстатки.Субконто2
|ГДЕ
|    ХозрасчетныйОстатки.Организация ЕСТЬ NULL
|
|СГРУППИРОВАТЬ ПО
|    Календарь.ДЕНЬ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, ДЕНЬ) КАК ДЕНЬ,
|    СУММА(ХозрасчетныйОбороты.СуммаОборот) КАК СуммаОборот
|ПОМЕСТИТЬ ОборотыЗаПериод
|ИЗ
|    РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, ДЕНЬ, Счет = &Счет51, , , , ) КАК ХозрасчетныйОбороты
|
|СГРУППИРОВАТЬ ПО
|    НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, ДЕНЬ)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    МАКСИМУМ(ОстаткиНаНачало.СуммаОстатокНаНачало) КАК СуммаОстатокНаНачало,
|    ОстаткиНаНачало.ДЕНЬ КАК ДЕНЬ,
|    СУММА(ОборотыЗаПериодНаКонец.СуммаОборот) КАК СуммаОборотНаКонец
|ПОМЕСТИТЬ РасчетОстатковНаКонец
|ИЗ
|    ОстаткиНаНачало КАК ОстаткиНаНачало
|        ЛЕВОЕ СОЕДИНЕНИЕ ОборотыЗаПериод КАК ОборотыЗаПериодНаКонец
|        ПО (ОборотыЗаПериодНаКонец.ДЕНЬ МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ) И КОНЕЦПЕРИОДА(ОстаткиНаНачало.ДЕНЬ, ДЕНЬ))
|
|СГРУППИРОВАТЬ ПО
|    ОстаткиНаНачало.ДЕНЬ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    РасчетОстатковНаКонец.ДЕНЬ КАК ДЕНЬ,
|    РасчетОстатковНаКонец.СуммаОстатокНаНачало + ЕСТЬNULL(РасчетОстатковНаКонец.СуммаОборотНаКонец, 0) КАК ОстатокНаКонец,
|    РасчетОстатковНаКонец.СуммаОборотНаКонец КАК СуммаОборотНаКонец
|ПОМЕСТИТЬ ОбщиеОстатки
|ИЗ
|    РасчетОстатковНаКонец КАК РасчетОстатковНаКонец
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ОбщиеОстатки.ДЕНЬ КАК ДЕНЬ,
|    СУММА(ОбщиеОстатки.ОстатокНаКонец) КАК ОстатокНаКонец,
|    СУММА(ОбщиеОстатки.СуммаОборотНаКонец) КАК СуммаОборотНаКонец
|ИЗ
|    ОбщиеОстатки КАК ОбщиеОстатки
|
|СГРУППИРОВАТЬ ПО
|    ОбщиеОстатки.ДЕНЬ
|
|УПОРЯДОЧИТЬ ПО
|    ДЕНЬ"
1 Быдло замкадное
 
25.05.20
17:03
подозреваю что неправильное соединение ОборотыЗаПериодНаКонец.ДЕНЬ МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ) И КОНЕЦПЕРИОДА(ОстаткиНаНачало.ДЕНЬ, ДЕНЬ)
2 Злопчинский
 
25.05.20
17:05
а зачем для остатков по дням счиатьь обороты? или ты остатки по оборотном субконто хочешь вытянуть?
3 Быдло замкадное
 
25.05.20
17:07
(2) что бы вывести остатки за дни в которых не было оборотов.
Блин я победил.
Вот это лишнее "|        ПО ХозрасчетныйОбороты.Организация = ХозрасчетныйОстатки.Организация
|            И ХозрасчетныйОбороты.Субконто1 = ХозрасчетныйОстатки.Субконто1
|            И ХозрасчетныйОбороты.Субконто2 = ХозрасчетныйОстатки.Субконто2"
4 Конструктор1С
 
25.05.20
18:02
Ой-ёй-ёй, оптимизатор запросов расплачется...
5 Конструктор1С
 
25.05.20
18:06
(3) "что бы вывести остатки за дни в которых не было оборотов"

Для этого вовсе не нужно мусолить несколько виртуальных таблиц, можно отбиться таблицей ОстаткиИОбороты
6 Конструктор1С
 
25.05.20
18:32
ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.Период КАК Период,
    ХозрасчетныйОстаткиИОбороты.Счет КАК Счет,
    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт,
    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокКт КАК СуммаНачальныйОстатокКт,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт,
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СуммаКонечныйОстатокКт
ПОМЕСТИТЬ ВТ_ОстаткиИОбороты
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , Счет = &Счет, , ) КАК ХозрасчетныйОстаткиИОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДанныеПроизводственногоКалендаря.Дата КАК Дата
ПОМЕСТИТЬ ВТ_Календарь
ИЗ
    РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
    ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь
    И ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;

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

СГРУППИРОВАТЬ ПО
    ВТ_Календарь.Дата,
    ВЫБОР
        КОГДА ПроверкаОборотов.Период ЕСТЬ NULL
            ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ
;

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

УПОРЯДОЧИТЬ ПО
    Период