From 738b989487e2b6c0f273129e4d14b09d99e5ea17 Mon Sep 17 00:00:00 2001 From: roberto Date: Thu, 3 Feb 2011 18:44:02 +0000 Subject: [PATCH] =?UTF-8?q?Informes=20estad=C3=ADsticos=20primera=20parte?= 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@1030 0c75b7a4-871f-7646-8a2f-f78d34cc349f --- Source/Base/Base.dproj | 106 +- Source/Base/Base.res | Bin 384 -> 4748 bytes Source/Cliente/FactuGES.rc | 8 +- Source/Cliente/FactuGES.res | Bin 172156 -> 171984 bytes Source/GUIBase/uEditorPreview.dfm | 25 +- Source/GUIBase/uEditorPreview.pas | 2 +- .../InformeListadoFacturasClienteGrafComp.fr3 | 68 ++ ...nformeListadoFacturasProveedorGrafComp.fr3 | 68 ++ .../Reports/uRptFacturasCliente_Server.dfm | 933 ++++++++++++++++- .../Reports/uRptFacturasCliente_Server.pas | 100 +- .../Servidor/srvFacturasCliente_Impl.pas | 24 +- .../Reports/uRptFacturasProveedor_Server.dfm | 972 ++++++++++++++++-- .../Reports/uRptFacturasProveedor_Server.pas | 98 +- .../Servidor/srvFacturasProveedor_Impl.pas | 22 + .../Controller/GestorInformes_controller.dpk | 3 +- .../GestorInformes_controller.dproj | 1 + ...InformeFacturasProveedorReportGrafComp.pas | 28 + .../Controller/uGestorInformesController.pas | 44 +- .../Data/uDataModuleGestorInformes.dfm | 4 +- .../Data/uDataModuleGestorInformes.pas | 47 +- .../Model/Data/uIDataModuleGestorInformes.pas | 7 +- .../Plugin/uPluginGestorInformes.dfm | 14 + .../Plugin/uPluginGestorInformes.pas | 10 + .../Servidor/srvGestorInformes_Impl.pas | 80 +- .../Views/GestorInformes_view.dpk | 11 +- .../Views/GestorInformes_view.dproj | 93 +- .../Views/GestorInformes_view.res | Bin 384 -> 4748 bytes ...InformeFacturasProveedorReportGrafComp.dfm | 171 +++ ...InformeFacturasProveedorReportGrafComp.pas | 175 ++++ .../Views/uGestorInformesViewRegister.pas | 8 +- .../Views/uViewIntervaloComparativo.dfm | 178 ++++ .../Views/uViewIntervaloComparativo.pas | 92 ++ Source/Servicios/FactuGES.RODL | 42 + Source/Servicios/FactuGES_Intf.pas | 101 ++ Source/Servicios/FactuGES_Invk.pas | 146 +++ Source/Servicios/RODLFILE.res | Bin 43616 -> 45090 bytes Source/Servidor/FactuGES_Server.RES | Bin 23212 -> 23208 bytes Source/Servidor/FactuGES_Server.dproj | 10 + Source/Servidor/FactuGES_Server.rc | 10 +- 39 files changed, 3469 insertions(+), 232 deletions(-) create mode 100644 Source/Informes/1/InformeListadoFacturasClienteGrafComp.fr3 create mode 100644 Source/Informes/1/InformeListadoFacturasProveedorGrafComp.fr3 create mode 100644 Source/Modulos/Gestor de informes/Controller/View/uIEditorInformeFacturasProveedorReportGrafComp.pas create mode 100644 Source/Modulos/Gestor de informes/Views/uEditorInformeFacturasProveedorReportGrafComp.dfm create mode 100644 Source/Modulos/Gestor de informes/Views/uEditorInformeFacturasProveedorReportGrafComp.pas create mode 100644 Source/Modulos/Gestor de informes/Views/uViewIntervaloComparativo.dfm create mode 100644 Source/Modulos/Gestor de informes/Views/uViewIntervaloComparativo.pas diff --git a/Source/Base/Base.dproj b/Source/Base/Base.dproj index 3c533dc7..d2d4c897 100644 --- a/Source/Base/Base.dproj +++ b/Source/Base/Base.dproj @@ -45,10 +45,6 @@ Package FalseTrueFalseLibreria base de FactuGESFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0 - - - - Microsoft Office 2000 Sample Automation Server Wrapper Components Microsoft Office XP Sample Automation Server Wrapper Components Base.dpk @@ -58,57 +54,57 @@ MainSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fConfigurarConexion
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.rc b/Source/Cliente/FactuGES.rc index 3ceddb61..e9a315ed 100644 --- a/Source/Cliente/FactuGES.rc +++ b/Source/Cliente/FactuGES.rc @@ -1,7 +1,7 @@ MAINICON ICON "C:\Codigo tecsitel\Resources\Iconos\Factuges.ico" 1 VERSIONINFO -FILEVERSION 1,8,6,0 -PRODUCTVERSION 1,8,6,0 +FILEVERSION 1,8,7,0 +PRODUCTVERSION 1,8,7,0 FILEFLAGSMASK 0x3FL FILEFLAGS 0x00L FILEOS 0x40004L @@ -13,10 +13,10 @@ BEGIN BLOCK "0C0A04E4" BEGIN VALUE "CompanyName", "Rodax Software S.L.\0" - VALUE "FileVersion", "1.8.6.0\0" + VALUE "FileVersion", "1.8.7.0\0" VALUE "InternalName", "FactuGES\0" VALUE "ProductName", "FactuGES\0" - VALUE "ProductVersion", "1.8.6.0\0" + VALUE "ProductVersion", "1.8.7.0\0" END END BLOCK "VarFileInfo" diff --git a/Source/Cliente/FactuGES.res b/Source/Cliente/FactuGES.res index ad15c932ae16dfddf343d514edf3ba639d61158b..254f842cecc73c72f66c4f05543f304dbc355477 100644 GIT binary patch delta 284 zcmY+9u?m7v6o$Wh(^8WVS{#K48XA0oK$;vI+AC=2Eplk^0fIYeYeQpujg3A-b3+dh z)D=bPhr{9HKj(1%&)q3*PI3@eX=MA*b6gq;Ts#j1K0CAQ4H+Qu{mOfEq0>-mgFz5f z-q`}PC4H?+7}nkZdM%AvVG%`@Ihlh^99NVs!C}3w7mv^ilR>W142=e41!DdHmD>;tEIX)HG@NcfRLrFYZfmAo6~5nG^X zG>rCHg|(7-jB8-wc}B}@sFchjlWA3aztlEiy=08 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/1/InformeListadoFacturasProveedorGrafComp.fr3 b/Source/Informes/1/InformeListadoFacturasProveedorGrafComp.fr3 new file mode 100644 index 00000000..b0dfbc19 --- /dev/null +++ b/Source/Informes/1/InformeListadoFacturasProveedorGrafComp.fr3 @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.dfm b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.dfm index 9ed60d82..dd5fbb98 100644 --- a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.dfm +++ b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.dfm @@ -2,11 +2,218 @@ object RptFacturasCliente: TRptFacturasCliente OldCreateOrder = True OnCreate = DataModuleCreate OnDestroy = DataModuleDestroy - Height = 513 - Width = 933 + Height = 657 + Width = 974 object schReport: TDASchema ConnectionManager = dmServer.ConnectionManager Datasets = < + item + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + Statements = < + item + Connection = 'IBX' + ConnectionType = 'Interbase' + Default = True + Name = 'IBX' + SQL = + 'select VALOR, DESCRIPCION, periodo1.ANO as Ano1, periodo1.IMPORT' + + 'E_TOTAL, periodo2.ANO as Ano2, periodo2.IMPORTE_TOTAL,'#10#10'(periodo' + + '1.IMPORTE_TOTAL - periodo2.IMPORTE_TOTAL) as Diferencia,'#10'/*SOLO ' + + 'COMPARAREMOS CUANDO EL SEGUNDO A'#209'O SEA DIFERENTE DE 0, comparati' + + 'va de A'#241'o1 respecto A'#241'o2*/'#10'case'#10'when (periodo1.IMPORTE_TOTAL = 0' + + ') then (100 - (periodo2.IMPORTE_TOTAL*100))'#10'else (100 - ((period' + + 'o2.IMPORTE_TOTAL*100)/periodo1.IMPORTE_TOTAL))'#10'end as Porcentaje' + + #10#10'FROM'#10'periodos_aux'#10'left join'#10'(select comp1.ID_EMPRESA, comp1.AN' + + 'O, MES as NFILA, SUM(comp1.IMPORTE_TOTAL) as IMPORTE_TOTAL'#10'from ' + + 'V_INF_FAC_CLIENTE comp1'#10'where ID_EMPRESA = :ID_EMPRESA1'#10'and (ANO' + + ' = :ANO1)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) periodo1 on (VAL' + + 'OR = periodo1.NFILA)'#10#10'left join'#10'(select comp2.ID_EMPRESA, comp2.' + + 'ANO, MES as NFILA, SUM(comp2.IMPORTE_TOTAL) as IMPORTE_TOTAL'#10'fro' + + 'm V_INF_FAC_CLIENTE comp2'#10'where ID_EMPRESA = :ID_EMPRESA2'#10'and (A' + + 'NO = :ANO2)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) periodo2 on (V' + + 'ALOR = periodo2.NFILA)'#10#10'where periodo= '#39'MENSUAL'#39#10'order by valor ' + + 'asc'#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'VALOR' + TableField = 'VALOR' + end + item + DatasetField = 'DESCRIPCION' + TableField = 'DESCRIPCION' + end + item + DatasetField = 'ANO1' + TableField = 'ANO1' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'ANO2' + TableField = 'ANO2' + end + item + DatasetField = 'IMPORTE_TOTAL1' + TableField = 'IMPORTE_TOTAL1' + end + item + DatasetField = 'DIFERENCIA' + TableField = 'DIFERENCIA' + end + item + DatasetField = 'PORCENTAJE' + TableField = 'PORCENTAJE' + end> + end> + Name = 'InformeListadoFacturasGrafCompMensual' + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'ANO1' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'ANO2' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + end + item + Params = < + item + Name = 'ID_EMPRESA' + Value = '' + end + item + Name = 'ANO' + Value = '' + end + item + Name = 'NTOP' + Value = '' + end> + Statements = < + item + Connection = 'IBX' + ConnectionType = 'Interbase' + Default = True + Name = 'IBX' + SQL = + 'select P.ANO, C.REFERENCIA, COALESCE(C.NOMBRE, P.NOMBRE) as NOMB' + + 'RE,'#10'SUM(P.IMPORTE_DESCUENTO) as IMPORTE_DESCUENTO, SUM(P.IMPORTE' + + '_TOTAL) as IMPORTE_TOTAL,'#10'(SUM(P.IMPORTE_TOTAL) - SUM(P.IMPORTE_' + + 'DESCUENTO)) as IMPORTE_COBRADO,'#10'case when SUM(P.IMPORTE_TOTAL) =' + + ' 0 then 0'#10'else ((SUM(P.IMPORTE_DESCUENTO) * 100) / SUM(P.IMPORTE' + + '_TOTAL)) end as PORCENTAJE'#10#10'from V_INF_FAC_CLIENTE P'#10'left join C' + + 'ONTACTOS C on P.ID_CLIENTE = C.ID'#10#10'where p.ID_EMPRESA = :ID_EMPR' + + 'ESA'#10'and P.ANO = :ANO'#10'group by 1,2,3'#10'order by 1,5 desc'#10'rows 1 to ' + + ':NTOP'#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ANO' + TableField = 'ANO' + end + item + DatasetField = 'REFERENCIA' + TableField = 'REFERENCIA' + end + item + DatasetField = 'NOMBRE' + TableField = 'NOMBRE' + end + item + DatasetField = 'IMPORTE_DESCUENTO' + TableField = 'IMPORTE_DESCUENTO' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'IMPORTE_COBRADO' + TableField = 'IMPORTE_COBRADO' + end + item + DatasetField = 'PORCENTAJE' + TableField = 'PORCENTAJE' + end> + end> + Name = 'InformeListadoClientesMayorDescuentoResumen' + Fields = < + item + Name = 'ANO' + DataType = datSmallInt + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_DESCUENTO' + DataType = datCurrency + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'IMPORTE_COBRADO' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + end item Params = < item @@ -899,6 +1106,321 @@ object RptFacturasCliente: TRptFacturasCliente Name = 'IMPORTE_TOTAL' DataType = datCurrency end> + end + item + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + Statements = < + item + Connection = 'IBX' + ConnectionType = 'Interbase' + Default = True + SQL = + 'select VALOR, DESCRIPCION, periodo1.ANO as Ano1, periodo1.IMPORT' + + 'E_TOTAL, periodo2.ANO as Ano2, periodo2.IMPORTE_TOTAL,'#10#10'(periodo' + + '1.IMPORTE_TOTAL - periodo2.IMPORTE_TOTAL) as Diferencia,'#10'/*SOLO ' + + 'COMPARAREMOS CUANDO EL SEGUNDO A'#209'O SEA DIFERENTE DE 0, comparati' + + 'va de A'#241'o1 respecto A'#241'o2*/'#10'case'#10'when (periodo1.IMPORTE_TOTAL = 0' + + ') then (100 - (periodo2.IMPORTE_TOTAL*100))'#10'else (100 - ((period' + + 'o2.IMPORTE_TOTAL*100)/periodo1.IMPORTE_TOTAL))'#10'end as Porcentaje' + + #10#10'FROM'#10'periodos_aux'#10'left join'#10'(select comp1.ID_EMPRESA, comp1.AN' + + 'O, TRIMESTRE as NFILA, SUM(comp1.IMPORTE_TOTAL) as IMPORTE_TOTAL' + + #10'from V_INF_FAC_CLIENTE comp1'#10'where ID_EMPRESA = :ID_EMPRESA1'#10'an' + + 'd (ANO = :ANO1)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) periodo1 o' + + 'n (VALOR = periodo1.NFILA)'#10#10'left join'#10'(select comp2.ID_EMPRESA, ' + + 'comp2.ANO, TRIMESTRE as NFILA, SUM(comp2.IMPORTE_TOTAL) as IMPOR' + + 'TE_TOTAL'#10'from V_INF_FAC_CLIENTE comp2'#10'where ID_EMPRESA = :ID_EMP' + + 'RESA2'#10'and (ANO = :ANO2)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) pe' + + 'riodo2 on (VALOR = periodo2.NFILA)'#10#10'where periodo= '#39'TRIMESTRAL'#39#10 + + 'order by valor asc'#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'VALOR' + TableField = 'VALOR' + end + item + DatasetField = 'DESCRIPCION' + TableField = 'DESCRIPCION' + end + item + DatasetField = 'ANO1' + TableField = 'ANO1' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'ANO2' + TableField = 'ANO2' + end + item + DatasetField = 'IMPORTE_TOTAL1' + TableField = 'IMPORTE_TOTAL1' + end + item + DatasetField = 'DIFERENCIA' + TableField = 'DIFERENCIA' + end + item + DatasetField = 'PORCENTAJE' + TableField = 'PORCENTAJE' + end> + end> + Name = 'InformeListadoFacturasGrafCompTrimestral' + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'ANO1' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'ANO2' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + end + item + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + Statements = < + item + Connection = 'IBX' + ConnectionType = 'Interbase' + Default = True + SQL = + 'select VALOR, DESCRIPCION, periodo1.ANO as Ano1, periodo1.IMPORT' + + 'E_TOTAL, periodo2.ANO as Ano2, periodo2.IMPORTE_TOTAL,'#10#10'(periodo' + + '1.IMPORTE_TOTAL - periodo2.IMPORTE_TOTAL) as Diferencia,'#10'/*SOLO ' + + 'COMPARAREMOS CUANDO EL SEGUNDO A'#209'O SEA DIFERENTE DE 0, comparati' + + 'va de A'#241'o1 respecto A'#241'o2*/'#10'case'#10'when (periodo1.IMPORTE_TOTAL = 0' + + ') then (100 - (periodo2.IMPORTE_TOTAL*100))'#10'else (100 - ((period' + + 'o2.IMPORTE_TOTAL*100)/periodo1.IMPORTE_TOTAL))'#10'end as Porcentaje' + + #10#10'FROM'#10'periodos_aux'#10'left join'#10'(select comp1.ID_EMPRESA, comp1.AN' + + 'O, SEMESTRE as NFILA, SUM(comp1.IMPORTE_TOTAL) as IMPORTE_TOTAL'#10 + + 'from V_INF_FAC_CLIENTE comp1'#10'where ID_EMPRESA = :ID_EMPRESA1'#10'and' + + ' (ANO = :ANO1)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) periodo1 on' + + ' (VALOR = periodo1.NFILA)'#10#10'left join'#10'(select comp2.ID_EMPRESA, c' + + 'omp2.ANO, SEMESTRE as NFILA, SUM(comp2.IMPORTE_TOTAL) as IMPORTE' + + '_TOTAL'#10'from V_INF_FAC_CLIENTE comp2'#10'where ID_EMPRESA = :ID_EMPRE' + + 'SA2'#10'and (ANO = :ANO2)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) peri' + + 'odo2 on (VALOR = periodo2.NFILA)'#10#10'where periodo= '#39'SEMESTRAL'#39#10'ord' + + 'er by valor asc'#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'VALOR' + TableField = 'VALOR' + end + item + DatasetField = 'DESCRIPCION' + TableField = 'DESCRIPCION' + end + item + DatasetField = 'ANO1' + TableField = 'ANO1' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'ANO2' + TableField = 'ANO2' + end + item + DatasetField = 'IMPORTE_TOTAL1' + TableField = 'IMPORTE_TOTAL1' + end + item + DatasetField = 'DIFERENCIA' + TableField = 'DIFERENCIA' + end + item + DatasetField = 'PORCENTAJE' + TableField = 'PORCENTAJE' + end> + end> + Name = 'InformeListadoFacturasGrafCompSemestral' + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'ANO1' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'ANO2' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + end + item + Params = < + item + Name = 'ID_EMPRESA' + Value = '' + end + item + Name = 'ANO' + Value = '' + end + item + Name = 'NTOP' + Value = '' + end> + Statements = < + item + Connection = 'IBX' + ConnectionType = 'Interbase' + Default = True + SQL = + 'select P.ANO, C.REFERENCIA, COALESCE(C.NOMBRE, P.NOMBRE) as NOMB' + + 'RE, p.Importe_TOTAL_ANO,'#10'COUNT(P.FECHA_FACTURA) as NUMFAC, SUM(P' + + '.IMPORTE_TOTAL) as IMPORTE_TOTAL,'#10'((SUM(P.IMPORTE_TOTAL)*100)/p.' + + 'Importe_TOTAL_ANO) as PORCENTAJE'#10#10'from V_INF_FAC_CLIENTE P'#10'left ' + + 'join CONTACTOS C on P.ID_CLIENTE = C.ID'#10#10'where p.ID_EMPRESA = :I' + + 'D_EMPRESA'#10'and P.ANO = :ANO'#10'group by 1,2,3,4'#10'order by 1,5 desc'#10'ro' + + 'ws 1 to :NTOP'#10#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ANO' + TableField = 'ANO' + end + item + DatasetField = 'REFERENCIA' + TableField = 'REFERENCIA' + end + item + DatasetField = 'NOMBRE' + TableField = 'NOMBRE' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'PORCENTAJE' + TableField = 'PORCENTAJE' + end + item + DatasetField = 'IMPORTE_TOTAL_ANO' + TableField = 'IMPORTE_TOTAL_ANO' + end + item + DatasetField = 'NUMFAC' + TableField = 'NUMFAC' + end> + end> + Name = 'InformeListadoClientesMayorFacturacionResumen' + Fields = < + item + Name = 'ANO' + DataType = datSmallInt + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_TOTAL_ANO' + DataType = datCurrency + end + item + Name = 'NUMFAC' + DataType = datInteger + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> end> JoinDataTables = <> UnionDataTables = <> @@ -1127,22 +1649,22 @@ object RptFacturasCliente: TRptFacturasCliente 'lc_ctype=ISO8859_1') LoginPrompt = False DefaultTransaction = IBTransaction1 - Left = 48 - Top = 296 + Left = 32 + Top = 256 end object IBTransaction1: TIBTransaction - Left = 48 - Top = 352 + Left = 32 + Top = 312 end object DataSource1: TDataSource DataSet = cabecera - Left = 216 - Top = 296 + Left = 200 + Top = 256 end object DataSource2: TDataSource DataSet = detalles - Left = 216 - Top = 352 + Left = 200 + Top = 312 end object cabecera: TIBQuery Database = IBDatabase1 @@ -1178,8 +1700,8 @@ object RptFacturasCliente: TRptFacturasCliente ' left outer join formas_pago on (formas_pago.id = v_facturas_c' + 'liente.id_forma_pago)' 'WHERE V_FACTURAS_CLIENTE.ID = 2') - Left = 136 - Top = 296 + Left = 120 + Top = 256 object cabeceraID: TIntegerField FieldName = 'ID' Origin = '"V_FACTURAS_CLIENTE"."ID"' @@ -1341,8 +1863,8 @@ object RptFacturasCliente: TRptFacturasCliente 'LEFT OUTER JOIN ARTICULOS ON (ARTICULOS.ID = DET.ID_ARTICULO)' 'WHERE DET.ID_FACTURA = 2 AND DET.VISIBLE = 1 ' 'ORDER BY DET.ID_FACTURA, DET.POSICION;') - Left = 136 - Top = 352 + Left = 120 + Top = 312 object detallesID: TIntegerField FieldName = 'ID' Origin = '"FACTURAS_CLIENTE_DETALLES"."ID"' @@ -1656,32 +2178,32 @@ object RptFacturasCliente: TRptFacturasCliente Top = 128 end object frxCheckBoxObject1: TfrxCheckBoxObject - Left = 296 - Top = 288 + Left = 280 + Top = 248 end object frxChartObject1: TfrxChartObject - Left = 296 - Top = 336 + Left = 280 + Top = 296 end object frxGradientObject1: TfrxGradientObject - Left = 360 - Top = 288 + Left = 344 + Top = 248 end object frxCrossObject1: TfrxCrossObject - Left = 360 - Top = 440 + Left = 344 + Top = 400 end object frxOLEObject1: TfrxOLEObject - Left = 296 - Top = 440 + Left = 280 + Top = 400 end object frxBarCodeObject1: TfrxBarCodeObject - Left = 360 - Top = 392 + Left = 344 + Top = 352 end object frxRichObject1: TfrxRichObject - Left = 296 - Top = 392 + Left = 280 + Top = 352 end object frxReport: TfrxReport Version = '4.7.71' @@ -1932,8 +2454,8 @@ object RptFacturasCliente: TRptFacturasCliente 'FROM V_RECIBOS_CLIENTE' 'WHERE V_RECIBOS_CLIENTE.ID_FACTURA = 2' 'ORDER BY V_RECIBOS_CLIENTE.FECHA_VENCIMIENTO') - Left = 136 - Top = 408 + Left = 120 + Top = 368 object vencimientosFECHA_VENCIMIENTO: TDateField FieldName = 'FECHA_VENCIMIENTO' Origin = '"V_RECIBOS_CLIENTE"."FECHA_VENCIMIENTO"' @@ -1950,8 +2472,8 @@ object RptFacturasCliente: TRptFacturasCliente end object DataSource3: TDataSource DataSet = vencimientos - Left = 216 - Top = 408 + Left = 200 + Top = 368 end object frxPDFExport1: TfrxPDFExport ShowDialog = False @@ -1972,8 +2494,8 @@ object RptFacturasCliente: TRptFacturasCliente FitWindow = False CenterWindow = False PrintScaling = False - Left = 424 - Top = 288 + Left = 408 + Top = 248 end object tbl_InformeListadoFacturas: TDAMemDataTable RemoteUpdatesOptions = [] @@ -2183,4 +2705,347 @@ object RptFacturasCliente: TRptFacturasCliente Left = 48 Top = 88 end + object frxDBInformeListadoFacturasGrafComp: TfrxDBDataset + UserName = 'frxDBInformeListadoFacturasGrafComp' + CloseDataSource = False + DataSource = DASInformeListadoFacturasGrafComp + BCDToCurrency = False + Left = 824 + Top = 224 + end + object DASInformeListadoFacturasGrafComp: TDADataSource + Left = 824 + Top = 272 + end + object tbl_InformeListadoFacturasGrafCompMensual: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'ANO1' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'ANO2' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = Bin2DataStreamer + LogicalName = 'InformeListadoFacturasGrafCompMensual' + IndexDefs = <> + Left = 824 + Top = 328 + end + object tbl_InformeListadoFacturasGrafCompTrimestral: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'ANO1' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'ANO2' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = Bin2DataStreamer + LogicalName = 'InformeListadoFacturasGrafCompTrimestral' + IndexDefs = <> + Left = 824 + Top = 384 + end + object tbl_InformeListadoFacturasGrafCompSemestral: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'ANO1' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'ANO2' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = Bin2DataStreamer + LogicalName = 'InformeListadoFacturasGrafCompSemestral' + IndexDefs = <> + Left = 824 + Top = 440 + end + object frxDBInformeListadoClientesMayorFacturacionResumen: TfrxDBDataset + UserName = 'frxDBInformeListadoClientesMayorFacturacionResumen' + CloseDataSource = False + DataSource = DADSInformeListadoClientesMayorFacturacionResumen + BCDToCurrency = False + Left = 320 + Top = 488 + end + object DADSInformeListadoClientesMayorFacturacionResumen: TDADataSource + DataSet = tbl_InformeListadoClientesMayorFacturacionResumen.Dataset + DataTable = tbl_InformeListadoClientesMayorFacturacionResumen + Left = 320 + Top = 544 + end + object tbl_InformeListadoClientesMayorFacturacionResumen: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ANO' + DataType = datSmallInt + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_TOTAL_ANO' + DataType = datCurrency + end + item + Name = 'NUMFAC' + DataType = datInteger + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + Params = < + item + Name = 'ID_EMPRESA' + Value = '' + end + item + Name = 'ANO' + Value = '' + end + item + Name = 'NTOP' + Value = '' + end> + MasterMappingMode = mmDataRequest + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = Bin2DataStreamer + LogicalName = 'InformeListadoClientesMayorFacturacionResumen' + IndexDefs = <> + Left = 320 + Top = 600 + end + object frxDBInformeListadoClientesMayorDescuentoResumen: TfrxDBDataset + UserName = 'frxDBInformeListadoClientesMayorDescuentoResumen' + CloseDataSource = False + DataSource = DADSInformeListadoClientesMayorDescuentoResumen + BCDToCurrency = False + Left = 624 + Top = 488 + end + object DADSInformeListadoClientesMayorDescuentoResumen: TDADataSource + DataSet = tbl_InformeListadoClientesMayorDescuentoResumen.Dataset + DataTable = tbl_InformeListadoClientesMayorDescuentoResumen + Left = 624 + Top = 544 + end + object tbl_InformeListadoClientesMayorDescuentoResumen: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ANO' + DataType = datSmallInt + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_DESCUENTO' + DataType = datCurrency + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'IMPORTE_COBRADO' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + Params = < + item + Name = 'ID_EMPRESA' + Value = '' + end + item + Name = 'ANO' + Value = '' + end + item + Name = 'NTOP' + Value = '' + end> + MasterMappingMode = mmDataRequest + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = Bin2DataStreamer + LogicalName = 'InformeListadoClientesMayorDescuentoResumen' + IndexDefs = <> + Left = 624 + Top = 600 + 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 c14469cf..43a054b7 100644 --- a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas +++ b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas @@ -89,7 +89,18 @@ type DADSInformeListadoFacturasResumen: TDADataSource; tbl_InformeListadoFacturasResumen: TDAMemDataTable; Bin2DataStreamer: TDABin2DataStreamer; + frxDBInformeListadoFacturasGrafComp: TfrxDBDataset; + DASInformeListadoFacturasGrafComp: TDADataSource; + tbl_InformeListadoFacturasGrafCompMensual: TDAMemDataTable; + tbl_InformeListadoFacturasGrafCompTrimestral: TDAMemDataTable; + tbl_InformeListadoFacturasGrafCompSemestral: TDAMemDataTable; schReport: TDASchema; + frxDBInformeListadoClientesMayorFacturacionResumen: TfrxDBDataset; + DADSInformeListadoClientesMayorFacturacionResumen: TDADataSource; + tbl_InformeListadoClientesMayorFacturacionResumen: TDAMemDataTable; + frxDBInformeListadoClientesMayorDescuentoResumen: TfrxDBDataset; + DADSInformeListadoClientesMayorDescuentoResumen: TDADataSource; + tbl_InformeListadoClientesMayorDescuentoResumen: TDAMemDataTable; procedure DataModuleCreate(Sender: TObject); procedure DataModuleDestroy(Sender: TObject); private @@ -99,16 +110,22 @@ type FFechaFin: Variant; FFechaVenInicio: Variant; FFechaVenFin: Variant; + FAno1: Variant; + FAno2: Variant; + FIntervalo: Variant; FListaIDClientes: TIntegerArray; FListaNombresClientes : TStringList; FImporteMinimo: Currency; FDesglosado : Boolean; - + FTopN: Integer; + //Genera cada una de las facturas a imprimir procedure _GenerarFactura(const ID: Integer; const VerSello: Boolean = True; const VerCopia: Boolean = True); procedure PrepararTablaInforme(ATabla: TDAMemDataTable); procedure PrepararTablaResumenInforme(ATabla: IDADataset); + procedure PrepararTablaInformeGrafComp(ATabla: TDAMemDataTable); + procedure PrepararTablaResumenInformeGrafComp(ATabla: TDAMemDataTable); function _GenerarInforme(const TipoInforme: String): Binary; procedure IniciarParametrosInforme; procedure RecuperarNombresClientes; @@ -118,6 +135,7 @@ type function GenerarInformeIVA(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDClientes: 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 ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; function GenerarInformeListadoFacturasPendientes(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const FechaVenInicio: Variant; const FechaVenFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; + function GenerarInformeFacturasGrafComp(const IdEmpresa: Integer; const Intervalo: Variant; const Ano1: Variant; const Ano2: Variant; const ListaIDClientes: TIntegerArray; const TopN: Integer): Binary; end; implementation @@ -126,7 +144,7 @@ implementation uses uSistemaFunc, StrUtils, uDataModuleServer, schFacturasClienteClient_Intf, - uROServer, DataAbstract4_Intf; + uROServer, DataAbstract4_Intf, srvGestorInformes_Impl; const rptFacturaCliente = 'InfFacturaCliente.fr3'; @@ -136,6 +154,7 @@ const rptInformeListadoFacturasClienteDesglosado = 'InformeListadoFacturasClienteDesglosado.fr3'; rptInformeListadoFactuasClientePendiente = 'InformeListadoFacturasClientePendientes.fr3'; rptInformeListadoFactuasClientePendienteDesglosado = 'InformeListadoFacturasClientePendientesDesglosado.fr3'; + rptInformeListadoFacturasClienteGrafComp = 'InformeListadoFacturasClienteGrafComp.fr3'; { Dataset names for schReport } ds_InformeListadoFacturasResumen = 'InformeListadoFacturasResumen'; @@ -202,6 +221,59 @@ begin end; end; +function TRptFacturasCliente.GenerarInformeFacturasGrafComp( + const IdEmpresa: Integer; const Intervalo, Ano1, Ano2: Variant; + const ListaIDClientes: TIntegerArray; const TopN: Integer): Binary; +var + AStream: TMemoryStream; + AInforme: Variant; + +begin + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + + AStream := TMemoryStream.Create; + try + //Inicializamos parametros + FIdEmpresa := IdEmpresa; + FAno1 := Ano1; + FAno2 := Ano2; + FIntervalo := Intervalo; + FTopN := TopN; + + if Assigned(FListaIDClientes) then + FListaIDClientes.Free; + FListaIDClientes := ListaIDClientes; + + //Preparamos la tabla correspondiente y la abrimos para el informe + if (FIntervalo = CTE_MENSUAL) then + PrepararTablaInformeGrafComp(tbl_InformeListadoFacturasGrafCompMensual) + else if (FIntervalo = CTE_TRIMESTRAL) then + PrepararTablaInformeGrafComp(tbl_InformeListadoFacturasGrafCompTrimestral) + else + PrepararTablaInformeGrafComp(tbl_InformeListadoFacturasGrafCompSemestral); + + //Se preparan las tablas del listado resumen del informe +// PrepararTablaResumenInformeGrafComp(tbl_InformeListadoProveedoresMayorFacturacionResumen); +// PrepararTablaResumenInformeGrafComp(tbl_InformeListadoProveedoresMayorDescuentoResumen); + + Result := Binary.Create; + + AInforme := DarRutaFichero(DarRutaInformes, rptInformeListadoFacturasClienteGrafComp, IntTostr(FIdEmpresa)); + if VarIsNull(AInforme) then + raise Exception.Create (('Error Servidor: GenerarInformeFacturasGrafComp, no encuentra informe ' + rptInformeListadoFacturasClienteGrafComp)); + + frxReport.LoadFromFile(AInforme, True); +// IniciarParametrosInforme; + + frxReport.PrepareReport(False); + frxReport.PreviewPages.SaveToStream(Result); + + finally + AStream.Free; + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + end; +end; + function TRptFacturasCliente.GenerarInformeIVA(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; var ATipoInforme: String; @@ -512,6 +584,19 @@ begin end; end; +procedure TRptFacturasCliente.PrepararTablaInformeGrafComp(ATabla: TDAMemDataTable); +begin + if ATabla.Active then + ATabla.Active := False; + + DASInformeListadoFacturasGrafComp.DataTable := ATabla; + ATabla.ParamByName('ID_EMPRESA1').AsInteger := FIdEmpresa; + ATabla.ParamByName('ID_EMPRESA2').AsInteger := FIdEmpresa; + ATabla.ParamByName('ANO1').AsVariant := FAno1; + ATabla.ParamByName('ANO2').AsVariant := FAno2; + ATabla.Active := True; +end; + procedure TRptFacturasCliente.PrepararTablaResumenInforme(ATabla: IDADataset); var i: Integer; @@ -561,6 +646,17 @@ begin ATabla.Where.AddText(AWhereStr); end; +procedure TRptFacturasCliente.PrepararTablaResumenInformeGrafComp(ATabla: TDAMemDataTable); +begin + if ATabla.Active then + ATabla.Active := False; + + ATabla.ParamByName('ID_EMPRESA').AsInteger := FIdEmpresa; + ATabla.ParamByName('ANO').AsVariant := FAno1; + ATabla.ParamByName('NTOP').AsInteger := FTopN; + ATabla.Active := True; +end; + procedure TRptFacturasCliente.RecuperarNombresClientes; var AContactosService : IsrvContactos; diff --git a/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.pas b/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.pas index 680db595..c2e164f6 100644 --- a/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.pas +++ b/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.pas @@ -31,12 +31,16 @@ type const IncludeSchema: Boolean; const MaxRecords: Integer); procedure DARemoteServiceCreate(Sender: TObject); procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject; var aConnectionName: string); - private + protected { IsrvFacturasCliente methods } function GenerarInforme(const ListaID: TIntegerArray; const VerSello: Boolean = True; const VerCopia: Boolean = True): Binary; function GenerarInformeEnWord(const ID: Integer; const VerSello: Boolean = True): Binary; function GenerarInformeEnPDF(const ListaID: TIntegerArray; const VerSello: Boolean = True): Binary; + + public + function DarListaAnos: StringArray; + end; implementation @@ -77,6 +81,24 @@ begin bpFacturasCliente.BusinessRulesID := BIZ_SERVER_FACTURAS_CLIENTE; end; +function TsrvFacturasCliente.DarListaAnos: StringArray; +var + dsAnos : IDADataset; +begin + Result := StringArray.Create(); + try + dsAnos := schFacturasCliente.NewDataset(Connection, 'ListaAnosFacturas', '', True); + while not dsAnos.EOF do + begin + Result.Add(dsAnos.Fields[0].AsString); + dsAnos.Next; + end; + finally + dsAnos.Close; + dsAnos := NIL; + end; +end; + procedure TsrvFacturasCliente.DataAbstractServiceBeforeAcquireConnection( aSender: TObject; var aConnectionName: string); begin diff --git a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm index cc41b218..1989e0c3 100644 --- a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm +++ b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm @@ -2,7 +2,7 @@ object RptFacturasProveedor: TRptFacturasProveedor OldCreateOrder = True OnCreate = DataModuleCreate OnDestroy = DataModuleDestroy - Height = 513 + Height = 647 Width = 933 object schReport: TDASchema ConnectionManager = dmServer.ConnectionManager @@ -927,6 +927,525 @@ object RptFacturasProveedor: TRptFacturasProveedor Name = 'IMPORTE_TOTAL' DataType = datCurrency end> + end + item + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + Statements = < + item + Connection = 'IBX' + SQL = + 'select VALOR, DESCRIPCION, periodo1.ANO as Ano1, periodo1.IMPORT' + + 'E_TOTAL, periodo2.ANO as Ano2, periodo2.IMPORTE_TOTAL,'#10#10'(periodo' + + '1.IMPORTE_TOTAL - periodo2.IMPORTE_TOTAL) as Diferencia,'#10'/*SOLO ' + + 'COMPARAREMOS CUANDO EL SEGUNDO A'#209'O SEA DIFERENTE DE 0, comparati' + + 'va de A'#241'o1 respecto A'#241'o2*/'#10'case'#10'when (periodo1.IMPORTE_TOTAL = 0' + + ') then (100 - (periodo2.IMPORTE_TOTAL*100))'#10'else (100 - ((period' + + 'o2.IMPORTE_TOTAL*100)/periodo1.IMPORTE_TOTAL))'#10'end as Porcentaje' + + #10#10'FROM'#10'periodos_aux'#10'left join'#10'(select comp1.ID_EMPRESA, comp1.AN' + + 'O, MES as NFILA, SUM(comp1.IMPORTE_TOTAL) as IMPORTE_TOTAL'#10'from ' + + 'V_INF_FAC_PROVEEDOR comp1'#10'where ID_EMPRESA = :ID_EMPRESA1'#10'and (A' + + 'NO = :ANO1)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) periodo1 on (V' + + 'ALOR = periodo1.NFILA)'#10#10'left join'#10'(select comp2.ID_EMPRESA, comp' + + '2.ANO, MES as NFILA, SUM(comp2.IMPORTE_TOTAL) as IMPORTE_TOTAL'#10'f' + + 'rom V_INF_FAC_PROVEEDOR comp2'#10'where ID_EMPRESA = :ID_EMPRESA2'#10'an' + + 'd (ANO = :ANO2)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) periodo2 o' + + 'n (VALOR = periodo2.NFILA)'#10#10'where periodo= '#39'MENSUAL'#39#10'order by va' + + 'lor asc'#10#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'VALOR' + TableField = 'VALOR' + end + item + DatasetField = 'IMPORTE_TOTAL1' + TableField = 'IMPORTE_TOTAL1' + end + item + DatasetField = 'DIFERENCIA' + TableField = 'DIFERENCIA' + end + item + DatasetField = 'PORCENTAJE' + TableField = 'PORCENTAJE' + end + item + DatasetField = 'DESCRIPCION' + TableField = 'DESCRIPCION' + end + item + DatasetField = 'ANO1' + TableField = 'ANO1' + end + item + DatasetField = 'ANO2' + TableField = 'ANO2' + end> + end> + Name = 'InformeListadoFacturasGrafCompMensual' + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'ANO1' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'ANO2' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + end + item + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + Statements = < + item + Connection = 'IBX' + SQL = + 'select VALOR, DESCRIPCION, periodo1.ANO as Ano1, periodo1.IMPORT' + + 'E_TOTAL, periodo2.ANO as Ano2, periodo2.IMPORTE_TOTAL,'#10#10'(periodo' + + '1.IMPORTE_TOTAL - periodo2.IMPORTE_TOTAL) as Diferencia,'#10'/*SOLO ' + + 'COMPARAREMOS CUANDO EL SEGUNDO A'#209'O SEA DIFERENTE DE 0, comparati' + + 'va de A'#241'o1 respecto A'#241'o2*/'#10'case'#10'when (periodo1.IMPORTE_TOTAL = 0' + + ') then (100 - (periodo2.IMPORTE_TOTAL*100))'#10'else (100 - ((period' + + 'o2.IMPORTE_TOTAL*100)/periodo1.IMPORTE_TOTAL))'#10'end as Porcentaje' + + #10#10'FROM'#10'periodos_aux'#10'left join'#10'(select comp1.ID_EMPRESA, comp1.AN' + + 'O, TRIMESTRE as NFILA, SUM(comp1.IMPORTE_TOTAL) as IMPORTE_TOTAL' + + #10'from V_INF_FAC_PROVEEDOR comp1'#10'where ID_EMPRESA = :ID_EMPRESA1'#10 + + 'and (ANO = :ANO1)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) periodo1' + + ' on (VALOR = periodo1.NFILA)'#10#10'left join'#10'(select comp2.ID_EMPRESA' + + ', comp2.ANO, TRIMESTRE as NFILA, SUM(comp2.IMPORTE_TOTAL) as IMP' + + 'ORTE_TOTAL'#10'from V_INF_FAC_PROVEEDOR comp2'#10'where ID_EMPRESA = :ID' + + '_EMPRESA2'#10'and (ANO = :ANO2)'#10'group by 1,2,3'#10'order by 1 desc,2 asc' + + ') periodo2 on (VALOR = periodo2.NFILA)'#10#10'where periodo= '#39'TRIMESTR' + + 'AL'#39#10'order by valor asc'#10#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'VALOR' + TableField = 'VALOR' + end + item + DatasetField = 'IMPORTE_TOTAL1' + TableField = 'IMPORTE_TOTAL1' + end + item + DatasetField = 'DIFERENCIA' + TableField = 'DIFERENCIA' + end + item + DatasetField = 'PORCENTAJE' + TableField = 'PORCENTAJE' + end + item + DatasetField = 'DESCRIPCION' + TableField = 'DESCRIPCION' + end + item + DatasetField = 'ANO1' + TableField = 'ANO1' + end + item + DatasetField = 'ANO2' + TableField = 'ANO2' + end> + end> + Name = 'InformeListadoFacturasGrafCompTrimestral' + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'ANO1' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'ANO2' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + end + item + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + Statements = < + item + Connection = 'IBX' + SQL = + 'select VALOR, DESCRIPCION, periodo1.ANO as Ano1, periodo1.IMPORT' + + 'E_TOTAL, periodo2.ANO as Ano2, periodo2.IMPORTE_TOTAL,'#10#10'(periodo' + + '1.IMPORTE_TOTAL - periodo2.IMPORTE_TOTAL) as Diferencia,'#10'/*SOLO ' + + 'COMPARAREMOS CUANDO EL SEGUNDO A'#209'O SEA DIFERENTE DE 0, comparati' + + 'va de A'#241'o1 respecto A'#241'o2*/'#10'case'#10'when (periodo1.IMPORTE_TOTAL = 0' + + ') then (100 - (periodo2.IMPORTE_TOTAL*100))'#10'else (100 - ((period' + + 'o2.IMPORTE_TOTAL*100)/periodo1.IMPORTE_TOTAL))'#10'end as Porcentaje' + + #10#10'FROM'#10'periodos_aux'#10'left join'#10'(select comp1.ID_EMPRESA, comp1.AN' + + 'O, SEMESTRE as NFILA, SUM(comp1.IMPORTE_TOTAL) as IMPORTE_TOTAL'#10 + + 'from V_INF_FAC_PROVEEDOR comp1'#10'where ID_EMPRESA = :ID_EMPRESA1'#10'a' + + 'nd (ANO = :ANO1)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) periodo1 ' + + 'on (VALOR = periodo1.NFILA)'#10#10'left join'#10'(select comp2.ID_EMPRESA,' + + ' comp2.ANO, SEMESTRE as NFILA, SUM(comp2.IMPORTE_TOTAL) as IMPOR' + + 'TE_TOTAL'#10'from V_INF_FAC_PROVEEDOR comp2'#10'where ID_EMPRESA = :ID_E' + + 'MPRESA2'#10'and (ANO = :ANO2)'#10'group by 1,2,3'#10'order by 1 desc,2 asc) ' + + 'periodo2 on (VALOR = periodo2.NFILA)'#10#10'where periodo= '#39'SEMESTRAL'#39 + + #10'order by valor asc'#10#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'VALOR' + TableField = 'VALOR' + end + item + DatasetField = 'IMPORTE_TOTAL1' + TableField = 'IMPORTE_TOTAL1' + end + item + DatasetField = 'DIFERENCIA' + TableField = 'DIFERENCIA' + end + item + DatasetField = 'PORCENTAJE' + TableField = 'PORCENTAJE' + end + item + DatasetField = 'DESCRIPCION' + TableField = 'DESCRIPCION' + end + item + DatasetField = 'ANO1' + TableField = 'ANO1' + end + item + DatasetField = 'ANO2' + TableField = 'ANO2' + end> + end> + Name = 'InformeListadoFacturasGrafCompSemestral' + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'ANO1' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'ANO2' + DataType = datSmallInt + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + end + item + Params = < + item + Name = 'ID_EMPRESA' + DataType = datInteger + Value = '1' + end + item + Name = 'ANO' + Value = '2010' + end + item + Name = 'NTOP' + Value = '5' + end> + Statements = < + item + Connection = 'IBX' + SQL = + 'select P.ANO, C.REFERENCIA, COALESCE(C.NOMBRE, P.NOMBRE) as NOMB' + + 'RE, p.Importe_TOTAL_ANO,'#10'COUNT(P.FECHA_FACTURA) as NUMFAC, SUM(P' + + '.IMPORTE_TOTAL) as IMPORTE_TOTAL,'#10'((SUM(P.IMPORTE_TOTAL)*100)/p.' + + 'Importe_TOTAL_ANO) as PORCENTAJE'#10#10'from V_INF_FAC_PROVEEDOR P'#10'lef' + + 't join CONTACTOS C on P.ID_PROVEEDOR = C.ID'#10#10'where p.ID_EMPRESA ' + + '= :ID_EMPRESA'#10'and P.ANO = :ANO'#10'group by 1,2,3,4'#10'order by 1,5 des' + + 'c'#10'rows 1 to :NTOP'#10#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ANO' + TableField = '' + SQLOrigin = 'ANO' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'REFERENCIA' + TableField = 'REFERENCIA' + end + item + DatasetField = 'NOMBRE' + TableField = 'NOMBRE' + end + item + DatasetField = 'NUMFAC' + TableField = '' + SQLOrigin = 'NUMFAC' + end + item + DatasetField = 'PORCENTAJE' + TableField = '' + SQLOrigin = 'PORCENTAJE' + end + item + DatasetField = 'IMPORTE_TOTAL_ANO' + TableField = '' + SQLOrigin = 'IMPORTE_TOTAL_ANO' + end> + end> + Name = 'InformeListadoProveedoresMayorFacturacionResumen' + Fields = < + item + Name = 'ANO' + DataType = datSmallInt + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_TOTAL_ANO' + DataType = datCurrency + end + item + Name = 'NUMFAC' + DataType = datInteger + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + end + item + Params = < + item + Name = 'ID_EMPRESA' + DataType = datInteger + Value = '' + end + item + Name = 'ANO' + Value = '' + end + item + Name = 'NTOP' + Value = '' + end> + Statements = < + item + Connection = 'IBX' + SQL = + 'select P.ANO, C.REFERENCIA, COALESCE(C.NOMBRE, P.NOMBRE) as NOMB' + + 'RE,'#10'SUM(P.IMPORTE_DESCUENTO) as IMPORTE_DESCUENTO, SUM(P.IMPORTE' + + '_TOTAL) as IMPORTE_TOTAL,'#10'(SUM(P.IMPORTE_TOTAL) - SUM(P.IMPORTE_' + + 'DESCUENTO)) as IMPORTE_COBRADO,'#10'case when SUM(P.IMPORTE_TOTAL) =' + + ' 0 then 0'#10'else ((SUM(P.IMPORTE_DESCUENTO) * 100) / SUM(P.IMPORTE' + + '_TOTAL)) end as PORCENTAJE'#10#10'from V_INF_FAC_PROVEEDOR P'#10'left join' + + ' CONTACTOS C on P.ID_PROVEEDOR = C.ID'#10#10'where p.ID_EMPRESA = :ID_' + + 'EMPRESA'#10'and P.ANO = :ANO'#10'group by 1,2,3'#10'order by 1,5 desc'#10'rows 1' + + ' to :NTOP'#10#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ANO' + TableField = '' + SQLOrigin = 'ANO' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'REFERENCIA' + TableField = 'REFERENCIA' + end + item + DatasetField = 'NOMBRE' + TableField = 'NOMBRE' + end + item + DatasetField = 'PORCENTAJE' + TableField = '' + SQLOrigin = 'PORCENTAJE' + end + item + DatasetField = 'IMPORTE_DESCUENTO' + TableField = 'IMPORTE_DESCUENTO' + end + item + DatasetField = 'IMPORTE_COBRADO' + TableField = '' + SQLOrigin = 'IMPORTE_COBRADO' + end> + end> + Name = 'InformeListadoProveedoresMayorDescuentoResumen' + Fields = < + item + Name = 'ANO' + DataType = datSmallInt + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_DESCUENTO' + DataType = datCurrency + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'IMPORTE_COBRADO' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> end> JoinDataTables = <> UnionDataTables = <> @@ -1132,35 +1651,35 @@ object RptFacturasProveedor: TRptFacturasProveedor Top = 142 end object frxCheckBoxObject1: TfrxCheckBoxObject - Left = 296 - Top = 288 + Left = 280 + Top = 16 end object frxChartObject1: TfrxChartObject - Left = 296 - Top = 336 + Left = 280 + Top = 64 end object frxGradientObject1: TfrxGradientObject - Left = 360 - Top = 288 + Left = 344 + Top = 16 end object frxCrossObject1: TfrxCrossObject - Left = 360 - Top = 440 + Left = 344 + Top = 168 end object frxOLEObject1: TfrxOLEObject - Left = 296 - Top = 440 + Left = 280 + Top = 168 end object frxBarCodeObject1: TfrxBarCodeObject - Left = 360 - Top = 392 + Left = 344 + Top = 120 end object frxRichObject1: TfrxRichObject - Left = 296 - Top = 392 + Left = 280 + Top = 120 end object frxReport: TfrxReport - Version = '4.3' + Version = '4.7.71' DotMatrixReport = False EngineOptions.DoublePass = True IniFile = '\Software\Fast Reports' @@ -1169,63 +1688,47 @@ object RptFacturasProveedor: TRptFacturasProveedor PrintOptions.Printer = 'Por defecto' PrintOptions.PrintOnSheet = 0 ReportOptions.CreateDate = 37800.807714351900000000 - ReportOptions.LastChange = 39836.719287280100000000 + ReportOptions.LastChange = 40577.743050081020000000 ScriptLanguage = 'PascalScript' ScriptText.Strings = ( - 'procedure mContinuaOnBeforePrint(Sender: TfrxComponent);' + 'procedure Chart1OnBeforePrint(Sender: TfrxComponent);' 'begin' - ' if Engine.FinalPass then' - ' begin' - ' if ( = ) then' - ' begin ' - ' mContinua.Visible := False;' - ' end ' - ' else' - ' begin ' - ' mContinua.Visible := True;' - ' end ' - ' end; ' + + ' if ( <> 0) then ' + + ' ' + + ' TLineSeries(Chart1.Series[0]).Title := '#39'Total Facturado '#39' +' + + ' IntToStr();' + '' + ' if ( <> 0) then' + + ' TLineSeries(Chart1.Series[1]).Title := '#39'Total Facturado '#39' +' + + ' IntToStr()' + ' else' + ' Chart1.Series[1].Active := False; ' 'end;' '' - 'procedure Memo11OnBeforePrint(Sender: TfrxComponent);' + 'procedure Memo16OnBeforePrint(Sender: TfrxComponent);' 'var' - - ' ACadena : String; ' + - ' ' + ' Valor:Double; ' 'begin' - ' ACadena := ; ' - ' if Pos('#39'N'#186' de cuenta: '#39', ACadena) > 0 then' - ' begin' - ' Delete(ACadena, 1, 14);' + ' Valor := SUM() * 100; ' - ' Memo11.Lines.Text := '#39' '#39' + ACadena; ' + - ' ' - ' end;' - 'end;' + ' if (SUM()' + + ' = 0) then' + ' Valor := 100 - Valor ' + ' else' + + ' Valor := 100 - (Valor/SUM()); ' '' - '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;' + ' memo16.lines.add(FormatFloat('#39'#,##0.00 %'#39',Valor));' 'end;' '' 'begin' - '' - 'end.') + 'end. ') ShowProgress = False StoreInDFM = False OnStartReport = 'frxReportOnStartReport' @@ -1236,15 +1739,23 @@ object RptFacturasProveedor: TRptFacturasProveedor ShowDialog = False UseFileCache = True ShowProgress = False + OverwritePrompt = False PrintOptimized = True Outline = False + Background = False + HTMLTags = True Author = 'FactuGES' Subject = 'FactuGES' - Background = False Creator = 'FactuGES' - HTMLTags = True - Left = 424 - Top = 288 + ProtectionFlags = [ePrint, eModify, eCopy, eAnnot] + HideToolbar = False + HideMenubar = False + HideWindowUI = False + FitWindow = False + CenterWindow = False + PrintScaling = False + Left = 408 + Top = 16 end object tbl_InformeListadoFacturas: TDAMemDataTable RemoteUpdatesOptions = [] @@ -1316,8 +1827,6 @@ object RptFacturasProveedor: TRptFacturasProveedor RemoteFetchEnabled = False LocalSchema = schReport LocalDataStreamer = Bin2DataStreamer - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] LogicalName = 'InformeListadoFacturas' IndexDefs = <> Left = 576 @@ -1333,6 +1842,7 @@ object RptFacturasProveedor: TRptFacturasProveedor UserName = 'frxDBInformeListadoFacturas' CloseDataSource = False DataSource = DADSInformeListadoFacturas + BCDToCurrency = False Left = 576 Top = 16 end @@ -1411,8 +1921,6 @@ object RptFacturasProveedor: TRptFacturasProveedor RemoteFetchEnabled = False LocalSchema = schReport LocalDataStreamer = Bin2DataStreamer - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] LogicalName = 'InformeListadoFacturasPendientes' IndexDefs = <> Left = 768 @@ -1428,6 +1936,7 @@ object RptFacturasProveedor: TRptFacturasProveedor UserName = 'frxDBInformeListadoFacturasPendientes' CloseDataSource = False DataSource = DADSInformeListadoFacturasPendientes + BCDToCurrency = False Left = 768 Top = 16 end @@ -1441,6 +1950,7 @@ object RptFacturasProveedor: TRptFacturasProveedor UserName = 'frxDBInformeListadoFacturasPendResumen' CloseDataSource = False DataSource = DADSInformeListadoFacturasPendResumen + BCDToCurrency = False Left = 768 Top = 208 end @@ -1448,6 +1958,7 @@ object RptFacturasProveedor: TRptFacturasProveedor UserName = 'frxDBInformeListadoFacturasResumen' CloseDataSource = False DataSource = DADSInformeListadoFacturasResumen + BCDToCurrency = False Left = 576 Top = 216 end @@ -1465,8 +1976,6 @@ object RptFacturasProveedor: TRptFacturasProveedor LogChanges = False StreamingOptions = [soDisableEventsWhileStreaming] RemoteFetchEnabled = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] IndexDefs = <> Left = 576 Top = 328 @@ -1479,8 +1988,6 @@ object RptFacturasProveedor: TRptFacturasProveedor LogChanges = False StreamingOptions = [soDisableEventsWhileStreaming] RemoteFetchEnabled = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] IndexDefs = <> Left = 768 Top = 328 @@ -1493,4 +2000,325 @@ object RptFacturasProveedor: TRptFacturasProveedor Left = 64 Top = 200 end + object DASInformeListadoFacturasGrafComp: TDADataSource + Left = 104 + Top = 352 + end + object tbl_InformeListadoFacturasGrafCompMensual: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = Bin2DataStreamer + LogicalName = 'InformeListadoFacturasGrafCompMensual' + IndexDefs = <> + Left = 104 + Top = 408 + end + object tbl_InformeListadoFacturasGrafCompTrimestral: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = Bin2DataStreamer + LogicalName = 'InformeListadoFacturasGrafCompTrimestral' + IndexDefs = <> + Left = 104 + Top = 464 + end + object frxDBInformeListadoFacturasGrafComp: TfrxDBDataset + UserName = 'frxDBInformeListadoFacturasGrafComp' + CloseDataSource = False + DataSource = DASInformeListadoFacturasGrafComp + BCDToCurrency = False + Left = 104 + Top = 304 + end + object tbl_InformeListadoFacturasGrafCompSemestral: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'VALOR' + DataType = datSmallInt + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 20 + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'IMPORTE_TOTAL1' + DataType = datCurrency + end + item + Name = 'DIFERENCIA' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + Params = < + item + Name = 'ID_EMPRESA1' + Value = '' + end + item + Name = 'ANO1' + Value = '' + end + item + Name = 'ID_EMPRESA2' + Value = '' + end + item + Name = 'ANO2' + Value = '' + end> + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = Bin2DataStreamer + LogicalName = 'InformeListadoFacturasGrafCompSemestral' + IndexDefs = <> + Left = 104 + Top = 520 + end + object frxDBInformeListadoProveedoresMayorFacturacionResumen: TfrxDBDataset + UserName = 'frxDBInformeListadoProveedoresMayorFacturacionResumen' + CloseDataSource = False + DataSource = DADSInformeListadoProveedoresMayorFacturacionResumen + BCDToCurrency = False + Left = 312 + Top = 432 + end + object DADSInformeListadoProveedoresMayorFacturacionResumen: TDADataSource + DataSet = tbl_InformeListadoProveedoresMayorFacturacionResumen.Dataset + DataTable = tbl_InformeListadoProveedoresMayorFacturacionResumen + Left = 312 + Top = 488 + end + object tbl_InformeListadoProveedoresMayorFacturacionResumen: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ANO' + DataType = datSmallInt + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_TOTAL_ANO' + DataType = datCurrency + end + item + Name = 'NUMFAC' + DataType = datInteger + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + Params = < + item + Name = 'ID_EMPRESA' + DataType = datInteger + Value = '1' + end + item + Name = 'ANO' + Value = '2010' + end + item + Name = 'NTOP' + Value = '5' + end> + MasterMappingMode = mmDataRequest + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = Bin2DataStreamer + LogicalName = 'InformeListadoProveedoresMayorFacturacionResumen' + IndexDefs = <> + Left = 312 + Top = 544 + end + object frxDBInformeListadoProveedoresMayorDescuentoResumen: TfrxDBDataset + UserName = 'frxDBInformeListadoProveedoresMayorDescuentoResumen' + CloseDataSource = False + DataSource = DADSInformeListadoProveedoresMayorDescuentoResumen + BCDToCurrency = False + Left = 616 + Top = 432 + end + object DADSInformeListadoProveedoresMayorDescuentoResumen: TDADataSource + DataSet = tbl_InformeListadoProveedoresMayorDescuentoResumen.Dataset + DataTable = tbl_InformeListadoProveedoresMayorDescuentoResumen + Left = 616 + Top = 488 + end + object tbl_InformeListadoProveedoresMayorDescuentoResumen: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ANO' + DataType = datSmallInt + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_DESCUENTO' + DataType = datCurrency + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'IMPORTE_COBRADO' + DataType = datCurrency + end + item + Name = 'PORCENTAJE' + DataType = datCurrency + end> + Params = < + item + Name = 'ID_EMPRESA' + DataType = datInteger + Value = '' + end + item + Name = 'ANO' + Value = '' + end + item + Name = 'NTOP' + Value = '' + end> + MasterMappingMode = mmDataRequest + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = Bin2DataStreamer + LogicalName = 'InformeListadoProveedoresMayorDescuentoResumen' + IndexDefs = <> + Left = 616 + Top = 544 + 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 ad6ffa6a..84e15a63 100644 --- a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas +++ b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas @@ -37,6 +37,17 @@ type tbl_InformeListadoFacturasPendResumen: TDAMemDataTable; Bin2DataStreamer: TDABin2DataStreamer; DARemoteDataAdapter: TDARemoteDataAdapter; + DASInformeListadoFacturasGrafComp: TDADataSource; + tbl_InformeListadoFacturasGrafCompMensual: TDAMemDataTable; + tbl_InformeListadoFacturasGrafCompTrimestral: TDAMemDataTable; + frxDBInformeListadoFacturasGrafComp: TfrxDBDataset; + tbl_InformeListadoFacturasGrafCompSemestral: TDAMemDataTable; + frxDBInformeListadoProveedoresMayorFacturacionResumen: TfrxDBDataset; + DADSInformeListadoProveedoresMayorFacturacionResumen: TDADataSource; + tbl_InformeListadoProveedoresMayorFacturacionResumen: TDAMemDataTable; + frxDBInformeListadoProveedoresMayorDescuentoResumen: TfrxDBDataset; + DADSInformeListadoProveedoresMayorDescuentoResumen: TDADataSource; + tbl_InformeListadoProveedoresMayorDescuentoResumen: TDAMemDataTable; schReport: TDASchema; procedure DataModuleCreate(Sender: TObject); procedure DataModuleDestroy(Sender: TObject); @@ -47,19 +58,26 @@ type FFechaFin: Variant; FFechaVenInicio: Variant; FFechaVenFin: Variant; + FAno1: Variant; + FAno2: Variant; + FIntervalo: Variant; FListaIDProveedores: TIntegerArray; FListaNombresProveedores: TStringList; FImporteMinimo: Currency; FDesglosado : Boolean; + FTopN: Integer; procedure RecuperarNombresProveedores; procedure PrepararTablaInforme(ATabla: TDAMemDataTable); procedure PrepararTablaResumenInforme(ATabla: IDADataset); + procedure PrepararTablaInformeGrafComp(ATabla: TDAMemDataTable); + procedure PrepararTablaResumenInformeGrafComp(ATabla: TDAMemDataTable); 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; function GenerarInformeListadoFacturasPendientes(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; + function GenerarInformeFacturasGrafComp(const IdEmpresa: Integer; const Intervalo: Variant; const Ano1: Variant; const Ano2: Variant; const ListaIDProveedores: TIntegerArray; const TopN: Integer): Binary; end; implementation @@ -68,7 +86,7 @@ implementation uses uSistemaFunc, StrUtils, uDataModuleServer, schFacturasProveedorClient_Intf, - uROServer, DataAbstract4_Intf; + uROServer, DataAbstract4_Intf, srvGestorInformes_Impl; const rptInformeIVA = 'InformeIVAProveedores.fr3'; @@ -77,6 +95,7 @@ const rptInformeListadoFacturasProveedorDesglosado = 'InformeListadoFacturasProveedorDesglosado.fr3'; rptInformeListadoFactuasProveedorPendiente = 'InformeListadoFacturasProveedorPendientes.fr3'; rptInformeListadoFactuasProveedorPendienteDesglosado = 'InformeListadoFacturasProveedorPendientesDesglosado.fr3'; + rptInformeListadoFacturasProveedorGrafComp = 'InformeListadoFacturasProveedorGrafComp.fr3'; { Dataset names for schReport } ds_InformeListadoFacturasResumen = 'InformeListadoFacturasResumen'; @@ -99,6 +118,59 @@ begin FreeANDNIL(FListaNombresProveedores); end; +function TRptFacturasProveedor.GenerarInformeFacturasGrafComp( + const IdEmpresa: Integer; const Intervalo, Ano1, Ano2: Variant; + const ListaIDProveedores: TIntegerArray; const TopN: Integer): Binary; +var + AStream: TMemoryStream; + AInforme: Variant; + +begin + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + + AStream := TMemoryStream.Create; + try + //Inicializamos parametros + FIdEmpresa := IdEmpresa; + FAno1 := Ano1; + FAno2 := Ano2; + FIntervalo := Intervalo; + FTopN := TopN; + + if Assigned(FListaIDProveedores) then + FListaIDProveedores.Free; + FListaIDProveedores := ListaIDProveedores; + + //Preparamos la tabla correspondiente y la abrimos para el informe + if (FIntervalo = CTE_MENSUAL) then + PrepararTablaInformeGrafComp(tbl_InformeListadoFacturasGrafCompMensual) + else if (FIntervalo = CTE_TRIMESTRAL) then + PrepararTablaInformeGrafComp(tbl_InformeListadoFacturasGrafCompTrimestral) + else + PrepararTablaInformeGrafComp(tbl_InformeListadoFacturasGrafCompSemestral); + + //Se preparan las tablas del listado resumen del informe + PrepararTablaResumenInformeGrafComp(tbl_InformeListadoProveedoresMayorFacturacionResumen); + PrepararTablaResumenInformeGrafComp(tbl_InformeListadoProveedoresMayorDescuentoResumen); + + Result := Binary.Create; + + AInforme := DarRutaFichero(DarRutaInformes, rptInformeListadoFacturasProveedorGrafComp, IntTostr(FIdEmpresa)); + if VarIsNull(AInforme) then + raise Exception.Create (('Error Servidor: GenerarInformeFacturasGrafComp, no encuentra informe ' + rptInformeListadoFacturasProveedorGrafComp)); + + frxReport.LoadFromFile(AInforme, True); +// IniciarParametrosInforme; + + frxReport.PrepareReport(False); + frxReport.PreviewPages.SaveToStream(Result); + + finally + AStream.Free; + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + end; +end; + function TRptFacturasProveedor.GenerarInformeIVA(const IdEmpresa: Integer; const FechaInicio, FechaFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; @@ -445,6 +517,19 @@ begin end; end; +procedure TRptFacturasProveedor.PrepararTablaInformeGrafComp(ATabla: TDAMemDataTable); +begin + if ATabla.Active then + ATabla.Active := False; + + DASInformeListadoFacturasGrafComp.DataTable := ATabla; + ATabla.ParamByName('ID_EMPRESA1').AsInteger := FIdEmpresa; + ATabla.ParamByName('ID_EMPRESA2').AsInteger := FIdEmpresa; + ATabla.ParamByName('ANO1').AsVariant := FAno1; + ATabla.ParamByName('ANO2').AsVariant := FAno2; + ATabla.Active := True; +end; + procedure TRptFacturasProveedor.PrepararTablaResumenInforme(ATabla: IDADataset); var i: Integer; @@ -494,6 +579,17 @@ begin ATabla.Where.AddText(AWhereStr); end; +procedure TRptFacturasProveedor.PrepararTablaResumenInformeGrafComp(ATabla: TDAMemDataTable); +begin + if ATabla.Active then + ATabla.Active := False; + + ATabla.ParamByName('ID_EMPRESA').AsInteger := FIdEmpresa; + ATabla.ParamByName('ANO').AsVariant := FAno1; + ATabla.ParamByName('NTOP').AsInteger := FTopN; + ATabla.Active := True; +end; + procedure TRptFacturasProveedor.RecuperarNombresProveedores; var AContactosService : IsrvContactos; diff --git a/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.pas b/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.pas index bfde10a1..46101346 100644 --- a/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.pas +++ b/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.pas @@ -33,6 +33,10 @@ type procedure DARemoteServiceCreate(Sender: TObject); procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject; var aConnectionName: string); + + public + function DarListaAnos: StringArray; + end; implementation @@ -71,6 +75,24 @@ begin bpFacturasProveedor.BusinessRulesID := BIZ_SERVER_FACTURAS_PROVEEDOR; end; +function TsrvFacturasProveedor.DarListaAnos: StringArray; +var + dsAnos : IDADataset; +begin + Result := StringArray.Create(); + try + dsAnos := schFacturasProveedor.NewDataset(Connection, 'ListaAnosFacturas', '', True); + while not dsAnos.EOF do + begin + Result.Add(dsAnos.Fields[0].AsString); + dsAnos.Next; + end; + finally + dsAnos.Close; + dsAnos := NIL; + end; +end; + procedure TsrvFacturasProveedor.DataAbstractServiceBeforeAcquireConnection( aSender: TObject; var aConnectionName: string); begin diff --git a/Source/Modulos/Gestor de informes/Controller/GestorInformes_controller.dpk b/Source/Modulos/Gestor de informes/Controller/GestorInformes_controller.dpk index 99f61879..45a44a35 100644 --- a/Source/Modulos/Gestor de informes/Controller/GestorInformes_controller.dpk +++ b/Source/Modulos/Gestor de informes/Controller/GestorInformes_controller.dpk @@ -43,6 +43,7 @@ contains uIEditorInformeFacturasProveedorReport in 'View\uIEditorInformeFacturasProveedorReport.pas', uIEditorInformePresupuestosReport in 'View\uIEditorInformePresupuestosReport.pas', uIEditorInformeRecibosProveedorReport in 'View\uIEditorInformeRecibosProveedorReport.pas', - uIEditorInformePedidosReport in 'View\uIEditorInformePedidosReport.pas'; + uIEditorInformePedidosReport in 'View\uIEditorInformePedidosReport.pas', + uIEditorInformeFacturasProveedorReportGrafComp in 'View\uIEditorInformeFacturasProveedorReportGrafComp.pas'; end. diff --git a/Source/Modulos/Gestor de informes/Controller/GestorInformes_controller.dproj b/Source/Modulos/Gestor de informes/Controller/GestorInformes_controller.dproj index 74356137..367a8884 100644 --- a/Source/Modulos/Gestor de informes/Controller/GestorInformes_controller.dproj +++ b/Source/Modulos/Gestor de informes/Controller/GestorInformes_controller.dproj @@ -47,6 +47,7 @@ + diff --git a/Source/Modulos/Gestor de informes/Controller/View/uIEditorInformeFacturasProveedorReportGrafComp.pas b/Source/Modulos/Gestor de informes/Controller/View/uIEditorInformeFacturasProveedorReportGrafComp.pas new file mode 100644 index 00000000..06e3335a --- /dev/null +++ b/Source/Modulos/Gestor de informes/Controller/View/uIEditorInformeFacturasProveedorReportGrafComp.pas @@ -0,0 +1,28 @@ +unit uIEditorInformeFacturasProveedorReportGrafComp; + +interface + +uses + FactuGES_Intf, uIEditorInformeBase; + +type + IEditorInformeFacturasProveedorReportGrafComp = interface(IEditorInformeBase) + ['{1F80F45F-AAD6-460D-9E68-AD4492009926}'] + + function GetIntervalo: Variant; + function GetAno1: Variant; + function GetAno2: Variant; + + function GetListaIDProveedores: TIntegerArray; + + property Intervalo: Variant read GetIntervalo; + property Ano1: Variant read GetAno1; + property Ano2: Variant read GetAno2; + + property ListaIDProveedores: TIntegerArray read GetListaIDProveedores; + end; + + +implementation + +end. diff --git a/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas b/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas index 39161e61..34c076b4 100644 --- a/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas +++ b/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas @@ -14,7 +14,8 @@ type property DataModule: IDataModuleGestorInformes read GetDataModule; // procedure Preview(AFactura : IBizFacturaCliente; AllItems: Boolean = false); // procedure Print(AFactura : IBizFacturaCliente; AllItems: Boolean = false); - + function DarListaIntervalos: TStringList; + //MODULO PRESUPUESTOS DE CLIENTE procedure VerInformeListadoPresupuestos; @@ -34,6 +35,8 @@ type procedure VerInformeIVAProveedores; procedure VerInformeListadoFacturasProv; procedure VerInformeListadoFacturasProvPendientes; + procedure VerInformeFacturasProvGrafComp; + function DarListaAnosFacturasProv: TStringList; //MODULO RECIBOS DE PROVEEDOR procedure VerInformeListadoRecibosProvPendientes; @@ -83,6 +86,9 @@ type procedure VerInformeIVAProveedores; procedure VerInformeListadoFacturasProv; procedure VerInformeListadoFacturasProvPendientes; + procedure VerInformeFacturasProvGrafComp; + function DarListaAnosFacturasProv: TStringList; + function DarListaIntervalos: TStringList; //MODULO RECIBOS DE PROVEEDOR procedure VerInformeListadoRecibosProvPendientes; @@ -104,7 +110,7 @@ uses uIEditorInformeIVAProveedoresReport, uIEditorInformeFacturasProveedorReport, uIEditorInformeFacturasProveedorPendientesReport, uIEditorInformeRecibosProveedorReport, uIEditorInformeRecibosProvPendientesReport, - uIEditorInformePedidosReport; + uIEditorInformePedidosReport, uIEditorInformeFacturasProveedorReportGrafComp; {procedure CopiarArticulosPedido(AOrigen: IBizDetallesPedidoCliente; @@ -264,6 +270,16 @@ begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; +function TGestorInformesController.DarListaAnosFacturasProv: TStringList; +begin + Result := FDataModule.DarListaAnosFacturasProv; +end; + +function TGestorInformesController.DarListaIntervalos: TStringList; +begin + Result := FDataModule.DarListaIntervalos; +end; + destructor TGestorInformesController.Destroy; begin FDataModule := Nil; @@ -275,6 +291,30 @@ begin Result := FDataModule; end; +procedure TGestorInformesController.VerInformeFacturasProvGrafComp; +var + AStream: Binary; + AEditor : IEditorInformeFacturasProveedorReportGrafComp; +begin + AEditor := NIL; + CreateEditor('EditorInformeFacturasProveedorReportGrafComp', IEditorInformeFacturasProveedorReportGrafComp, AEditor); + if Assigned(AEditor) then + try + AEditor.Controller := Self; + AEditor.Title := 'Informe comparativo de facturación de proveedores'; + + AStream := FDataModule.GenerarInformeFacturasProvGrafComp(AppFactuGES.EmpresaActiva.ID, + AEditor.Intervalo, AEditor.Ano1, AEditor.Ano2, AEditor.ListaIDProveedores); + + AEditor.LoadFromStream(AStream); + AEditor.Preview; + finally + AEditor.Release; + AEditor := Nil; + FreeAndNil(AStream); + end; +end; + procedure TGestorInformesController.VerInformeIVAClientes; var AStream: Binary; diff --git a/Source/Modulos/Gestor de informes/Data/uDataModuleGestorInformes.dfm b/Source/Modulos/Gestor de informes/Data/uDataModuleGestorInformes.dfm index 03b96bdd..d4b8f8d4 100644 --- a/Source/Modulos/Gestor de informes/Data/uDataModuleGestorInformes.dfm +++ b/Source/Modulos/Gestor de informes/Data/uDataModuleGestorInformes.dfm @@ -10,12 +10,12 @@ inherited DataModuleGestorInformes: TDataModuleGestorInformes Top = 16 end object rda_GestorInformes: TDARemoteDataAdapter + DataStreamer = Bin2DataStreamer GetSchemaCall.RemoteService = RORemoteService GetDataCall.RemoteService = RORemoteService UpdateDataCall.RemoteService = RORemoteService GetScriptsCall.RemoteService = RORemoteService RemoteService = RORemoteService - DataStreamer = Bin2DataStreamer Left = 43 Top = 135 end @@ -47,8 +47,6 @@ inherited DataModuleGestorInformes: TDataModuleGestorInformes end> StreamingOptions = [soDisableEventsWhileStreaming] RemoteDataAdapter = rda_GestorInformes - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] LogicalName = 'DirectoryData' IndexDefs = <> Left = 184 diff --git a/Source/Modulos/Gestor de informes/Data/uDataModuleGestorInformes.pas b/Source/Modulos/Gestor de informes/Data/uDataModuleGestorInformes.pas index 1731b9a4..28e01990 100644 --- a/Source/Modulos/Gestor de informes/Data/uDataModuleGestorInformes.pas +++ b/Source/Modulos/Gestor de informes/Data/uDataModuleGestorInformes.pas @@ -21,6 +21,7 @@ type procedure DAClientDataModuleCreate(Sender: TObject); public // function GetItems : IBizFacturaCliente; + function DarListaIntervalos: TStringList; //MODULO PRESUPUESTOS DE CLIENTE function GenerarInformeListadoPresupuestos(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; @@ -41,6 +42,8 @@ type function GenerarInformeIVAProveedores(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; function GenerarInformeListadoFacturasProv(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; function GenerarInformeListadoFacturasProvPendientes(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; + function GenerarInformeFacturasProvGrafComp(const IdEmpresa: Integer; const Intervalo: Variant; const Ano1: Variant; const Ano2: Variant; const ListaIDProveedores: TIntegerArray): Binary; + function DarListaAnosFacturasProv: TStringList; //MODULO RECIBOS DE CLIENTE function GenerarInformeListadoRecibosProvPendientes(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; @@ -55,7 +58,7 @@ implementation uses uDataModuleConexion, uDataTableUtils, cxControls, - Dialogs; + Dialogs, DataAbstract4_Intf; { TdmPresupuestos } @@ -65,6 +68,48 @@ begin RORemoteService.Message := dmConexion.Message; end; +function TDataModuleGestorInformes.DarListaAnosFacturasProv: TStringList; +var + i: Integer; + AResultado : StringArray; +begin + Result := Nil; + try + AResultado := (RORemoteService as IsrvGestorInformes).DarListaAnosFacturasProv; + Result := TStringList.Create; + for i:= 0 to AResultado.Count - 1 do + Result.Add(AResultado.Items[i]); + finally + FreeANDNIL(AResultado) + end; +end; + +function TDataModuleGestorInformes.DarListaIntervalos: TStringList; +var + i: Integer; + AResultado : StringArray; +begin + Result := Nil; + try + AResultado := (RORemoteService as IsrvGestorInformes).DarListaIntervalos; + Result := TStringList.Create; + for i:= 0 to AResultado.Count - 1 do + Result.Add(AResultado.Items[i]); + finally + FreeANDNIL(AResultado) + end; +end; + +function TDataModuleGestorInformes.GenerarInformeFacturasProvGrafComp( + const IdEmpresa: Integer; const Intervalo, Ano1, Ano2: Variant; + const ListaIDProveedores: TIntegerArray): Binary; +begin + try + Result := (RORemoteService as IsrvGestorInformes).GenerarInformeFacturasProvGrafComp(IdEmpresa, Intervalo, Ano1, Ano2, ListaIdProveedores, 7); + finally + end; +end; + function TDataModuleGestorInformes.GenerarInformeIVAClientes(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; begin try diff --git a/Source/Modulos/Gestor de informes/Model/Data/uIDataModuleGestorInformes.pas b/Source/Modulos/Gestor de informes/Model/Data/uIDataModuleGestorInformes.pas index 1e85096f..f54d1732 100644 --- a/Source/Modulos/Gestor de informes/Model/Data/uIDataModuleGestorInformes.pas +++ b/Source/Modulos/Gestor de informes/Model/Data/uIDataModuleGestorInformes.pas @@ -3,12 +3,14 @@ unit uIDataModuleGestorInformes; interface uses - uROTypes, FactuGES_Intf; + uROTypes, Classes, FactuGES_Intf; type IDataModuleGestorInformes = interface + ['{65FB8E9E-5218-43DC-80AD-BDB4383B7064}'] // function GetItems: IBizFacturaCliente; + function DarListaIntervalos: TStringList; procedure getInforme; //MODULO PRESUPUESTOS DE CLIENTE @@ -31,6 +33,9 @@ type function GenerarInformeListadoFacturasProv(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; function GenerarInformeListadoFacturasProvPendientes(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; + function GenerarInformeFacturasProvGrafComp(const IdEmpresa: Integer; const Intervalo: Variant; const Ano1: Variant; const Ano2: Variant; const ListaIDProveedores: TIntegerArray): Binary; + function DarListaAnosFacturasProv: TStringList; + //MODULO RECIBOS DE CLIENTE function GenerarInformeListadoRecibosProvPendientes(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; function GenerarInformeListadoRecibosProveedor(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; diff --git a/Source/Modulos/Gestor de informes/Plugin/uPluginGestorInformes.dfm b/Source/Modulos/Gestor de informes/Plugin/uPluginGestorInformes.dfm index 9b80ff8a..663ec359 100644 --- a/Source/Modulos/Gestor de informes/Plugin/uPluginGestorInformes.dfm +++ b/Source/Modulos/Gestor de informes/Plugin/uPluginGestorInformes.dfm @@ -103,6 +103,12 @@ object PluginGestorInformes: TPluginGestorInformes ImageIndex = 0 OnExecute = actInformeRecibosProvPendientesExecute end + object actInformeFacturasProveedorGrafComp: TAction + Category = 'Facturas de proveedor' + Caption = 'Informe comparativo de facturaci'#243'n de proveedores' + ImageIndex = 0 + OnExecute = actInformeFacturasProveedorGrafCompExecute + end end object MainMenu: TMainMenu Images = LargeImages @@ -162,6 +168,14 @@ object PluginGestorInformes: TPluginGestorInformes Tag = 130 Action = actInformeRecibosProvPendientes end + object N5: TMenuItem + Tag = 140 + Caption = '-' + end + object Informecomparativodefacturacindeproveedores1: TMenuItem + Tag = 150 + Action = actInformeFacturasProveedorGrafComp + end end end object SmallImages: TPngImageList diff --git a/Source/Modulos/Gestor de informes/Plugin/uPluginGestorInformes.pas b/Source/Modulos/Gestor de informes/Plugin/uPluginGestorInformes.pas index 766a0a0a..489e0a7b 100644 --- a/Source/Modulos/Gestor de informes/Plugin/uPluginGestorInformes.pas +++ b/Source/Modulos/Gestor de informes/Plugin/uPluginGestorInformes.pas @@ -41,6 +41,9 @@ type N4: TMenuItem; Listadoderecibosdeproveedor1: TMenuItem; Listadoderecibosdeproveedorpendientes1: TMenuItem; + actInformeFacturasProveedorGrafComp: TAction; + N5: TMenuItem; + Informecomparativodefacturacindeproveedores1: TMenuItem; procedure actInformeFacturasClienteExecute(Sender: TObject); procedure actInformeFacturasClientePendientesExecute(Sender: TObject); procedure actInformeFacturasClienteIVAExecute(Sender: TObject); @@ -51,6 +54,7 @@ type procedure actInformeFacturasProveedorIVAExecute(Sender: TObject); procedure actInformeRecibosProveedorExecute(Sender: TObject); procedure actInformeRecibosProvPendientesExecute(Sender: TObject); + procedure actInformeFacturasProveedorGrafCompExecute(Sender: TObject); private FController : IGestorInformesController; public @@ -98,6 +102,12 @@ begin FController.VerInformeListadoFacturasProv; end; +procedure TPluginGestorInformes.actInformeFacturasProveedorGrafCompExecute( + Sender: TObject); +begin + FController.VerInformeFacturasProvGrafComp; +end; + procedure TPluginGestorInformes.actInformeFacturasProveedorIVAExecute( Sender: TObject); begin diff --git a/Source/Modulos/Gestor de informes/Servidor/srvGestorInformes_Impl.pas b/Source/Modulos/Gestor de informes/Servidor/srvGestorInformes_Impl.pas index 6419edd5..6dea5f7f 100644 --- a/Source/Modulos/Gestor de informes/Servidor/srvGestorInformes_Impl.pas +++ b/Source/Modulos/Gestor de informes/Servidor/srvGestorInformes_Impl.pas @@ -25,12 +25,19 @@ const ds_Customers = 'Customers'; ds_Regions = 'Regions'; + CTE_MENSUAL = 'Mensual'; + CTE_TRIMESTRAL = 'Trimestral'; + CTE_SEMESTRAL = 'Semestral'; + type { TGestorInformes } TsrvGestorInformes = class(TDataAbstractService, IsrvGestorInformes) Schema: TDASchema; Bin2DataStreamer: TDABin2DataStreamer; public + //MODULO DE INFORMES + function DarListaIntervalos: StringArray; + //MODULO PRESUPUESTOS CLIENTE function GenerarInformeListadoPresupuestos(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; @@ -39,6 +46,9 @@ type function GenerarInformeListadoFacturasCli(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const FechaVenInicio: Variant; const FechaVenFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; function GenerarInformeListadoFacturasCliPendientes(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const FechaVenInicio: Variant; const FechaVenFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; + function GenerarInformeFacturasCliGrafComp(const IdEmpresa: Integer; const Intervalo: Variant; const Ano1: Variant; const Ano2: Variant; const ListaIDClientes: TIntegerArray; const TopN: Integer): Binary; + function DarListaAnosFacturasCli: StringArray; + //MODULO RECIBOS CLIENTE function GenerarInformeListadoRecibosCliente(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const FechaVenInicio: Variant; const FechaVenFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; function GenerarInformeListadoRecibosCliPendientes(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const FechaVenInicio: Variant; const FechaVenFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; @@ -51,6 +61,9 @@ type function GenerarInformeListadoFacturasProv(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; function GenerarInformeListadoFacturasProvPendientes(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; + function GenerarInformeFacturasProvGrafComp(const IdEmpresa: Integer; const Intervalo: Variant; const Ano1: Variant; const Ano2: Variant; const ListaIDProveedores: TIntegerArray; const TopN: Integer): Binary; + function DarListaAnosFacturasProv: StringArray; + //MODULO RECIBOS PROVEEDOR function GenerarInformeListadoRecibosProveedor(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; function GenerarInformeListadoRecibosProvPendientes(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; @@ -62,13 +75,78 @@ implementation uses {Generated:} FactuGES_Invk, uDataModuleServer, uDatabaseUtils, Dialogs, uRptPresupuestosCliente_Server, uRptFacturasCliente_Server, uRptRecibosCliente_Server, - uRptPedidosProveedor_Server, uRptFacturasProveedor_Server, uRptRecibosProveedor_Server; + uRptPedidosProveedor_Server, uRptFacturasProveedor_Server, uRptRecibosProveedor_Server, + srvFacturasProveedor_Impl, srvFacturasCliente_Impl; procedure Create_srvGestorInformes(out anInstance: IUnknown); begin anInstance := TsrvGestorInformes.Create(nil); end; + +function TsrvGestorInformes.DarListaAnosFacturasCli: StringArray; +var + AServer : TsrvFacturasCliente; +begin + Result := Nil; + AServer := TsrvFacturasCliente.Create(nil); + try + Result := AServer.DarListaAnos; + finally + FreeAndNIL(AServer); + end; +end; + +function TsrvGestorInformes.DarListaAnosFacturasProv: StringArray; +var + AServer : TsrvFacturasProveedor; +begin + Result := Nil; + AServer := TsrvFacturasProveedor.Create(nil); + try + Result := AServer.DarListaAnos; + finally + FreeAndNIL(AServer); + end; +end; + + +function TsrvGestorInformes.DarListaIntervalos: StringArray; +begin + Result := StringArray.Create(); + Result.Add(CTE_MENSUAL); + Result.Add(CTE_TRIMESTRAL); + Result.Add(CTE_SEMESTRAL); +end; + +function TsrvGestorInformes.GenerarInformeFacturasCliGrafComp( + const IdEmpresa: Integer; const Intervalo, Ano1, Ano2: Variant; + const ListaIDClientes: TIntegerArray; const TopN: Integer): Binary; +var + AReportGenerator : TRptFacturasCliente; +begin + AReportGenerator := TRptFacturasCliente.Create(nil); + try + Result := AReportGenerator.GenerarInformeFacturasGrafComp(IdEmpresa, Intervalo, Ano1, Ano2, ListaIDClientes, TopN); + finally + FreeAndNIL(AReportGenerator); + end; +end; + +function TsrvGestorInformes.GenerarInformeFacturasProvGrafComp( + const IdEmpresa: Integer; const Intervalo, Ano1, Ano2: Variant; + const ListaIDProveedores: TIntegerArray; const TopN: Integer): Binary; +var + AReportGenerator : TRptFacturasProveedor; +begin + AReportGenerator := TRptFacturasProveedor.Create(nil); + try + Result := AReportGenerator.GenerarInformeFacturasGrafComp(IdEmpresa, Intervalo, Ano1, Ano2, ListaIDProveedores, TopN); + finally + FreeAndNIL(AReportGenerator); + end; +end; + function TsrvGestorInformes.GenerarInformeIVAClientes(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; var AReportGenerator : TRptFacturasCliente; diff --git a/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dpk b/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dpk index 958b4734..12859f3c 100644 --- a/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dpk +++ b/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dpk @@ -64,11 +64,13 @@ requires dxLayoutControlD11, dxComnD11, cxEditorsD11, - cxDataD11; + cxDataD11, + dxCoreD11, + fqb110, + bdertl; contains uGestorInformesViewRegister in 'uGestorInformesViewRegister.pas', - uViewPeriodoFechas in 'uViewPeriodoFechas.pas' {frViewPeriodoFechas: TFrame}, uViewFiltroImportes in 'uViewFiltroImportes.pas' {frViewFiltroImportes: TFrame}, uEditorInformeIVAClientesReport in 'uEditorInformeIVAClientesReport.pas' {fEditorInformeIVAClientesReport: TForm}, uEditorInformeBase in 'uEditorInformeBase.pas' {fEditorInformeBase: TForm}, @@ -85,6 +87,9 @@ contains uEditorInformeFacturasProveedorReport in 'uEditorInformeFacturasProveedorReport.pas' {fEditorInformeFacturasProveedorReport: TForm}, uEditorInformePedidosReport in 'uEditorInformePedidosReport.pas' {fEditorInformePedidosReport: TForm}, uEditorInformeRecibosProveedorReport in 'uEditorInformeRecibosProveedorReport.pas' {fEditorInformeRecibosProveedorReport: TForm}, - uEditorInformePresupuestosReport in 'uEditorInformePresupuestosReport.pas' {fEditorInformePresupuestosReport: TForm}; + uEditorInformePresupuestosReport in 'uEditorInformePresupuestosReport.pas' {fEditorInformePresupuestosReport: TForm}, + uViewPeriodoFechas in 'uViewPeriodoFechas.pas' {frViewPeriodoFechas: TFrame}, + uViewIntervaloComparativo in 'uViewIntervaloComparativo.pas' {TfrViewIntervaloComparativo: TFrame}, + uEditorInformeFacturasProveedorReportGrafComp in 'uEditorInformeFacturasProveedorReportGrafComp.pas' {fEditorInformeFacturasProveedorReportGrafComp: TForm}; end. diff --git a/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dproj b/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dproj index 6a768ffc..188c4328 100644 --- a/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dproj +++ b/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dproj @@ -38,40 +38,49 @@ MainSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fEditorInformeBase
TForm @@ -92,6 +101,10 @@
fEditorInformeFacturasProveedorReport
TForm
+ +
fEditorInformeFacturasProveedorReportGrafComp
+ TForm +
fEditorInformeIVAClientesReport
TForm @@ -105,7 +118,7 @@ TForm
-
fEditorInformePresupuestoReport
+
fEditorInformePresupuestosReport
TForm
@@ -137,6 +150,10 @@
frViewFiltroProveedores
TFrame
+ +
TfrViewIntervaloComparativo
+ TFrame +
frViewParametrosInforme
TFrame @@ -145,12 +162,6 @@
frViewPeriodoFechas
TFrame
- - - - - -