Скорее всего не под ту версию RAD проект открыли.
» FastReport
AnGo
Код: TfrxFIBQuery = class(TfrxCustomQuery)
private
FDatabase: TfrxFIBDatabase;
FQuery: TpFIBDataset;
procedure SetDatabase(const Value: TfrxFIBDatabase);
function GetFetchAll: Boolean; //add
procedure SetFetchAll(const Value: Boolean); //add
Код: TfrxFIBQuery = class(TfrxCustomQuery)
private
FDatabase: TfrxFIBDatabase;
FQuery: TpFIBDataset;
procedure SetDatabase(const Value: TfrxFIBDatabase);
function GetFetchAll: Boolean; //add
procedure SetFetchAll(const Value: Boolean); //add
Как сделать, чтобы при экспорте из FastReport 5 в Excel crosstab-отчет не разбивался на блоки, размером страницу, а выводился целиком по ширине и высоте.
Пробовал TfrxXLSExport, TfrxXLSXExport, TfrxCSVExport, TfrxXMLExport и разные настройки, но сделать не удалось.
Пробовал TfrxXLSExport, TfrxXLSXExport, TfrxCSVExport, TfrxXMLExport и разные настройки, но сделать не удалось.
Ребят, подскажите, пожалуйста, возможно ли как-то готовый fp3-файл экспортировать в Excel?
Спасибо!
Спасибо!
The_Immortal
Открыть готовый отчёт, а потом - TfrxXLSExport, TfrxXLSXExport - ?
Открыть готовый отчёт, а потом - TfrxXLSExport, TfrxXLSXExport - ?
PowerChute, эм... Что-то не могу допендрить как в TfrxXLSExport подсунуть fp3... Не подскажите?..
Я догадываюсь, что надо использовать вот это:
Код: frxReport1.LoadFromFile('test.fp3');
frxXLSExport1.ExportObject(frxReport1);
Я догадываюсь, что надо использовать вот это:
Код: frxReport1.LoadFromFile('test.fp3');
frxXLSExport1.ExportObject(frxReport1);
The_Immortal
Код:
dmdMain_FastReport.Report3.PreviewPages.LoadFromFile(AFileName);
dmdMain_FastReport.Report3.ShowPreparedReport;
Код:
dmdMain_FastReport.Report3.PreviewPages.LoadFromFile(AFileName);
dmdMain_FastReport.Report3.ShowPreparedReport;
Cryogen2003, пробовал так - ошибка (см. выше) Нашел по ошибке вот эту тему. Там для открытия fp3 предлагается следующее:
Код: FrPrn := frReportManager():new()
FrPrn:LoadFPFile("test.fp3")
Код: FrPrn := frReportManager():new()
FrPrn:LoadFPFile("test.fp3")
The_Immortal
Я Вам сказал, как надо. Грузить fp3 в PreviewPages (frxReport1.PreviewPages.LoadFromFile(), а потом уже запускать frxReport1.ShowPreparedReport
А не могу найти не процедуру LoadFPFile, ни класс frReportManager
Сделай как я показал, все будет лучше
Я Вам сказал, как надо. Грузить fp3 в PreviewPages (frxReport1.PreviewPages.LoadFromFile(), а потом уже запускать frxReport1.ShowPreparedReport
А не могу найти не процедуру LoadFPFile, ни класс frReportManager
Сделай как я показал, все будет лучше
Cryogen2003, благодарю!
The_Immortal
Да не за что
Да не за что
Cryogen2003, я просто думал, что это программно можно устроить, вот и тупил
помогите разобраться. Есть приложение под Андроид и виндовс, использую 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 {
... }
Отчет делаю в рантайме
Код: #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 {
... }
Уважаемые форумчане! После генерации отчёта использую экспорт в Excel. Тут всё стандартно: компонент TfrxXLSExport. После превьюшки при вызове кнопки "Сохранить" появляется пункт "Документ Excel (OLE)..." . Народ привык к этому. Но иногда качество экспорта желает быть лучше. Т.е. использовать свой код (оле или другое что-то). Можно как-то, чтобы пункт в превьюшке этот сохранился ("Документ Excel (OLE)..."), но при вызове его выполнялся свой код, а не выполнялся экспорт средствами TfrxXLSExport? Людей много и трудно приучить делать по-другому, тобишь вызывать экспорт в другом месте? Заранее спасибо за ответ
vavavol
Можно написать наследника от родительского класса TfrxXLSExport. А потом зарегистрировать его вместо TfrxXLSExport.
Можно написать наследника от родительского класса TfrxXLSExport. А потом зарегистрировать его вместо TfrxXLSExport.
Благодарю, ребята! Буду копать
Отчет простой
GroupHeader1
GroupHeader2
MasterData
GroupFooter2
GroupFooter1
GroupHeader2 - это группа техники. Как сделать так, чтобы не печатался GroupHeader2 если значение группы = 0.
GroupHeader1
GroupHeader2
MasterData
GroupFooter2
GroupFooter1
GroupHeader2 - это группа техники. Как сделать так, чтобы не печатался GroupHeader2 если значение группы = 0.
dallan
Проверку в OnBeforePrint у GroupHeader2 и по требованию GroupHeader2.Visible := False
Проверку в OnBeforePrint у GroupHeader2 и по требованию GroupHeader2.Visible := False
Не помогает. Вообще не печатает группы
Добавлено:
Вот программный код. Что не так?
Код:
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.
Добавлено:
Вот программный код. Что не так?
Код:
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.
dallan
Попробуйте заменить
Код: if <frxDBTabel."KOD_GRUP"> = 0 then
GroupHeader2.Visible := False;
Попробуйте заменить
Код: if <frxDBTabel."KOD_GRUP"> = 0 then
GroupHeader2.Visible := False;
Цитата:
Не помогает. Вообще не печатает группы
А раньше все время печатал?
Цитата:
if <frxDBTabel."KOD_GRUP"> = 0 then
GroupHeader2.Visible := False;
Этот код отменил печать всех групп?
AnViSe
Цитата:
Цитата:
Этот код отменил печать всех групп?Этот код мог отменить печать всех заголовков групп GroupHeader2. Видимо, это имелось ввиду.
УРА! Замечательно.
Все получилось. Большое спасибо.
Все получилось. Большое спасибо.
dallan
Ну, если всё заработало, то можно упростить код и поменять
Код: if <frxDBTabel."KOD_GRUP"> = 0 then
GroupHeader2.Visible := False;
else
GroupHeader2.Visible := True;
Ну, если всё заработало, то можно упростить код и поменять
Код: if <frxDBTabel."KOD_GRUP"> = 0 then
GroupHeader2.Visible := False;
else
GroupHeader2.Visible := True;
Ребята, как в коде посчитать сумму по группе. Пробую в GroupFooterOnBeforePrint SUM(<Query1."SUM">,MasterData) - не дает ничего. При этом если это выполнить на странице в Memo - получаю результат. ??
1. Сделать переменную, в которую будет накапливаться сумма
2. В GroupHeaderOnBeforePrint обнулять эту переменную
3. В MasterDataOnBeforePrint добавлять очередное значение в эту переменную.
2. В GroupHeaderOnBeforePrint обнулять эту переменную
3. В MasterDataOnBeforePrint добавлять очередное значение в эту переменную.
День добрый.
Можно ли как то при построение отчета делать определенные колонки в отчете пустыми, тоесть что бы пользователь видел только те колонки что ему можно видеть.
Можно ли как то при построение отчета делать определенные колонки в отчете пустыми, тоесть что бы пользователь видел только те колонки что ему можно видеть.
DYUMON
В событии "OnBeforePrint" первого бэнда (например, бэнда ReportTitle) напишите:
Код: Memo2.Visible := False;
Memo3.Visible := False;
...
В событии "OnBeforePrint" первого бэнда (например, бэнда ReportTitle) напишите:
Код: Memo2.Visible := False;
Memo3.Visible := False;
...
DYUMON
В событии OnBeforePrint объекта, в зависимости по какому критерию нужно показывать-не показывать, Memo.Visible := False-True. Либо на самом поле в OnBeforePrint играешься в свойсте Memo.Memo. Либо через процедуру IIF(,,) в самом поле.
В событии OnBeforePrint объекта, в зависимости по какому критерию нужно показывать-не показывать, Memo.Visible := False-True. Либо на самом поле в OnBeforePrint играешься в свойсте Memo.Memo. Либо через процедуру IIF(,,) в самом поле.
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
Предыдущая тема: CBuilder и копирование файла
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.