Имя: Пароль:
1C
1С v8
Остатки на каждый день в запросе
0 John83
 
30.11.15
15:04
Взял из Книга знаний: Полные остатки по периоду во вложенном запросе; запрос, но не могу понять, почему в группировке берется именно МИНИМУМ?
Получилась ситуация, когда запрос отрабатывает неверно и если поставить МАКСИМУМ, то все приходит в норму.

ВЫБРАТЬ

    Дебиторка.СуммаВзаиморасчетовКонечныйОстаток КАК Долг,

    КурсыВалют.Период КАК Период,

    Дебиторка.ДоговорКонтрагента КАК ДоговорКонтрагента,

    Дебиторка.ДоговорКонтрагента.Владелец КАК Контрагент,

    ВЫБОР

        КОГДА Дебиторка.СуммаВзаиморасчетовКонечныйОстаток < 0

            ТОГДА 1

        ИНАЧЕ 0

    КОНЕЦ КАК КвоОтрицательных

ИЗ

    РегистрСведений.КурсыВалют КАК КурсыВалют

        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ

            Оборот1.Дата КАК ДатаС,

            МИНИМУМ(ВЫБОР

                    КОГДА Оборот2.Дата ЕСТЬ NULL

                        ТОГДА КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)

                    ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Оборот2.Дата, ДЕНЬ, -1), ДЕНЬ)

                КОНЕЦ) КАК ДатаПо,

            Оборот1.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,

            Оборот1.ДоговорКонтрагента КАК ДоговорКонтрагента

        ИЗ

            (ВЫБРАТЬ

                ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период КАК Дата,

                ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,

                ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента

            ИЗ

                РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , {(ДоговорКонтрагента.Организация).* КАК Организация, (ДоговорКонтрагента.Владелец).* КАК Контрагент, (ДоговорКонтрагента).*}) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты) КАК Оборот1

                ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ

                    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период КАК Дата,

                    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента

                ИЗ

                    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , {(ДоговорКонтрагента.Организация).* КАК Организация, (ДоговорКонтрагента.Владелец).* КАК Контрагент, (ДоговорКонтрагента).*}) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты) КАК Оборот2

                ПО Оборот1.Дата < Оборот2.Дата

                    И Оборот1.ДоговорКонтрагента = Оборот2.ДоговорКонтрагента

        

        СГРУППИРОВАТЬ ПО

            Оборот1.Дата,

            Оборот1.СуммаВзаиморасчетовКонечныйОстаток,

            Оборот1.ДоговорКонтрагента) КАК Дебиторка

        ПО (КурсыВалют.Период МЕЖДУ Дебиторка.ДатаС И Дебиторка.ДатаПо)

ГДЕ

    КурсыВалют.Период МЕЖДУ &НачалоПериода И &КонецПериода

    И КурсыВалют.Валюта = &Валюта

ИТОГИ

    СУММА(Долг),

    СУММА(КвоОтрицательных)

ПО

    ОБЩИЕ,

    Контрагент,

    ДоговорКонтрагента,

    Период

АВТОУПОРЯДОЧИВАНИЕ
1 John83
 
30.11.15
15:05
так читабельней будет

ВЫБРАТЬ
    Дебиторка.СуммаВзаиморасчетовКонечныйОстаток КАК Долг,
    КурсыВалют.Период КАК Период,
    Дебиторка.ДоговорКонтрагента КАК ДоговорКонтрагента,
    Дебиторка.ДоговорКонтрагента.Владелец КАК Контрагент,
    ВЫБОР
        КОГДА Дебиторка.СуммаВзаиморасчетовКонечныйОстаток < 0
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ КАК КвоОтрицательных
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            Оборот1.Дата КАК ДатаС,
            МИНИМУМ(ВЫБОР
                    КОГДА Оборот2.Дата ЕСТЬ NULL
                        ТОГДА КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
                    ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Оборот2.Дата, ДЕНЬ, -1), ДЕНЬ)
                КОНЕЦ) КАК ДатаПо,
            Оборот1.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,
            Оборот1.ДоговорКонтрагента КАК ДоговорКонтрагента
        ИЗ
            (ВЫБРАТЬ
                ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период КАК Дата,
                ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,
                ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента
            ИЗ
                РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , {(ДоговорКонтрагента.Организация).* КАК Организация, (ДоговорКонтрагента.Владелец).* КАК Контрагент, (ДоговорКонтрагента).*}) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты) КАК Оборот1
                ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период КАК Дата,
                    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента
                ИЗ
                    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , {(ДоговорКонтрагента.Организация).* КАК Организация, (ДоговорКонтрагента.Владелец).* КАК Контрагент, (ДоговорКонтрагента).*}) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты) КАК Оборот2
                ПО Оборот1.Дата < Оборот2.Дата
                    И Оборот1.ДоговорКонтрагента = Оборот2.ДоговорКонтрагента
        
        СГРУППИРОВАТЬ ПО
            Оборот1.Дата,
            Оборот1.СуммаВзаиморасчетовКонечныйОстаток,
            Оборот1.ДоговорКонтрагента) КАК Дебиторка
        ПО (КурсыВалют.Период МЕЖДУ Дебиторка.ДатаС И Дебиторка.ДатаПо)
ГДЕ
    КурсыВалют.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И КурсыВалют.Валюта = &Валюта
ИТОГИ
    СУММА(Долг),
    СУММА(КвоОтрицательных)
ПО
    ОБЩИЕ,
    Контрагент,
    ДоговорКонтрагента,
    Период
АВТОУПОРЯДОЧИВАНИЕ
2 aleks_default
 
30.11.15
15:31
наверное поэтому

ПО Оборот1.Дата < Оборот2.Дата
3 Cyberhawk
 
30.11.15
15:31
А ты без этой группировки покажи, какой результат (таблица) у вложенного запроса
4 John83
 
30.11.15
15:45
(3) таким образом
http://savepic.org/7985855.png
5 John83
 
30.11.15
15:48
(2) какие будут мысли/предложения?
6 Cyberhawk
 
30.11.15
16:05
(4) Ты бы картинку побольше-то вставлял, а то плевок тебе за такое
И покажи картинку, где имеет значение, максимум или минимум там берется
7 John83
 
30.11.15
16:35
(6) http://savepic.org/7954096.png
оборотов с 30.10.2015 по 30.11.2015 не было, поэтому значения не выводятся
PS хз почему так вставляется, но если увеличить, то вроде вполне разобрать можно
8 aleks_default
 
30.11.15
16:53
(7) Изменение МИНИМУМ на МАКСИМУМ приведет только к тому что увеличится количество детальных записей в результате запроса и соответсвенно ИТОГИ будут неверные.
9 Marinelle
 
30.11.15
16:56
Минимум берется, чтобы получить последовательные интервалы постоянства остатка. У Вас должен был получиться интервал с 05.10.15 00:00:00 по 30.11.2015 23:59:59
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн