пустое значение агрегатного выражения

отредактировано 16:14 Раздел: FastReport 3.0
Обычный master-detail отчет, агрегатка сумма печатается в DetailFooter

Если выражение написать прямо в Memo7 (назовем способ статическим) то все работает
Если динамически в коде перед печатью отчета вот так:

Memo7.Text := '[SUM(Round(<Query2."SALEPRICE">*<Êóðñ2>/(<Êóðñ1>*<Îêðóãëÿòü äî>))*<Îêðóãëÿòü äî>*<Êîëè÷åñòâî>,DetailData1)]';

то не печатает. (Сорри за кодировку русских переменных. Редактор в фастрепорте оччень нехороший.)

Если одновременно в разных memo вывести статику и динамику по одному и тому же агрегатному выражению и полю то печатаются оба... Но! Если статически вычислить другое агрегатное значение по другому полю Query3."PRICE2" то динамическое по старому полю Query2."SALEPRICE" не вычисляется !!!

Пусто!


FR 3.18 Stable

Комментарии

  • Andrew_ShAndrew_Sh г.Минск
    отредактировано 16:14
    younghacker написал:
    Обычный master-detail отчет, агрегатка сумма печатается в DetailFooter

    Если выражение написать прямо в Memo7 (назовем способ статическим) то все работает
    Если динамически в коде перед печатью отчета вот так:

    Memo7.Text := '[SUM(Round(<Query2."SALEPRICE">*<Êóðñ2>/(<Êóðñ1>*<Îêðóãëÿòü äî>))*<Îêðóãëÿòü äî>*<Êîëè÷åñòâî>,DetailData1)]';

    то не печатает. (Сорри за кодировку русских переменных. Редактор в фастрепорте оччень нехороший.)

    Если одновременно в разных memo вывести статику и динамику по одному и тому же агрегатному выражению и полю то печатаются оба... Но! Если статически вычислить другое агрегатное значение по другому полю Query3."PRICE2" то динамическое по старому полю Query2."SALEPRICE" не вычисляется !!!

    Пусто!


    FR 3.18 Stable
    Чтобы агрегатные функции работали в скрипте, надо ОБЯЗАТЕЛЬНО чтобы выражение с агрегатной ф-цией было в мемке на бэнде. Об этом даже в доке где-то говорится.

    Если в мемке есть SUM(<Query2."SALEPRICE">), то такая ф-ция ИМЕННО С ЭТИМ ПОЛЕМ/ВЫРАЖЕНИЕМ будет возвращать значение и в скрипте. Если вам не надо выводить на печать значение агрегатной ф-ции, то просто сделайте Visible-false для мемки и используйте агрегатную ф-цию в скрипте.
  • отредактировано 16:14
    Прошу прощения, Вы возможно не поняли моего поста...

    Как видно из кода я ничего в скрипте не вычисляю. Я значению Мемо присваиваю то что будет вычилсяться во время генерации отчета... Это строка.

    Со стороны отчета это выглядит одинаково... Ну подумайте сами.
    Написать я прямо в Мемо руками или перед печатью отчета это сделано из скрипта?

    Я описал, что прописаное руками работает, а прописанное из скрипта (тоже самое) - не работает. И если в двух Мемо одно из которых заполнено руками, а другое из скрипта написано одно и тоже выражение - то выводятся оба... Но если разные выражения то выводится только то что записано руками!!!!

    Проблема возникла при переносе отчета из версии 2.54 в версию 3.18
    В 2.54 все работало в 3.х а именно в 3.18 не работает.
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано October 2005
    Будет работать только если поместить присвоение в раздел инициализации отчета.
    Не в OnBeforePrint для страницы или OnStartReport для отчета, а ИМЕННО В РАЗДЕЛ ИНИЦИАЛИЗАЦИИ.
    Связано это с особенностями построения списка вычисляемых выражений с aggregate-функциями.
    ....
    ...
    begin
      Memo7.Text := '[SUM(<MyDataset."SOME_FLOAT_FIELD">)]';  
    end.
    
  • отредактировано 16:14
    Перед отчетом появляется форма. На ней у пользователя запрашиваются данные, на основании которых будет формироваться отчет.

    Кнопка OK вызывает обработчик в котором и происходит присвоение параметров объектам ТЕКСТ. Это является секцией инициализации или нет?

    Второе.
    На отчете в ФУТЕРЕ два объекта ТЕКСТ
    Один содержит выражение вставленное из дизайнера.
    Другой пустой, и выражение настраивается именно в этом обработчике.

    Если выражения одинаковые - отображаются оба!
    Если выражения разные, например разные поля в агрегатке, отображается только первое!

    Это особенность или баг?
    Я склонен считать это багом. Поскольку в 2.54 это работало, а в 3-ке нет. Причем не однозначно не работает, а "условно" работает.

    Спасибо.
  • отредактировано October 2005
    Выкрутился как...

    В этот объект ТЕКСТ, куда подставляются агрегатки, вручную запердолил все выражения с агрегатками которые у меня могут быть выбраны пользователем... А код оставил, как было. Тормозить стал больше.

    Именно выкрутился. Хотя есть еще масса способов. Но другие способы требуют более значительной переработки отчетов, а когда их сотни, терпение кончается быстро.

    Я бы сделал что? Момент сканирования отчета на предмет агрегаток я бы вынес непосредственно перед к моменту перед формированием листа. Когда пользователь уже ввел все данные перед построением отчета.

    Спасибо.
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано 16:14
    younghacker написал:
    Я бы сделал что? Момент сканирования отчета на предмет агрегаток я бы вынес непосредственно перед к моменту перед формированием листа. Когда пользователь уже ввел все данные перед построением отчета.

    Спасибо.
    направьте ваше пожелание в сапорт.
  • отредактировано 16:14
    > Момент сканирования отчета на предмет агрегаток я бы вынес непосредственно перед к моменту перед формированием листа.

    Сделано.
  • отредактировано 16:14
    ;) Действительно Fast.

    Спасибо...

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.