From 0ea1ccb0a4592475a8b399b0792660d5cb88a4e8 Mon Sep 17 00:00:00 2001 From: roberto Date: Mon, 12 Jan 2009 18:40:25 +0000 Subject: [PATCH] Se arregla fallo al buscar dia de pago al generar los recibos da las Facturas (en los casos de establecer como dia de pago el 31 para que no fallen en los meses que son 30 dias) git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@836 0c75b7a4-871f-7646-8a2f-f78d34cc349f --- .../Controller/uFacturasClienteController.pas | 18 +++++++++++++++++- .../uFacturasProveedorController.pas | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas index 7cd59a01..3e8c2b3c 100644 --- a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas +++ b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas @@ -1099,6 +1099,7 @@ var i: Integer; ADiaVencimiento: Integer; ADiasMas: Integer; + BSemaforo: Boolean; begin if not Assigned(AFactura) then @@ -1139,6 +1140,7 @@ begin begin AFechaVencimiento := AFactura.FECHA_FACTURA + AFormaPago.Plazos.NUM_DIAS; ADiasMas := 0; + BSemaforo := False; if (AFactura.Cliente.VENCIMIENTO_FACTURAS_1 <> 0) or (AFactura.Cliente.VENCIMIENTO_FACTURAS_2 <> 0) or (AFactura.Cliente.VENCIMIENTO_FACTURAS_3 <> 0) then @@ -1149,7 +1151,21 @@ begin and (ADiaVencimiento <> AFactura.Cliente.VENCIMIENTO_FACTURAS_3) do begin if ADiaVencimiento = DaysInMonth(AFechaVencimiento) then - ADiaVencimiento := 1 + begin + ADiaVencimiento := 1; + + //Controlamos con una variable semaforo que no nos quedemos en un bucle infinito + //intentando encontrar el dia de pago establecido para el cliente (es el caso de tener + //asignado el dia de pago 30 y llegar febrero en el que no se encuentra dicho dia, o + //tener como dia de pago los días 31 y en el caso de meses de 30 dias no encontrarlo. + if BSemaforo then + begin + ADiasMas := 0; + Break + end + else + BSemaforo := True; + end else Inc(ADiaVencimiento); Inc(ADiasMas); diff --git a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas index 7e3da985..50d27dd1 100644 --- a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas +++ b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas @@ -909,6 +909,7 @@ var i: Integer; ADiaVencimiento: Integer; ADiasMas: Integer; + BSemaforo: Boolean; begin @@ -949,6 +950,7 @@ begin begin AFechaVencimiento := AFactura.FECHA_FACTURA + AFormaPago.Plazos.NUM_DIAS; ADiasMas := 0; + BSemaforo := False; if (AFactura.Proveedor.VENCIMIENTO_FACTURAS_1 <> 0) or (AFactura.Proveedor.VENCIMIENTO_FACTURAS_2 <> 0) or (AFactura.Proveedor.VENCIMIENTO_FACTURAS_3 <> 0) then @@ -959,7 +961,21 @@ begin and (ADiaVencimiento <> AFactura.Proveedor.VENCIMIENTO_FACTURAS_3) do begin if ADiaVencimiento = DaysInMonth(AFechaVencimiento) then - ADiaVencimiento := 1 + begin + ADiaVencimiento := 1; + + //Controlamos con una variable semaforo que no nos quedemos en un bucle infinito + //intentando encontrar el dia de pago establecido para el cliente (es el caso de tener + //asignado el dia de pago 30 y llegar febrero en el que no se encuentra dicho dia, o + //tener como dia de pago los días 31 y en el caso de meses de 30 dias no encontrarlo. + if BSemaforo then + begin + ADiasMas := 0; + Break + end + else + BSemaforo := True; + end else Inc(ADiaVencimiento); Inc(ADiasMas);