diff --git a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas index d580204f..5afd29ca 100644 --- a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas +++ b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas @@ -1218,6 +1218,7 @@ var i: Integer; ADiaVencimiento: Integer; ADiasMas: Integer; + BSemaforo: Boolean; begin if not Assigned(AFactura) then @@ -1253,6 +1254,7 @@ 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 @@ -1263,7 +1265,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 1a4c64fc..b87415ec 100644 --- a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas +++ b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas @@ -1222,6 +1222,7 @@ var i: Integer; ADiaVencimiento: Integer; ADiasMas: Integer; + BSemaforo: Boolean; begin @@ -1257,6 +1258,7 @@ 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 @@ -1267,7 +1269,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);