unit uRptPresupuestosCliente_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 TRptPresupuestosCliente = class(TDataModule) DADataCabecera: TDADataSource; DADataDetalles: TDADataSource; tbl_Cabecera: TDACDSDataTable; tbl_Detalles: TDACDSDataTable; DABINAdapter: TDABINAdapter; frxRichObject1: TfrxRichObject; frxBarCodeObject1: TfrxBarCodeObject; frxOLEObject1: TfrxOLEObject; frxCrossObject1: TfrxCrossObject; frxCheckBoxObject1: TfrxCheckBoxObject; frxGradientObject1: TfrxGradientObject; frxChartObject1: TfrxChartObject; frxDBCabecera: TfrxDBDataset; frxDBDetalles: TfrxDBDataset; frxDBResumenCap: TfrxDBDataset; DADataResumenCap: TDADataSource; tbl_Resumen_Cap: TDACDSDataTable; frxDBResumenDto: TfrxDBDataset; DADataResumenDto: TDADataSource; tbl_Resumen_Dto: TDACDSDataTable; frxReport: TfrxReport; schReport: TDASchema; DataDictionary: TDADataDictionary; frxDBCondicionesContrato: TfrxDBDataset; DADataCondicionesContrato: TDADataSource; tbl_Condiciones_Contrato: TDACDSDataTable; procedure DataModuleCreate(Sender: TObject); private FConnection: IDAConnection; public function GenerarPresupuesto(const AID : Integer): Binary; end; implementation {$R *.dfm} uses uDataModuleServer, schPresupuestosClient_Intf, uBizPresupuestosServer; const rptInformePresupuesto = 'InfPresupuestoCliente.fr3'; { Dataset names for schReport } ds_InformeCabecera = 'Informe_Cabecera'; ds_InformeDetalles = 'Informe_Detalles'; ds_InformeResumenCap = 'Informe_Resumen_Capitulos'; ds_InformeResumenDto = 'Informe_Resumen_Descuentos'; rptInformeContrato = 'InfContratoCliente.fr3'; ds_InformeCondicionesContrato = 'Informe_Condiciones_Contrato'; CTE_CONDICIONES_CONTRATO = 'CONDICIONES_CONTRATO'; { TRptPresupuestosCliente } procedure TRptPresupuestosCliente.DataModuleCreate(Sender: TObject); begin schReport.ConnectionManager := dmServer.ConnectionManager; FConnection := dmServer.DarNuevaConexion; end; function TRptPresupuestosCliente.GenerarPresupuesto(const AID: Integer): Binary; var dsMaster: IDADataset; dsDetail: IDADataset; dsResumenCap: IDADataset; dsResumenDto: IDADataset; dsCondicionesContrato: IDADataset; AStream: TMemoryStream; begin AStream := TMemoryStream.Create; Result := Binary.Create; FConnection.BeginTransaction; try dsMaster := schReport.NewDataset(FConnection, ds_InformeCabecera, ['ID'], [AID]); dsDetail := schReport.NewDataset(FConnection, ds_InformeDetalles, ['ID_PRESUPUESTO'], [AID], False); dsResumenCap := schReport.NewDataset(FConnection, ds_InformeResumenCap, ['ID_PRESUPUESTO'], [AID], False); dsResumenDto := schReport.NewDataset(FConnection, ds_InformeResumenDto, ['ID_PRESUPUESTO'], [AID], False); AStream.Clear; DABINAdapter.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1); DABINAdapter.ReadDataset(AStream, tbl_Cabecera, TRUE, '', TRUE, TRUE); AStream.Clear; DABINAdapter.WriteDataset(AStream, dsDetail, [woRows, woSchema], -1); DABINAdapter.ReadDataset(AStream, tbl_Detalles, TRUE, '', TRUE, TRUE); AStream.Clear; DABINAdapter.WriteDataset(AStream, dsResumenCap, [woRows, woSchema], -1); DABINAdapter.ReadDataset(AStream, tbl_Resumen_Cap, TRUE, '', TRUE, TRUE); AStream.Clear; DABINAdapter.WriteDataset(AStream, dsResumenDto, [woRows, woSchema], -1); DABINAdapter.ReadDataset(AStream, tbl_Resumen_Dto, TRUE, '', TRUE, TRUE); if (tbl_Cabecera.FieldByName(fld_PresupuestosSITUACION).AsString = SITUACION_ACEPTADO) then begin dsCondicionesContrato := schReport.NewDataset(FConnection, ds_InformeCondicionesContrato, ['CODIGO'], [CTE_CONDICIONES_CONTRATO], False); AStream.Clear; DABINAdapter.WriteDataset(AStream, dsCondicionesContrato, [woRows, woSchema], -1); DABINAdapter.ReadDataset(AStream, tbl_Condiciones_Contrato, TRUE, '', TRUE, TRUE); frxReport.LoadFromFile(DarRutaInformes + rptInformeContrato, True) end else frxReport.LoadFromFile(DarRutaInformes + rptInformePresupuesto, True); frxReport.PrepareReport; frxReport.PreviewPages.SaveToStream(Result); finally AStream.Free; FConnection.RollbackTransaction; end; end; end.