Ver Mensaje Individual
  #12  
Antiguo 24-08-2007
Cecilio Cecilio is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Reputación: 17
Cecilio Va por buen camino
Perdón por no haber escrito antes. Estoy a caballo entre dos ciudades.

Os explico mejor los procesos:
  1. Recupero o creo un ticket nuevo. El procedimiento verLineas, me muestra las lineas actuales. (Por ahora todo bien).
  2. Si es un ticket nuevo, agrego un artículo a vender. es decir una linea nueva. O modifico una linea ya existente:
Código:
  Asql.Limpia;
  asql.asigna('CODIGO',Acod.Text);
  asql.asigna('DESCRIPCION',Ades.Text);
  asql.asigna('PVP',Apvp.Text);
  asql.asigna('DTO',Adto.Text);
  asql.asigna('NFACT',IntToStr(i));
  asql.asigna('CAJA',dm.T.Caja);
  asql.asigna('IVA','16');
  asql.asigna('CLIENTE',Edit4.Text);
  asql.asigna('FECHA',dm.T.IbFecha);
  asql.asigna('ALMACEN',dm.T.ALmacen);
  asql.asigna('EJERCICIO',dm.T.ejercicio);
  asql.asigna('ECODIGO',dm.T.ecodigo);

 if mpos.Text='' then  // Si es una linea nueva.
  s:=ASQL.carga('LINTIK')
 else
  begin // Es una modificación.
    asql.Clausula:=' POS='+mPOS.Text;
    s:=ASQL.cargaModif('LINTIK');
    mpos.Text:='';
  end;
   DM.T.IBSQL1.SQL.Clear;
    DM.T.IBSQL1.SQL.Add(s);
    DM.T.IBSQL1.ExecQuery;
    DM.T.IBSQL1.Close;


  s:='update lintik ';
  s:=s+'set parcial_l=uni*pvp, ';
  s:=s+'imp_dto=((parcial_l*dto)/100), ';
  s:=s+'base=parcial_l-imp_dto, ';
  s:=s+'cuota=((base*iva)/100), ';
  s:=s+'total=base-cuota';
  s:=s+' where '+filtro;

  dm.T.IBSQL1.Close;
  dm.T.IBSQL1.SQL.Clear;
  dm.t.IBSQL1.SQL.Add(s);
  dm.T.IBSQL1.ExecQuery;
  dm.T.IBSQL1.Close;

  VerLineas;
  • He puesto el código que agrega o modifica lineas. Como veis todo es por SQL.
  • Tras las modificaciones o inserciones, llamo a VerLineas que es el responsable de actualizar el DBGrid. Pero no se actualiza.
  • No le hagais caso al objeto Asql, es una unidad que diseñe para crear de forma cómoda los insert o los updates. El metodo carga o cargamodif solo retorna la sentencia SQL en funcion de los campos asignados. Esto funciona.
  • Algo significativo es que solo se ver las modificiaciones cuando cierro y abro la aplicación.
Código:
Procedure TForm1.VerLineas;
var
  s: string;
begin
 s:='SELECT CODIGO,DESCRIPCION, UNI, PVP, DTO,TOTAL,POS FROM LINTIK WHERE '+filtro;
 dm.T.IBTquery.Active:=false;
 dm.t.IBQuery1.SQL.Clear;
 dm.t.IBQuery1.SQL.Add(S);
 dm.T.IBTquery.Active:=true;
 dm.T.IBQuery1.Open;
// dbGrid1.Refresh;
// totales;
end;
__________________
Saludos Cordiales.
------------------

Responder Con Cita