Dbcross итоги

отредактировано 05:58 Раздел: FastReport 4.0
Привет всем.
Вот казалось бы самая простая крос таблица

Комментарии

  • RhinoFCRhinoFC Новосибирск
    отредактировано 05:58
    Dinisssimo написал: »
    Привет всем.
    Вот казалось бы самая простая крос таблица
    процент понятно как щитается а вот сощитать его в итогах такимже макаром не выходит, Sum - выдаёт какуюто астрономическую цифру.
    Вопрос: Как сощитать процент в итогах?

    Ну, что тут сказать? Была у меня такая задача. Сразу скажу, решить её на основе именно кросса мне не удалось. Сам посуди... Для вычисления итогового процента ни какая из аггрегатных функций (сумма, среднее и т.д.) не подходит. Тут надо оперировать уже итоговыми значениями. Т.е. надо сначала вычислить суммы твоих полей, а потом посчитать итоговый процент по формуле S1*100/S2. Так вот, сделать это можно только в событии OnBeforePrint ячейки, куда будет этот процент записываться. Но в этот момент получить значения двух других ячеек, содержащих итоговые суммы, ну ни как не выходит. Более того, попытка заранее их расчитать в датасете, а в нужный момент просто подставить, тоже не пройдёт, поскольку в момент отрисовки кросс-таба исходный датасет уже не используется, т.е. курсор стоит на одном месте и всё (кросс рисуется по заранее подготовленной матрице). Нельзя определить что именно нужно подставить.
    Короче, я решил эту проблему отказавшись от кросса в пользу вертикальных бэндов, т.е. в пользу кросса старого стиля. Тоже помаяться пришлось, но результата добился. Так что, если ситуация позволяет, копни в сторону вертикальных бэндов.
  • отредактировано May 2009
    Тогда вопрос как использовать вертикальные бенды
  • RhinoFCRhinoFC Новосибирск
    отредактировано 05:58
    Dinisssimo написал: »
    Тогда вопрос как использовать вертикальные бенды
    Легче показать. Вот тебе небольшой примерчик.
    На случай, если у тебя не установлены TfrxFIBQuery и иже с ними (ты в этом случае не увидишь запросов, но увидишь ссылки на них в мемках отчёта и в коде), дополню:
    Здесь используются два запроса:
    /* qPlanFact: Возвращает детальную информацию о плановых и фактических показателях
       на каждую дату периода для каждой статьи расхода/прихода */
    select pf.inout, pf.inout_item, i.name inout_item_name, pf.on_date,
           sum(pf.plan_in) - sum(pf.plan_out) sum_plan, 
           sum(pf.fact_in) - sum(pf.fact_out) sum_fact             
      from suf_plan_fact_details(:center, :period, :plan_state) pf       
      left join suf_inout_item i on i.id = pf.inout_item
     where i.id is not null                                                           
     group by pf.inout, pf.inout_item, i.name, pf.on_date
    
    /* qByItems: Возвращает суммарные показатели план-факт для каждой статьи прихода/расхода
       за весь период */                                                       
    select pf.inout, pf.inout_item, i.name,
           sum(pf.plan_in - pf.plan_out) plan_sum, 
           sum(pf.fact_in - pf.fact_out) fact_sum
      from suf_plan_fact_by_items(:center, :period, :plan_state, null) pf
      left join suf_inout_item i on i.id = pf.inout_item
     group by pf.inout, pf.inout_item, i.name                                                                                                  
     order by pf.inout, i.name
    

    Замени их подходящими по смыслу своими запросами, да потестируй. В любом случае, тебе ведь главное - структура отчёта, а не запросы. Это лишь один из вариантов. Здесь я итоговые суммы вычисляю отдельным запросом, а потом подставляю, а можно использовать вертикальные бэнды итогов. Ну, короче, посмотри, а будут возникать вопросы, пиши.
  • отредактировано 05:58
    спасибо
  • отредактировано 05:58
    Dinisssimo написал: »
    спасибо

    Здравствуйте. Прочитала ваши примеры по Отчет по ДСС. Подскажите, пожалуйста, как сделать итоги по горизонтали в фастрепорте в вертикальных бэндах. И если можно поподробнее о вашем отчете(почему столько Мастер дата) и почему у вас шапка на мастер дата1

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

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