From ef315ee196651e76537297e7b6878a621cec57ea Mon Sep 17 00:00:00 2001 From: roberto Date: Tue, 10 Mar 2009 18:20:34 +0000 Subject: [PATCH] =?UTF-8?q?Se=20a=C3=B1ade=20resumen=20en=20lo=20informes?= =?UTF-8?q?=20de=20facturaci=C3=B3n=20para=20que=20no=20tengan=20que=20and?= =?UTF-8?q?ar=20sumando=20cantidades=20mensuales=20y=20se=20agrupa=20por?= =?UTF-8?q?=20cliente=20o=20proveedor?= 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.Acana_FactuGES2/trunk@405 f4e31baf-9722-1c47-927c-6f952f962d4b --- Source/Base/Base.dproj | 97 ++- Source/Base/Base.res | Bin 384 -> 4748 bytes Source/Cliente/FactuGES.dproj | 2 +- Source/Cliente/FactuGES.res | Bin 171984 -> 172156 bytes Source/Informes/InformeIVAClientes.fr3 | 41 +- .../Informes/InformeIVAClientesDesglosado.fr3 | 49 +- Source/Informes/InformeIVAProveedores.fr3 | 41 +- .../InformeIVAProveedoresDesglosado.fr3 | 49 +- .../InformeListadoFacturasCliente.fr3 | 50 +- ...nformeListadoFacturasClienteDesglosado.fr3 | 57 +- .../InformeListadoFacturasProveedor.fr3 | 41 +- ...ormeListadoFacturasProveedorDesglosado.fr3 | 51 +- .../Reports/uRptFacturasCliente_Server.dfm | 120 +++- .../Reports/uRptFacturasCliente_Server.pas | 539 +++++++++++++---- .../Views/FacturasCliente_view.dproj | 58 +- .../Reports/uRptFacturasProveedor_Server.dfm | 90 ++- .../Reports/uRptFacturasProveedor_Server.pas | 549 +++++++++++++---- .../Controller/uGestorInformesController.pas | 6 + Source/Servidor/FactuGES_Server.RES | Bin 23344 -> 23552 bytes Source/Servidor/FactuGES_Server.dproj | 564 +++++++++--------- Source/Servidor/FactuGES_Server.rc | 2 +- 21 files changed, 1694 insertions(+), 712 deletions(-) diff --git a/Source/Base/Base.dproj b/Source/Base/Base.dproj index 3efdabfa..377a649c 100644 --- a/Source/Base/Base.dproj +++ b/Source/Base/Base.dproj @@ -44,13 +44,6 @@ Package FalseTrueFalseLibreria base de FactuGESFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0 - - - - - - - VCL for the Web Design Package for CodeGear RAD Studio CodeGear WebSnap Components CodeGear SOAP Components @@ -65,53 +58,53 @@ MainSource + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fConfigurarConexion
TForm diff --git a/Source/Base/Base.res b/Source/Base/Base.res index 8b251f312bcccec5485024f6fe8d80e1cdf25746..1641339fcc482e7e3492d1b45813a86619622c33 100644 GIT binary patch literal 4748 zcmbW5&ub)A5XUPdpe&2#;C*uNAUVhgd+&(4um@dnom`vXF9g}ZuHJ;se=<3UNdFJg zbCw+UD9j$byGIXV`~6hC>h4S?F|k9X-j90q{Z_qtZ<;nUJCO8!h?p${kR>3GhM`oH*q zk=UsjOCIgA_4!`B+Gb&`I84R)bT4dy-BQV<-SyFz?R8ILEQ(+JB$u{sEXE@j@B*7W zT;iZH#|OJ<&DO$RCkM6VbK3(B(k{nbdv1lpc;E$xz9as|v3uE1V{hw2w~g3eD0an7 z{BT%G%irdMe*|oDJmgvJaA2`9B<6Xi*?M~Q;)@Sbfwf3uf zVaWkbUjU=;sL{BlYemIZXv%qZ{SZw{-TCU+;!nH6KDDIJumU+9{E0zXW4>7T)y|>$DQlv zRJe?TjSp{c!DqeayAnSMTtZZT;>LN7J0Rls+5m@q)MbyB*eL%Eu@(+$Cw}Pd@q7N| z%Q0*AHpCP^b9v`@jx-l_FD>khpW2W8(OU2&V5TrnoAY-m_hlcV?zq3;7{2gF{J#Hc z6R+o~mVenX?>@W0@_DVzyOFs(5464CY{!q9ChoF#_*eXi@4gFuV8?vhl=_w5$iKL0 zEV0nMBcN08xtRmsgJrqjh@s#|{?*ssnsG)mH*wa6{efF0JFWHok@kA5%b661{B38= zCcgJ|*ZFTpV$8<-&+AWpa)Q8*`wL&hMeNQ^v6I7$HSdLZhZ^&+6<@Uw_Zsml9^v3W zVvPDBKHh;i=RU4J_ta3E;)Mn>Y+L zKLZ0UQ+*km9FO-b?U4gmn-62iwzH6&*duKGo~aUV)bYDla8wWZ9+^7p-F<8lP@i!m z@vhbD_${F}h>^T;C(?(b*OJDk?{dEXB?nuehoON3HAb!7Mr7-ls!84-5V-jJugbu<_$}mU=Yd9!?TOX;|B-#B)+0x#9q*yqJiqS!`49d=7ztk$O+9=1i;?K_|J<8T z?0b7=-`Z3A#vV$4XJ5(lQ~TOZHUFdA%oWvK5zg&_IKXIbughQBA8XAsd#=@|TFLXC zy(^m((;DnQmDQKatmw!@c`| G?EMQ&4NnpP delta 11 ScmeBCZD5|Duvteife`=|>;pCc diff --git a/Source/Cliente/FactuGES.dproj b/Source/Cliente/FactuGES.dproj index cefc62b7..5bec7c8c 100644 --- a/Source/Cliente/FactuGES.dproj +++ b/Source/Cliente/FactuGES.dproj @@ -53,7 +53,7 @@ Delphi.Personality VCLApplication -FalseTrueFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse2290FalseFalseFalseFalseFalse30821252Rodax Software S.L.2.2.9.0FactuGESFactuGES2.2.9.0 +FalseTrueFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse2300FalseFalseFalseFalseFalse30821252Rodax Software S.L.2.3.0.0FactuGESFactuGES2.3.0.0 diff --git a/Source/Cliente/FactuGES.res b/Source/Cliente/FactuGES.res index 998bfc49aadfdb66316fb212f3a8ea577e2474f2..b1b8e68d89a3e6ca00d46a115b0cbca5aae88a9c 100644 GIT binary patch delta 502 zcmY+9y-EW?6otQ?{FtmkwoJJY`~|~;rHDaA0tz;1B?&4?&}fJ@R;EzM0|?tBn>G(% zD_UAwTHE;!fp}+UV(`Gsox?fj-aDUf?&RI=JvuKcIehRuH^(0wa(Es%WN4;zHO!}( z1Vuh?w2w3-Ec5ASA&KuBZJdFWWj?Swgd~7iMC8t29-)$^jX`3EakFc{R+6$ zYKD!UVUb?XIx~7v7$_tM)2S!NkrxEaKQvI`_fQo#6SBI-tnS84FRlCi$0Xc|RKfWQ z>yfIiZ;0-2NQ)~jIFNJ88C~HW?&QAV+Qh@xNUf%}C=!G}k=lM(iIc~YXi%5*zIZ#_ z$Jqu=NgJ36b6-UqbjRX6w$g?KEpkE=E`wsZ+bp(?}it0?^1s AQ2+n{ delta 332 zcmY+9v1-Cl6o$WhOl(X=vIrRiR_I_Qx=ATYC!vc&$AWhAEt2N3RLbo2q-b#(L@ zoICgc1-&t8faKcH%i%AozZo9m-J3 zXsi diff --git a/Source/Informes/InformeIVAClientes.fr3 b/Source/Informes/InformeIVAClientes.fr3 index a76bb7a6..01b01df9 100644 --- a/Source/Informes/InformeIVAClientes.fr3 +++ b/Source/Informes/InformeIVAClientes.fr3 @@ -1,22 +1,20 @@ - + - - - - - - + + + + - + - + @@ -26,7 +24,7 @@ - + @@ -35,12 +33,33 @@ - + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/InformeIVAClientesDesglosado.fr3 b/Source/Informes/InformeIVAClientesDesglosado.fr3 index a98eb2f0..b1c25be6 100644 --- a/Source/Informes/InformeIVAClientesDesglosado.fr3 +++ b/Source/Informes/InformeIVAClientesDesglosado.fr3 @@ -1,22 +1,21 @@ - + - - - - - - - + + + + + - + + - + @@ -26,7 +25,7 @@ - + @@ -35,16 +34,36 @@ - + - - + - + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/InformeIVAProveedores.fr3 b/Source/Informes/InformeIVAProveedores.fr3 index fd59f2ed..634ccfa9 100644 --- a/Source/Informes/InformeIVAProveedores.fr3 +++ b/Source/Informes/InformeIVAProveedores.fr3 @@ -1,22 +1,20 @@ - + - - - - - - + + + + - + - + @@ -26,7 +24,7 @@ - + @@ -35,12 +33,33 @@ - + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/InformeIVAProveedoresDesglosado.fr3 b/Source/Informes/InformeIVAProveedoresDesglosado.fr3 index 8104a234..2e078546 100644 --- a/Source/Informes/InformeIVAProveedoresDesglosado.fr3 +++ b/Source/Informes/InformeIVAProveedoresDesglosado.fr3 @@ -1,22 +1,20 @@ - + - - - - - - - + + + + + - + - + @@ -26,7 +24,7 @@ - + @@ -35,16 +33,37 @@ - + - - + + - + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/InformeListadoFacturasCliente.fr3 b/Source/Informes/InformeListadoFacturasCliente.fr3 index cf36ba76..0d065aec 100644 --- a/Source/Informes/InformeListadoFacturasCliente.fr3 +++ b/Source/Informes/InformeListadoFacturasCliente.fr3 @@ -1,22 +1,21 @@ - + - - - - - - + + + + - + + - + @@ -26,7 +25,7 @@ - + @@ -35,19 +34,32 @@ - + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/InformeListadoFacturasClienteDesglosado.fr3 b/Source/Informes/InformeListadoFacturasClienteDesglosado.fr3 index 193441fb..e0e1e55f 100644 --- a/Source/Informes/InformeListadoFacturasClienteDesglosado.fr3 +++ b/Source/Informes/InformeListadoFacturasClienteDesglosado.fr3 @@ -1,22 +1,20 @@ - + - - - - - - - + + + + + - + - + @@ -26,7 +24,7 @@ - + @@ -35,28 +33,41 @@ - + - - + - - + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/InformeListadoFacturasProveedor.fr3 b/Source/Informes/InformeListadoFacturasProveedor.fr3 index c5e84dfd..811c567a 100644 --- a/Source/Informes/InformeListadoFacturasProveedor.fr3 +++ b/Source/Informes/InformeListadoFacturasProveedor.fr3 @@ -1,22 +1,20 @@ - + - - - - - - + + + + - + - + @@ -27,7 +25,7 @@ - + @@ -37,12 +35,33 @@ - + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/InformeListadoFacturasProveedorDesglosado.fr3 b/Source/Informes/InformeListadoFacturasProveedorDesglosado.fr3 index aa9488cb..4c1a78e3 100644 --- a/Source/Informes/InformeListadoFacturasProveedorDesglosado.fr3 +++ b/Source/Informes/InformeListadoFacturasProveedorDesglosado.fr3 @@ -1,22 +1,20 @@ - + - - - - - - - + + + + + - + - + @@ -25,9 +23,9 @@ - + - + @@ -37,16 +35,37 @@ - + - - + + - + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.dfm b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.dfm index c40d26bd..630227e6 100644 --- a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.dfm +++ b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.dfm @@ -1,8 +1,9 @@ object RptFacturasCliente: TRptFacturasCliente OldCreateOrder = True OnCreate = DataModuleCreate + OnDestroy = DataModuleDestroy Height = 464 - Width = 688 + Width = 869 object DADataCabecera: TDADataSource DataSet = tbl_Cabecera.Dataset DataTable = tbl_Cabecera @@ -354,6 +355,66 @@ object RptFacturasCliente: TRptFacturasCliente object schReport: TDASchema ConnectionManager = dmServer.ConnectionManager Datasets = < + item + Params = <> + Statements = < + item + Connection = 'IBX' + ConnectionType = 'Interbase' + Default = True + TargetTable = 'v_Facturas_cliente' + Name = 'IBX' + SQL = + 'select ID_EMPRESA,'#10'NOMBRE,'#10'sum(BASE_IMPONIBLE) as BASE_IMPONIBLE' + + ','#10'sum(IMPORTE_IVA) as IMPORTE_IVA,'#10'sum(IMPORTE_TOTAL) AS IMPORTE' + + '_TOTAL'#10'from V_facturas_cliente'#10'group by 1,2'#10'order by 1,2'#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ID_EMPRESA' + TableField = 'ID_EMPRESA' + end + item + DatasetField = 'NOMBRE' + TableField = 'NOMBRE' + end + item + DatasetField = 'BASE_IMPONIBLE' + TableField = 'BASE_IMPONIBLE' + end + item + DatasetField = 'IMPORTE_IVA' + TableField = 'IMPORTE_IVA' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end> + end> + Name = 'ListadoFacturasResumen' + Fields = < + item + Name = 'ID_EMPRESA' + DataType = datInteger + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'BASE_IMPONIBLE' + DataType = datCurrency + end + item + Name = 'IMPORTE_IVA' + DataType = datCurrency + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end> + end item Params = <> Statements = < @@ -1311,42 +1372,20 @@ object RptFacturasCliente: TRptFacturasCliente PrintOptions.Printer = 'Por defecto' PrintOptions.PrintOnSheet = 0 ReportOptions.CreateDate = 37800.807714351900000000 - ReportOptions.LastChange = 39770.742049143520000000 + ReportOptions.LastChange = 39882.453172557870000000 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;' @@ -1503,4 +1542,31 @@ object RptFacturasCliente: TRptFacturasCliente Left = 576 Top = 16 end + object tbl_InformeListadoFacturasResumen: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = <> + Params = <> + MasterMappingMode = mmDataRequest + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] + MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] + IndexDefs = <> + Left = 584 + Top = 304 + end + object DADSInformeListadoFacturasResumen: TDADataSource + DataSet = tbl_InformeListadoFacturasResumen.Dataset + DataTable = tbl_InformeListadoFacturasResumen + Left = 584 + Top = 248 + end + object frxDBInformeListadoFacturasResumen: TfrxDBDataset + UserName = 'frxDBInformeListadoFacturasResumen' + CloseDataSource = True + DataSource = DADSInformeListadoFacturasResumen + Left = 584 + Top = 192 + end end diff --git a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas index acf8dfae..25824511 100644 --- a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas +++ b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas @@ -33,13 +33,33 @@ type tbl_InformeListadoFacturas: TDAMemDataTable; DADSInformeListadoFacturas: TDADataSource; frxDBInformeListadoFacturas: TfrxDBDataset; + tbl_InformeListadoFacturasResumen: TDAMemDataTable; + DADSInformeListadoFacturasResumen: TDADataSource; + frxDBInformeListadoFacturasResumen: TfrxDBDataset; schReport: TDASchema; procedure DataModuleCreate(Sender: TObject); + procedure DataModuleDestroy(Sender: TObject); private FConnection: IDAConnection; + FIdEmpresa: Integer; + FFechaInicio: Variant; + FFechaFin: Variant; + FFechaVenInicio: Variant; + FFechaVenFin: Variant; + FListaIDClientes: TIntegerArray; + FListaNombresClientes : TStringList; + FImporteMinimo: Currency; + FDesglosado : Boolean; + //Genera cada uno de los albaranes a imprimir procedure _GenerarFactura(const ID: integer); overload; - function _GenerarInforme(const TipoInforme: String; const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDClientes: TIntegerArray; const ImporteMinimo: Currency): Binary; + + procedure PrepararTablaInforme(ATabla: TDAMemDataTable); + procedure PrepararTablaResumenInforme(ATabla: IDADataset); + function _GenerarInforme(const TipoInforme: String): Binary; + procedure IniciarParametrosInforme; + procedure RecuperarNombresClientes; + public function GenerarFactura(const ListaID : TIntegerArray): Binary; overload; function GenerarInformeIVA(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; @@ -52,7 +72,8 @@ implementation {$R *.dfm} uses - uSistemaFunc, uDataModuleServer, schFacturasClienteClient_Intf; + uSistemaFunc, StrUtils, uROServer, DataAbstract4_Intf, + uDataModuleServer, schFacturasClienteClient_Intf; const rptFacturaCliente = 'InfFacturaCliente.fr3'; @@ -64,6 +85,7 @@ const rptInformeListadoFactuasClientePendiente = 'InformeListadoFacturasClientePendientes.fr3'; rptInformeListadoFactuasClientePendienteDesglosado = 'InformeListadoFacturasClientePendientesDesglosado.fr3'; + ds_InformeListadoFacturasResumen = 'ListadoFacturasResumen'; { TRptFacturasCliente } @@ -72,7 +94,14 @@ procedure TRptFacturasCliente.DataModuleCreate(Sender: TObject); begin schReport.ConnectionManager := dmServer.ConnectionManager; FConnection := dmServer.DarNuevaConexion; - frxReport.EngineOptions.NewSilentMode := simReThrow; + frxReport.EngineOptions.NewSilentMode := simReThrow; + + FListaNombresClientes := TStringList.Create; +end; + +procedure TRptFacturasCliente.DataModuleDestroy(Sender: TObject); +begin + FreeANDNIL(FListaNombresClientes); end; function TRptFacturasCliente.GenerarFactura(const ListaID: TIntegerArray): Binary; @@ -95,15 +124,58 @@ function TRptFacturasCliente.GenerarInformeIVA(const IdEmpresa: Integer; const F const ImporteMinimo: Currency): Binary; var ATipoInforme: String; + AStream: TMemoryStream; + dsMaster: IDADataset; begin -//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + + AStream := TMemoryStream.Create; + try + //Inicializamos parametros + FIdEmpresa := IdEmpresa; + FFechaInicio := FechaInicio; + FFechaFin := FechaFin; + FFechaVenInicio := Null; + FFechaVenFin := Null; + FImporteMinimo := ImporteMinimo; + + if Assigned(FListaIDClientes) then + FListaIDClientes.Free; + FListaIDClientes := ListaIDClientes; + + //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; + Bin2DataStreamer.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1); + Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE); + + //DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE if Desglosado then ATipoInforme := rptInformeIVADesglosado else ATipoInforme := rptInformeIVA; - Result := _GenerarInforme(ATipoInforme, IdEmpresa, FechaInicio, FechaFin, ListaIDClientes, ImporteMinimo); + //Finalmente se abren las tablas del informe + tbl_InformeListadoFacturas.Active := True; + tbl_InformeListadoFacturasResumen.Active := True; + + Result := _GenerarInforme(ATipoInforme); + finally + AStream.Free; + dsMaster := Nil; + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + end; end; function TRptFacturasCliente.GenerarInformeListadoFacturas(const IdEmpresa: Integer; @@ -111,16 +183,60 @@ function TRptFacturasCliente.GenerarInformeListadoFacturas(const IdEmpresa: Inte const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; var ATipoInforme: String; + AStream: TMemoryStream; + dsMaster: IDADataset; begin + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" -//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE - if Desglosado then + AStream := TMemoryStream.Create; + try + //Inicializamos parametros + FIdEmpresa := IdEmpresa; + FFechaInicio := FechaInicio; + FFechaFin := FechaFin; +// FFechaVenInicio := FechaVenInicio; +// FFechaVenFin := FechaVenFin; + FImporteMinimo := ImporteMinimo; + + if Assigned(FListaIDClientes) then + FListaIDClientes.Free; + FListaIDClientes := ListaIDClientes; + + //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; + Bin2DataStreamer.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1); + Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE); + + //DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE + FDesglosado := Desglosado; + if FDesglosado then ATipoInforme := rptInformeListadoFacturasClienteDesglosado else ATipoInforme := rptInformeListadoFacturasCliente; - Result := _GenerarInforme(ATipoInforme, IdEmpresa, FechaInicio, FechaFin, ListaIDClientes, ImporteMinimo); + //Finalmente se abren las tablas del informe + tbl_InformeListadoFacturas.Active := True; + tbl_InformeListadoFacturasResumen.Active := True; + + Result := _GenerarInforme(ATipoInforme); + + finally + AStream.Free; + dsMaster := Nil; + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + end; end; function TRptFacturasCliente.GenerarInformeListadoFacturasPendientes( @@ -130,13 +246,30 @@ function TRptFacturasCliente.GenerarInformeListadoFacturasPendientes( var Condicion: TDAWhereExpression; ATipoInforme: String; + AStream: TMemoryStream; + dsMaster: IDADataset; begin - if tbl_InformeListadoFacturas.Active then - tbl_InformeListadoFacturas.Active := False; + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" +{ + AStream := TMemoryStream.Create; + try + //Inicializamos parametros + FIdEmpresa := IdEmpresa; + FFechaInicio := FechaInicio; + FFechaFin := FechaFin; +// FFechaVenInicio := FechaVenInicio; +// FFechaVenFin := FechaVenFin; + FImporteMinimo := ImporteMinimo; + FListaIDClientes := ListaIDClientes; + + //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 - with tbl_InformeListadoFacturas.DynamicWhere do + with tbl_InformeListadoFacturasPendientes.DynamicWhere do begin // (ID_EMPRESA >= ID) Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteSITUACION), NewConstant('PAGADA', datString), dboNotEqual); @@ -146,14 +279,297 @@ begin Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; - -//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE - if Desglosado then + //DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE + FDesglosado := Desglosado; + if FDesglosado then ATipoInforme := rptInformeListadoFactuasClientePendienteDesglosado else ATipoInforme := rptInformeListadoFactuasClientePendiente; - Result := _GenerarInforme(ATipoInforme, IdEmpresa, FechaInicio, FechaFin, ListaIDClientes, ImporteMinimo); + //Finalmente se abren las tablas del informe + tbl_InformeListadoFacturasPendientes.Active := True; + + Result := _GenerarInforme(ATipoInforme); + + finally + AStream.Free; + dsMaster := Nil; + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + end; + } +end; + +procedure TRptFacturasCliente.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(FListaIDClientes) and (FListaIDClientes.Count > 0) then + begin + RecuperarNombresClientes; + ACadena := FListaNombresClientes.Text; + end + else begin + ACadena := 'Todos los clientes'; + if FDesglosado then + ACadena := ACadena + ' (desglosados)' + end; + + ATextos.Add(ACadena); + ACadena := ''; + + frxReport.Variables.Variables['TextoParametros'] := ATextos.Text; + finally + FreeAndNil(ATextos); + end; +end; + +procedure TRptFacturasCliente.PrepararTablaInforme(ATabla: TDAMemDataTable); +var + Condicion: TDAWhereExpression; + i: Integer; + +begin + // Filtrar el informe por empresa + with ATabla.DynamicWhere do + begin + // (ID_EMPRESA >= ID) + Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteID_EMPRESA), NewConstant(FIdEmpresa, datInteger), dboEqual); + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end; + + // Filtrar el informe por fechas + if not VarIsNull(FFechaInicio) + and not VarIsNull(FFechaFin) then + begin + with ATabla.DynamicWhere do + begin + // (FECHA_INICIO between FECHA_FIN) + Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteFECHA_FACTURA), NewConstant(FFechaInicio, datDateTime), dboGreaterOrEqual); + Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasClienteFECHA_FACTURA), NewConstant(FFechaFin, datDateTime), dboLessOrEqual), Condicion, dboAnd); + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end; + end; + + // Filtrar el informe por fechas de vencimiento +{ if not VarIsNull(FFechaVenInicio) + and not VarIsNull(FFechaVenFin) then + begin + with ATabla.DynamicWhere do + begin + // (FECHA_VENCIMIENTO_INICIO between FECHA_VENCIMIENTO_FIN) + Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteFECHA_VENCIMIENTO), NewConstant(FFechaVenInicio, datDateTime), dboGreaterOrEqual); + Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasClienteFECHA_VENCIMIENTO), NewConstant(FFechaVenFin, datDateTime), dboLessOrEqual), Condicion, dboAnd); + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end; + end; +} + + // Filtrar el informe por proveedor + if Assigned(FListaIDClientes) then + begin + with ATabla.DynamicWhere do + begin + for i := 0 to FListaIDClientes.Count - 1 do + begin + + // (ID_CLIENTE = ID) + Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteID_CLIENTE), NewConstant(FListaIDClientes.Items[i], datInteger), dboEqual); + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end; + end; + end; + + // Filtrar el informe por importe minimo + if (FImporteMinimo > 0) then + begin + with ATabla.DynamicWhere do + begin + // (IMPORTE_TOTAL > ImporteMinimo) + Condicion := NewBinaryExpression(NewField('', fld_FacturasCLienteIMPORTE_TOTAL), NewConstant(FImporteMinimo, datCurrency), dboGreaterOrEqual); + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end; + end; +end; + +procedure TRptFacturasCliente.PrepararTablaResumenInforme(ATabla: IDADataset); +var + i: Integer; + AWhereStr : String; + +begin + // Filtrar el informe por empresa + AWhereStr := ' (' + fld_FacturasCLienteID_EMPRESA + ' = ' + IntToStr(FIdEmpresa) + ') '; + + // Filtrar el informe por fechas + if not VarIsNull(FFechaInicio) + and not VarIsNull(FFechaFin) then + begin + if Length(AWhereStr) > 0 then + AWhereStr := AWhereStr + 'AND'; + AWhereStr := AWhereStr + ' (' + fld_FacturasCLienteFECHA_FACTURA + ' between ''' + ReplaceStr(VarToStr(FFechaInicio),'/','.') + ''' and ''' + ReplaceStr(VarToStr(FFechaFin),'/','.') + ''') '; + end; + + // Filtrar el informe por fechas de vencimiento +{ if not VarIsNull(FFechaVenInicio) + and not VarIsNull(FFechaVenFin) then + begin + if Length(AWhereStr) > 0 then + AWhereStr := AWhereStr + 'AND'; + AWhereStr := AWhereStr + ' (' + fld_FacturasCLienteFECHA_VENCIMIENTO + ' between ''' + ReplaceStr(VarToStr(FFechaVenInicio),'/','.') + ''' and ''' + ReplaceStr(VarToStr(FFechaVenFin),'/','.') + ''') '; + end; +} + + // Filtrar el informe por cliente + if Assigned(FListaIDClientes) then + begin + for i := 0 to FListaIDClientes.Count - 1 do + begin + if Length(AWhereStr) > 0 then + AWhereStr := AWhereStr + 'AND'; + AWhereStr := AWhereStr + ' (' + fld_FacturasCLienteID_CLIENTE + ' = ' + IntToStr(FListaIDClientes.Items[i]) + ') '; + end; + end; + + // Filtrar el informe por importe minimo + if (FImporteMinimo > 0) then + begin + if Length(AWhereStr) > 0 then + AWhereStr := AWhereStr + 'AND'; + AWhereStr := AWhereStr + ' (' + fld_FacturasCLienteIMPORTE_TOTAL + ' >= ' + CurrToStr(FImporteMinimo) + ') '; + end; + + ATabla.Where.AddText(AWhereStr); +end; + +procedure TRptFacturasCliente.RecuperarNombresClientes; +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('Clientes'); + ATableRequestInfo := TableRequestInfoV5.Create; + + with ATableRequestInfo do + begin + IncludeSchema := True; + MaxRecords := -1; + UserFilter := ''; + + AWhereBuilder.Clear; + with AWhereBuilder do + for i := 0 to FListaIDClientes.Count - 1 do + begin + ACondicion := NewBinaryExpression( + NewBinaryExpression(NewField('', 'ID'), NewConstant(FListaIDClientes[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 := 'Clientes'; + ADataTable.LocalDataStreamer := Bin2DataStreamer; + ADataTable.RemoteFetchEnabled := False; + Bin2DataStreamer.ReadDataset(AStream, ADataTable, True); + + ADataTable.Open; + FListaNombresClientes.Clear; + for i := 0 to ADataTable.RecordCount - 1 do + begin + FListaNombresClientes.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; procedure TRptFacturasCliente._GenerarFactura(const ID: integer); @@ -186,98 +602,21 @@ begin end; end; -function TRptFacturasCliente._GenerarInforme(const TipoInforme: String; - const IdEmpresa: Integer; const FechaInicio, FechaFin: Variant; - const ListaIDClientes: TIntegerArray; const ImporteMinimo: Currency): Binary; +function TRptFacturasCliente._GenerarInforme(const TipoInforme: String): Binary; var - Condicion: TDAWhereExpression; - i: Integer; AInforme: Variant; begin Result := Binary.Create; - FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + AInforme := DarRutaFichero(DarRutaInformes, TipoInforme, IntToStr(FIdEmpresa)); + if VarIsNull(AInforme) then + raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme)); - try + frxReport.LoadFromFile(AInforme, True); + IniciarParametrosInforme; - if tbl_InformeListadoFacturas.Active then - tbl_InformeListadoFacturas.Active := False; - - // Filtrar el informe por empresa - with tbl_InformeListadoFacturas.DynamicWhere do - begin - // (ID_EMPRESA >= ID) - Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteID_EMPRESA), NewConstant(IdEmpresa, datInteger), dboEqual); - if IsEmpty then - Expression := Condicion - else - Expression := NewBinaryExpression(Expression, Condicion, dboAnd); - end; - - // Filtrar el informe por fechas - if not VarIsNull(FechaInicio) - and not VarIsNull(FechaFin) then - begin - with tbl_InformeListadoFacturas.DynamicWhere do - begin - // (FECHA_INICIO between FECHA_FIN) - Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteFECHA_FACTURA), NewConstant(FechaInicio, datDateTime), dboGreaterOrEqual); - Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasClienteFECHA_FACTURA), NewConstant(FechaFin, datDateTime), dboLessOrEqual), Condicion, dboAnd); - if IsEmpty then - Expression := Condicion - else - Expression := NewBinaryExpression(Expression, Condicion, dboAnd); - end; - end; - - // Filtrar el informe por cliente - if Assigned(ListaIDClientes) then - begin - with tbl_InformeListadoFacturas.DynamicWhere do - begin - for i := 0 to ListaIDClientes.Count - 1 do - begin - - // (ID_CLIENTE = ID) - Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteID_CLIENTE), NewConstant(ListaIDClientes.Items[i], datInteger), dboEqual); - if IsEmpty then - Expression := Condicion - else - Expression := NewBinaryExpression(Expression, Condicion, dboAnd); - end; - end; - end; - - // Filtrar el informe por importe minimo - if (ImporteMinimo > 0) then - begin - with tbl_InformeListadoFacturas.DynamicWhere do - begin - // (IMPORTE_TOTAL > ImporteMinimo) - Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteIMPORTE_TOTAL), NewConstant(ImporteMinimo, datCurrency), dboGreaterOrEqual); - if IsEmpty then - Expression := Condicion - else - Expression := NewBinaryExpression(Expression, Condicion, dboAnd); - end; - end; - - - tbl_InformeListadoFacturas.Active := True; - - AInforme := DarRutaFichero(DarRutaInformes, TipoInforme, IntToStr(IdEmpresa)); - if VarIsNull(AInforme) then - raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe' + TipoInforme)); - - frxReport.LoadFromFile(AInforme, True); - frxReport.Variables.Variables['FechaInicio'] := FechaInicio; - frxReport.Variables.Variables['FechaFin'] := FechaFin; - frxReport.PrepareReport(False); - frxReport.PreviewPages.SaveToStream(Result); - - finally - FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" - end; + frxReport.PrepareReport(False); + frxReport.PreviewPages.SaveToStream(Result); end; end. diff --git a/Source/Modulos/Facturas de cliente/Views/FacturasCliente_view.dproj b/Source/Modulos/Facturas de cliente/Views/FacturasCliente_view.dproj index b601adc1..29be5bf7 100644 --- a/Source/Modulos/Facturas de cliente/Views/FacturasCliente_view.dproj +++ b/Source/Modulos/Facturas de cliente/Views/FacturasCliente_view.dproj @@ -49,35 +49,35 @@ MainSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fEditorElegirArticulosFacturaCliente
TForm diff --git a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm index 742c59a7..e87c13da 100644 --- a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm +++ b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm @@ -1,8 +1,9 @@ object RptFacturasProveedor: TRptFacturasProveedor OldCreateOrder = True OnCreate = DataModuleCreate + OnDestroy = DataModuleDestroy Height = 405 - Width = 570 + Width = 763 object frxRichObject1: TfrxRichObject Left = 48 Top = 296 @@ -35,6 +36,66 @@ object RptFacturasProveedor: TRptFacturasProveedor ConnectionManager = dmServer.ConnectionManager DataDictionary = DataDictionary Datasets = < + item + Params = <> + Statements = < + item + Connection = 'IBX' + ConnectionType = 'Interbase' + Default = True + TargetTable = 'v_facturas_proveedor' + Name = 'IBX' + SQL = + 'select ID_EMPRESA,'#10'NOMBRE,'#10'sum(BASE_IMPONIBLE) as BASE_IMPONIBLE' + + ','#10'sum(IMPORTE_IVA) as IMPORTE_IVA,'#10'sum(IMPORTE_TOTAL) AS IMPORTE' + + '_TOTAL'#10'from V_facturas_proveedor'#10'group by 1,2'#10'order by 1,2'#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ID_EMPRESA' + TableField = 'ID_EMPRESA' + end + item + DatasetField = 'NOMBRE' + TableField = 'NOMBRE' + end + item + DatasetField = 'BASE_IMPONIBLE' + TableField = 'BASE_IMPONIBLE' + end + item + DatasetField = 'IMPORTE_IVA' + TableField = 'IMPORTE_IVA' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end> + end> + Name = 'ListadoFacturasProveedorResumen' + Fields = < + item + Name = 'ID_EMPRESA' + DataType = datInteger + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'BASE_IMPONIBLE' + DataType = datCurrency + end + item + Name = 'IMPORTE_IVA' + DataType = datCurrency + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end> + end item Params = <> Statements = < @@ -548,4 +609,31 @@ object RptFacturasProveedor: TRptFacturasProveedor Left = 48 Top = 80 end + object frxDBInformeListadoFacturasResumen: TfrxDBDataset + UserName = 'frxDBInformeListadoFacturasResumen' + CloseDataSource = True + DataSource = DADSInformeListadoFacturasResumen + Left = 648 + Top = 24 + end + object DADSInformeListadoFacturasResumen: TDADataSource + DataSet = tbl_InformeListadoFacturasResumen.Dataset + DataTable = tbl_InformeListadoFacturasResumen + Left = 648 + Top = 80 + end + object tbl_InformeListadoFacturasResumen: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = <> + Params = <> + MasterMappingMode = mmDataRequest + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] + MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] + IndexDefs = <> + Left = 648 + Top = 136 + 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 af4779c0..8cf34100 100644 --- a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas +++ b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas @@ -26,10 +26,29 @@ type Bin2DataStreamer: TDABin2DataStreamer; schReport: TDASchema; DataDictionary: TDADataDictionary; + frxDBInformeListadoFacturasResumen: TfrxDBDataset; + DADSInformeListadoFacturasResumen: TDADataSource; + tbl_InformeListadoFacturasResumen: TDAMemDataTable; procedure DataModuleCreate(Sender: TObject); + procedure DataModuleDestroy(Sender: TObject); + private FConnection: IDAConnection; - function _GenerarInforme(const TipoInforme: String; const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const FechaVenInicio: Variant; const FechaVenFin: Variant; const ListaIDProveedores: TIntegerArray; const ImporteMinimo: Currency): Binary; + FIdEmpresa: Integer; + FFechaInicio: Variant; + FFechaFin: Variant; + FFechaVenInicio: Variant; + FFechaVenFin: Variant; + FListaIDProveedores: TIntegerArray; + FListaNombresProveedores: TStringList; + FImporteMinimo: Currency; + FDesglosado : Boolean; + + procedure PrepararTablaInforme(ATabla: TDAMemDataTable); + procedure PrepararTablaResumenInforme(ATabla: IDADataset); + function _GenerarInforme(const TipoInforme: String): Binary; + procedure IniciarParametrosInforme; + procedure RecuperarNombresProveedores; public function GenerarInformeIVA(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; @@ -42,7 +61,8 @@ implementation {$R *.dfm} uses - uSistemaFunc, uDataModuleServer, schFacturasProveedorClient_Intf; + uSistemaFunc, StrUtils, uROServer, DataAbstract4_Intf, + uDataModuleServer, schFacturasProveedorClient_Intf; const rptFacturaProveedor = 'InfFacturaProveedor.fr3'; @@ -52,6 +72,8 @@ const rptInformeListadoFacturasProveedorDesglosado = 'InformeListadoFacturasProveedorDesglosado.fr3'; rptInformeListadoFactuasProveedorPendiente = 'InformeListadoFacturasProveedorPendientes.fr3'; rptInformeListadoFactuasProveedorPendienteDesglosado = 'InformeListadoFacturasProveedorPendientesDesglosado.fr3'; + ds_InformeListadoFacturasResumen = 'ListadoFacturasProveedorResumen'; + ds_InformeListadoFacturasPendientesResumen = 'InformeListadoFacturasPendientesResumen'; { TRptFacturasProveedor } @@ -61,6 +83,13 @@ begin schReport.ConnectionManager := dmServer.ConnectionManager; FConnection := dmServer.DarNuevaConexion; frxReport.EngineOptions.NewSilentMode := simReThrow; + + FListaNombresProveedores := TStringList.Create; +end; + +procedure TRptFacturasProveedor.DataModuleDestroy(Sender: TObject); +begin + FreeANDNIL(FListaNombresProveedores); end; function TRptFacturasProveedor.GenerarInformeIVA(const IdEmpresa: Integer; @@ -69,15 +98,64 @@ function TRptFacturasProveedor.GenerarInformeIVA(const IdEmpresa: Integer; const ImporteMinimo: Currency): Binary; var ATipoInforme: String; + AStream: TMemoryStream; + dsMaster: IDADataset; begin -//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE - if Desglosado then + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + + AStream := TMemoryStream.Create; + try + //Inicializamos parametros + FIdEmpresa := IdEmpresa; + FFechaInicio := FechaInicio; + FFechaFin := FechaFin; + 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; + Bin2DataStreamer.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1); + Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE); + + //DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR + if FDesglosado then ATipoInforme := rptInformeIVADesglosado else ATipoInforme := rptInformeIVA; - Result := _GenerarInforme(ATipoInforme, IdEmpresa, FechaInicio, FechaFin, Null, Null, ListaIDProveedores, ImporteMinimo); + //Finalmente se abren las tablas del informe + tbl_InformeListadoFacturas.Active := True; + tbl_InformeListadoFacturasResumen.Active := True; + + Result := _GenerarInforme(ATipoInforme); + + finally + AStream.Free; + dsMaster := Nil; + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + end; end; function TRptFacturasProveedor.GenerarInformeListadoFacturas( @@ -87,16 +165,63 @@ function TRptFacturasProveedor.GenerarInformeListadoFacturas( const ImporteMinimo: Currency): Binary; var ATipoInforme: String; + AStream: TMemoryStream; + dsMaster: IDADataset; begin + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" -//DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR - if Desglosado then + AStream := TMemoryStream.Create; + try + //Inicializamos parametros + FIdEmpresa := IdEmpresa; + FFechaInicio := FechaInicio; + FFechaFin := FechaFin; + FFechaVenInicio := FechaVenInicio; + FFechaVenFin := FechaVenFin; + FImporteMinimo := ImporteMinimo; + FDesglosado := Desglosado; + + if Assigned(FListaIDProveedores) then + FListaIDProveedores.Free; + FListaIDProveedores := ListaIDProveedores; + + //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; + Bin2DataStreamer.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1); + Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE); + + //DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR + if FDesglosado then ATipoInforme := rptInformeListadoFacturasProveedorDesglosado else ATipoInforme := rptInformeListadoFacturasProveedor; - Result := _GenerarInforme(ATipoInforme, IdEmpresa, FechaInicio, FechaFin, FechaVenInicio, FechaVenFin, ListaIDProveedores, ImporteMinimo); + //Finalmente se abren las tablas del informe + tbl_InformeListadoFacturas.Active := True; + tbl_InformeListadoFacturasResumen.Active := True; + + Result := _GenerarInforme(ATipoInforme); + + finally + AStream.Free; + dsMaster := Nil; + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + end; end; function TRptFacturasProveedor.GenerarInformeListadoFacturasPendientes( @@ -107,15 +232,38 @@ function TRptFacturasProveedor.GenerarInformeListadoFacturasPendientes( var Condicion: TDAWhereExpression; ATipoInforme: String; + AStream: TMemoryStream; + dsMaster: IDADataset; begin - if tbl_InformeListadoFacturas.Active then - tbl_InformeListadoFacturas.Active := False; + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" +{ + AStream := TMemoryStream.Create; + try + //Inicializamos parametros + FIdEmpresa := IdEmpresa; + FFechaInicio := FechaInicio; + FFechaFin := FechaFin; + FFechaVenInicio := FechaVenInicio; + FFechaVenFin := FechaVenFin; + FImporteMinimo := ImporteMinimo; + FDesglosado := Desglosado; + + if Assigned(FListaIDProveedores) then + FListaIDProveedores.Free; + FListaIDProveedores := ListaIDProveedores; + + + //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 - with tbl_InformeListadoFacturas.DynamicWhere do + with tbl_InformeListadoFacturasPendientes.DynamicWhere do begin - // (ID_EMPRESA >= ID) + // (SITUACION >= PAGADA) Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorSITUACION), NewConstant('PAGADA', datString), dboNotEqual); if IsEmpty then Expression := Condicion @@ -123,126 +271,327 @@ begin Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; + //Se prepara la tabla del listado resumen del informe + if tbl_InformeListadoFacturasPendResumen.Active then + tbl_InformeListadoFacturasPendResumen.Active := False; -//DESGLOSADO POR PROVEEDOR EN ESTE INFORME - if Desglosado then + 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; + Bin2DataStreamer.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1); + Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasPendResumen, TRUE, '', TRUE, TRUE); + + //DESGLOSADO POR PROVEEDOR EN ESTE INFORME + if FDesglosado then ATipoInforme := rptInformeListadoFactuasProveedorPendienteDesglosado else ATipoInforme := rptInformeListadoFactuasProveedorPendiente; + //Finalmente se abren las tablas del informe + tbl_InformeListadoFacturasPendientes.Active := True; + tbl_InformeListadoFacturasPendResumen.Active := True; - Result := _GenerarInforme(ATipoInforme, IdEmpresa, FechaInicio, FechaFin, FechaVenInicio, FechaVenFin, ListaIDProveedores, ImporteMinimo); + Result := _GenerarInforme(ATipoInforme); + finally + AStream.Free; + dsMaster := Nil; + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + end; +} end; -function TRptFacturasProveedor._GenerarInforme(const TipoInforme: String; - const IdEmpresa: Integer; const FechaInicio, FechaFin: Variant; - const FechaVenInicio: Variant; const FechaVenFin: Variant; - const ListaIDProveedores: TIntegerArray; const ImporteMinimo: Currency): Binary; +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; i: Integer; - AInforme: Variant; begin - Result := Binary.Create; - FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + // Filtrar el informe por empresa + with ATabla.DynamicWhere do + begin + // (ID_EMPRESA >= ID) + Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorID_EMPRESA), NewConstant(FIdEmpresa, datInteger), dboEqual); + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end; - try - if tbl_InformeListadoFacturas.Active then - tbl_InformeListadoFacturas.Active := False; - - // Filtrar el informe por empresa - with tbl_InformeListadoFacturas.DynamicWhere do + // Filtrar el informe por fechas + if not VarIsNull(FFechaInicio) and + not VarIsNull(FFechaFin) then + begin + with ATabla.DynamicWhere do begin - // (ID_EMPRESA >= ID) - Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorID_EMPRESA), NewConstant(IdEmpresa, datInteger), dboEqual); + // (FECHA_INICIO between FECHA_FIN) + Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_FACTURA), NewConstant(FFechaInicio, datDateTime), dboGreaterOrEqual); + Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_FACTURA), NewConstant(FFechaFin, datDateTime), dboLessOrEqual), Condicion, dboAnd); if IsEmpty then Expression := Condicion else Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; + end; - // Filtrar el informe por fechas - if not VarIsNull(FechaInicio) - and not VarIsNull(FechaFin) then + // Filtrar el informe por fechas de vencimiento + if not VarIsNull(FFechaVenInicio) + and not VarIsNull(FFechaVenFin) then + begin + with ATabla.DynamicWhere do begin - with tbl_InformeListadoFacturas.DynamicWhere do + // (FECHA_VENCIMIENTO_INICIO between FECHA_VENCIMIENTO_FIN) + Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_VENCIMIENTO), NewConstant(FFechaVenInicio, datDateTime), dboGreaterOrEqual); + Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_VENCIMIENTO), NewConstant(FFechaVenFin, datDateTime), dboLessOrEqual), Condicion, dboAnd); + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end; + end; + + // Filtrar el informe por proveedor + if Assigned(FListaIDProveedores) then + begin + with ATabla.DynamicWhere do + begin + for i := 0 to FListaIDProveedores.Count - 1 do begin - // (FECHA_INICIO between FECHA_FIN) - Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_FACTURA), NewConstant(FechaInicio, datDateTime), dboGreaterOrEqual); - Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_FACTURA), NewConstant(FechaFin, datDateTime), dboLessOrEqual), Condicion, dboAnd); + + // (ID_PROVEEDOR = ID) + Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorID_PROVEEDOR), NewConstant(FListaIDProveedores.Items[i], datInteger), dboEqual); if IsEmpty then Expression := Condicion else Expression := NewBinaryExpression(Expression, Condicion, dboAnd); - end; + end; end; + end; - // Filtrar el informe por fechas de vencimiento - if not VarIsNull(FechaVenInicio) - and not VarIsNull(FechaVenFin) then + // Filtrar el informe por importe minimo + if (FImporteMinimo > 0) then + begin + with ATabla.DynamicWhere do begin - with tbl_InformeListadoFacturas.DynamicWhere do - begin - // (FECHA_VENCIMIENTO_INICIO between FECHA_VENCIMIENTO_FIN) - Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_VENCIMIENTO), NewConstant(FechaVenInicio, datDateTime), dboGreaterOrEqual); - Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_VENCIMIENTO), NewConstant(FechaVenFin, datDateTime), dboLessOrEqual), Condicion, dboAnd); - if IsEmpty then - Expression := Condicion - else - Expression := NewBinaryExpression(Expression, Condicion, dboAnd); - end; + // (IMPORTE_TOTAL > ImporteMinimo) + Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorIMPORTE_TOTAL), NewConstant(FImporteMinimo, datCurrency), dboGreaterOrEqual); + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; - - // Filtrar el informe por proveedor - if Assigned(ListaIDProveedores) then - begin - with tbl_InformeListadoFacturas.DynamicWhere do - begin - for i := 0 to ListaIDProveedores.Count - 1 do - begin - - // (ID_PROVEEDOR = ID) - Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorID_PROVEEDOR), NewConstant(ListaIDProveedores.Items[i], datInteger), dboEqual); - if IsEmpty then - Expression := Condicion - else - Expression := NewBinaryExpression(Expression, Condicion, dboAnd); - end; - end; - end; - - // Filtrar el informe por importe minimo - if (ImporteMinimo > 0) then - begin - with tbl_InformeListadoFacturas.DynamicWhere do - begin - // (IMPORTE_TOTAL > ImporteMinimo) - Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorIMPORTE_TOTAL), NewConstant(ImporteMinimo, datCurrency), dboGreaterOrEqual); - if IsEmpty then - Expression := Condicion - else - Expression := NewBinaryExpression(Expression, Condicion, dboAnd); - end; - end; - - - tbl_InformeListadoFacturas.Active := True; - - AInforme := DarRutaFichero(DarRutaInformes, TipoInforme, IntTostr(IdEmpresa)); - if VarIsNull(AInforme) then - raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme)); - - frxReport.LoadFromFile(AInforme, True); - frxReport.Variables.Variables['FechaInicio'] := FechaInicio; - frxReport.Variables.Variables['FechaFin'] := FechaFin; - - frxReport.PrepareReport(False); - frxReport.PreviewPages.SaveToStream(Result); - - finally - FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" end; end; +procedure TRptFacturasProveedor.PrepararTablaResumenInforme(ATabla: IDADataset); +var + i: Integer; + AWhereStr : String; + +begin + // Filtrar el informe por empresa + AWhereStr := ' (' + fld_FacturasProveedorID_EMPRESA + ' = ' + IntToStr(FIdEmpresa) + ') '; + + // Filtrar el informe por fechas + if not VarIsNull(FFechaInicio) + and not VarIsNull(FFechaFin) then + begin + if Length(AWhereStr) > 0 then + AWhereStr := AWhereStr + 'AND'; + AWhereStr := AWhereStr + ' (' + fld_FacturasProveedorFECHA_FACTURA + ' between ''' + ReplaceStr(VarToStr(FFechaInicio),'/','.') + ''' and ''' + ReplaceStr(VarToStr(FFechaFin),'/','.') + ''') '; + end; + + // Filtrar el informe por fechas de vencimiento + if not VarIsNull(FFechaVenInicio) + and not VarIsNull(FFechaVenFin) then + begin + if Length(AWhereStr) > 0 then + AWhereStr := AWhereStr + 'AND'; + AWhereStr := AWhereStr + ' (' + fld_FacturasProveedorFECHA_VENCIMIENTO + ' between ''' + ReplaceStr(VarToStr(FFechaVenInicio),'/','.') + ''' and ''' + ReplaceStr(VarToStr(FFechaVenFin),'/','.') + ''') '; + end; + + // Filtrar el informe por proveedor + if Assigned(FListaIDProveedores) then + begin + for i := 0 to FListaIDProveedores.Count - 1 do + begin + if Length(AWhereStr) > 0 then + AWhereStr := AWhereStr + 'AND'; + AWhereStr := AWhereStr + ' (' + fld_FacturasProveedorID_PROVEEDOR + ' = ' + IntToStr(FListaIDProveedores.Items[i]) + ') '; + end; + end; + + // Filtrar el informe por importe minimo + if (FImporteMinimo > 0) then + begin + if Length(AWhereStr) > 0 then + AWhereStr := AWhereStr + 'AND'; + AWhereStr := AWhereStr + ' (' + fld_FacturasProveedorIMPORTE_TOTAL + ' >= ' + CurrToStr(FImporteMinimo) + ') '; + end; + + 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); + IniciarParametrosInforme; + + frxReport.PrepareReport(False); + frxReport.PreviewPages.SaveToStream(Result); +end; + end. diff --git a/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas b/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas index 6b45d06c..ba23c156 100644 --- a/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas +++ b/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas @@ -346,6 +346,9 @@ var AStream: Binary; AEditor : IEditorInformeFacturasClientePendientesReport; begin + showmessage('Informe en desarrollo'); + exit; + AEditor := NIL; CreateEditor('EditorInformeFacturasClientePendientesReport', IEditorInformeFacturasClientePendientesReport, AEditor); @@ -393,6 +396,9 @@ var AStream: Binary; AEditor : IEditorInformeFacturasProveedorPendientesReport; begin + showmessage('Informe en desarrollo'); + exit; + AEditor := NIL; CreateEditor('EditorInformeFacturasProveedorPendientesReport', IEditorInformeFacturasProveedorPendientesReport, AEditor); if Assigned(AEditor) then diff --git a/Source/Servidor/FactuGES_Server.RES b/Source/Servidor/FactuGES_Server.RES index dd8207802017ad8a7d4e3bdb2a8bb07c64a20100..5fcd220f256a45335721091ca553dbb240e7cc2d 100644 GIT binary patch delta 434 zcmY*U%}T>S7@XZSQbi`4Tl z#7pme332wPiUYgDFyG96J9`(eA7WNzw^6jVj$a6@Ac_EiI*QP+Q!$DfAQ8vTo7REA zs~A%zYDiP>Z2+NH^qOEN{XoyNO-cIBk|bc4!IF=xGA*X#KYCKDydjUJe$KCVcIgY8 zVu*Y6(dL=p1|{_v74JtpxVZkxw_o;=Ahic**yK6=im8&^Wyb~Y5w*jXo#{{ytb4+~ zF`jJy00ol{Zi~OUD^7ILV{Sw)amTHQ#7?{6OJ6ed4==x9*6<7HRW%9i%KA+m275^L Lr)r4RL~aEK0|PUH z2h_pBU|;~1<6~f8MetM^fMzlH-#^IgC&? zjGDqYIVw_#seo~EU1Z#3jwlsQBL+PNOCUCwd^4(;70jC)7;VmMz+gPNJ6e~~V)D*t FcK~N79-sgK diff --git a/Source/Servidor/FactuGES_Server.dproj b/Source/Servidor/FactuGES_Server.dproj index 97de16a4..40125c38 100644 --- a/Source/Servidor/FactuGES_Server.dproj +++ b/Source/Servidor/FactuGES_Server.dproj @@ -1,284 +1,288 @@ - + - - {ebdcd25d-40d7-4146-91ec-a0ea4aa1dcd1} - FactuGES_Server.dpr - Debug - AnyCPU - DCC32 - ..\..\Output\Debug\Servidor\FactuGES_Server.exe - - - 7.0 - False - False - 0 - 3 - ..\..\Output\Release\Servidor - RELEASE - - - 7.0 - 3 - ..\..\Output\Debug\Servidor - DEBUG; - True - - - Delphi.Personality - - - FalseTrueFalseTrueFalse2290FalseFalseFalseFalseFalse30821252Rodax Software S.L.2.2.9.0FactuGES (Servidor)2.2.9.0miércoles, 18 de febrero de 2009 16:31 - RemObjects Pascal Script - RemObjects SDK 3.0 Integration - FactuGES_Server.dpr - - - - - MainSource - - - - - -
srvEjercicios
- TDataAbstractService -
- - - -
srvEmpresas
- TDARemoteService -
- -
srvProvinciasPoblaciones
- TRORemoteDataModule -
- - - - - - - - - - - -
srvAlbaranesCliente
- TDataAbstractService -
- - - - -
srvAlbaranesProveedor
- TDataAbstractService -
- - - -
srvAlmacenes
- TDARemoteService -
- - - - - - - -
RptComisiones
- TDataModule -
- -
srvComisiones
- TDataAbstractService -
- - - - -
srvContabilidad
- TDataAbstractService -
- - - - - - - -
RptEtiquetasContacto
- TDataModule -
- -
srvContactos
- TDARemoteService -
- - - - -
RptFacturasCliente
- TDataModule -
- -
srvFacturasCliente
- TDataAbstractService -
- - - - -
RptFacturasProveedor
- TDataModule -
- -
srvFacturasProveedor
- TDataAbstractService -
- - - - - - - -
srvGestorDocumentos
- TDataAbstractService -
- -
srvGestorInformes
- TDataAbstractService -
- - - -
srvHistoricoMovimientos
- TDataAbstractService -
- - - -
srvInventario
- TDataAbstractService -
- - - - -
srvPedidosProveedor
- TDataAbstractService -
- - - - -
RptPresupuestosCliente
-
- -
srvPresupuestosCliente
- TDataAbstractService -
- - - - - -
RptRecibosCliente
- TDataModule -
- -
srvRecibosCliente
- TDataAbstractService -
- - - - - -
RptRecibosProveedor
- TDataModule -
- -
srvRecibosProveedor
- TDataAbstractService -
- - - -
srvReferencias
- TDataAbstractService -
- - - - -
srvRemesasCliente
- TDataAbstractService -
- - - - -
srvRemesasProveedor
- TDataAbstractService -
- - - - - - -
srvUnidadesMedida
- TDataAbstractService -
- - - -
srvConfiguracion
- TDataAbstractService -
- -
frConexionBD
- TFrame -
- -
frConfGeneral
- TFrame -
- -
fConfiguracion
- TForm -
- -
FrameConfiguracion
- TFrame -
- -
srvLogin
- TDARemoteService -
- -
fAcercaDe
-
- -
dmServer
- TDataModule -
- -
fServerForm
-
- - - - - - - - -
+ + {ebdcd25d-40d7-4146-91ec-a0ea4aa1dcd1} + FactuGES_Server.dpr + Debug + AnyCPU + DCC32 + ..\..\Output\Debug\Servidor\FactuGES_Server.exe + + + 7.0 + False + False + 0 + 3 + ..\..\Output\Release\Servidor + RELEASE + + + 7.0 + 3 + ..\..\Output\Debug\Servidor + DEBUG; + True + + + Delphi.Personality + + +FalseTrueFalseTrueFalse2300FalseFalseFalseFalseFalse30821252Rodax Software S.L.2.3.0.0FactuGES (Servidor)2.3.0.0martes, 10 de marzo de 2009 19:06 + + + + + RemObjects Pascal Script - RemObjects SDK 3.0 Integration + FactuGES_Server.dpr + + + + + MainSource + + + + + +
srvEjercicios
+ TDataAbstractService +
+ + + +
srvEmpresas
+ TDARemoteService +
+ +
srvProvinciasPoblaciones
+ TRORemoteDataModule +
+ + + + + + + + + + + +
srvAlbaranesCliente
+ TDataAbstractService +
+ + + + +
srvAlbaranesProveedor
+ TDataAbstractService +
+ + + +
srvAlmacenes
+ TDARemoteService +
+ + + + + + + +
RptComisiones
+ TDataModule +
+ +
srvComisiones
+ TDataAbstractService +
+ + + + +
srvContabilidad
+ TDataAbstractService +
+ + + + + + + +
RptEtiquetasContacto
+ TDataModule +
+ +
srvContactos
+ TDARemoteService +
+ + + + +
RptFacturasCliente
+ TDataModule +
+ +
srvFacturasCliente
+ TDataAbstractService +
+ + + + +
RptFacturasProveedor
+ TDataModule +
+ +
srvFacturasProveedor
+ TDataAbstractService +
+ + + + + + + +
srvGestorDocumentos
+ TDataAbstractService +
+ +
srvGestorInformes
+ TDataAbstractService +
+ + + +
srvHistoricoMovimientos
+ TDataAbstractService +
+ + + +
srvInventario
+ TDataAbstractService +
+ + + + +
srvPedidosProveedor
+ TDataAbstractService +
+ + + + +
RptPresupuestosCliente
+
+ +
srvPresupuestosCliente
+ TDataAbstractService +
+ + + + + +
RptRecibosCliente
+ TDataModule +
+ +
srvRecibosCliente
+ TDataAbstractService +
+ + + + + +
RptRecibosProveedor
+ TDataModule +
+ +
srvRecibosProveedor
+ TDataAbstractService +
+ + + +
srvReferencias
+ TDataAbstractService +
+ + + + +
srvRemesasCliente
+ TDataAbstractService +
+ + + + +
srvRemesasProveedor
+ TDataAbstractService +
+ + + + + + +
srvUnidadesMedida
+ TDataAbstractService +
+ + + +
srvConfiguracion
+ TDataAbstractService +
+ +
frConexionBD
+ TFrame +
+ +
frConfGeneral
+ TFrame +
+ +
fConfiguracion
+ TForm +
+ +
FrameConfiguracion
+ TFrame +
+ +
srvLogin
+ TDARemoteService +
+ +
fAcercaDe
+
+ +
dmServer
+ TDataModule +
+ +
fServerForm
+
+ + + + + + + + +