unit uRptComisiones_Server; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, frxClass, frxDBSet, uDAScriptingProvider, uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient, frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes, uDAInterfaces, uDADataStreamer, uDABin2DataStreamer, uDAMemDataTable; type TRptComisiones = class(TDataModule) DADataCabecera: TDADataSource; tbl_Comisiones: TDAMemDataTable; frxRichObject1: TfrxRichObject; frxBarCodeObject1: TfrxBarCodeObject; frxOLEObject1: TfrxOLEObject; frxCrossObject1: TfrxCrossObject; frxCheckBoxObject1: TfrxCheckBoxObject; frxGradientObject1: TfrxGradientObject; frxChartObject1: TfrxChartObject; frxDBCabecera: TfrxDBDataset; frxReport: TfrxReport; Bin2DataStreamer: TDABin2DataStreamer; frxDBDetalles2: TfrxDBDataset; DADataDetalles2: TDADataSource; tbl_Vendedores: TDAMemDataTable; tbl_FacturasComision: TDAMemDataTable; DADataDetalles: TDADataSource; frxDBDetalles: TfrxDBDataset; tbl_FacturasComisionDesglosado: TDAMemDataTable; DADataDetalles3: TDADataSource; frxDBDetalles3: TfrxDBDataset; schReport: TDASchema; DataDictionary: TDADataDictionary; procedure DataModuleCreate(Sender: TObject); private FConnection: IDAConnection; //Genera cada uno de los albaranes a imprimir procedure GenerarComision(const ID: integer; const AllDetails: Boolean); overload; public function GenerarComision(const AComisionID : String; const AllDetails: Boolean): Binary; overload; end; implementation {$R *.dfm} uses uSistemaFunc, uDataModuleServer; const rptComision = 'InfComision.fr3'; { TRptComision } procedure TRptComisiones.DataModuleCreate(Sender: TObject); begin schReport.ConnectionManager := dmServer.ConnectionManager; FConnection := dmServer.DarNuevaConexion; frxReport.EngineOptions.NewSilentMode := simReThrow; end; procedure TRptComisiones.GenerarComision(const ID: integer; const AllDetails: Boolean); var AInforme: Variant; begin FConnection.BeginTransaction; try tbl_Comisiones.Active := False; tbl_FacturasComision.Active := False; tbl_FacturasComisionDesglosado.Active := False; tbl_Comisiones.ParamByName('ID').AsInteger := ID; tbl_FacturasComision.ParamByName('ID').AsInteger := ID; tbl_Comisiones.Active := True; tbl_FacturasComision.Active := True; // tbl_FacturasComisionDesglosado.Active := True; AInforme := DarRutaFichero(DarRutaInformes, rptComision, tbl_Comisiones.FieldByName('ID_EMPRESA').AsString); if VarIsNull(AInforme) then raise Exception.Create (('Error Servidor: GenerarComision, no encuentra informe' + rptComision)); frxReport.LoadFromFile(AInforme, True); frxReport.Variables.Variables['AllDetails'] := AllDetails; frxReport.ReportOptions.Name := 'Comisiones'; frxReport.PrepareReport(False); finally FConnection.RollbackTransaction; end; end; function TRptComisiones.GenerarComision(const AComisionID: String; const AllDetails: Boolean): Binary; var ID_Comisiones: TStringList; i: Integer; begin Result := Binary.Create; ID_Comisiones := TStringList.Create; ID_Comisiones.CommaText := AComisionID; //Vamos generando todos y cada uno de las comisiones pedidas for i := 0 to ID_Comisiones.Count - 1 do GenerarComision(StrToInt(ID_Comisiones.Strings[i]), AllDetails); frxReport.PreviewPages.SaveToStream(Result); end; end.