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.bdsprojModel\AlbaranesProveedor_model.bdsprojData\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 bf8b14b6..c18ef38e 100644
Binary files a/Source/Servidor/FactuGES_Server.res and b/Source/Servidor/FactuGES_Server.res differ