Ver Mensaje Individual
  #1  
Antiguo 14-07-2015
Gregorio Cíber Gregorio Cíber is offline
Miembro
 
Registrado: jun 2008
Posts: 99
Reputación: 19
Gregorio Cíber Va por buen camino
Borrar registros de un grid. Salta al siguiente

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):

Código Delphi [-]
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í:

Código Delphi [-]
     //CloseOpen(True);
      FullRefresh;
      //t_lin.Edit;
      //t_lin.Cancel;


o bien así:

Código Delphi [-]
      //CloseOpen(True);
      //FullRefresh;
      t_lin.Edit;
      t_lin.Cancel;


y en todos los casos ocurre lo siguiente:
  1. Borro un registro del grid detalle y perfecto. El registro desaparece y se hace el scroll.
  2. 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:

Código:
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:

Código:
001 Bañera

002 Grifo bañera
004 Grifo ducha

005 Lavabo
006 Grifo lavabo

Si intento borrar de nuevo, ocurriría:

Código:
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.

Última edición por Casimiro Noteví fecha: 14-07-2015 a las 23:53:30.
Responder Con Cita