Отчеты в FastReport
Модераторы: m0p3e, edward_K, Модераторы
Re: Отчеты в FastReport
Доброго времени суток!
Наконец, дошёл до использования DB-CrossTab. В связи с этим возникли 2 вопроса: 1) почему время от времени отчёт выдаёт ошибку "Argument out of range" (скрипт пока пуст)? 2) как столбцы сортировать по номеру месяца, а выводить название, ибо, если в редактировании DB-CrossTab пишу FormatDateTime('mmmm',EncodeDate(2016,<PERER."MM">,1)), то первым оказывается "Август" по алфавиту.
Наконец, дошёл до использования DB-CrossTab. В связи с этим возникли 2 вопроса: 1) почему время от времени отчёт выдаёт ошибку "Argument out of range" (скрипт пока пуст)? 2) как столбцы сортировать по номеру месяца, а выводить название, ибо, если в редактировании DB-CrossTab пишу FormatDateTime('mmmm',EncodeDate(2016,<PERER."MM">,1)), то первым оказывается "Август" по алфавиту.
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Отчеты в FastReport
Ошибку не встречал, но судя по всем... данные вылетают за возможные границы.
По месяцам - может добавлять в текст номер месяца потом его название? Так отсортирует верно.
По месяцам - может добавлять в текст номер месяца потом его название? Так отсортирует верно.
Re: Отчеты в FastReport
Да, но какие данные? Странно, что иногда получаешь ошибку, иногда нет, на одном и том же отчёте.Алексей писал(а):данные вылетают за возможные границы.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Отчеты в FastReport
При использовании крос таблиц важно следить за полнотой в наборе данных.
Ошибку не видел, но сталкивался с тем, что отчет вообще ничего не выводил, если не было данных по какому то столбцу в такой то строке. Пришлось доформировывать их. Что же касается вычислении, то это можно делать в событиях на печать поля.
Вот пример с вычислением среднего значения в итоги по строкам/столбцам.
Ошибку не видел, но сталкивался с тем, что отчет вообще ничего не выводил, если не было данных по какому то столбцу в такой то строке. Пришлось доформировывать их. Что же касается вычислении, то это можно делать в событиях на печать поля.
Вот пример с вычислением среднего значения в итоги по строкам/столбцам.
Код: Выделить всё
procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
begin
if Length(RowSums) < (RowIndex + 1) then
begin
SetLength(RowSums, (RowIndex + 1));
SetLength(RowCounts, (RowIndex + 1));
end;
if Length(ColSums) < (ColumnIndex + 1) then
begin
SetLength(ColSums, (ColumnIndex + 1));
SetLength(ColCounts, (ColumnIndex + 1));
end;
if DBCross1.IsTotalColumn(ColumnIndex) then
begin
if RowCounts[RowIndex] > 0.0000001 then
Begin
Memo.Text := Format('%2.2n', [RowSums[RowIndex] / RowCounts[RowIndex]]);
AllSumAvg := AllSumAvg + (RowSums[RowIndex] / RowCounts[RowIndex]);
End;
end
else if DBCross1.IsTotalRow(RowIndex) then
begin
if ColCounts[ColumnIndex] > 0.0000001 then
Memo.Text := Format('%2.2n', [ColSums[ColumnIndex] / ColCounts[ColumnIndex]]);
end
else
begin
if Value > 0.0000001 then
begin
RowSums[RowIndex] := RowSums[RowIndex] + Value;
RowCounts[RowIndex] := RowCounts[RowIndex] + 1;
ColSums[ColumnIndex] := ColSums[ColumnIndex] + Value;
ColCounts[ColumnIndex] := ColCounts[ColumnIndex] + 1;
end;
end;
if ( DBCross1.IsGrandTotalColumn(ColumnIndex) and DBCross1.IsGrandTotalRow(RowIndex) ) then
Begin
Memo.Text := Format('%2.2n', [AllSumAvg / (DBCross1.RowCount - 1)]);
End;
end; // procedure DBCross1OnPrintCell
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Отчеты в FastReport
После последних обновлений (буквально позавчера), функционал отсылки отчета на принтер без диалога сломался... функция FRSetParameters выдаёт false. Кто-нибудь сталкивался и как пофиксить? Объём путевых листов большой, диалог не нужен.LaaLaa писал(а):Набор таких функций почти готов. Планируется выпустить в Атлантисе 5.5.23.0Алексей писал(а):Есть ли техническая возможность из випа вызвать не генератор отчётов Fastreport, а указав конкретный отчёт послать его сразу на принтер, минуя диалоговое окно?
Код брали из примера в документации.
Код: Выделить всё
var PrintParam: frxPrintParam;
ClearAdvRecord(PrintParam);
FRGetDefaultParameters(frPrintParam, PrintParam);
PrintParam.ShowDialog := False;
[b]FRSetParameters[/b](FReport, frPrintParam, PrintParam);
FRPrintReport(FReport);
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Отчеты в FastReport
Проблема зарегистрирована в Систему ПИР 101.59308
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Отчеты в FastReport
После замены FRRecordDefinition.vih на актуальный, заработало.
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Отчеты в FastReport
Настроил отчет в FR. Установил у полей в masterdata значение "растягиваемый до максимальной высоты" и "переносить слова". Получаю отчёт, название МЦ вывелось в поле в 4 строчки, всё читаемо, печатаемо. Но при выгрузке отчета в эксель файл - полученная ячейка как бы скрадывает часть нижней строчки, т.е. нижняя, четвёртая строка видна наполовину. Если щёлкнуть на номер ячейки (авторасширение) - то ячейка раздвигается и весь текст становится виден.
Как сделать чтобы текст при получении отчета в экселе сразу был виден весь в ячейке? Поискал разные настройки но так ничего и не нашел.
Как сделать чтобы текст при получении отчета в экселе сразу был виден весь в ячейке? Поискал разные настройки но так ничего и не нашел.
Re: Отчеты в FastReport
Это происходит из-за того что в Excel нету межстрочного интервала. При использовании ячеек с многострочным текстом необходимо у них выставлять свойство LineSpacing в значение 6.Алексей писал(а):Настроил отчет в FR. Установил у полей в masterdata значение "растягиваемый до максимальной высоты" и "переносить слова". Получаю отчёт, название МЦ вывелось в поле в 4 строчки, всё читаемо, печатаемо. Но при выгрузке отчета в эксель файл - полученная ячейка как бы скрадывает часть нижней строчки, т.е. нижняя, четвёртая строка видна наполовину. Если щёлкнуть на номер ячейки (авторасширение) - то ячейка раздвигается и весь текст становится виден.
Как сделать чтобы текст при получении отчета в экселе сразу был виден весь в ячейке? Поискал разные настройки но так ничего и не нашел.
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Отчеты в FastReport
Вот спасибо, помогло! Я вроде смотрел смотрел свойства, и не увидел
Держите репуташку
Держите репуташку
Re: Отчеты в FastReport
Приветствую!
У меня был отчёт с cross-tab, где в заголовках строк цеха/отделы из KATPODR, а в заголовках столбцов - месяцы. Теперь пришло требование указывать иерархию подразделений (KATPODR.CPODR = KATPODR.NREC). Ломаю голову, как впихнуть эту информацию, ведь уровень вложенности и вообще присутствие подразделения в отчёте заранее неизвестны. Можно, конечно, помучаться и в Excel выводить, но cross-tab так удобен...
У меня был отчёт с cross-tab, где в заголовках строк цеха/отделы из KATPODR, а в заголовках столбцов - месяцы. Теперь пришло требование указывать иерархию подразделений (KATPODR.CPODR = KATPODR.NREC). Ломаю голову, как впихнуть эту информацию, ведь уровень вложенности и вообще присутствие подразделения в отчёте заранее неизвестны. Можно, конечно, помучаться и в Excel выводить, но cross-tab так удобен...
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Отчеты в FastReport
Для кросс таблиц важно правильно сформировать поток, а вот вывод полей можно и подкорректировать.Ломаю голову, как впихнуть эту информацию, ведь уровень вложенности и вообще присутствие подразделения в отчёте заранее неизвестны
По сути вам нужно организовать правильную сортировку(проще изначально делать иерархические коды подразделений и хорошо когда все отделы оказываются на одном уровне - жизнь становиться проще), а видимость дерева регулировать пробелами в зависимости от уровня вложенности или от длины кода.
Возможно вам пригодиться возможность зарегить Static функции, а потом использовать в FastReport через CompileVipExpression(в описании к патчам можно найти примеры использования). Вообще говоря, все функции которые работают по Ctrl+F4, можно использовать в фастрепорте.
Re: Отчеты в FastReport
Не совсем понятна мысль. У меня есть отсортированный полный список подразделений, есть набор данных в cross-tab с привязкой к подразделению. Как объединить эти множества, чтобы выходили и все верхние подразделения-родители, и итоги по ним?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Отчеты в FastReport
Добавить в набор данных также пустышки для всех вышестоящих подразделений. Объекта дерево в фасте я не помню.
Re: Отчеты в FastReport
По-моему, в этом случае каждое подразделение будет иметь свой независимый итог, а не включающий потомков тоже, но всё-таки попробую.