unit uRptFichasEmpleado_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; type TRptFichasEmpleado = class(TDataModule) DADataCabecera: TDADataSource; tbl_FichaEmpleado: TDACDSDataTable; DABINAdapter: TDABINAdapter; frxRichObject1: TfrxRichObject; frxBarCodeObject1: TfrxBarCodeObject; frxOLEObject1: TfrxOLEObject; frxCrossObject1: TfrxCrossObject; frxCheckBoxObject1: TfrxCheckBoxObject; frxGradientObject1: TfrxGradientObject; frxChartObject1: TfrxChartObject; frxDBCabecera: TfrxDBDataset; schReport: TDASchema; DataDictionary: TDADataDictionary; frxReport: TfrxReport; procedure DataModuleCreate(Sender: TObject); private FConnection: IDAConnection; //Genera cada uno de los albaranes a imprimir procedure GenerarFicha(const ID: integer); overload; public function GenerarFicha(const AFichaID : String): Binary; overload; end; implementation {$R *.dfm} uses uDataModuleServer, schContactosClient_Intf; const rptFichaEmpleado = 'InfFichaEmpleado.fr3'; { Dataset names for schReport } ds_InformeFichaEmpleado = 'InformeFichasEmpleado'; { TRptFichaEmpleado } procedure TRptFichasEmpleado.DataModuleCreate(Sender: TObject); begin schReport.ConnectionManager := dmServer.ConnectionManager; FConnection := dmServer.DarNuevaConexion; frxReport.EngineOptions.NewSilentMode := simReThrow; end; function TRptFichasEmpleado.GenerarFicha(const AFichaID: String): Binary; var ID_Fichas: TStringList; i: Integer; begin Result := Binary.Create; FConnection.BeginTransaction; try ID_Fichas := TStringList.Create; ID_Fichas.CommaText := AFichaID; //Vamos generando todos y cada uno de las fichas de empleado for i := 0 to ID_Fichas.Count - 1 do GenerarFicha(StrToInt(ID_Fichas.Strings[i])); frxReport.PreviewPages.SaveToStream(Result); finally FConnection.RollbackTransaction; end; end; procedure TRptFichasEmpleado.GenerarFicha(const ID: integer); var AStream: TMemoryStream; dsMaster: IDADataset; begin AStream := TMemoryStream.Create; try dsMaster := schReport.NewDataset(FConnection, ds_InformeFichaEmpleado, ['ID'], [ID]); AStream.Clear; DABINAdapter.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1); DABINAdapter.ReadDataset(AStream, tbl_FichaEmpleado, TRUE, '', TRUE, TRUE); frxReport.LoadFromFile(DarRutaInformes + rptFichaEmpleado, True); frxReport.PrepareReport(False); finally AStream.Free; dsMaster := Nil; end; end; end.