Arreglo de EditorBase para que los detalles de la cabecera realicen tambien un cancelupdates forzado para que no se queden deltas, además de arraglo del el controller de detallesbase, para que beginupdate y endupdate sean publicos y siempre que se realicen cambios en cantidad o importes de los detalles se pongan para forzar al recalculo

git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES/trunk@229 c93665c3-c93d-084d-9b98-7d5f4a9c3376
This commit is contained in:
roberto 2008-05-26 14:11:46 +00:00
parent e5a936699e
commit 594d7d2347
13 changed files with 102 additions and 22 deletions

View File

@ -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;

View File

@ -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!!!}

View File

@ -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

View File

@ -8,12 +8,15 @@
<Option Name="GUID">{D1967178-5EBB-46B2-893F-E0CADFEDD466}</Option>
</Option>
</PersonalityInfo>
<Default.Personality> <Projects>
<Default.Personality>
<Projects>
<Projects Name="DataAbstract_D10.bpl">..\..\DataAbstract_D10\DataAbstract_D10.bdsproj</Projects>
<Projects Name="Base.bpl">..\..\Base\Base.bdsproj</Projects>
<Projects Name="ControllerBase.bpl">..\..\Base\ControllerBase\ControllerBase.bdsproj</Projects>
<Projects Name="GUIBase.bpl">..\..\Base\GUIBase\GUIBase.bdsproj</Projects>
<Projects Name="Contactos_view.bpl">..\Contactos\Views\Contactos_view.bdsproj</Projects>
<Projects Name="Articulos_controller.bpl">..\Articulos\Controller\Articulos_controller.bdsproj</Projects>
<Projects Name="Articulos_view.bpl">..\Articulos\Views\Articulos_view.bdsproj</Projects>
<Projects Name="AlbaranesProveedor_model.bpl">Model\AlbaranesProveedor_model.bdsproj</Projects>
<Projects Name="AlbaranesProveedor_data.bpl">Data\AlbaranesProveedor_data.bdsproj</Projects>
@ -23,7 +26,12 @@
<Projects Name="PedProv_AlbProv_relation.bpl">..\Relaciones\Pedidos de proveedor - Albaranes de proveedor\PedProv_AlbProv_relation.bdsproj</Projects>
<Projects Name="FactuGES.exe">..\..\Cliente\FactuGES.bdsproj</Projects>
<Projects Name="FactuGES_Server.exe">..\..\Servidor\FactuGES_Server.bdsproj</Projects>
<Projects Name="Targets">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</Projects>
<Projects Name="PedidosProveedor_controller.bpl">..\Pedidos a proveedor\Controller\PedidosProveedor_controller.bdsproj</Projects>
<Projects Name="AlbProv_FacProv_relation.bpl">..\Relaciones\Albaranes de proveedor - Facturas de proveedor\AlbProv_FacProv_relation.bdsproj</Projects>
<Projects Name="FacturasProveedor_controller.bpl">..\Facturas de proveedor\Controller\FacturasProveedor_controller.bdsproj</Projects>
<Projects Name="Inventario_controller.bpl">..\Inventario\Controller\Inventario_controller.bdsproj</Projects>
<Projects Name="PedidosCliente_controller.bpl">..\Pedidos de cliente\Controller\PedidosCliente_controller.bdsproj</Projects>
<Projects Name="Targets">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</Projects>
</Projects>
<Dependencies/>
</Default.Personality>

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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"

Binary file not shown.