From 594d7d234701524fb89560808d94ac9ee5054b31 Mon Sep 17 00:00:00 2001 From: roberto Date: Mon, 26 May 2008 14:11:46 +0000 Subject: [PATCH] =?UTF-8?q?Arreglo=20de=20EditorBase=20para=20que=20los=20?= =?UTF-8?q?detalles=20de=20la=20cabecera=20realicen=20tambien=20un=20cance?= =?UTF-8?q?lupdates=20forzado=20para=20que=20no=20se=20queden=20deltas,=20?= =?UTF-8?q?adem=C3=A1s=20de=20arraglo=20del=20el=20controller=20de=20detal?= =?UTF-8?q?lesbase,=20para=20que=20beginupdate=20y=20endupdate=20sean=20pu?= =?UTF-8?q?blicos=20y=20siempre=20que=20se=20realicen=20cambios=20en=20can?= =?UTF-8?q?tidad=20o=20importes=20de=20los=20detalles=20se=20pongan=20para?= =?UTF-8?q?=20forzar=20al=20recalculo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES/trunk@229 c93665c3-c93d-084d-9b98-7d5f4a9c3376 --- .../uControllerDetallesBase.pas | 14 ++++++---- Source/Base/GUIBase/uEditorDBBase.pas | 7 +++++ Source/Base/GUIBase/uEditorDBItem.dfm | 6 +---- .../AlbaranesProveedor_Group.bdsgroup | 12 +++++++-- .../uAlbaranesProveedorController.pas | 25 ++++++++++++------ .../Controller/uFacturasClienteController.pas | 14 ++++++++++ .../uFacturasProveedorController.pas | 14 ++++++++++ .../uGenerarAlbaranesCliUtils.pas | 7 +++++ .../uGenerarPedidosProvUtils.pas | 7 +++++ .../uGenerarAlbaranesProvUtils.pas | 6 +++++ .../Utiles/uActualizarPedidosUtils.pas | 10 ++++++- Source/Servidor/FactuGES_Server.rc | 2 +- Source/Servidor/FactuGES_Server.res | Bin 23336 -> 23332 bytes 13 files changed, 102 insertions(+), 22 deletions(-) diff --git a/Source/Base/ControllerBase/uControllerDetallesBase.pas b/Source/Base/ControllerBase/uControllerDetallesBase.pas index 8198311e..5e754e54 100644 --- a/Source/Base/ControllerBase/uControllerDetallesBase.pas +++ b/Source/Base/ControllerBase/uControllerDetallesBase.pas @@ -23,6 +23,8 @@ type procedure Add(ADataTable: IDAStronglyTypedDataTable; TipoConcepto: Variant); procedure Delete(ADataTable: IDAStronglyTypedDataTable; Posicion: TIntegerArray); procedure Move(ADataTable: IDAStronglyTypedDataTable; Posicion: TIntegerArray; Posiciones: Integer); + procedure BeginUpdate(ADataTable: IDAStronglyTypedDataTable); + procedure EndUpdate(ADataTable: IDAStronglyTypedDataTable); // procedure Copy(SMExport: TSMExportToClipboard); // procedure Paste; @@ -43,8 +45,6 @@ type procedure Renumerar(DataTable: TDADataTable; LocalizaPosicion: Integer); function DesplazarNPosiciones(DataTable: TDADataTable; NumOrdenIni: Variant; NPosiciones: Variant): Integer; procedure Mover(DataTable: TDADataTable; Posicion: Integer; NumPosiciones: Integer); - procedure BeginUpdate(ADataTable: IDAStronglyTypedDataTable); - procedure EndUpdate(ADataTable: IDAStronglyTypedDataTable); //Si en los hijos existen campos a tener en cuenta se sobreescribira este metodo procedure validarCampos(DataTable: TDADataTable); virtual; @@ -71,6 +71,8 @@ type procedure Add(ADataTable: IDAStronglyTypedDataTable; TipoConcepto: Variant); virtual; procedure Delete(ADataTable: IDAStronglyTypedDataTable; Posicion: TIntegerArray); virtual; procedure Move(ADataTable: IDAStronglyTypedDataTable; Posicion: TIntegerArray; Posiciones: Integer); virtual; + procedure BeginUpdate(ADataTable: IDAStronglyTypedDataTable); + procedure EndUpdate(ADataTable: IDAStronglyTypedDataTable); // procedure Copy(SMExport: TSMExportToClipboard); // procedure Paste; @@ -348,12 +350,14 @@ end; procedure TControllerDetallesBase.EndUpdate(ADataTable: IDAStronglyTypedDataTable); begin Dec(fUpdateCount); - CalcularTotales(True, ADataTable.DataTable); - ADataTable.DataTable.EnableControls; if fUpdateCount = 0 then - AvisarObservadores(ADataTable); + begin + CalcularTotales(True, ADataTable.DataTable); + AvisarObservadores(ADataTable); + end; + ADataTable.DataTable.EnableControls; HideHourglassCursor; end; diff --git a/Source/Base/GUIBase/uEditorDBBase.pas b/Source/Base/GUIBase/uEditorDBBase.pas index 527a1b57..0cbded78 100644 --- a/Source/Base/GUIBase/uEditorDBBase.pas +++ b/Source/Base/GUIBase/uEditorDBBase.pas @@ -116,6 +116,13 @@ begin dsDataTable.DataTable.CancelUpdates; + //No funciona bien al CancelUpdates para las tablas detalle de esta forma le obligamos + dtDetails := dsDataTable.DataTable.GetDetailDataTables; + for i := 0 to dtDetails.Count - 1 do + begin + (TDADataTable(dtDetails.Items[i])).CancelUpdates; + end; + { Comprobar si el bookmark no es válido cuando estamos cancelando la inserción de una fila nueva. CUIDADO!! Si no es válido salta una excepción. NO devuelve false!!!} diff --git a/Source/Base/GUIBase/uEditorDBItem.dfm b/Source/Base/GUIBase/uEditorDBItem.dfm index 1b4fa877..c0cec53b 100644 --- a/Source/Base/GUIBase/uEditorDBItem.dfm +++ b/Source/Base/GUIBase/uEditorDBItem.dfm @@ -5,7 +5,7 @@ inherited fEditorDBItem: TfEditorDBItem ClientHeight = 461 ClientWidth = 652 ExplicitWidth = 660 - ExplicitHeight = 495 + ExplicitHeight = 488 PixelsPerInch = 96 TextHeight = 13 inherited JvNavPanelHeader: TJvNavPanelHeader @@ -46,10 +46,6 @@ inherited fEditorDBItem: TfEditorDBItem TabOrder = 2 object pagGeneral: TTabSheet Caption = 'General' - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 end end inherited StatusBar: TJvStatusBar diff --git a/Source/Modulos/Albaranes de proveedor/AlbaranesProveedor_Group.bdsgroup b/Source/Modulos/Albaranes de proveedor/AlbaranesProveedor_Group.bdsgroup index a39b4057..3a7deb80 100644 --- a/Source/Modulos/Albaranes de proveedor/AlbaranesProveedor_Group.bdsgroup +++ b/Source/Modulos/Albaranes de proveedor/AlbaranesProveedor_Group.bdsgroup @@ -8,12 +8,15 @@ - + + + ..\..\DataAbstract_D10\DataAbstract_D10.bdsproj ..\..\Base\Base.bdsproj ..\..\Base\ControllerBase\ControllerBase.bdsproj ..\..\Base\GUIBase\GUIBase.bdsproj ..\Contactos\Views\Contactos_view.bdsproj + ..\Articulos\Controller\Articulos_controller.bdsproj ..\Articulos\Views\Articulos_view.bdsproj Model\AlbaranesProveedor_model.bdsproj Data\AlbaranesProveedor_data.bdsproj @@ -23,7 +26,12 @@ ..\Relaciones\Pedidos de proveedor - Albaranes de proveedor\PedProv_AlbProv_relation.bdsproj ..\..\Cliente\FactuGES.bdsproj ..\..\Servidor\FactuGES_Server.bdsproj - DataAbstract_D10.bpl Base.bpl ControllerBase.bpl GUIBase.bpl Contactos_view.bpl Articulos_view.bpl AlbaranesProveedor_model.bpl AlbaranesProveedor_data.bpl AlbaranesProveedor_controller.bpl AlbaranesProveedor_view.bpl AlbaranesProveedor_plugin.bpl PedProv_AlbProv_relation.bpl FactuGES.exe FactuGES_Server.exe + ..\Pedidos a proveedor\Controller\PedidosProveedor_controller.bdsproj + ..\Relaciones\Albaranes de proveedor - Facturas de proveedor\AlbProv_FacProv_relation.bdsproj + ..\Facturas de proveedor\Controller\FacturasProveedor_controller.bdsproj + ..\Inventario\Controller\Inventario_controller.bdsproj + ..\Pedidos de cliente\Controller\PedidosCliente_controller.bdsproj + DataAbstract_D10.bpl Base.bpl ControllerBase.bpl GUIBase.bpl Contactos_view.bpl Articulos_controller.bpl Articulos_view.bpl AlbaranesProveedor_model.bpl AlbaranesProveedor_data.bpl AlbaranesProveedor_controller.bpl AlbaranesProveedor_view.bpl AlbaranesProveedor_plugin.bpl PedProv_AlbProv_relation.bpl FactuGES.exe FactuGES_Server.exe PedidosProveedor_controller.bpl AlbProv_FacProv_relation.bpl FacturasProveedor_controller.bpl Inventario_controller.bpl PedidosCliente_controller.bpl diff --git a/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas b/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas index 7d99f21b..88590d8c 100644 --- a/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas +++ b/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas @@ -202,6 +202,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 @@ -217,8 +222,9 @@ begin ADetallesController.AnadirArticulo(ADetalles, AInventarioRecibido.ID_ARTICULO); ADetalles.Edit; + APedido.Detalles.First; -//Se cambia porque puede haber articulos del pedido que no tengan referencia de proveedor +//Se cambia porque puede haber articulos del pedido que no tengan referencia de proveedor // if not APedido.Detalles.DataTable.Locate(fld_ArticulosREFERENCIA, ADetalles.REFERENCIA, []) then if not APedido.Detalles.DataTable.Locate(fld_INVENTARIOID_ARTICULO, ADetalles.ID_ARTICULO, []) then raise Exception.Create(Format('No se ha encontrado el artículo del pedido con REFERENCIA %s (CopiarArticulosAAlbaran)', [ADetalles.REFERENCIA])); @@ -232,8 +238,8 @@ begin AInventarioRecibido.Next; end; - finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; AArticulosController := NIL; end; @@ -241,11 +247,16 @@ begin else begin // AInventarioRecibido = NIL - // El albarán tiene que venir ya abierto y posicionado donde hay que copiar - - ADetalles := AAlbaran.Detalles; ADetallesController := TDetallesAlbaranProveedorController.Create; AArticulosController := TArticulosController.Create; + + // El albarán tiene que venir ya abierto y posicionado donde hay que copiar + ADetalles := AAlbaran.Detalles; + //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); + try APedido.Detalles.DataTable.First; for i := 0 to APedido.Detalles.DataTable.RecordCount - 1 do @@ -270,10 +281,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/Facturas de cliente/Controller/uFacturasClienteController.pas b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas index 3629cef1..5b6e55af 100644 --- a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas +++ b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas @@ -144,6 +144,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 @@ -164,6 +169,7 @@ begin AOrigen.Next; end; finally + ADetallesController.EndUpdate(ADestino); ADetallesController := NIL; end; end; @@ -189,6 +195,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 @@ -209,6 +220,7 @@ begin AOrigen.Next; end; finally + ADetallesController.EndUpdate(ADestino); ADetallesController := NIL; end; end; @@ -303,6 +315,8 @@ begin // Ya tengo la factura. Le añado los conceptos del albarán AFacturaActual.Detalles.DataTable.Last; + //Aqui no hace falta BeginUpdate y EndUpdate de los detalles, porque siempre se + //añade una linea en blanco al final que hace que nos recalcule todo // Añado el título Self.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_TITULO); with AFacturaActual.Detalles do diff --git a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas index f8f6744b..3ecc79e7 100644 --- a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas +++ b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas @@ -142,6 +142,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 @@ -162,6 +167,7 @@ begin AOrigen.Next; end; finally + ADetallesController.EndUpdate(ADestino); ADetallesController := NIL; end; end; @@ -186,6 +192,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 @@ -206,6 +217,7 @@ begin AOrigen.Next; end; finally + ADetallesController.EndUpdate(ADestino); ADetallesController := NIL; end; end; @@ -297,6 +309,8 @@ begin // Ya tengo la factura. Le añado los conceptos del albarán AFacturaActual.Detalles.DataTable.Last; + //Aqui no hace falta BeginUpdate y EndUpdate de los detalles, porque siempre se + //añade una linea en blanco al final que hace que nos recalcule todo // Añado el título Self.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_TITULO); with AFacturaActual.Detalles do 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 c1f1efe4..fd576ccc 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 @@ -100,6 +100,11 @@ begin ADetalles := AAlbaran.Detalles; ADetallesController := TDetallesAlbaranClienteController.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); + AArticulosPendientes.DataTable.First; for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do begin @@ -125,6 +130,7 @@ begin end; end; finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; end; end; @@ -302,6 +308,7 @@ begin AAlbaranes := AAlbaranesClienteController.Nuevo; InicializarAlbaran(AAlbaranes, ACliente, AArticulos); + //Aqui no es necesario BeginUpdate y EndUpdate de los detalles porque siempre añadimos una linea al final. // Añado el título del pedido ya que siempre tendremos al menos un concepto de pedido ADetallesAlbaranesCliController.Add(AAlbaranes.Detalles, TIPO_DETALLE_TITULO); with AAlbaranes.Detalles do 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..6ec1b2cc 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 + ADetallesPedidosProvController.BeginUpdate(APedidoProv.Detalles); + ADetallesPedidosProvController.Add(APedidoProv.Detalles, TIPO_DETALLE_CONCEPTO); ADetallesPedidosProvController.AnadirArticulo(APedidoProv.Detalles, AArticulosPend.ID_ARTICULO); with APedidoProv.Detalles do @@ -131,6 +136,8 @@ begin Post; end; AArticulosPend.DataTable.Next; + + ADetallesPedidosProvController.EndUpdate(APedidoProv.Detalles); end; if Assigned(APedidoProv) then 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 71614b77..c0f9fc08 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 @@ -97,6 +97,11 @@ begin ADetalles := AAlbaran.Detalles; ADetallesController := TDetallesAlbaranProveedorController.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); + AArticulosPendientes.DataTable.First; for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do begin @@ -122,6 +127,7 @@ begin end; end; finally + ADetallesController.EndUpdate(ADetalles); ADetallesController := NIL; end; end; diff --git a/Source/Modulos/Tienda web/Controller/Utiles/uActualizarPedidosUtils.pas b/Source/Modulos/Tienda web/Controller/Utiles/uActualizarPedidosUtils.pas index 3f35c051..1e81ce29 100644 --- a/Source/Modulos/Tienda web/Controller/Utiles/uActualizarPedidosUtils.pas +++ b/Source/Modulos/Tienda web/Controller/Utiles/uActualizarPedidosUtils.pas @@ -76,6 +76,11 @@ begin Post; 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(APedido.Detalles); + AOSCOrder.OrderProducts.DataTable.First; for i := 0 to AOSCOrder.OrderProducts.DataTable.RecordCount - 1 do begin @@ -85,11 +90,14 @@ begin Resultado := ADetallesController.AnadirArticulo(APedido.Detalles, AOSCOrder.OrderProducts.rdx_products_id_local, AOSCOrder.rdx_customers_id_local); APedido.Detalles.Edit; APedido.Detalles.CANTIDAD := AOSCOrder.OrderProducts.products_quantity; - APedido.Detalles.Post; + APedido.Detalles.Post; Result := Result AND Resultado; AOSCOrder.OrderProducts.DataTable.Next; end; + //Se recalcula todos los detalles + ADetallesController.EndUpdate(APedido.Detalles); + // Guardo el pedido APedidosController.Guardar(APedido); diff --git a/Source/Servidor/FactuGES_Server.rc b/Source/Servidor/FactuGES_Server.rc index e638715e..90eea4c6 100644 --- a/Source/Servidor/FactuGES_Server.rc +++ b/Source/Servidor/FactuGES_Server.rc @@ -16,7 +16,7 @@ BEGIN VALUE "FileVersion", "2.8.0.0\0" VALUE "ProductName", "FactuGES Server\0" VALUE "ProductVersion", "2.8.0.0\0" - VALUE "CompileDate", "jueves, 24 de abril de 2008 19:10\0" + VALUE "CompileDate", "lunes, 26 de mayo de 2008 15:50\0" END END BLOCK "VarFileInfo" diff --git a/Source/Servidor/FactuGES_Server.res b/Source/Servidor/FactuGES_Server.res index bf8b14b621b10f9e194db1f912f485db91ff144a..c18ef38e4279edcf30311abb5d5551dc816cb898 100644 GIT binary patch delta 130 zcmZ3njd95~#tnBO7&Ru}jgSYDe