Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» FastReport

Автор: KRS545
Дата сообщения: 05.02.2016 17:26
Скорее всего не под ту версию RAD проект открыли.
Автор: gpi
Дата сообщения: 07.02.2016 13:58
AnGo

Код: TfrxFIBQuery = class(TfrxCustomQuery)
private
FDatabase: TfrxFIBDatabase;
FQuery: TpFIBDataset;
procedure SetDatabase(const Value: TfrxFIBDatabase);
function GetFetchAll: Boolean; //add
procedure SetFetchAll(const Value: Boolean); //add
Автор: dzh2000
Дата сообщения: 25.05.2016 01:02
Как сделать, чтобы при экспорте из FastReport 5 в Excel crosstab-отчет не разбивался на блоки, размером страницу, а выводился целиком по ширине и высоте.

Пробовал TfrxXLSExport, TfrxXLSXExport, TfrxCSVExport, TfrxXMLExport и разные настройки, но сделать не удалось.
Автор: The_Immortal
Дата сообщения: 20.06.2016 12:43
Ребят, подскажите, пожалуйста, возможно ли как-то готовый fp3-файл экспортировать в Excel?

Спасибо!
Автор: PowerChute
Дата сообщения: 20.06.2016 16:16
The_Immortal
Открыть готовый отчёт, а потом - TfrxXLSExport, TfrxXLSXExport - ?
Автор: The_Immortal
Дата сообщения: 20.06.2016 17:33
PowerChute, эм... Что-то не могу допендрить как в TfrxXLSExport подсунуть fp3... Не подскажите?..

Я догадываюсь, что надо использовать вот это:
Код: frxReport1.LoadFromFile('test.fp3');
frxXLSExport1.ExportObject(frxReport1);
Автор: Cryogen2003
Дата сообщения: 20.06.2016 18:04
The_Immortal

