Ver Mensaje Individual
  #3  
Antiguo 04-03-2021
NeWsP NeWsP is offline
Miembro
 
Registrado: oct 2003
Ubicación: Barcelona
Posts: 57
Reputación: 21
NeWsP Va por buen camino
Smile

Muchas gracias,

He probado y por un momento funcionaba y ahora otra vez no me funciona sin tocar nada :S

Es raro, porque si el grid esta en la parte inferior, parece que funciona bien.

Si el grid esta en otra posición, lo mueve hasta el centro de la pantalla.

Pongo el codigo que estoy utilizando: (seguro que es un desastre de codigo...)

Código Delphi [-]
procedure TTMSForm1.ActualizarPedidos(Operacion: Integer);
var
  lineasPedido: Integer;
  lineasAsignadas: Integer;
  estado: Integer;
  plazo: string;

begin

  MemPedidos.DisableControls;
  try
   TMSForm1.MemPedidos.EmptyDataSet;

    DBAdvGrid1.DataSource := nil;

    FDQuery1.SQL.Clear;
    With FDQuery1 do
    begin
      SQL.Clear;
      SQL.Add('SELECT FECPCL,CODPCL,CNOPCL FROM F_PCL WHERE ESTPCL<>2 ORDER BY CODPCL');
      open;
    end;

    TMSForm1.FDQuery1.First;
    while not TMSForm1.FDQuery1.eof do
    begin

      QueryOperaciones.SQL.Clear;
      QueryOperaciones.SQL.Add
        ('SELECT DISTINCT posicion FROM Pedidos WHERE pedido=edido');
      QueryOperaciones.ParamByName('pedido').Value :=
        FDQuery1.FieldByName('CODPCL').Value;
      QueryOperaciones.open();

      lineasAsignadas := QueryOperaciones.RecordCount;

      QueryOperaciones.SQL.Clear;
      QueryOperaciones.SQL.Add('SELECT plazo FROM plazos WHERE pedido=edido');
      QueryOperaciones.ParamByName('pedido').Value :=
        FDQuery1.FieldByName('CODPCL').Value;
      QueryOperaciones.open();

      if QueryOperaciones.RecordCount > 0 then
      begin
        plazo := QueryOperaciones.FieldByName('plazo').Value;
      end
      else
      begin
        plazo := ' --- '
      end;

      QueryFactu.SQL.Clear;
      QueryFactu.SQL.Add('SELECT POSLPC FROM F_LPC WHERE CODLPC=edido');
      QueryFactu.ParamByName('pedido').Value :=
        FDQuery1.FieldByName('CODPCL').Value;
      QueryFactu.open();

      lineasPedido := QueryFactu.RecordCount;

      if lineasPedido = lineasAsignadas then
      begin
        estado := 1;
      end;

      if (lineasPedido <> lineasAsignadas) AND (lineasAsignadas > 0) then
      begin
        estado := 2;
      end;

      if lineasAsignadas = 0 then
      begin
        estado := 0;
      end;

      with TMSForm1.MemPedidos do
      begin
        Append;
        Fields[0].AsInteger := estado;
        Fields[1].AsDateTime := TMSForm1.FDQuery1.FieldByName('FECPCL').Value;
        Fields[2].AsInteger := TMSForm1.FDQuery1.FieldByName('CODPCL').Value;
        Fields[3].AsString := TMSForm1.FDQuery1.FieldByName('CNOPCL').Value;
        Fields[4].AsString := plazo;
        Post;
      end;
      TMSForm1.FDQuery1.Next;
    end;
    DBAdvGrid1.Visible := True;

    DBAdvGrid1.DataSource := DataPedidos;

  finally
      MemPedidos.Locate('Pedido', pedidoActual, []);
      MemPedidos.EnableControls;

  end;
end;

Y así es como llamo al procedimiento, cuando he añadido un plazo nuevo:

Código Delphi [-]
if main.accion_plazo = 0 then
  begin
    FDQuery1.SQL.Clear;
    FDQuery1.SQL.Add
      ('INSERT INTO plazos (pedido,plazo,estado,año) VALUES(edido,lazo,:estado,:ano)');
    FDQuery1.ParamByName('pedido').Value := main.TMSForm1.MemPedidos.FieldByName
      ('pedido').Value;
    FDQuery1.ParamByName('plazo').Value :=
      datetostr(AdvSmoothCalendar1.SelectedDate);
    FDQuery1.ParamByName('estado').Value := 0;
      FDQuery1.ParamByName('ano').Value := AdvSmoothCalendar1.Year;
    FDQuery1.ExecSQL;
  end
  else
  begin
     FDQuery1.SQL.Clear;
    FDQuery1.SQL.Add
      ('UPDATE plazos SET plazo=lazo WHERE pedido=edido AND año=:ano');
      FDQuery1.ParamByName('plazo').Value:=  datetostr(ADVSmoothCalendar1.SelectedDate);
    FDQuery1.ParamByName('pedido').Value := main.TMSForm1.MemPedidos.FieldByName
      ('pedido').Value;
    FDQuery1.ParamByName('ano').Value := AdvSmoothCalendar1.Year;
    FDQuery1.ExecSQL;
  end;

  plazo.Form1.Close;

     main.TMSForm1.ActualizarPedidos(0);

Entonces lo que hace es que si estoy en la parte inferior del grid parece que es correcto, pero si estoy en otro sitio me centra la fila seleccionada.

Alguna sugerencia T_T?

Última edición por NeWsP fecha: 04-03-2021 a las 11:58:01. Razón: Añadir codigo, y explicación
Responder Con Cita