Создание отчетов на основе набора данных (постановка)
Материал из GedeminWiki
Версия от 14:44, 18 декабря 2008; Alexander (обсуждение | вклад)
Требования
- Создание отчета на основании одиночного датасета, датасета с присоединенными датасетами (как в заголовке накладной), датасетов, связанных мастер-дитэйл и мастер-дитэйл-сабдитэйл.
- Иметь возможность выбрать режим создания страницы: одна запись на одной странице (как платежное поручение), одна мастер запись на одной странице (как накладная), записи фиксированной высоты, записи плавающей высоты.
- Иметь возможность указать заголовок отчета, заголовок страницы, подножие страницы, подножие отчета, с возможностью использования переменных: номер страницы, дата и время построения отчета, текущая организация, текущий пользователь и т.п.
- Иметь возможность выбрать расположение бумаги, ширину полей и количество колонок.
- Построение кросс-таб отчетов на основе одного датасета и датасетов, связанных мастер-дитэйл (например, по списку накладных построить отчет по продажам товаров по месяцам).
- Иметь возможность указать какие колонки будут попадать в отчет. Первоначальное заполнение осуществлять на основе визуальных настроек грида, если таковой присоединен к датасету.
- Оформление таблицы должно осуществляться на основе списка стилей (таблица с рамкой, таблица без рамки и т.п.), после выбора стиля пользователь должне иметь возможность указать/подкорректировать шрифт и прочие атрибуты оформления вручную.
- При формировании шаблона отчета не должны получаться слишком узкие колонки. Если количество полей больше чем умещается по ширине страницы (колонки), то следует либо размещать по нескольку полей в одной клетке, либо размещать поля в несколько строк в одной записи.
- По результатам заполнения мастера должен автоматически формироваться отчет. т.е.: главная функция и шаблон отчета.
- Сформированные отчеты могут быть: однократными (не сохраняется в базе, доступен только на протяжении текущей сессии), многократными (сохраняется в базе, доступен для повторного вызова и изменения параметров).
Реализация
Сейчас у нас отчёты строятся на основе интерфеса BaseQueryList. В ходе выполнения скрипт-функции в нём создаюся наборы данных. ДатаСеты у нас могут быть двух типов: - ДатаСет в памяти TClientDataSet; - ДатаСет на основе запроса к базе данных (TIBQuery); Далее, после окончания формирования списка заполненных наборов данных идёт перекачка данных в TClientDataSet и сохранение в поток. Перед самым посторением отчёта, поток опять раскладывается на TClientDataSet-ы, если нужно они связываются по Master-Detail связи и сортируются. Предполагалось сделать:
- Избавится от формирования потока и потом раскладываение его на наборы данных. В FastReport напрямую подавать наборы данных.
- Выходит проблема, FastReport работает с параметрами ДатаСета типа TParam, это такие наборы как TIBTable, TIBQuery. Однако, TIBCustomDataSet от которого наследован наш gdcBase возвращает параметры вида TIBXSQLVAR.
- Если удасться решить эту проблему, то отказываемся от TIBQuery. тем более, что он не имеет MasterSource и работаем через TIBDataSet и TClienDataSet.