Код:
dmdMain_FastReport.Report3.PreviewPages.LoadFromFile(AFileName);
dmdMain_FastReport.Report3.ShowPreparedReport;
Автор: The_Immortal
Дата сообщения: 20.06.2016 18:07
Cryogen2003, пробовал так - ошибка (см. выше) Нашел по ошибке вот эту тему. Там для открытия fp3 предлагается следующее:
Код: FrPrn := frReportManager():new()
FrPrn:LoadFPFile("test.fp3")
Автор: Cryogen2003
Дата сообщения: 21.06.2016 00:29
The_Immortal
Я Вам сказал, как надо. Грузить fp3 в PreviewPages (frxReport1.PreviewPages.LoadFromFile(), а потом уже запускать frxReport1.ShowPreparedReport

А не могу найти не процедуру LoadFPFile, ни класс frReportManager

Сделай как я показал, все будет лучше
Автор: The_Immortal
Дата сообщения: 21.06.2016 12:29
Cryogen2003, благодарю!
Автор: Cryogen2003
Дата сообщения: 21.06.2016 13:17
The_Immortal
Да не за что
Автор: The_Immortal
Дата сообщения: 21.06.2016 13:31
Cryogen2003, я просто думал, что это программно можно устроить, вот и тупил
Автор: MagistrAnatol
Дата сообщения: 28.06.2016 18:04
помогите разобраться. Есть приложение под Андроид и виндовс, использую FMX C++ XE10
Отчет делаю в рантайме


Код: #if defined(_Windows)
#include "FMX.frxClass.hpp"
#include "FMX.frxDBSet.hpp"
#include "FMX.frxDesgn.hpp"
#endif
.........................................

    TfrxDBDataset *frxDBDs;
    TfrxReport *frxReport;
    TfrxMasterData * MasterDataBand;

    try {
        frxDBDs = new TfrxDBDataset(Application);
        frxDBDs->DataSet = dm->tRezyltat;


        frxReport = new TfrxReport(Application);
        frxReport->StoreInDFM = false;
        frxReport->DataSet = frxDBDs;

        frxReport->LoadFromFile(ExtractFilePath(ParamStr(0)) + "report.fr3");

        frxReport->PrepareReport(false);
        frxReport->ShowPreparedReport();

    }
    __finally {
...    }
Автор: vavavol
Дата сообщения: 08.08.2016 16:37
Уважаемые форумчане! После генерации отчёта использую экспорт в Excel. Тут всё стандартно: компонент TfrxXLSExport. После превьюшки при вызове кнопки "Сохранить" появляется пункт "Документ Excel (OLE)..." . Народ привык к этому. Но иногда качество экспорта желает быть лучше. Т.е. использовать свой код (оле или другое что-то). Можно как-то, чтобы пункт в превьюшке этот сохранился ("Документ Excel (OLE)..."), но при вызове его выполнялся свой код, а не выполнялся экспорт средствами TfrxXLSExport? Людей много и трудно приучить делать по-другому, тобишь вызывать экспорт в другом месте? Заранее спасибо за ответ
Автор: Frodo_Torbins
Дата сообщения: 08.08.2016 18:04
vavavol
Можно написать наследника от родительского класса TfrxXLSExport. А потом зарегистрировать его вместо TfrxXLSExport.
Автор: mmlm10
Дата сообщения: 08.08.2016 21:01
vavavol
Может вот это поможет?

https://www.fastreport.ru/ru/faq/13/120/
Автор: vavavol
Дата сообщения: 09.08.2016 08:28
Благодарю, ребята! Буду копать
Автор: dallan
Дата сообщения: 06.09.2016 10:11
Отчет простой

GroupHeader1
GroupHeader2
MasterData
GroupFooter2
GroupFooter1


GroupHeader2 - это группа техники. Как сделать так, чтобы не печатался GroupHeader2 если значение группы = 0.
Автор: AnViSe
Дата сообщения: 06.09.2016 10:34
dallan
Проверку в OnBeforePrint у GroupHeader2 и по требованию GroupHeader2.Visible := False
Автор: dallan
Дата сообщения: 06.09.2016 11:18
Не помогает. Вообще не печатает группы

Добавлено:
Вот программный код. Что не так?


Код:
var
List:TStringList;
Listk:TStringList;
i:Integer;
k:Integer;
M13:Real;
M12:Real;
M11:Real;
M23:Real;
M22:Real;
M21:Real;

procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent);
begin
if Engine.FinalPass then
begin
Memo1.Text := List[i];
Memo3.Text := List[i+1];
Memo4.Text := List[i+2];
Memo5.Text := List[i+3];
Memo6.Text := List[i+4];
Memo7.Text := List[i+5];
Memo8.Text := List[i+6];
Memo9.Text := List[i+7];
Memo10.Text := List[i+8];
Memo11.Text := List[i+9];
Memo12.Text := List[i+10];
Memo13.Text := List[i+11];
Memo14.Text := List[i+12];

// Memo12.Text := FormatMaskText('0,000',List[i]);
end
end;

procedure GroupHeader2OnBeforePrint(Sender: TfrxComponent);
begin
if <frxDBTabel."KOD_GRUP"> = 0 then
GroupHeader2.Visible := False;
if Engine.FinalPass then
begin
Memo21.Text := Listk[k];
Memo22.Text := Listk[k+1];
Memo23.Text := Listk[k+2];
Memo24.Text := Listk[k+3];
Memo25.Text := Listk[k+4];
Memo26.Text := Listk[k+5];
Memo27.Text := Listk[k+6];
Memo28.Text := Listk[k+7];
Memo29.Text := Listk[k+8];
Memo30.Text := Listk[k+9];
Memo31.Text := Listk[k+10];
Memo32.Text := Listk[k+11];
Memo33.Text := Listk[k+12];
end
end;

procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
begin
if not Engine.FinalPass then
begin
List.Add(FloatToStr(SUM(<frxDBTabel."VSEGODNI">,MasterData1,1)));
List.Add(FloatToStr(SUM(<frxDBTabel."N_DNI">,MasterData1,1)));
List.Add(FloatToStr(SUM(<frxDBTabel."RK_DNI">+<frxDBTabel."SR_DNI">+<frxDBTabel."RT_DNI">,MasterData1,1)));
List.Add(FloatToStr(SUM(<frxDBTabel."RO_DNI">,MasterData1,1)));
List.Add(FloatToStr(SUM(<frxDBTabel."TO_DNI">,MasterData1,1)));
List.Add(FloatToStr(SUM(<frxDBTabel."RZ_DNI">,MasterData1,1)));
List.Add(FloatToStr(SUM(<frxDBTabel."PV_DNI">,MasterData1,1)));
List.Add(FloatToStr(SUM(<frxDBTabel."PP_DNI">,MasterData1,1)));
List.Add(FloatToStr(SUM(<frxDBTabel."PG_DNI">,MasterData1,1)));
M11 := SUM(<frxDBTabel."N_DNI">,MasterData1,1)/SUM(<frxDBTabel."VSEGODNI">,MasterData1,1);
M11 := Round(M11*1000)/1000;
List.Add(FloatToStr(M11));
M12 := 1-(SUM(<frxDBTabel."RK_DNI">+<frxDBTabel."SR_DNI">+<frxDBTabel."RT_DNI">,MasterData1,1)+SUM(<frxDBTabel."RO_DNI">,MasterData1,1)+SUM(<frxDBTabel."TO_DNI">,MasterData1,1))/SUM(<frxDBTabel."VSEGODNI">,MasterData1,1);
M12 := Round(M12*1000)/1000;
List.Add(FloatToStr(M12));
M13 := SUM(<frxDBTabel."GRUZPOD">*<frxDBTabel."VSEGODNI">,MasterData1,1);
M13 := Round(M13*1000)/1000;
List.Add(FloatToStr(M13));
List.Add(FloatToStr(SUM(<frxDBTabel."GRUZPOD">*<frxDBTabel."N_DNI">,MasterData1,1)));

end
else
begin
Inc(i);
Inc(i);
Inc(i);
Inc(i);
Inc(i);
Inc(i);
Inc(i);
Inc(i);
Inc(i);
Inc(i);
Inc(i);
Inc(i);
Inc(i);
end
end;

procedure GroupFooter2OnBeforePrint(Sender: TfrxComponent);
begin
if not Engine.FinalPass then
begin
Listk.Add(FloatToStr(SUM(<frxDBTabel."VSEGODNI">,MasterData1,1)));
Listk.Add(FloatToStr(SUM(<frxDBTabel."N_DNI">,MasterData1,1)));
Listk.Add(FloatToStr(SUM(<frxDBTabel."RK_DNI">+<frxDBTabel."SR_DNI">+<frxDBTabel."RT_DNI">,MasterData1,1)));
Listk.Add(FloatToStr(SUM(<frxDBTabel."RO_DNI">,MasterData1,1)));
Listk.Add(FloatToStr(SUM(<frxDBTabel."TO_DNI">,MasterData1,1)));
Listk.Add(FloatToStr(SUM(<frxDBTabel."RZ_DNI">,MasterData1,1)));
Listk.Add(FloatToStr(SUM(<frxDBTabel."PV_DNI">,MasterData1,1)));
Listk.Add(FloatToStr(SUM(<frxDBTabel."PP_DNI">,MasterData1,1)));
Listk.Add(FloatToStr(SUM(<frxDBTabel."PG_DNI">,MasterData1,1)));
M21 := SUM(<frxDBTabel."N_DNI">,MasterData1,1)/SUM(<frxDBTabel."VSEGODNI">,MasterData1,1);
M21 := Round(M21*1000)/1000;
Listk.Add(FloatToStr(M21));
M22 := 1-(SUM(<frxDBTabel."RK_DNI">+<frxDBTabel."SR_DNI">+<frxDBTabel."RT_DNI">,MasterData1,1)+SUM(<frxDBTabel."RO_DNI">,MasterData1,1)+SUM(<frxDBTabel."TO_DNI">,MasterData1,1))/SUM(<frxDBTabel."VSEGODNI">,MasterData1,1);
M22 := Round(M22*1000)/1000;
Listk.Add(FloatToStr(M22));
M23 := SUM(<frxDBTabel."GRUZPOD">*<frxDBTabel."VSEGODNI">,MasterData1,1);
M23 := Round(M23*1000)/1000;
Listk.Add(FloatToStr(M23));
Listk.Add(FloatToStr(SUM(<frxDBTabel."GRUZPOD">*<frxDBTabel."N_DNI">,MasterData1,1)));
end
else
begin
Inc(k);
Inc(k);
Inc(k);
Inc(k);
Inc(k);
Inc(k);
Inc(k);
Inc(k);
Inc(k);
Inc(k);
Inc(k);
Inc(k);
Inc(k);
end
end;

