Perdón por no haber escrito antes. Estoy a caballo entre dos ciudades.
Os explico mejor los procesos:
- Recupero o creo un ticket nuevo. El procedimiento verLineas, me muestra las lineas actuales. (Por ahora todo bien).
- 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;