Gregorio Cíber
14-07-2015, 23:27:23
Hola amigos.
Aunque el tema de refrescar un grid después de insertar/modificar/etc. se ha tratado en muchas ocasiones aquí, no veo que este caso haya sido objeto de consulta.
Se trata de lo siguiente. Para refrescar una pantalla de datos (maestro/detalle) que haya podido ser modificada por otro puesto, antes de insertar un nuevo registro, modificar o anular uno existente, hago una llamada a esta función (la parte comentada del final es para excluir que ahí se produzca el comportamiento anómalo):
function SePuedePedido(t_cab, t_lin: TpFIBDataSet; s_cli_pro: string; n_ref_pedido, n_ref_cli_pro: integer; d_fecha: TDate; b_comprobar_cli_pro: Boolean): Boolean;
var
marca: TBookmark;
begin
// Tabla de cabeceras
t_cab.Refresh;
// Tabla de líneas
with t_lin do
begin
try
marca := GetBookmark;
DisableControls;
CloseOpen(True);
//FullRefresh;
//t_lin.Edit;
//t_lin.Cancel;
finally
GotoBookmark(marca);
FreeBookmark(marca);
EnableControls;
end;
end;
Result := True;
// Result := PedidoDisponible(s_cli_pro, n_ref_pedido);
//
// if Result and b_comprobar_cli_pro and CliProBloqueado(s_cli_pro, n_ref_cli_pro, d_fecha) then
// Result := False;
end;
La parte en negrita la he probado con está arriba, bien así:
//CloseOpen(True);
FullRefresh;
//t_lin.Edit;
//t_lin.Cancel;
o bien así:
//CloseOpen(True);
//FullRefresh;
t_lin.Edit;
t_lin.Cancel;
y en todos los casos ocurre lo siguiente:
Borro un registro del grid detalle y perfecto. El registro desaparece y se hace el scroll.
Intento borrar de nuevo el registro que está ahora marcado, salta al siguiente y lo borra.A ver. Por si no me he explicado bien. Supongamos una tabla detalle de pedidos con estas líneas:
001 Bañera
002 Grifo bañera
003 Ducha
004 Grifo ducha
005 Lavabo
006 Grifo lavabo
Señalo 003 y lo borro. Quedaría:
001 Bañera
002 Grifo bañera
004 Grifo ducha
005 Lavabo
006 Grifo lavabo
Si intento borrar de nuevo, ocurriría:
001 Bañera
002 Grifo bañera
004 Grifo ducha
005 Lavabo
006 Grifo lavabo
Obviamente si acepto borrar, borraría el registro 005 y no el 004.
Como llevo con esto horas y horas, torpe que es uno, y no doy con la solución, solicito ayuda. Utilizo Delhpi 6 y componentes FIBPlus 6.4.1
Gracias anticipadas.
Aunque el tema de refrescar un grid después de insertar/modificar/etc. se ha tratado en muchas ocasiones aquí, no veo que este caso haya sido objeto de consulta.
Se trata de lo siguiente. Para refrescar una pantalla de datos (maestro/detalle) que haya podido ser modificada por otro puesto, antes de insertar un nuevo registro, modificar o anular uno existente, hago una llamada a esta función (la parte comentada del final es para excluir que ahí se produzca el comportamiento anómalo):
function SePuedePedido(t_cab, t_lin: TpFIBDataSet; s_cli_pro: string; n_ref_pedido, n_ref_cli_pro: integer; d_fecha: TDate; b_comprobar_cli_pro: Boolean): Boolean;
var
marca: TBookmark;
begin
// Tabla de cabeceras
t_cab.Refresh;
// Tabla de líneas
with t_lin do
begin
try
marca := GetBookmark;
DisableControls;
CloseOpen(True);
//FullRefresh;
//t_lin.Edit;
//t_lin.Cancel;
finally
GotoBookmark(marca);
FreeBookmark(marca);
EnableControls;
end;
end;
Result := True;
// Result := PedidoDisponible(s_cli_pro, n_ref_pedido);
//
// if Result and b_comprobar_cli_pro and CliProBloqueado(s_cli_pro, n_ref_cli_pro, d_fecha) then
// Result := False;
end;
La parte en negrita la he probado con está arriba, bien así:
//CloseOpen(True);
FullRefresh;
//t_lin.Edit;
//t_lin.Cancel;
o bien así:
//CloseOpen(True);
//FullRefresh;
t_lin.Edit;
t_lin.Cancel;
y en todos los casos ocurre lo siguiente:
Borro un registro del grid detalle y perfecto. El registro desaparece y se hace el scroll.
Intento borrar de nuevo el registro que está ahora marcado, salta al siguiente y lo borra.A ver. Por si no me he explicado bien. Supongamos una tabla detalle de pedidos con estas líneas:
001 Bañera
002 Grifo bañera
003 Ducha
004 Grifo ducha
005 Lavabo
006 Grifo lavabo
Señalo 003 y lo borro. Quedaría:
001 Bañera
002 Grifo bañera
004 Grifo ducha
005 Lavabo
006 Grifo lavabo
Si intento borrar de nuevo, ocurriría:
001 Bañera
002 Grifo bañera
004 Grifo ducha
005 Lavabo
006 Grifo lavabo
Obviamente si acepto borrar, borraría el registro 005 y no el 004.
Como llevo con esto horas y horas, torpe que es uno, y no doy con la solución, solicito ayuda. Utilizo Delhpi 6 y componentes FIBPlus 6.4.1
Gracias anticipadas.