unit urelRecibo; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.Math, System.DateUtils, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, umstMaster, RLReport, Data.DB, Vcl.ComCtrls, RLRichText, RLFilters, RLPDFFilter, RLPreviewForm, RLPrinters, frxClass, frxDBSet, frxRich; type TrelRecibo = class(TmstMaster) dtsReport: TDataSource; dtsDevedor: TDataSource; dtsTitulos: TDataSource; frRecibo: TRLReport; frb_header: TRLBand; frpnl_logo: TRLPanel; frdbimg_logo: TRLDBImage; frpnl_headertop: TRLPanel; frlbl_headertop: TRLLabel; frpnl_headerbot: TRLPanel; frlbl_headerbot: TRLLabel; frb_header2: TRLBand; frlbl_valortot: TRLLabel; frlbl_vlextenso: TRLLabel; frpnl_nome: TRLPanel; frdblbl_cpf: TRLDBText; frdblbl_nome: TRLDBText; frlbl_recebemos: TRLLabel; frpnl_recibo: TRLPanel; frdblbl_nrrecibo: TRLDBText; frlbl_recibo: TRLLabel; frb_footer: TRLBand; frpnl_organizasum: TRLPanel; frdbresult_juros: TRLDBResult; frdbresult_multa: TRLDBResult; frdbresult_principal: TRLDBResult; frdbresult_encargos: TRLDBResult; frdbresult_descontos: TRLDBResult; frdbresult_total: TRLDBResult; frlbl_formarecebimento: TRLLabel; frpnl_cheque: TRLPanel; frlbl_nrcheque: TRLLabel; frlbl_banco: TRLLabel; frlbl_praca: TRLLabel; frb_detail: TRLBand; frdblbl_vencimento: TRLDBText; frdblbl_juros: TRLDBText; frdblbl_multa: TRLDBText; frdblbl_principal: TRLDBText; frdblbl_encargos: TRLDBText; frdblbl_descontos: TRLDBText; frdblbl_total: TRLDBText; frsubdbnd1: TRLSubDetail; frsubdbndmeio: TRLSubDetail; frb_detail2v: TRLBand; RLDBText9: TRLDBText; RLDBText10: TRLDBText; RLDBText11: TRLDBText; RLDBText12: TRLDBText; RLDBText13: TRLDBText; RLDBText14: TRLDBText; RLDBText15: TRLDBText; frb_footer2v: TRLBand; RLPanel3: TRLPanel; RLDBResult7: TRLDBResult; RLDBResult8: TRLDBResult; RLDBResult9: TRLDBResult; RLDBResult10: TRLDBResult; RLDBResult11: TRLDBResult; RLDBResult12: TRLDBResult; frlbl_formarecebimento2v: TRLLabel; frpnl_cheque2v: TRLPanel; frlbl_nrcheque2v: TRLLabel; frlbl_banco2v: TRLLabel; frlbl_praca2v: TRLLabel; frb_header2v: TRLBand; frpnl_logo2v: TRLPanel; frdbimg_logo2v: TRLDBImage; RLPanel6: TRLPanel; frlbl_headertop2v: TRLLabel; RLPanel7: TRLPanel; frlbl_headerbot2v: TRLLabel; frb_header22v: TRLBand; frlbl_valortot2v: TRLLabel; frlbl_vlextenso2v: TRLLabel; RLPanel8: TRLPanel; frdblbl_cpf2v: TRLDBText; frdblbl_nome2v: TRLDBText; RLLabel30: TRLLabel; RLPanel9: TRLPanel; RLDBText19: TRLDBText; RLLabel31: TRLLabel; frsubdbnd2: TRLSubDetail; RLBand5: TRLBand; RLDBText2: TRLDBText; RLDBResult1: TRLDBResult; RLDBText3: TRLDBText; RLDBResult2: TRLDBResult; RLDBText4: TRLDBText; RLDBResult3: TRLDBResult; RLDBText5: TRLDBText; RLDBResult4: TRLDBResult; dtsCaixa: TDataSource; frpnl_headers: TRLPanel; frlbl_vencimento: TRLLabel; frlbl_principal: TRLLabel; frlbl_encargos: TRLLabel; frlbl_descontos: TRLLabel; frlbl_total: TRLLabel; frlbl_juros: TRLLabel; frlbl_multa: TRLLabel; frlbl_despesas: TRLLabel; RLLabel2: TRLLabel; RLPanel1: TRLPanel; RLLabel4: TRLLabel; RLLabel11: TRLLabel; RLLabel12: TRLLabel; RLLabel13: TRLLabel; RLLabel14: TRLLabel; RLLabel15: TRLLabel; RLLabel16: TRLLabel; RLLabel1: TRLLabel; RLLabel3: TRLLabel; frlbl_nometit: TRLLabel; RLDBText1: TRLDBText; RLLabel5: TRLLabel; RLDBText6: TRLDBText; RLPanel2: TRLPanel; frlbl_empresatit: TRLLabel; RLPanel4: TRLPanel; frlbl_empresatit2v: TRLLabel; frlbl_dtpag: TRLLabel; frlbl_dtpag2v: TRLLabel; RLPanel5: TRLPanel; frlbl_empresa: TRLLabel; frlbl_usuario: TRLLabel; frdblbl_usuario: TRLDBText; fr_date: TRLSystemInfo; fr_time: TRLSystemInfo; RLPanel10: TRLPanel; fr_membobs: TRLMemo; RLPanel11: TRLPanel; RLLabel18: TRLLabel; RLLabel19: TRLLabel; RLDBText16: TRLDBText; RLSystemInfo2: TRLSystemInfo; RLSystemInfo1: TRLSystemInfo; RLPanel12: TRLPanel; fr_membobs2v: TRLMemo; RLLabel6: TRLLabel; RLLabel7: TRLLabel; frlbl_nr_reciboprimeiravia: TRLLabel; frlbl_nr_recibosegundavia: TRLLabel; fr_filterpdf: TRLPDFFilter; procedure frReciboBeforePrint(Sender: TObject; var PrintIt: Boolean); procedure frReciboAfterPrint(Sender: TObject); procedure frsubdbnd2BeforePrint(Sender: TObject; var PrintIt: Boolean); procedure frsubdbnd1BeforePrint(Sender: TObject; var PrintIt: Boolean); procedure frdblbl_cpfBeforePrint(Sender: TObject; var AText: string; var PrintIt: Boolean); procedure frdblbl_cpf2vBeforePrint(Sender: TObject; var AText: string; var PrintIt: Boolean); procedure RLDBText19BeforePrint(Sender: TObject; var AText: string; var PrintIt: Boolean); private procedure SalvarReciboPDF; function CmtoPix(cm: double): integer; { Private declarations } public duaspags: Boolean; nr_recibo_print: string; { Public declarations } end; var relRecibo: TrelRecibo; meses: array [1 .. 12] of string = ( 'JANEIRO', 'FEVEREIRO', 'MARCO', 'ABRIL', 'MAIO', 'JUNHO', 'JULHO', 'AGOSTO', 'SETEMBRO', 'OUTUBRO', 'NOVEMBRO', 'DEZEMBRO' ); implementation {$R *.dfm} uses udtmSystem, ufrmAtendimento; function TrelRecibo.CmtoPix(cm: double): integer; var ppcm: double; begin ppcm := Screen.PixelsPerInch / 2.54; Result := Trunc(ppcm * cm); end; procedure TrelRecibo.frdblbl_cpf2vBeforePrint(Sender: TObject; var AText: string; var PrintIt: Boolean); begin inherited; frdblbl_cpf2v.Left := frdblbl_nome2v.Left + frdblbl_nome2v.Width + 10; end; procedure TrelRecibo.frdblbl_cpfBeforePrint(Sender: TObject; var AText: string; var PrintIt: Boolean); begin inherited; frdblbl_cpf.Left := frdblbl_nome.Left + frdblbl_nome.Width + 10; end; procedure TrelRecibo.frReciboAfterPrint(Sender: TObject); begin frmAtendimento.btn_concluir.Enabled := true; SalvarReciboPDF; end; procedure TrelRecibo.frReciboBeforePrint(Sender: TObject; var PrintIt: Boolean); begin dtsReport.dataset.open; dtsDevedor.dataset.open; dtsTitulos.dataset.open; if not dtmSystem.tblUsuariosConsulta.Active then begin dtmSystem.tblUsuariosConsulta.open; end; dtmSystem.tblUsuariosConsulta.Locate('ID_USUARIO', dtmSystem.id_usuario, []); end; procedure TrelRecibo.frsubdbnd1BeforePrint(Sender: TObject; var PrintIt: Boolean); var tam: double; papel: integer; begin inherited; tam := frsubdbnd1.Height + frsubdbnd2.Height + frsubdbndmeio.Height; papel := CmtoPix(29); if tam < papel then begin if (frsubdbnd1.Height + frsubdbndmeio.Height + frsubdbndmeio.Height) <= ceil(papel / 2) then begin frb_footer.Height := floor(papel / 2) - frb_detail.Height - frb_header.Height - frb_header2.Height - 100; frb_footer2v.Height := frb_footer.Height; duaspags := false; end else begin duaspags := true; end; end else begin duaspags := true; end; end; procedure TrelRecibo.frsubdbnd2BeforePrint(Sender: TObject; var PrintIt: Boolean); begin if duaspags then begin frsubdbnd2.PageBreaking := pbBeforePrint; end else begin frsubdbnd2.PageBreaking := RLReport.pbNone; end; dtsReport.dataset.RecNo := dtsReport.dataset.RecordCount; dtmSystem.tblConteudoRecibo.RecNo := 1; end; procedure TrelRecibo.RLDBText19BeforePrint(Sender: TObject; var AText: string; var PrintIt: Boolean); begin inherited; // dtsReport.DataSet.First; end; procedure TrelRecibo.SalvarReciboPDF; var path, file_name: string; Fmt: TFormatSettings; i: integer; begin // Fmt := TFormatSettings.Create; // for i := 0 to High(meses) do // begin // Fmt.LongMonthNames[i] := meses[i]; // end; // path := dtmSystem.path_executavel + '\RECIBOS'; // if not DirectoryExists(path) then // begin // CreateDir(path); // end; // path := TrimRight(path); // path := path + '\' + FormatDateTime('YYYY', Date); // if not DirectoryExists(path) then // begin // CreateDir(path); // end; // // path := path + '\' + FormatDateTime('mmmm', Date, Fmt); // path := path + '\' + meses[MonthOf(Date)]; // if not DirectoryExists(path) then // begin // CreateDir(path); // end; // path := path + '\' + FormatDateTime('dd', Date); // if not DirectoryExists(path) then // begin // CreateDir(path); // end; // file_name := path + '\' + dtmSystem.tblReciboNR_RECIBO.AsString + '.pdf'; // file_name := path + '\' + nr_recibo_print + '.pdf'; frmAtendimento.log_recibo.Add('Nš do recibo dentro do recibo: ' + nr_recibo_print); // file_name := 'E:\Programa_Cobranca\Win32\Debug\RECIBOS\2021\MAIO\21\teste3.pdf'; Try // frRecibo.SaveToFile(ExtractFilePath(Application.ExeName) + // dtmSystem.tblReciboNR_RECIBO.AsString + '.pdf'); frRecibo.SaveToFile(ExtractFilePath(Application.ExeName) + nr_recibo_print + '.pdf'); frmAtendimento.log_recibo.Add('Caminho salvo no local: ' + ExtractFilePath(Application.ExeName) + nr_recibo_print + '.pdf'); path := dtmSystem.path_executavel + '\RECIBOS'; if not DirectoryExists(path) then begin CreateDir(path); end; path := TrimRight(path); path := path + '\' + FormatDateTime('YYYY', Date); if not DirectoryExists(path) then begin CreateDir(path); end; // path := path + '\' + FormatDateTime('mmmm', Date, Fmt); path := path + '\' + meses[MonthOf(Date)]; if not DirectoryExists(path) then begin CreateDir(path); end; path := path + '\' + FormatDateTime('dd', Date); if not DirectoryExists(path) then begin CreateDir(path); end; // file_name := path + '\' + dtmSystem.tblReciboNR_RECIBO.AsString + '.pdf'; file_name := path + '\' + nr_recibo_print + '.pdf'; frmAtendimento.log_recibo.Add('Caminho do recibo no servidor: ' + file_name); // MoveFile(PChar(ExtractFilePath(Application.ExeName) + // dtmSystem.tblReciboNR_RECIBO.AsString + '.pdf'), PChar(file_name)); MoveFile(PChar(ExtractFilePath(Application.ExeName) + nr_recibo_print + '.pdf'), PChar(file_name)); // dtmSystem.tblRecibo.Edit; // dtmSystem.tblReciboTX_CAMINHO.AsString := file_name; // dtmSystem.tblRecibo.Post; Except on E: Exception do begin ShowMessage ('Erro ao tentar salvar o arquivo pdf. Por favor salve manualmente.' + sLineBreak + 'Erro: ' + E.Message); end; end; file_name := ExtractFilePath(Application.ExeName) + nr_recibo_print + '.pdf'; fr_filterpdf.FileName := file_name; frRecibo.DefaultFilter := fr_filterpdf; end; end.