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; type TRptComisiones = class(TDataModule) DADataCabecera: TDADataSource; tbl_Comisiones: TDACDSDataTable; frxRichObject1: TfrxRichObject; frxBarCodeObject1: TfrxBarCodeObject; frxOLEObject1: TfrxOLEObject; frxCrossObject1: TfrxCrossObject; frxCheckBoxObject1: TfrxCheckBoxObject; frxGradientObject1: TfrxGradientObject; frxChartObject1: TfrxChartObject; frxDBCabecera: TfrxDBDataset; frxReport: TfrxReport; Bin2DataStreamer: TDABin2DataStreamer; schReport: TDASchema; DataDictionary: TDADataDictionary; procedure DataModuleCreate(Sender: TObject); private FConnection: IDAConnection; public function GenerarComision(const AComisionID : Variant; const DesglosadoProv: Boolean; FechaIni: String; FechaFin: String; AAgenteID: Variant): Binary; end; implementation {$R *.dfm} uses uSistemaFunc, uDataModuleServer, schComisionesClient_Intf; const rptComision = 'InfComisiones.fr3'; rptComisionDesglosado = 'InfComisionesDesglosado.fr3'; { Dataset names for schReport } ds_InformeComisiones = 'InformeComisiones'; ds_InformeComisionesDesglosado = 'InformeComisionesDesglosado'; { TRptComision } procedure TRptComisiones.DataModuleCreate(Sender: TObject); begin schReport.ConnectionManager := dmServer.ConnectionManager; FConnection := dmServer.DarNuevaConexion; frxReport.EngineOptions.NewSilentMode := simReThrow; end; function TRptComisiones.GenerarComision(const AComisionID : Variant; const DesglosadoProv: Boolean; FechaIni: String; FechaFin: String; AAgenteID: Variant): Binary; var dsMaster: IDADataset; AStream: TMemoryStream; AInforme: Variant; Condicion: TDAWhereExpression; begin AStream := TMemoryStream.Create; Result := Binary.Create; FConnection.BeginTransaction; try if DesglosadoProv then dsMaster := schReport.NewDataset(FConnection, ds_InformeComisionesDesglosado,[], [], False) else dsMaster := schReport.NewDataset(FConnection, ds_InformeComisiones,[], [], False); // Filtrar las facturas actuales por empresa with dsMaster.DynamicWhere do begin if not VarIsNull(AComisionID) then begin Condicion := NewBinaryExpression(NewField('', fld_Facturas_ComisionID_COMISION_LIQUIDADA), NewConstant(VarToStr(AComisionID), datString), dboEqual); if IsEmpty then Expression := Condicion else Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; if not VarIsNull(AAgenteID) then begin Condicion := NewBinaryExpression(NewField('', fld_Facturas_ComisionID_AGENTE), NewConstant(VarToStr(AAgenteID), datString), dboEqual); if IsEmpty then Expression := Condicion else Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; if (Length(FechaIni) > 0) and (Length(FechaFin) > 0) then begin // (FECHA_INICIO between FECHA_FIN) Condicion := NewBinaryExpression(NewField('', fld_Facturas_ComisionFecha), NewConstant(FechaIni, datString), dboGreaterOrEqual); Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_Facturas_ComisionFecha), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd); if IsEmpty then Expression := Condicion else Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; end; dsMaster.Open; AStream.Clear; Bin2DataStreamer.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1); Bin2DataStreamer.ReadDataset(AStream, tbl_Comisiones, TRUE, '', TRUE, TRUE); if DesglosadoProv then begin AInforme := DarRutaFichero(DarRutaInformes, rptComisionDesglosado, tbl_Comisiones.FieldByName('ID_EMPRESA').AsString); if VarIsNull(AInforme) then raise Exception.Create (('Error Servidor: _GenerarComision, no encuentra informe ' + rptComisionDesglosado)); frxReport.LoadFromFile(AInforme, True); end else begin 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); end; frxReport.Variables['FechaIni'] := QuotedStr(FechaIni); frxReport.Variables['FechaFin'] := QuotedStr(FechaFin); frxReport.PrepareReport; frxReport.PreviewPages.SaveToStream(Result); finally AStream.Free; dsMaster := Nil; FConnection.RollbackTransaction; end; end; end.