From 84eb7667511d79bec6d98dbf9ece3ad5213ac33f Mon Sep 17 00:00:00 2001 From: david Date: Fri, 23 Jan 2009 19:19:31 +0000 Subject: [PATCH] =?UTF-8?q?Lista=20de=20facturas=20de=20proveedor=20pendie?= =?UTF-8?q?ntes=20->=20Arreglos=20est=C3=A9ticos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@882 0c75b7a4-871f-7646-8a2f-f78d34cc349f --- ...ormeListadoFacturasProveedorPendientes.fr3 | 17 +- ...oFacturasProveedorPendientesDesglosado.fr3 | 11 +- .../Reports/uRptFacturasProveedor_Server.dfm | 81 ++++---- .../Reports/uRptFacturasProveedor_Server.pas | 190 ++++++++++++++++-- 4 files changed, 235 insertions(+), 64 deletions(-) diff --git a/Source/Informes/1/InformeListadoFacturasProveedorPendientes.fr3 b/Source/Informes/1/InformeListadoFacturasProveedorPendientes.fr3 index ebb666dd..8b48839a 100644 --- a/Source/Informes/1/InformeListadoFacturasProveedorPendientes.fr3 +++ b/Source/Informes/1/InformeListadoFacturasProveedorPendientes.fr3 @@ -1,17 +1,14 @@ - + - + - - - + + - - @@ -26,7 +23,7 @@ - + @@ -38,10 +35,10 @@ - + - + diff --git a/Source/Informes/1/InformeListadoFacturasProveedorPendientesDesglosado.fr3 b/Source/Informes/1/InformeListadoFacturasProveedorPendientesDesglosado.fr3 index 857fe673..66dbfd4d 100644 --- a/Source/Informes/1/InformeListadoFacturasProveedorPendientesDesglosado.fr3 +++ b/Source/Informes/1/InformeListadoFacturasProveedorPendientesDesglosado.fr3 @@ -1,17 +1,14 @@ - + - + - - - - - + + diff --git a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm index c4dab5f5..33443977 100644 --- a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm +++ b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm @@ -1,6 +1,7 @@ object RptFacturasProveedor: TRptFacturasProveedor OldCreateOrder = True OnCreate = DataModuleCreate + OnDestroy = DataModuleDestroy Height = 513 Width = 933 object schReport: TDASchema @@ -933,7 +934,7 @@ object RptFacturasProveedor: TRptFacturasProveedor RelationShips = <> UpdateRules = <> Version = 0 - Left = 48 + Left = 64 Top = 16 end object DataDictionary: TDADataDictionary @@ -1127,7 +1128,7 @@ object RptFacturasProveedor: TRptFacturasProveedor DataType = datInteger DisplayLabel = 'Cantidad' end> - Left = 46 + Left = 62 Top = 142 end object frxDBCabecera: TfrxDBDataset @@ -1710,52 +1711,58 @@ object RptFacturasProveedor: TRptFacturasProveedor PrintOptions.Printer = 'Por defecto' PrintOptions.PrintOnSheet = 0 ReportOptions.CreateDate = 37800.807714351900000000 - ReportOptions.LastChange = 39835.653141990740000000 + ReportOptions.LastChange = 39836.719287280100000000 ScriptLanguage = 'PascalScript' ScriptText.Strings = ( - 'procedure frxReportOnStartReport(Sender: TfrxComponent);' - 'begin' - ' Set('#39'Pagina'#39', 0);' - ' Set('#39'TotalPaginas'#39', 0); ' - 'end;' - '' - 'procedure Band1OnBeforePrint(Sender: TfrxComponent);' - 'begin' - ' if not Engine.FinalPass then' - ' Set('#39'TotalPaginas'#39', ( + 1));' - '' - ' if Engine.FinalPass then' - ' Set('#39'Pagina'#39', ( + 1)); ' - 'end;' - '' 'procedure mContinuaOnBeforePrint(Sender: TfrxComponent);' 'begin' ' if Engine.FinalPass then' ' begin' - - ' //A la vez que salta este salta la asignacion de pagina por ' + - 'lo que no coincide nunca si no suponemos +1 ' + - ' ' + - ' ' + - ' ' + - ' ' - ' if (( + 1) = ) then' + ' if ( = ) then' ' begin ' - ' mContinua.Visible := True;' + ' mContinua.Visible := False;' ' end ' ' else' ' begin ' - ' mContinua.Visible := False;' + ' mContinua.Visible := True;' ' end ' ' end; ' 'end;' '' - 'procedure CabParametrosOnBeforePrint(Sender: TfrxComponent);' - 'begin' - ' if = null then' + 'procedure Memo11OnBeforePrint(Sender: TfrxComponent);' + 'var' - ' CabParametros.Visible := False; ' + - ' ' + ' ACadena : String; ' + + ' ' + 'begin' + + ' ACadena := ; ' + ' if Pos('#39'N'#186' de cuenta: '#39', ACadena) > 0 then' + ' begin' + ' Delete(ACadena, 1, 14);' + + ' Memo11.Lines.Text := '#39' '#39' + ACadena; ' + + ' ' + ' end;' + 'end;' + '' + 'procedure Memo10OnBeforePrint(Sender: TfrxComponent);' + 'var' + + ' ACadena : String; ' + + ' ' + 'begin' + + ' ACadena := ; ' + ' if Pos('#39'N'#186' de cuenta: '#39', ACadena) > 0 then' + ' begin' + ' Delete(ACadena, 1, 14);' + + ' Memo10.Lines.Text := '#39' '#39' + ACadena; ' + + ' ' + ' end;' 'end;' '' 'begin' @@ -1764,7 +1771,7 @@ object RptFacturasProveedor: TRptFacturasProveedor ShowProgress = False StoreInDFM = False OnStartReport = 'frxReportOnStartReport' - Left = 145 + Left = 153 Top = 16 end object vencimientos: TIBQuery @@ -2053,7 +2060,11 @@ object RptFacturasProveedor: TRptFacturasProveedor Top = 328 end object Bin2DataStreamer: TDABin2DataStreamer - Left = 48 + Left = 64 Top = 88 end + object DARemoteDataAdapter: TDARemoteDataAdapter + Left = 64 + Top = 200 + end end diff --git a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas index 5248e7c4..3afb5a7a 100644 --- a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas +++ b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas @@ -8,7 +8,8 @@ uses uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient, frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes, uDAInterfaces, uDADataStreamer, IBCustomDataSet, IBQuery, IBDatabase, - uDAMemDataTable, FactuGES_Intf, frxExportPDF, uDABin2DataStreamer; + uDAMemDataTable, FactuGES_Intf, frxExportPDF, uDABin2DataStreamer, + uDARemoteDataAdapter; type TRptFacturasProveedor = class(TDataModule) @@ -90,7 +91,9 @@ type tbl_InformeListadoFacturasPendResumen: TDAMemDataTable; Bin2DataStreamer: TDABin2DataStreamer; schReport: TDASchema; + DARemoteDataAdapter: TDARemoteDataAdapter; procedure DataModuleCreate(Sender: TObject); + procedure DataModuleDestroy(Sender: TObject); private FConnection: IDAConnection; FIdEmpresa: Integer; @@ -99,12 +102,14 @@ type FFechaVenInicio: Variant; FFechaVenFin: Variant; FListaIDProveedores: TIntegerArray; + FListaNombresProveedores: TStringList; FImporteMinimo: Currency; - + FDesglosado : Boolean; + procedure RecuperarNombresProveedores; procedure PrepararTablaInforme(ATabla: TDAMemDataTable); procedure PrepararTablaResumenInforme(ATabla: IDADataset); + procedure IniciarParametrosInforme; function _GenerarInforme(const TipoInforme: String): Binary; - public function GenerarInformeIVA(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; function GenerarInformeListadoFacturas(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const FechaVenInicio: Variant; const FechaVenFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; @@ -116,7 +121,8 @@ implementation {$R *.dfm} uses - uSistemaFunc, StrUtils, uDataModuleServer, schFacturasProveedorClient_Intf; + uSistemaFunc, StrUtils, uDataModuleServer, schFacturasProveedorClient_Intf, + uROServer, DataAbstract4_Intf; const rptInformeIVA = 'InformeIVAProveedores.fr3'; @@ -141,6 +147,13 @@ begin frxDBCabecera.DataSource := DADSCabecera; frxDBDetalles.DataSource := DADSDetalles; + + FListaNombresProveedores := TStringList.Create; +end; + +procedure TRptFacturasProveedor.DataModuleDestroy(Sender: TObject); +begin + FreeANDNIL(FListaNombresProveedores); end; function TRptFacturasProveedor.GenerarInformeIVA(const IdEmpresa: Integer; @@ -164,21 +177,26 @@ begin FFechaVenInicio := Null; FFechaVenFin := Null; FImporteMinimo := ImporteMinimo; + FDesglosado := Desglosado; if Assigned(FListaIDProveedores) then FListaIDProveedores.Free; + FListaIDProveedores := ListaIDProveedores; //Se van a prepara las tablas del informe if tbl_InformeListadoFacturas.Active then tbl_InformeListadoFacturas.Active := False; + PrepararTablaInforme(tbl_InformeListadoFacturas); //Se prepara la tabla del listado resumen del informe if tbl_InformeListadoFacturasResumen.Active then tbl_InformeListadoFacturasResumen.Active := False; + dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasResumen, [], [], False); PrepararTablaResumenInforme(dsMaster); + //Esto se hace para rellenar la tabla del datamodule que usa el informe. dsMaster.Open; AStream.Clear; @@ -186,7 +204,7 @@ begin Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE); //DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR - if Desglosado then + if FDesglosado then ATipoInforme := rptInformeIVADesglosado else ATipoInforme := rptInformeIVA; @@ -226,6 +244,7 @@ begin FFechaVenInicio := FechaVenInicio; FFechaVenFin := FechaVenFin; FImporteMinimo := ImporteMinimo; + FDesglosado := Desglosado; if Assigned(FListaIDProveedores) then FListaIDProveedores.Free; @@ -234,13 +253,16 @@ begin //Se prepara la tabla del listado general del informe if tbl_InformeListadoFacturas.Active then tbl_InformeListadoFacturas.Active := False; + PrepararTablaInforme(tbl_InformeListadoFacturas); //Se prepara la tabla del listado resumen del informe if tbl_InformeListadoFacturasResumen.Active then tbl_InformeListadoFacturasResumen.Active := False; dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasResumen, [], [], False); + PrepararTablaResumenInforme(dsMaster); + //Esto se hace para rellenar la tabla del datamodule que usa el informe. dsMaster.Open; AStream.Clear; @@ -248,7 +270,7 @@ begin Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE); //DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR - if Desglosado then + if FDesglosado then ATipoInforme := rptInformeListadoFacturasProveedorDesglosado else ATipoInforme := rptInformeListadoFacturasProveedor; @@ -289,6 +311,7 @@ begin FFechaVenInicio := FechaVenInicio; FFechaVenFin := FechaVenFin; FImporteMinimo := ImporteMinimo; + FDesglosado := Desglosado; if Assigned(FListaIDProveedores) then FListaIDProveedores.Free; @@ -298,6 +321,7 @@ begin //Se prepara la tabla del listado general del informe if tbl_InformeListadoFacturasPendientes.Active then tbl_InformeListadoFacturasPendientes.Active := False; + PrepararTablaInforme(tbl_InformeListadoFacturasPendientes); // Filtrar el informe por situacion @@ -317,8 +341,10 @@ begin dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasPendientesResumen, [], [], False); PrepararTablaResumenInforme(dsMaster); + // Filtrar el informe por situacion dsMaster.Where.AddText(' AND (SITUACION <> ''PAGADA'')'); + //Esto se hace para rellenar la tabla del datamodule que usa el informe. dsMaster.Open; AStream.Clear; @@ -326,7 +352,7 @@ begin Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasPendResumen, TRUE, '', TRUE, TRUE); //DESGLOSADO POR PROVEEDOR EN ESTE INFORME - if Desglosado then + if FDesglosado then ATipoInforme := rptInformeListadoFactuasProveedorPendienteDesglosado else ATipoInforme := rptInformeListadoFactuasProveedorPendiente; @@ -344,6 +370,56 @@ begin end; end; +procedure TRptFacturasProveedor.IniciarParametrosInforme; +var + ATextos : TStringList; + ACadena : String; +begin + ATextos := TStringList.Create; + + try + if (not VarIsNull(FFechaInicio)) and (not VarIsNull(FFechaFin)) then + ACadena := Format('Fechas de factura desde el %s hasta el %s', [VarToStr(FFechaInicio), VarToStr(FFechaFin)]) + else + ACadena := 'Sin rango de fechas'; + ATextos.Add(ACadena); + ACadena := ''; + + // Filtrar el informe por fechas de vencimiento + if (not VarIsNull(FFechaVenInicio)) and (not VarIsNull(FFechaVenFin)) then + begin + ACadena := Format('Vencimientos desde el %s hasta el %s', [VarToStr(FFechaVenInicio), VarToStr(FFechaVenFin)]); + ATextos.Add(ACadena); + ACadena := ''; + end; + + if (FImporteMinimo > 0) then + begin + ACadena := Format('Facturas con importe superior a %m', [FImporteMinimo]); + ATextos.Add(ACadena); + ACadena := ''; + end; + + if Assigned(FListaIDProveedores) and (FListaIDProveedores.Count > 0) then + begin + RecuperarNombresProveedores; + ACadena := FListaNombresProveedores.Text; + end + else begin + ACadena := 'Todos los proveedores'; + if FDesglosado then + ACadena := ACadena + ' (desglosados)' + end; + + ATextos.Add(ACadena); + ACadena := ''; + + frxReport.Variables.Variables['TextoParametros'] := ATextos.Text; + finally + FreeAndNil(ATextos); + end; +end; + procedure TRptFacturasProveedor.PrepararTablaInforme(ATabla: TDAMemDataTable); var Condicion: TDAWhereExpression; @@ -362,8 +438,8 @@ begin end; // Filtrar el informe por fechas - if not VarIsNull(FFechaInicio) - and not VarIsNull(FFechaFin) then + if not VarIsNull(FFechaInicio) and + not VarIsNull(FFechaFin) then begin with ATabla.DynamicWhere do begin @@ -475,19 +551,109 @@ begin ATabla.Where.AddText(AWhereStr); end; +procedure TRptFacturasProveedor.RecuperarNombresProveedores; +var + AContactosService : IsrvContactos; + Intf : IInterface; + AClientID : TGUID; + + ATableNameArray: StringArray; + ATableRequestInfoArray: TableRequestInfoArray; + ATableRequestInfo: TableRequestInfoV5; + AStream: TMemoryStream; + ADataTable: TDAMemDataTable; + i: Integer; + AWhereBuilder : TDAWhereBuilder; + ACondicion : TDAWhereExpression; +begin + CreateGUID(AClientID); + + GetClassFactory('srvContactos').CreateInstance(AClientID, Intf); + + if Assigned(Intf) then + begin + AContactosService := Intf as IsrvContactos; + + ATableNameArray := StringArray.Create; + ATableRequestInfoArray := TableRequestInfoArray.Create; + AWhereBuilder := TDAWhereBuilder.Create; + try + ATableNameArray.Add('Proveedores'); + ATableRequestInfo := TableRequestInfoV5.Create; + + with ATableRequestInfo do + begin + IncludeSchema := True; + MaxRecords := -1; + UserFilter := ''; + + AWhereBuilder.Clear; + with AWhereBuilder do + for i := 0 to FListaIDProveedores.Count - 1 do + begin + ACondicion := NewBinaryExpression( + NewBinaryExpression(NewField('', 'ID'), NewConstant(FListaIDProveedores[i], datInteger), dboEqual), + NewBinaryExpression(NewField('', 'ID_EMPRESA'), NewConstant(FIdEmpresa, datInteger), dboEqual), + dboAnd); + + if not AWhereBuilder.IsEmpty then + Expression := NewBinaryExpression(Expression, ACondicion, dboOr) + else + Expression := ACondicion; + end; + + WhereClause := AWhereBuilder.ExpressionToXmlNode(AWhereBuilder.Expression); + end; + + try + ATableRequestInfoArray.Add(ATableRequestInfo); + AStream := AContactosService.GetData(ATableNameArray, ATableRequestInfoArray); + if Assigned(AStream) then + begin + ADataTable := TDAMemDataTable.Create(nil); + try + ADataTable.Name := 'Proveedores'; + ADataTable.LocalDataStreamer := Bin2DataStreamer; + ADataTable.RemoteFetchEnabled := False; + Bin2DataStreamer.ReadDataset(AStream, ADataTable, True); + + ADataTable.Open; + FListaNombresProveedores.Clear; + for i := 0 to ADataTable.RecordCount - 1 do + begin + FListaNombresProveedores.Add(ADataTable.FieldByName('NOMBRE').AsString); + ADataTable.Next; + end; + + finally + FreeANDNil(ADataTable); + end; + end; + except + on e: Exception do + dmServer.EscribirLog(e.Message); + end; + finally + FreeANDNIL(ATableRequestInfoArray); + FreeANDNIL(ATableNameArray); + FreeANDNIL(AWhereBuilder); + end; + end; +end; + + function TRptFacturasProveedor._GenerarInforme(const TipoInforme: String): Binary; var AInforme: Variant; - begin Result := Binary.Create; + AInforme := DarRutaFichero(DarRutaInformes, TipoInforme, IntTostr(FIdEmpresa)); if VarIsNull(AInforme) then raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme)); frxReport.LoadFromFile(AInforme, True); - frxReport.Variables.Variables['FechaInicio'] := FFechaInicio; - frxReport.Variables.Variables['FechaFin'] := FFechaFin; + IniciarParametrosInforme; frxReport.PrepareReport(False); frxReport.PreviewPages.SaveToStream(Result);