Создание отчетов на основе набора данных (постановка)

Материал из GedeminWiki
Перейти к: навигация, поиск

Требования

  1. Создание отчета на основании:
    1. одиночного датасета,
    2. датасета с присоединенными датасетами (как в заголовке накладной),
    3. нескольких датасетов, связанных мастер-дитэйл и мастер-дитэйл-сабдитэйл.
  2. Иметь возможность выбрать режим создания страницы:
    1. одна запись на одной странице (как платежное поручение),
    2. одна мастер запись на одной странице (как накладная),
    3. записи фиксированной высоты,
    4. записи плавающей высоты.
  3. Иметь возможность указать заголовок отчета, заголовок страницы, подножие страницы, подножие отчета, с возможностью использования переменных: номер страницы, дата и время построения отчета, текущая организация, текущий пользователь и т.п.
  4. Иметь возможность выбрать расположение бумаги, ширину полей и количество колонок.
  5. Построение кросс-таб отчетов на основе одного датасета и датасетов, связанных мастер-дитэйл (например, по списку накладных построить отчет по продажам товаров по месяцам).
  6. Иметь возможность указать какие колонки будут попадать в отчет. Первоначальное заполнение осуществлять на основе визуальных настроек грида, если таковой присоединен к датасету.
  7. Оформление таблицы должно осуществляться на основе списка стилей (таблица с рамкой, таблица без рамки и т.п.), после выбора стиля пользователь должне иметь возможность указать/подкорректировать шрифт и прочие атрибуты оформления вручную.
  8. При формировании шаблона отчета не должны получаться слишком узкие колонки. Если количество полей больше чем умещается по ширине страницы (колонки), то следует либо размещать по нескольку полей в одной клетке, либо размещать поля в несколько строк в одной записи.
  9. По результатам заполнения мастера должен автоматически формироваться отчет. т.е.: главная функция и шаблон отчета.
  10. Сформированные отчеты могут быть: однократными (не сохраняется в базе, доступен только на протяжении текущей сессии), многократными (сохраняется в базе, доступен для повторного вызова и изменения параметров).

Реализация

Сейчас у нас отчёты строятся на основе интерфеса BaseQueryList. В ходе выполнения скрипт-функции в нём создаюся наборы данных. ДатаСеты у нас могут быть двух типов:

  • ДатаСет в памяти (TClientDataSet);
  • ДатаСет на основе запроса к базе данных (TIBQuery);

Далее, после окончания формирования списка заполненных наборов данных идёт перекачка данных в TClientDataSet и сохранение в поток. Перед самым посторением отчёта, поток опять раскладывается на TClientDataSet-ы, если нужно они связываются по Master-Detail связи и сортируются. Предполагалось сделать:

  1. Избавится от формирования потока и потом раскладываение его на наборы данных. В FastReport напрямую подавать наборы данных.
  2. Выходит проблема, FastReport работает с параметрами ДатаСета типа TParam, это такие наборы как TIBTable, TIBQuery. Однако, TIBCustomDataSet от которого наследован наш gdcBase возвращает параметры вида TIBXSQLVAR.
  3. Если удасться решить эту проблему, то отказываемся от TIBQuery. тем более, что он не имеет MasterSource и работаем через TIBDataSet и TClienDataSet.
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты