Формирование Cross-отчета из Delphi

отредактировано October 2006 Раздел: FastReport 4.0
Доброе время суток!

Подскажите, можно ли сформировать cross-отчет из кода (например, из delphi). Имеется dataset, какие в нем будут поля - заранее неизвестно. Буду благодарен за пару строчек кода в качестве примера ;)
Если это невозможно - то надо формировать его из кода FastReport?

Меняю формулировку:
пытаюсь получить примерно такой отчет (см. рисунок)
в коде пишу

var
Cross: TfrxDBCrossView;
i: Integer;
begin
cdsTurns.DisableControls();
try
Cross := frxReport.Pages[1].FindObject('DBCross') as TfrxDBCrossView;
Cross.RowFields.Clear();
for i := 0 to MyList1.Count - 1 do
Cross.RowFields.Add(MyList1);
Cross.ColumnFields.Clear();
Cross.ColumnFields.Add('Dummy');
Cross.CellFields.Clear();
for i := 0 to MyList2.Count - 1 do
Cross.CellFields.Add(MyList2);
frxReport.PrepareReport();
frxReport.ShowPreparedReport();
finally
cdsTurns.EnableControls();
end;

на экран получаю многостраничную ерунду (виден тот самый "угловой" memo и еще какие-то остатки линий). Если то же самое строить в design-time в редакторе FR - получается нормально. С связи с этим вопросы:
1. В какой бубен я забыл постучать - почему не строится отчет, динамически сформированный из кода?
2. Заголовки у CellFields я, конечно, могу вывести руками (наверное). Но! не хочется. Может, можно сделать нормальный путь? (по-моему, в других ветках народ пишет о том же)

Спасибо.

Пусть FastReport станет еще лучше и удобнее ;)

Комментарии

  • отредактировано 03:26
    Надо не забывать делать
    Cross.RowLevels := ...;
    Cross.ColumnLevels := ...;
    Cross.CellLevels := ...;
    Cross.CellFunctions[0] := ...;
  • отредактировано October 2006
    Спасибо, заработало! - исправлено

    Нет, не заработало. Прилагаю тестовый проект. Если поля dataset формируются в runtime - не работает. Можно вывести дизайнер, зайти в cross, дабл-кликнуть на любое поле и нажать ОК - только тогда все перерисовывается и отчет становится корректным.

    Планируется ли возможность указать заголовки у Cells ? Примерно как в моей картинке?
    Извините за назойливость ;) Просто у меня сейчас "висит" решение - заложиться на FR, либо искать альтернативу.
    Я не уверен, что смогу вручную сделать нужный вид "шапки" отчета.
  • отредактировано 03:26
    Cross := frxReport.Pages[1].FindObject('DBCross1') as TfrxDBCrossView;
    // add
    Cross.DataSet := frxDS;
  • отредактировано 03:26
    Спасибо, теперь работает. Планируется ли возможность задавать в шапке Cross'a заголовок для cell'a?
  • отредактировано 03:26
    В данном конкретном случае лучше использовать TfrxCrossView (не DB) и заполнять его вручную. Посмотрите пример в demos\printtable.
  • отредактировано 03:26
    К сожалению, в FR4 нет demos\printtable... А взятое просто из FR3 у меня почему-то не запустилось (ругается на отсутствие данных).
    Имеется в виду определить поле "Тип суммы" и разные суммы выдавать с соответствующим значением типа (напр., значения типов суммы - "дебет", "кредит"). я правильно Вас понимаю?
    А в чем разница? Я могу и dataset "раскидать" нужным мне образом.

    Сейчас у меня получилось формировать cross по динамически строящемуся dataset'y. Там бывают какие-то глюки с "шапкой", но, возможно, в релизе их не будет. Интересно еще, не планируется ли возможность задать в шапке наименования cell's. Я пытался строить шапку вручную (а у cross'a ее не показывать), но ненадежно это и все равно пока не получилось ;)
  • отредактировано 03:26
    Взял демку от FR3, скомпилилось и запустилось без проблем. Там BDE еще используется.

    Если можете сделать датасет, так лучше, конечно.
    т.е. что-то типа
    Субсчет | ШАУ1 | Тип суммы | Сумма
    30301, налог на доходы фл, об по дт, 77275
    30301, налог на доходы фл, об по кт, 123934

    поля Субсчет, ШАУ1 - в строки, Тип суммы - в колонку, Сумма - в ячейку.
  • отредактировано 03:26
    Ну да, я так и понял. В принципе, конечно, можно делать и так. Метод, преобразующий мой dataset в предложенное состояние, несложен. Я так понимаю, что заголовок для cell's над ними самими не планируется? ;)
    Спасибо!
  • отредактировано 03:26
    Сделал. Теперь достаточно таких данных:

    Субсчет | ШАУ1 | Дт | Кт
    30301, налог на доходы фл, 77275, 123934
  • отредактировано 03:26
    Супер! Огромное спасибо. Буду ждать релиза.

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

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