Формирование Cross-отчета из Delphi
Доброе время суток!
Подскажите, можно ли сформировать 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 станет еще лучше и удобнее
Подскажите, можно ли сформировать 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 станет еще лучше и удобнее
Комментарии
Cross.RowLevels := ...;
Cross.ColumnLevels := ...;
Cross.CellLevels := ...;
Cross.CellFunctions[0] := ...;
Нет, не заработало. Прилагаю тестовый проект. Если поля dataset формируются в runtime - не работает. Можно вывести дизайнер, зайти в cross, дабл-кликнуть на любое поле и нажать ОК - только тогда все перерисовывается и отчет становится корректным.
Планируется ли возможность указать заголовки у Cells ? Примерно как в моей картинке?
Извините за назойливость Просто у меня сейчас "висит" решение - заложиться на FR, либо искать альтернативу.
Я не уверен, что смогу вручную сделать нужный вид "шапки" отчета.
// add
Cross.DataSet := frxDS;
Имеется в виду определить поле "Тип суммы" и разные суммы выдавать с соответствующим значением типа (напр., значения типов суммы - "дебет", "кредит"). я правильно Вас понимаю?
А в чем разница? Я могу и dataset "раскидать" нужным мне образом.
Сейчас у меня получилось формировать cross по динамически строящемуся dataset'y. Там бывают какие-то глюки с "шапкой", но, возможно, в релизе их не будет. Интересно еще, не планируется ли возможность задать в шапке наименования cell's. Я пытался строить шапку вручную (а у cross'a ее не показывать), но ненадежно это и все равно пока не получилось
Если можете сделать датасет, так лучше, конечно.
т.е. что-то типа
Субсчет | ШАУ1 | Тип суммы | Сумма
30301, налог на доходы фл, об по дт, 77275
30301, налог на доходы фл, об по кт, 123934
поля Субсчет, ШАУ1 - в строки, Тип суммы - в колонку, Сумма - в ячейку.
Спасибо!
Субсчет | ШАУ1 | Дт | Кт
30301, налог на доходы фл, 77275, 123934