Сейчас приходится делать это самому (свой компонент). И уменьшение ширины букв при сохранении высоты дает отличные результаты - все прекрасно читается и влазит на лист.
Можете выслать код на tz@fast-report.com? Попробую прикрутить.
> 1. Возможность объединения соседних ячеек, если в них одинаковые данные (полезно при составлении расписания занятий).
См рис
>2. Возможность не дублировать одинаковые данные в одной ячейке
Ячека состоит из 3 "этажей" - предмет, преподаватель, кабинет.
Строки из БД
История.Иванов.3114
История.Петров.3114
В ячейке д.б. История
Иванов
Петров
3114
а сейчас История
История
Иванов
Петров 3114
3114
>3. ЛЕВЫЙ-ВЕРХНИЙ угол
Что вы все забыли в этом углу?
НЕКРАСИВО , и несложно сделать
Или опять придется добавлять эти возможности вручную, как я это делаю с FR3 постоянно с новыми релизами И именно по этой причине мы не приобретаем Server.
To pasko
Дак вышли код разработчика может они добавят, если это не будет противоречит их возрениям, ну или хотя бы частично добавят.
3. ЛЕВЫЙ-ВЕРХНИЙ угол
Что вы все забыли в этом углу?
Обычный бухгалтерский отчет: Покупатель, номер дата договора, номер и дата партии, номер и дата документа и т.д., и это все без шапки, и объясняй где что. Существуют же еще и правила оформления отчетов. Для такого отчета
(при большом RowHeader) необходимо также отдельно свойства RepeatRowHeader и RepeatColumnHeader, а не одно общее.
2. По демо версии в экспорте в Exel (OLE) опять при разделении тысяч экспортируется как текст, а XML и без разделения тысяч текст. Будем надеятся, что это только демо.
А КОГДА ПРОДАВАТЬ НАЧНЕТЕ - ТО ЭКСПОРТЫ БУДУТ УЖЕ ПОПРАВЛЕНЫ?
иначе блин на такие грабли наступлю что мало не покажется.. бухгалетра просто убьют не дайте погибнуть
> 1. Возможность объединения соседних ячеек, если в них одинаковые данные (полезно при составлении расписания занятий).
См рис
>2. Возможность не дублировать одинаковые данные в одной ячейке
Ячека состоит из 3 "этажей" - предмет, преподаватель, кабинет.
Строки из БД
История.Иванов.3114
История.Петров.3114
В ячейке д.б. История
Иванов
Петров
3114
а сейчас История
История
Иванов
Петров 3114
3114
>3. ЛЕВЫЙ-ВЕРХНИЙ угол
Что вы все забыли в этом углу?
НЕКРАСИВО , и несложно сделать
Угол и Объединение ячеек сделал. По поводу 2 - все равно не понял, нужен рисунок.
Результирующая ячейка состоит из нескольких "этажей". Основные - предмет, преподаватель, кабинет. (обведено)
В БД стоят строки о расписании занятий
Предмет:Фамилия:Кабинет
История:Иванов:3114
История:Петров:3114
В стандартном варианте Предмет и кабинет попадает в верхний и нижний этаж по 2 раза (или больше, смотря сколько данных расчитано на эту ячейку)
История
История
Иванов
Петров
3114
3114
А надо чтобы добавлялисьтолько, те данные которые отличаются от уже имеющихся (см. рис)
История Иванов
Петров
3114
я сделал это так
FShowSame - св-во управляет: надо ли это учитывать повторы
procedure TfrxCrossMatrix.AddValue(const Rows, Columns, Cells: array of Variant);
var
i: Integer;
Row: TfrxCrossRow;
Column: TfrxCrossColumn;
Cell: PfrCrossCell;
Value, v: Variant;
begin
if FRows = nil then Exit;
if FNoColumns then
Column := FColumns.Column([Null]) else
Column := FColumns.Column(Columns);
if FNoRows then
Row := FRows.Row([Null]) else
Row := FRows.Row(Rows);
Cell := Row.GetCell(Column.CellIndex);
for i := 0 to FCellLevels - 1 do
begin
Value := Cell.Value;
v := Cells[i];
if FCellFunctions[i] = cfCount then
begin
v := Cells[i];
if v = Null then
v := 0
else
v := 1;
end;
if Value = Null then
Cell.Value := v
else if (TVarData(Value).VType = varString) or (TVarData(Value).VType = varOleStr) then
begin
[B]if FShowSame or (pos(#13#10+v+#13#10,#13#10 + Cell.Value+#13#10)=0) then // МОИ
Cell.Value := Value + #13#10 + v
end
else
Cell.Value := Value + v;[/B]
Cell := Cell.Next;
end;
end;
Наконец то дождались: Заполнение левого верхнего угла у CrossTab.
2 грида рядом синхронизированно вообще отлично.
Еще добавить:
1. Наименования у Cells.
2. RepeatHeader отдельно для Row и Col (всего то 10 строк)
3. HideIfSingleDataRecord для TotalRow (приходится в каждый отчет в скрипт проверку вставлять)
и тогда цены CrossTab не будет.
Замечания по CrossTab:
при CelLevels=2, PlanCell=false, по 1 Cell выводить Итого, по 2 Нет
GrandTotal по строкам обрезает строку по высоте (Не увеличивает высоту строки GrandTotal).
>Еще добавить: 1. Наименования у Cells.
Так есть ведь, объект в левом верхнем углу. Делать, как в других репортерах типа RB, когда наименования ячеек идут рядом с каждой ячейкой, не стал - некрасиво.
CrossTab два кросса рядом, если у первого кросса высота строк переменная,
логично было бы у второго кросса синхронизировать высоту строк с 1 кроссом.
(101.fr3, MaxWidth=50 и таблицы не стыкуются)
Ну это уже забота разработчика отчета. Зачем нужны два кросса рядом? Либо это совершенно разные таблицы, либо таблицы с одинаковым набором строк и разными столбцами, которые как бы имитируют один кросс. В последнем случае надо устанавливать обоим таблицам одинаковые параметры отображения, чтобы строки у них имели одинаковую высоту.
CrossTab
А для чего тогда нужно свойство NextCross
в 101.fr3, MaxWidth=50 (ширина колонки меньше ширины данных )
стандартная ситуция, таблицы не стыкуются, что делать?
В настоящиц мосент данное свойство (NextCross) можно использовать только при фиксированной высоте строк
>Еще добавить: 1. Наименования у Cells.
Так есть ведь, объект в левом верхнем углу. Делать, как в других репортерах типа RB, когда наименования ячеек идут рядом с каждой ячейкой, не стал - некрасиво.
1. Я так и не понял есть ли возможность задавать шапки для Rows и Cells у Cross-Tab отчетов.
2. Было бы неплохо выделить Cells в published свойство, чтобы можно было управлять шириной Cells в desing time. Т. е. если указал, например у этой Cells[Index] ширину 20 то 20 и никаких гвоздей.
3. Ну нужен мне верхний левый угол - см. п. 1. Необходимо иметь возможность проставить наименования столбцов. Напривмер есть группировка по категориям, группам и товарам. Так вот юзер ОЧЕНЬ хочеть видеть в отчете что это Группа, это Категория, это - Товар. То же самое с Cells - ну ОЧЕНЬ хочет он видеть наименование столбцов, типа: Торгпред, Категория торговых точек, Клиент. Типа без этого помру и все.
Нельзя ли это сделать?
>Еще добавить: 1. Наименования у Cells.
Так есть ведь, объект в левом верхнем углу. Делать, как в других репортерах типа RB, когда наименования ячеек идут рядом с каждой ячейкой, не стал - некрасиво.
Я, понимаю, что я нудный.
А нельзя ли мне как программеру решать нужен ли отдельные наименования для каждой Cells или нет. Да и причем в disign-time?
3- ну ведь есть же верхний левый угол. Что еще нужно?
Скачал Demo для Delphi7.
1. Убил старый Fastreport 3
2. Убил пути
3. Поставил новый.
4. Создал новый проект.
4.1. На форму бросил:
frxReport1: TfrxReport;
frxCrossObject1: TfrxCrossObject;
frxDBDataset1: TfrxDBDataset;
4.2. Связал frxDBDataset1 с источником у которого в дизайне заранее поменял свойства у Fields[Inxex].DispalyLabel на русские наменования (которые мне нужны).
4.3. Зашел в дизайнер отчета.
4.4. Добавил frxDBDataset1 в закладке Data
4.5. Добавил MasterBand и связал его с frxDBDataset1
4.6. Добавил на MasterBand DB Cross Tab объект
4.7. Установил галоку в Data Tree -> Data -> Create caption.
4.8. Накидал поля в DB Cross Tab объект.
4.9. Сказал Ок.
Что я вижу:
1. Свойства Fields[Inxex].DispalyLabel, которые я так долго устанавливал не применились к заголовкам Cells.
2. Ладно думаю, НЕХОРОШО, конечно, но мы пойдем своим путем. Два раза кликаем на заголовке какого либо Cells и получаем сообщение: Cannot change Visible in OnShow or OnHide. Жмем кнsge Ок. Попадаем в редактор свойства MemoView. Записываем туда что-нибудь. Жмем Ок. Получаем пустаю строку в заголовке. К стати тоже самое получается если щелкнуть в инспекторе объектов по свойству Memo.
Вопросы
1. Это фича Demo?
2. Если это не фича то НАДО исправить.
3. Стоит подумать о свойствах Fields[Inxex].DispalyLabel при включенной галочке в Data Tree -> Data -> Create caption.
Если сделать отчет без колонок (только строки и данные), неправильно рисуется заголовок (см. прикрепленный рисунок). Слева - когда колонка есть (все ок), если удалить колонку - получается ошибка (рис. справа)
А за многострадальный "левый угол" - спасибо, это на самом деле очень нужная весчь!
1. Опять возвращаюсь к наименованиям у Cells, без этого приходится строить дурацкий SQL запрос, больше обычного на кроличетсво Cells в ячейке (в примере как сейчас и как нужно). По моему не сложно если CellLevel>1, то в зависимости от PlainCells добавить строку к ColumnHeader (или RowHeader) и разбить ее на CellLevel.
2. Не получается изменять высоту строк в ColumnHeader, в 1 строке все в порядке, а на 2 высота увеличивается, если в несколько строк занести данные в GrandTotal, а при изменение CornerMemo высота не изменяется. И не совсем понятно у Header Мемо поля доступны в дизайнере, а ширину и высоту менять не получается.
3. Пример 67.fr3 у GrandTotal (справа), ставлю галку на растягивание, итоги верхняя строка обрезаются. Если у days не выводить итоги, то обрезаются итоги у Salsry (Внизу)
Комментарии
См рис
>2. Возможность не дублировать одинаковые данные в одной ячейке
Ячека состоит из 3 "этажей" - предмет, преподаватель, кабинет.
Строки из БД
История.Иванов.3114
История.Петров.3114
В ячейке д.б.
История
Иванов
Петров
3114
а сейчас
История
История
Иванов
Петров
3114
3114
>3. ЛЕВЫЙ-ВЕРХНИЙ угол
Что вы все забыли в этом углу?
НЕКРАСИВО , и несложно сделать
Дак вышли код разработчика может они добавят, если это не будет противоречит их возрениям, ну или хотя бы частично добавят.
Обычный бухгалтерский отчет: Покупатель, номер дата договора, номер и дата партии, номер и дата документа и т.д., и это все без шапки, и объясняй где что. Существуют же еще и правила оформления отчетов. Для такого отчета
(при большом RowHeader) необходимо также отдельно свойства RepeatRowHeader и RepeatColumnHeader, а не одно общее.
2. По демо версии в экспорте в Exel (OLE) опять при разделении тысяч экспортируется как текст, а XML и без разделения тысяч текст. Будем надеятся, что это только демо.
Так как по поводу CrossTab и HTMLCode?
Если есть необходимость, могу выслать код.
иначе блин на такие грабли наступлю что мало не покажется.. бухгалетра просто убьют не дайте погибнуть
В БД стоят строки о расписании занятий
Предмет:Фамилия:Кабинет
История:Иванов:3114
История:Петров:3114
В стандартном варианте Предмет и кабинет попадает в верхний и нижний этаж по 2 раза (или больше, смотря сколько данных расчитано на эту ячейку)
История
История
Иванов
Петров
3114
3114
А надо чтобы добавлялисьтолько, те данные которые отличаются от уже имеющихся (см. рис)
История
Иванов
Петров
3114
я сделал это так
FShowSame - св-во управляет: надо ли это учитывать повторы
2 грида рядом синхронизированно вообще отлично.
Еще добавить:
1. Наименования у Cells.
2. RepeatHeader отдельно для Row и Col (всего то 10 строк)
3. HideIfSingleDataRecord для TotalRow (приходится в каждый отчет в скрипт проверку вставлять)
и тогда цены CrossTab не будет.
Замечания по CrossTab:
при CelLevels=2, PlanCell=false, по 1 Cell выводить Итого, по 2 Нет
GrandTotal по строкам обрезает строку по высоте (Не увеличивает высоту строки GrandTotal).
Так есть ведь, объект в левом верхнем углу. Делать, как в других репортерах типа RB, когда наименования ячеек идут рядом с каждой ячейкой, не стал - некрасиво.
сейчас так:
: Цех1 : Цех2 : Цех n :
+
: : : : : : : : : :
: : : : : : : : : :
: : : : : : : : : :
а нужно так:
: Цех1 : Цех2 : Цех n :
+
: Цена : Кол : Сумма: Цена : Кол : Сумма: Цена : Кол : Сумма:
: : : : : : : : : :
: : : : : : : : : :
: : : : : : : : : :
в большом отчете без названий тяжело ориентироваться.
логично было бы у второго кросса синхронизировать высоту строк с 1 кроссом.
(101.fr3, MaxWidth=50 и таблицы не стыкуются)
А для чего тогда нужно свойство NextCross
в 101.fr3, MaxWidth=50 (ширина колонки меньше ширины данных )
стандартная ситуция, таблицы не стыкуются, что делать?
В настоящиц мосент данное свойство (NextCross) можно использовать только при фиксированной высоте строк
2. Было бы неплохо выделить Cells в published свойство, чтобы можно было управлять шириной Cells в desing time. Т. е. если указал, например у этой Cells[Index] ширину 20 то 20 и никаких гвоздей.
3. Ну нужен мне верхний левый угол - см. п. 1. Необходимо иметь возможность проставить наименования столбцов. Напривмер есть группировка по категориям, группам и товарам. Так вот юзер ОЧЕНЬ хочеть видеть в отчете что это Группа, это Категория, это - Товар. То же самое с Cells - ну ОЧЕНЬ хочет он видеть наименование столбцов, типа: Торгпред, Категория торговых точек, Клиент. Типа без этого помру и все.
Нельзя ли это сделать?
А нельзя ли мне как программеру решать нужен ли отдельные наименования для каждой Cells или нет. Да и причем в disign-time?
1. Убил старый Fastreport 3
2. Убил пути
3. Поставил новый.
4. Создал новый проект.
4.1. На форму бросил:
frxReport1: TfrxReport;
frxCrossObject1: TfrxCrossObject;
frxDBDataset1: TfrxDBDataset;
4.2. Связал frxDBDataset1 с источником у которого в дизайне заранее поменял свойства у Fields[Inxex].DispalyLabel на русские наменования (которые мне нужны).
4.3. Зашел в дизайнер отчета.
4.4. Добавил frxDBDataset1 в закладке Data
4.5. Добавил MasterBand и связал его с frxDBDataset1
4.6. Добавил на MasterBand DB Cross Tab объект
4.7. Установил галоку в Data Tree -> Data -> Create caption.
4.8. Накидал поля в DB Cross Tab объект.
4.9. Сказал Ок.
Что я вижу:
1. Свойства Fields[Inxex].DispalyLabel, которые я так долго устанавливал не применились к заголовкам Cells.
2. Ладно думаю, НЕХОРОШО, конечно, но мы пойдем своим путем. Два раза кликаем на заголовке какого либо Cells и получаем сообщение: Cannot change Visible in OnShow or OnHide. Жмем кнsge Ок. Попадаем в редактор свойства MemoView. Записываем туда что-нибудь. Жмем Ок. Получаем пустаю строку в заголовке. К стати тоже самое получается если щелкнуть в инспекторе объектов по свойству Memo.
Вопросы
1. Это фича Demo?
2. Если это не фича то НАДО исправить.
3. Стоит подумать о свойствах Fields[Inxex].DispalyLabel при включенной галочке в Data Tree -> Data -> Create caption.
Все это необходимо пофиксить.
2) cannot change поправили.
Если сделать отчет без колонок (только строки и данные), неправильно рисуется заголовок (см. прикрепленный рисунок). Слева - когда колонка есть (все ок), если удалить колонку - получается ошибка (рис. справа)
А за многострадальный "левый угол" - спасибо, это на самом деле очень нужная весчь!
2) А вот это хорошо.
2. Не получается изменять высоту строк в ColumnHeader, в 1 строке все в порядке, а на 2 высота увеличивается, если в несколько строк занести данные в GrandTotal, а при изменение CornerMemo высота не изменяется. И не совсем понятно у Header Мемо поля доступны в дизайнере, а ширину и высоту менять не получается.
3. Пример 67.fr3 у GrandTotal (справа), ставлю галку на растягивание, итоги верхняя строка обрезаются. Если у days не выводить итоги, то обрезаются итоги у Salsry (Внизу)
2. И нельзя ли подумать о ширине отдельных Cells в design-time?