CrossTab
Несколько вопросов и предложений по CrossTab (FR312, D7)
1. Как изменить высоту строк в ColumnHeader. Ширина меняется в OnCalcWidth, а где изменить высоту.
2. Свойство RepeatHeaders нужно сделать отдельно для колонок и для строк. Большие отчеты клеют обычно только по ширине, а ColumnHeader нужен на каждой странице.
3. Верхний левый пустой угол, очень некрасиво, особенно когда много фиксированных колонок, то для каждой из них необходимо наименование.
4. В Итогах желательно скрывать нули.
5. Добавить свойство "НЕ ВЫВОДИТЬ ИТОГИ" если только 1 значение, а то приходится каждый раз в скрипте считать сколько колонок(строк) вывел перед итогами по каждому уровню.Если этого не сделать, то отчет перегружен и нечитабелен.
6. Желательна возможность задавать ShowColumnHeader для каждого уровня.
7. Если в ячейке 2 строки и у нижней(или верхней) задаю фон, то и итог должен быть с этим же фоном.
8. В скрипте невозможно задать Memo.Frame.Typ (Ошибка "Неверная операция с вариантом")
9. Желательно иметь возможность задать несколько вертикальных Cross групп, часто необходимо добавить в конец либо в середине текст или уже подсчитанные итоги, либо возможность вывести рядом (не один под другим) CrossTaba
10. CrossTab в старом стиле не получилось вывести суммы с разбросом в нужные колонки (AdoQuery)
выводит так
строка1 сум1 сум2 сум3
строка2 сум1 сум2
строка3 сум1
нужно
строка1 сум1 сум2 сум3
строка1 сум1 сум2
строка1 сум1
также не получилось использовать внешнии AdoQuery
1. Как изменить высоту строк в ColumnHeader. Ширина меняется в OnCalcWidth, а где изменить высоту.
2. Свойство RepeatHeaders нужно сделать отдельно для колонок и для строк. Большие отчеты клеют обычно только по ширине, а ColumnHeader нужен на каждой странице.
3. Верхний левый пустой угол, очень некрасиво, особенно когда много фиксированных колонок, то для каждой из них необходимо наименование.
4. В Итогах желательно скрывать нули.
5. Добавить свойство "НЕ ВЫВОДИТЬ ИТОГИ" если только 1 значение, а то приходится каждый раз в скрипте считать сколько колонок(строк) вывел перед итогами по каждому уровню.Если этого не сделать, то отчет перегружен и нечитабелен.
6. Желательна возможность задавать ShowColumnHeader для каждого уровня.
7. Если в ячейке 2 строки и у нижней(или верхней) задаю фон, то и итог должен быть с этим же фоном.
8. В скрипте невозможно задать Memo.Frame.Typ (Ошибка "Неверная операция с вариантом")
9. Желательно иметь возможность задать несколько вертикальных Cross групп, часто необходимо добавить в конец либо в середине текст или уже подсчитанные итоги, либо возможность вывести рядом (не один под другим) CrossTaba
10. CrossTab в старом стиле не получилось вывести суммы с разбросом в нужные колонки (AdoQuery)
выводит так
строка1 сум1 сум2 сум3
строка2 сум1 сум2
строка3 сум1
нужно
строка1 сум1 сум2 сум3
строка1 сум1 сум2
строка1 сум1
также не получилось использовать внешнии AdoQuery
Комментарии
Еще заметил такой глюк, не всегда правильно подсчитывается высота строк,
в случае если длинное наименование переносится на несколько строк (3), а справа одна строка с суммой + Итог, то дополняется полустрокой,
(т.е. когда высота текста чуть шире высоты данных) и дальше на этой странице все едет на эти полстроки.
Еще бы хотелось иметь возможность задавать несколько ячеек в одном Столбце, а не только в одной строке. Нужно выводить например "Количество"
и "Сумму" рядом, а не одно под другим.
Суть проблемы в следующем: Запрос возвращает следующий набор данных:
Подъезд
Этаж
Номер квартиры
Тип квартиры
Площадь
Статус (1 - продана, 0 - свободна)
В кросстабе расположение полей следующее:
Столбцы: Подъезд, Номер квартиры
Строки: Этаж
Ячейки: Тип квартиры, Площадь
В редакторе кросстаба выбираю ячейки (Тип квартиры, Площадь),
нажимаю кнопку условного выделения и в поле "Условие" пишу: <Статус > = 1, выбираю цвет шрифта и фона, нажимаю "Ок".
При запуске отчета, условие выполняется для вообще всех ячеек (или не выполняется если написать =0).
В общем идея в том, чтобы выделить цветом шрифта и фона проданные квартиры.
Подскажите, что я делаю не правильно и как мне добиться желаемого результата?
У разработчиков вопросы по кросстабу явно вызывает аллергию. Молчат как партизаны.
Сделайте отчет двупроходным
В обработчике OnPrintCell напишите что-то вроде
procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
var
sKey, row, col : string;
begin
row := IntToStr( RowIndex );
col := IntToStr( columnIndex );
sKey := row + ':' + col;
if not Engine.FinalPass then
if (( VarToStr(value) = '1') and ( CellIndex = 2 )) then
SET(sKey, $FF)
else
SET(sKey, $FFFFFF);
if Engine.FinalPass then
begin
Memo.Color := GET(sKey);
end;
end;