8.х Отбор по вычисляемому полю 8.3

Тема в разделе "Система компоновки данных (СКД)", создана пользователем Profaner, 8 авг 2016.

  1. TopicStarter Overlay
    Profaner
    Offline

    Profaner

    Регистрация:
    8 авг 2016
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток, коллеги! Нужна оперативная помощь. Видел уже похожую тему, но метод решения, приведенный в ней не подходит. Возможно за 2 года придумали что-то новое. Вопрос следующий: есть несложный запрос в СКД. По одному из полей рассчитывается вычисляемое поле с нарастающим итогом на закладке "Вычисляемые поля".
    Я понимаю, что расчет идет в момент построения запроса, следовательно, если наложить отбор напрямую, получится полная абра-кадабра с неправильными данными.
    Быть может есть какой-то способ поместить результат в какой-нибудь буфер/таблицу и уже внутри нее отбирать? Или уже есть какое-нибудь решение данной проблемы?
    П.С. Из ресурсов поле убирал, группировку по отдельному полю пробовал. Не катируется :<
    Суть отбора: Отобрать все записи, начиная с которых сумма нарастающего итога положительна. В разрезе группировок.
    scr1.jpg
    scr.jpg .

    Код:
    ВЫБРАТЬ
        РасчетыСКлиентамиОстатки.ЗаказКлиента.Соглашение.Менеджер КАК Менеджер,
        РасчетыСКлиентамиОстатки.ЗаказКлиента.Соглашение.Партнер КАК Клиент,
        РасчетыСКлиентамиОстатки.ЗаказКлиента.Дата КАК Дата,
        РасчетыСКлиентамиОстатки.ЗаказКлиента.Организация КАК Фирма,
        РасчетыСКлиентамиОстатки.ЗаказКлиента.Ссылка КАК Документ,
        РасчетыСКлиентамиОстатки.СуммаОстаток КАК СуммаДолга,
        РасчетыСКлиентамиОстатки.ЗаказКлиента.СуммаДокумента КАК СуммаДокумента
    ПОМЕСТИТЬ ВТОстатки
    ИЗ
        РегистрНакопления.РасчетыСКлиентами.Остатки(
                &Дата,
                (ЗаказКлиента ССЫЛКА Документ.РеализацияТоваровУслуг
                    ИЛИ ЗаказКлиента ССЫЛКА Документ.ВозвратТоваровОтКлиента)
                    И ЗаказКлиента.Соглашение.Менеджер = &Менеджер) КАК РасчетыСКлиентамиОстатки
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка КАК Соглашение,
        СоглашенияСКлиентамиЭтапыГрафикаОплаты.Сдвиг
    ПОМЕСТИТЬ ВТСоглашения
    ИЗ
        Справочник.СоглашенияСКлиентами.ЭтапыГрафикаОплаты КАК СоглашенияСКлиентамиЭтапыГрафикаОплаты
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВТОстатки.Менеджер,
        ВТОстатки.Клиент,
        ВТОстатки.Фирма,
        ВТОстатки.Документ,
        ВТОстатки.СуммаДолга,
        ВТОстатки.СуммаДокумента,
        ВТОстатки.Дата,
        ВЫБОР
            КОГДА ДОБАВИТЬКДАТЕ(ВТОстатки.Дата, ДЕНЬ, ВТСоглашения.Сдвиг) > &Дата
                ТОГДА -РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ВТОстатки.Дата, ДЕНЬ, ВТСоглашения.Сдвиг), &Дата, ДЕНЬ)
            ИНАЧЕ 0
        КОНЕЦ КАК ДнейДоСтопЛиста,
        ВЫБОР
            КОГДА ДОБАВИТЬКДАТЕ(ВТОстатки.Дата, ДЕНЬ, ВТСоглашения.Сдвиг) < &Дата
                ТОГДА -РАЗНОСТЬДАТ(&Дата, ДОБАВИТЬКДАТЕ(ВТОстатки.Дата, ДЕНЬ, ВТСоглашения.Сдвиг), ДЕНЬ)
            ИНАЧЕ 0
        КОНЕЦ КАК ДнейПросрочки
    ПОМЕСТИТЬ ВТВсе
    ИЗ
        ВТОстатки КАК ВТОстатки
            ЛЕВОЕ СОЕДИНЕНИЕ ВТСоглашения КАК ВТСоглашения
            ПО ВТОстатки.Документ.Соглашение = ВТСоглашения.Соглашение
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВТВсе.Менеджер,
        ВТВсе.Клиент,
        ВТВсе.Фирма,
        ВТВсе.Документ,
        ВТВсе.СуммаДолга КАК СуммаДолга,
        ВТВсе.СуммаДокумента,
        ВТВсе.Дата,
        ВТВсе.ДнейДоСтопЛиста,
        ВТВсе.ДнейПросрочки,
        ВЫБОР
            КОГДА ВТВсе.ДнейПросрочки > 0
                ТОГДА ВТВсе.СуммаДолга
            ИНАЧЕ 0
        КОНЕЦ КАК СуммаПросрочки
    ИЗ
        ВТВсе КАК ВТВсе
    
    СГРУППИРОВАТЬ ПО
        ВТВсе.Менеджер,
        ВТВсе.Клиент,
        ВТВсе.Фирма,
        ВТВсе.Документ,
        ВТВсе.СуммаДолга,
        ВТВсе.СуммаДокумента,
        ВТВсе.Дата,
        ВТВсе.ДнейДоСтопЛиста,
        ВТВсе.ДнейПросрочки
    
    УПОРЯДОЧИТЬ ПО
        СуммаДолга
  2. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну нарастающий итог можно получать не только через вычисляемое поле но и через Запрос.
    получити нарастающий итог запросом, а не через вычисляемое поле - это у вас будет обычное поле запроса, и используйте уэе обычное поле для отбора.
    Profaner нравится это.
  3. TopicStarter Overlay
    Profaner
    Offline

    Profaner

    Регистрация:
    8 авг 2016
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Спасибо за ответ. Похоже, средствами СКД все-таки не реально. Буду пытаться соединением.
  4. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну просто с вычисляемыми полями там не очень то хорошо получатеся, если делать запрос и вставлять его в отладчик и потом смотреть как СКД его превращает в запрос, то отбор по вычисляемуму полю такое как вы делаете нарастающий итог - он превращает в отбор по обычному полю которое используется в вычисляемом.

    Еще как вариант можно попробовать сделать еще одно вычисляемое поле
    типа
    ВЫБОР КОГДА тут вашевыраженеи вычисление >=0 Тогда Истина
    Иначе ЛоЖЬ
    Конец

    т.е это поле которое сразу говорит у Ваас итог больше нуля или нет. и попробывать уже на него отбор накладывать. Может с будевым прокатит.
  5. TopicStarter Overlay
    Profaner
    Offline

    Profaner

    Регистрация:
    8 авг 2016
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Решил все-таки проблему соединением таблиц.
Похожие темы
  1. Elenachka
    Ответов:
    10
    Просмотров:
    3.808
  2. KSerg
    Ответов:
    3
    Просмотров:
    1.288
Загрузка...

Поделиться этой страницей