From c0a81786db7b8db1dfa8c0f01f6a4df45c64e1f1 Mon Sep 17 00:00:00 2001 From: roberto Date: Mon, 26 May 2008 16:59:17 +0000 Subject: [PATCH] Mejora de DataTableUtils, y insercion de BeginUpdate y EndUpdate en los tratamientos de los detalles de toda la aplicacion git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@386 0c75b7a4-871f-7646-8a2f-f78d34cc349f --- Source/Base/Utiles/uDataTableUtils.pas | 51 ++++++++++++------ .../uAlbaranesProveedorController.pas | 17 ++++-- .../Articulos/Model/Articulos_model.res | Bin 4748 -> 384 bytes .../Model/schArticulosClient_Intf.pas | 6 +-- .../Controller/uFacturasClienteController.pas | 12 +++++ .../uFacturasProveedorController.pas | 12 +++++ .../uGenerarFacturasCliAlbCliUtils.pas | 6 +++ .../uGenerarFacturasProvAlbProvUtils.pas | 6 +++ .../uGenerarAlbaranesCliUtils.pas | 6 +++ .../uGenerarPedidosProvUtils.pas | 6 +++ .../uGenerarAlbaranesProvUtils.pas | 8 ++- .../uGenerarFacturasProvPedProvUtils.pas | 6 +++ .../uGenerarFacturasProvUtils.pas | 6 +++ Source/Servidor/FactuGES_Server.RES | Bin 23200 -> 23196 bytes Source/Servidor/FactuGES_Server.rc | 2 +- 15 files changed, 119 insertions(+), 25 deletions(-) diff --git a/Source/Base/Utiles/uDataTableUtils.pas b/Source/Base/Utiles/uDataTableUtils.pas index c8488798..71d91c83 100644 --- a/Source/Base/Utiles/uDataTableUtils.pas +++ b/Source/Base/Utiles/uDataTableUtils.pas @@ -34,10 +34,10 @@ function CloneDataTable(const ASource : TDAMemDataTable; procedure DuplicarRegistro(ASource : TDADataTable; ATarget : TDADataTable; - Const WithKey: Boolean = False); + Const WithPKKey: Boolean = False; Const WithFKKey: Boolean = False); procedure DuplicarRegistros(ASource : TDADataTable; ATarget : TDADataTable; AModo : TModoDuplicarRegistros; APermitirRepetidos: Boolean = True; - Const WithDeltas: Boolean = True; Const WithKey: Boolean = False); + Const WithDeltas: Boolean = True; Const WithPKKey: Boolean = False; Const WithFKKey: Boolean = False); procedure DeleteAllTable(const ADataTable : TDADataTable); @@ -418,7 +418,7 @@ begin end; end; -procedure DuplicarRegistro(ASource : TDADataTable; ATarget : TDADataTable; Const WithKey: Boolean = False); +procedure DuplicarRegistro(ASource : TDADataTable; ATarget : TDADataTable; Const WithPKKey: Boolean = False; Const WithFKKey: Boolean = False); var i, j: Integer; ATargetField: TDAField; @@ -467,19 +467,40 @@ begin // Los campos AutoInc no se rellenan y tampoco los campos que // formen parte de la relación maestro-detalle en el // caso de que la tabla destino sea una tabla detalle. - if not WithKey then + if not WithPKKey then begin //Si no es campo clave - if not (ATargetField.InPrimaryKey) and //Si no es autoinc (podria desaparecer pero no lo quitamos por si acaso - (ATargetField.DataType <> datAutoInc) and - //Si no hay campos foreing key o los hay pero el campo a copiar no es uno de ellos - (not Assigned(ADetailFields) or not ADetailFields.Find(ATargetField.Name, j)) then - //Copiamos el campo - ATargetField.Value := ASourceField.Value; + if not (ATargetField.InPrimaryKey) and + (ATargetField.DataType <> datAutoInc) then + begin + //En el caso de no copiar las claves foraneas + //Si no hay campos foreing key o los hay pero el campo a copiar no es uno de ellos + if not WithFKKey then + begin + if (not Assigned(ADetailFields) or not ADetailFields.Find(ATargetField.Name, j)) then + //Copiamos el campo + ATargetField.Value := ASourceField.Value; + end + else + //Copiamos el campo + ATargetField.Value := ASourceField.Value; + + end; end else - ATargetField.Value := ASourceField.Value; + //En el caso de no copiar las claves foraneas + //Si no hay campos foreing key o los hay pero el campo a copiar no es uno de ellos + if not WithFKKey then + begin + //Si no hay campos foreing key o los hay pero el campo a copiar no es uno de ellos + if (not Assigned(ADetailFields) or not ADetailFields.Find(ATargetField.Name, j)) then + //Copiamos el campo + ATargetField.Value := ASourceField.Value; + end + else + //Copiamos el campo + ATargetField.Value := ASourceField.Value; end; end; finally @@ -491,7 +512,7 @@ end; procedure DuplicarRegistros(ASource : TDADataTable; ATarget : TDADataTable; AModo : TModoDuplicarRegistros; APermitirRepetidos: Boolean = True; - Const WithDeltas: Boolean = True; Const WithKey: Boolean = False); + Const WithDeltas: Boolean = True; Const WithPKKey: Boolean = False; Const WithFKKey: Boolean = False); begin if not ASource.Active then ASource.Open; @@ -505,18 +526,18 @@ begin DesconectarTabla(ATarget); if AModo = mdrActual then - DuplicarRegistro(ASource, ATarget, WithKey) //ATarget.CloneSelectedRecord(ASource, True) + DuplicarRegistro(ASource, ATarget, WithPKKey, WithFKKey) //ATarget.CloneSelectedRecord(ASource, True) else begin ASource.First; while not ASource.EOF do begin if APermitirRepetidos then - DuplicarRegistro(ASource, ATarget, WithKey) + DuplicarRegistro(ASource, ATarget, WithPKKey, WithFKKey) else begin ATarget.First; if not ATarget.Locate('ID', ASource.FieldByName('ID').AsVariant, []) then - DuplicarRegistro(ASource, ATarget, WithKey); + DuplicarRegistro(ASource, ATarget, WithPKKey, WithFKKey); end; ASource.Next; diff --git a/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas b/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas index b805daf1..d532462f 100644 --- a/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas +++ b/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas @@ -198,6 +198,11 @@ begin ADetallesController := TDetallesAlbaranProveedorController.Create; AArticulosController := TArticulosController.Create; try + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADetalles); + AInventarioRecibido.DataTable.First; for i := 0 to AInventarioRecibido.DataTable.RecordCount - 1 do begin @@ -228,8 +233,8 @@ begin AInventarioRecibido.Next; end; - finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; AArticulosController := NIL; end; @@ -243,6 +248,11 @@ begin ADetallesController := TDetallesAlbaranProveedorController.Create; AArticulosController := TArticulosController.Create; try + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADetalles); + APedido.Detalles.DataTable.First; for i := 0 to APedido.Detalles.DataTable.RecordCount - 1 do begin @@ -265,11 +275,8 @@ begin APedido.Detalles.Next; end; - //Obligamos a actualizar los totales para que asi los importes totales de los artículos - //se recalculen y actualicen - ADetallesController.ActualizarTotales(ADetalles); - finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; AArticulosController := NIL; end; diff --git a/Source/Modulos/Articulos/Model/Articulos_model.res b/Source/Modulos/Articulos/Model/Articulos_model.res index 1641339fcc482e7e3492d1b45813a86619622c33..8b251f312bcccec5485024f6fe8d80e1cdf25746 100644 GIT binary patch delta 11 ScmeBCZD5|Duvteife`=|>;pCc 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 diff --git a/Source/Modulos/Articulos/Model/schArticulosClient_Intf.pas b/Source/Modulos/Articulos/Model/schArticulosClient_Intf.pas index 0b531f9e..2d457f07 100644 --- a/Source/Modulos/Articulos/Model/schArticulosClient_Intf.pas +++ b/Source/Modulos/Articulos/Model/schArticulosClient_Intf.pas @@ -3,7 +3,7 @@ unit schArticulosClient_Intf; interface uses - Classes, DB, SysUtils, uROClasses, uDADataTable, FmtBCD, uROXMLIntf; + Classes, DB, schBase_Intf, SysUtils, uROClasses, uDADataTable, FmtBCD, uROXMLIntf; const { Data table rules ids @@ -254,7 +254,7 @@ type end; { TArticulosDataTableRules } - TArticulosDataTableRules = class(TDADataTableRules, IArticulos) + TArticulosDataTableRules = class(TIntfObjectDADataTableRules, IArticulos) private f_IMAGEN: IROStream; procedure IMAGEN_OnChange(Sender: TObject); @@ -544,7 +544,7 @@ type end; { TArticulosParaClienteDataTableRules } - TArticulosParaClienteDataTableRules = class(TDADataTableRules, IArticulosParaCliente) + TArticulosParaClienteDataTableRules = class(TIntfObjectDADataTableRules, IArticulosParaCliente) private f_IMAGEN: IROStream; procedure IMAGEN_OnChange(Sender: TObject); diff --git a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas index 0c825174..92455d5b 100644 --- a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas +++ b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas @@ -141,6 +141,11 @@ begin ADetallesController := TDetallesFacturaClienteController.Create; try + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADestino); + AOrigen.DataTable.First; for i := 0 to AOrigen.DataTable.RecordCount - 1 do begin @@ -161,6 +166,7 @@ begin AOrigen.Next; end; finally + ADetallesController.EndUpdate(ADestino); ADetallesController := NIL; end; end;} @@ -186,6 +192,11 @@ begin ADetallesController := TDetallesFacturaClienteController.Create; try + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADestino); + AOrigen.DataTable.First; for i := 0 to AOrigen.DataTable.RecordCount - 1 do begin @@ -206,6 +217,7 @@ begin AOrigen.Next; end; finally + ADetallesController.EndUpdate(ADestino); ADetallesController := NIL; end; end; diff --git a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas index 216a7d6c..39626b13 100644 --- a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas +++ b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas @@ -141,6 +141,11 @@ begin ADetallesController := TDetallesFacturaProveedorController.Create; try + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADestino); + AOrigen.DataTable.First; for i := 0 to AOrigen.DataTable.RecordCount - 1 do begin @@ -161,6 +166,7 @@ begin AOrigen.Next; end; finally + ADetallesController.EndUpdate(ADestino); ADetallesController := NIL; end; end; @@ -185,6 +191,11 @@ begin ADetallesController := TDetallesFacturaProveedorController.Create; try + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADestino); + AOrigen.DataTable.First; for i := 0 to AOrigen.DataTable.RecordCount - 1 do begin @@ -205,6 +216,7 @@ begin AOrigen.Next; end; finally + ADetallesController.EndUpdate(ADestino); ADetallesController := NIL; end; end; diff --git a/Source/Modulos/Relaciones/Albaranes de cliente - Facturas de cliente/uGenerarFacturasCliAlbCliUtils.pas b/Source/Modulos/Relaciones/Albaranes de cliente - Facturas de cliente/uGenerarFacturasCliAlbCliUtils.pas index 0fa05c69..22ca10b5 100644 --- a/Source/Modulos/Relaciones/Albaranes de cliente - Facturas de cliente/uGenerarFacturasCliAlbCliUtils.pas +++ b/Source/Modulos/Relaciones/Albaranes de cliente - Facturas de cliente/uGenerarFacturasCliAlbCliUtils.pas @@ -103,6 +103,11 @@ begin AArticulosPendientes.DataTable.First; for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do begin + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADetalles); + AAlbaran.Detalles.First; if (AAlbaran.Detalles.Locate('ID_ARTICULO', AArticulosPendientes.ID_ARTICULO, [])) then if (AArticulosPendientes.CANTIDAD_PENDIENTE > 0) then @@ -124,6 +129,7 @@ begin end; end; finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; end; end; } diff --git a/Source/Modulos/Relaciones/Albaranes de proveedor - Facturas de proveedor/uGenerarFacturasProvAlbProvUtils.pas b/Source/Modulos/Relaciones/Albaranes de proveedor - Facturas de proveedor/uGenerarFacturasProvAlbProvUtils.pas index ec671860..75247df8 100644 --- a/Source/Modulos/Relaciones/Albaranes de proveedor - Facturas de proveedor/uGenerarFacturasProvAlbProvUtils.pas +++ b/Source/Modulos/Relaciones/Albaranes de proveedor - Facturas de proveedor/uGenerarFacturasProvAlbProvUtils.pas @@ -103,6 +103,11 @@ begin AArticulosPendientes.DataTable.First; for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do begin + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADetalles); + AAlbaran.Detalles.First; if (AAlbaran.Detalles.Locate('ID_ARTICULO', AArticulosPendientes.ID_ARTICULO, [])) then if (AArticulosPendientes.CANTIDAD_PENDIENTE > 0) then @@ -124,6 +129,7 @@ begin end; end; finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; end; end; } diff --git a/Source/Modulos/Relaciones/Pedidos de cliente - Albaranes de cliente/uGenerarAlbaranesCliUtils.pas b/Source/Modulos/Relaciones/Pedidos de cliente - Albaranes de cliente/uGenerarAlbaranesCliUtils.pas index 62fc82ed..8ec79a3f 100644 --- a/Source/Modulos/Relaciones/Pedidos de cliente - Albaranes de cliente/uGenerarAlbaranesCliUtils.pas +++ b/Source/Modulos/Relaciones/Pedidos de cliente - Albaranes de cliente/uGenerarAlbaranesCliUtils.pas @@ -98,6 +98,11 @@ begin AArticulosPendientes.DataTable.First; for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do begin + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADetalles); + APedido.Detalles.First; if (APedido.Detalles.Locate('ID_ARTICULO', AArticulosPendientes.ID_ARTICULO, [])) then if (AArticulosPendientes.CANTIDAD_PENDIENTE > 0) then @@ -120,6 +125,7 @@ begin end; end; finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; end; end; diff --git a/Source/Modulos/Relaciones/Pedidos de cliente - Pedidos a proveedor/uGenerarPedidosProvUtils.pas b/Source/Modulos/Relaciones/Pedidos de cliente - Pedidos a proveedor/uGenerarPedidosProvUtils.pas index be55d534..6231b696 100644 --- a/Source/Modulos/Relaciones/Pedidos de cliente - Pedidos a proveedor/uGenerarPedidosProvUtils.pas +++ b/Source/Modulos/Relaciones/Pedidos de cliente - Pedidos a proveedor/uGenerarPedidosProvUtils.pas @@ -122,6 +122,11 @@ begin APedidoProv.ID_PEDIDO_CLIENTE := APedidoCli.ID; end; + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(APedidoProv.Detalles); + ADetallesPedidosProvController.Add(APedidoProv.Detalles, TIPO_DETALLE_CONCEPTO); ADetallesPedidosProvController.AnadirArticulo(APedidoProv.Detalles, AArticulosPend.ID_ARTICULO); with APedidoProv.Detalles do @@ -130,6 +135,7 @@ begin CANTIDAD := AArticulosPend.CANT_PENDIENTE_PEDIR; Post; end; + ADetallesController.EndUpdate(APedidoProv.Detalles); AArticulosPend.DataTable.Next; end; diff --git a/Source/Modulos/Relaciones/Pedidos de proveedor - Albaranes de proveedor/uGenerarAlbaranesProvUtils.pas b/Source/Modulos/Relaciones/Pedidos de proveedor - Albaranes de proveedor/uGenerarAlbaranesProvUtils.pas index b7a5bad4..7c5820a4 100644 --- a/Source/Modulos/Relaciones/Pedidos de proveedor - Albaranes de proveedor/uGenerarAlbaranesProvUtils.pas +++ b/Source/Modulos/Relaciones/Pedidos de proveedor - Albaranes de proveedor/uGenerarAlbaranesProvUtils.pas @@ -100,13 +100,18 @@ begin AArticulosPendientes.DataTable.First; for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do begin + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADetalles); + APedido.Detalles.First; if (APedido.Detalles.Locate('ID_ARTICULO', AArticulosPendientes.ID_ARTICULO, [])) then if (AArticulosPendientes.CANTIDAD > 0) then begin ADetallesController.Add(ADetalles, TIPO_DETALLE_CONCEPTO); ADetalles.Edit; - ADetalles.ID_PEDIDO := APedido.Detalles.ID_PEDIDO; + ADetalles.ID_PEDIDO := APedido.Detalles.ID_PEDIDO; ADetalles.REFERENCIA := APedido.Detalles.REFERENCIA; ADetalles.ID_ARTICULO := APedido.Detalles.ID_ARTICULO; ADetalles.CONCEPTO := APedido.Detalles.CONCEPTO; @@ -122,6 +127,7 @@ begin end; end; finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; end; end; diff --git a/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedProvUtils.pas b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedProvUtils.pas index d4d56a81..4933d43a 100644 --- a/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedProvUtils.pas +++ b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedProvUtils.pas @@ -102,6 +102,11 @@ begin AArticulosPendientes.DataTable.First; for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do begin + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADetalles); + APedido.Detalles.First; if (APedido.Detalles.Locate('ID_ARTICULO', AArticulosPendientes.ID_ARTICULO, [])) then if (AArticulosPendientes.CANTIDAD_PENDIENTE > 0) then @@ -123,6 +128,7 @@ begin end; end; finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; end; end; } diff --git a/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvUtils.pas b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvUtils.pas index 22f67287..effafd7f 100644 --- a/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvUtils.pas +++ b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvUtils.pas @@ -102,6 +102,11 @@ begin AArticulosPendientes.DataTable.First; for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do begin + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADetalles); + APedido.Detalles.First; if (APedido.Detalles.Locate('ID_ARTICULO', AArticulosPendientes.ID_ARTICULO, [])) then if (AArticulosPendientes.CANTIDAD_PENDIENTE > 0) then @@ -123,6 +128,7 @@ begin end; end; finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; end; end; } diff --git a/Source/Servidor/FactuGES_Server.RES b/Source/Servidor/FactuGES_Server.RES index 2eebeb5f30a3a870a1f80cf47f132243a069c79f..0fbbe60c4bc783f2841b5e0fc446ccfdb0a39a1d 100644 GIT binary patch delta 77 zcmZ3mm2u8i#tnBO7#B>w8zB!Q|3*YJGE9z)RA#(0xi+$zIe|f8^6yAl!5oHChCGH; ghGGUC1_cHq2D8c9QOcZ#3>FMl45kbQlOv