diff --git a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas index e298db0a..9ac81f46 100644 --- a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas +++ b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas @@ -786,6 +786,7 @@ procedure TFacturasClienteController.RecalcularImportes( AFactura: IBizFacturaCliente); var bEnEdicion : Boolean; + ADetallePosAct : Integer; begin if not Assigned(AFactura) then raise Exception.Create ('Factura no asignado (RecalcularImportes)'); @@ -793,19 +794,28 @@ begin if AFactura.DataTable.Active then AFactura.DataTable.Active := True; + { Hay que guardar la posición en la que estamos en los detalles por que + la asignación de valores a los campos IMPORTE_NETO e IMPORTE_PORTE + (ver más adelante) colocan el puntero en la tabla detalle al principio. + No he encontrado la razón por la que mueve el puntero. } + + ADetallePosAct := AFactura.Detalles.POSICION; + bEnEdicion := (AFactura.DataTable.State in dsEditModes); if not bEnEdicion then AFactura.Edit; ShowHourglassCursor; - AFactura.Edit; try AFactura.IMPORTE_NETO := FDetallesController.DarTotalImporteTotal(AFactura.Detalles); AFactura.IMPORTE_PORTE := FDetallesController.DarTotalPorteTotal(AFactura.Detalles); + if not bEnEdicion then AFactura.Post; finally HideHourglassCursor; + // Restaurar la posición que teníamos en los detalles. + FDetallesController.LocalizarPosicion(AFactura.Detalles, ADetallePosAct); end; end; @@ -1095,4 +1105,4 @@ begin end; end. - \ No newline at end of file + \ No newline at end of file