procedure frxReportTabel2OnStartReport(Sender: TfrxComponent);
begin
List := TStringList.Create;
Listk := TStringList.Create;
end;

procedure frxReportTabel2OnStopReport(Sender: TfrxComponent);
begin
List.Free;
Listk.Free;
end;

procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
i := 0;
k := 0;
end;


begin

end.

Автор: Dronton2
Дата сообщения: 06.09.2016 12:51
dallan
Попробуйте заменить

Код: if <frxDBTabel."KOD_GRUP"> = 0 then
GroupHeader2.Visible := False;
Автор: AnViSe
Дата сообщения: 06.09.2016 13:15

Цитата:
Не помогает. Вообще не печатает группы

А раньше все время печатал?

Цитата:
  if <frxDBTabel."KOD_GRUP"> = 0 then
     GroupHeader2.Visible := False;

Этот код отменил печать всех групп?
Автор: Dronton2
Дата сообщения: 06.09.2016 13:47
AnViSe

Цитата:
Этот код отменил печать всех групп?
Этот код мог отменить печать всех заголовков групп GroupHeader2. Видимо, это имелось ввиду.
Автор: dallan
Дата сообщения: 06.09.2016 15:20
УРА! Замечательно.
Все получилось. Большое спасибо.
Автор: Dronton2
Дата сообщения: 06.09.2016 16:25
dallan
Ну, если всё заработало, то можно упростить код и поменять

Код: if <frxDBTabel."KOD_GRUP"> = 0 then
GroupHeader2.Visible := False;
else
GroupHeader2.Visible := True;
Автор: GeXamin
Дата сообщения: 09.09.2016 10:48
Ребята, как в коде посчитать сумму по группе. Пробую в GroupFooterOnBeforePrint SUM(<Query1."SUM">,MasterData) - не дает ничего. При этом если это выполнить на странице в Memo - получаю результат. ??
Автор: Dronton2
Дата сообщения: 09.09.2016 11:58
1. Сделать переменную, в которую будет накапливаться сумма
2. В GroupHeaderOnBeforePrint обнулять эту переменную
3. В MasterDataOnBeforePrint добавлять очередное значение в эту переменную.
Автор: DYUMON
Дата сообщения: 12.09.2016 13:20
День добрый.
Можно ли как то при построение отчета делать определенные колонки в отчете пустыми, тоесть что бы пользователь видел только те колонки что ему можно видеть.
Автор: Dronton2
Дата сообщения: 12.09.2016 14:14
DYUMON
В событии "OnBeforePrint" первого бэнда (например, бэнда ReportTitle) напишите:

Код: Memo2.Visible := False;
Memo3.Visible := False;
...
Автор: GeXamin
Дата сообщения: 12.09.2016 14:52
DYUMON
В событии OnBeforePrint объекта, в зависимости по какому критерию нужно показывать-не показывать, Memo.Visible := False-True. Либо на самом поле в OnBeforePrint играешься в свойсте Memo.Memo. Либо через процедуру IIF(,,) в самом поле.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859

Предыдущая тема: CBuilder и копирование файла


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.