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:
parent
e5a936699e
commit
594d7d2347
@ -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;
|
||||
|
||||
|
||||
@ -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!!!}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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.
Reference in New Issue
Block a user