
Gran aporte Javier! Estuve haciendo pruebas y tal como lo mencionas logré reproducir el error. Como vos decís, se tienen que dar una serie de condiciones para que justo se produzca el caso que falla, y creo que por esa complejidad no haya sido detectado antes.
La solución? La misma que vos propusiste: agregar el incremento a payIdx cuando se cubre el total de una factura (rama del else).
//NO sobra nada del ultimo medio de pago, por lo tanto
//se debe pasar al próximo Medio de Pago
payIdx++; //Nunca “debería” generar un acceso fuera de indice sobre el vector de medios de pagos…
sobraDelPago = null;
}
En principio no se debería producir un acceso fuera de índice ya que se asume que la suma de los importes de los pagos es igual a la suma de los importes de las facturas, con lo cual, en la próxima iteración si aún queda un monto por cubrir de alguna factura también habrá un pago disponible en el arreglo para cubrir esa factura. De todos modos, habría que hacer pruebas con montos que no sean enteros, que tengan varios decimales porque ahí no me queda claro si la comparación puede llegar a fallar y en ese caso intentar acceder al arreglo de pagos cuando en realidad ya se han acabado.
Este bug estará corregido obviamente en el próximo release de Libertya.
Muchas gracias por tu aporte Javier
Saludos
Franco