Ver Mensaje Individual
  #1  
Antiguo 27-07-2006
Avatar de taru
taru taru is offline
Miembro
 
Registrado: jul 2006
Posts: 27
Reputación: 0
taru Va por buen camino
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla

A ver os cuento lo que me pasa, que conste que usado la busqueda y he encontrado algunas soluciones a ciertas dudas mias, os cuento:


Estoy con un terminal venta, ya he conseguido hacer todo solo me faltan los tickets.
Para ello he creado un form con un dbgrid en el que capturo unidades, referencia, descripcion, precio unitario, y precio total.


Unidades | referencia | descripcion |preciounidad|preciototal


Empiezo captutando por las unidades, en el evento onkeypress del dbgrid pongo que si es #13 osea se pulsa enter pase al la siguiente columna:
Código Delphi [-]
procedure Tformticket.ticketgridKeyPress(Sender: TObject; var Key: Char);  
begin   
 if key = #13 then   
 begin     
    if ticketgrid.col 1 then      
    begin        
    ticketgrid.Fields[2].FocusControl;      
end;  ....


Cuando llego a descripcion puedes teclear parte de la descripcion del producto pero cuando pulsas enter te hace visible un listbox con los productos de otra tabla (la tabla productos) que coinciden con la parte escrita en la columna del dbgrid:


Código Delphi [-]
if ticketgrid.col = 3 then      
begin        
tablaproductos.SQL.Text := 'SELECT * FROM ' + bdproductos + ' WHERE descripcion LIKE' + QuotedStr('%' + ticketgrid.Fields[2].Text + '%'); 
tablaproductos.Execute;        
listbox.Visible := true;       
 listbox.SetFocus;




en el evento onkeypress del listbox hago que si es enter el producto seleccionado me pase su precio y sus datos al dbgrid :
Código Delphi [-]
if Key = #13 then   
 begin     
 listbox.Visible := false;     
 ticketgrid.Fields[2].Text := listbox.SelectedItem;//descripcion del producto    
  ticketgrid.Fields[3].Value := tablaproductos.FieldValues['pvp']; //pongo el precio del producto     
 ticketgrid.Fields[3].FocusControl;//pongo focus en el campo precio por si el cliente quiere cambiar el precio


Cuando doy a enter en la columna 4 se prodce el calculo de las unidades * precio unitario y lo pongo en precio total
y doy foco alli:
Código Delphi [-]
if ticketgrid.col = 4 then 
     begin     
   ticketgrid.Fields[5].FocusControl;   
     ticketgrid.Fields[5].Value := ticketgrid.Fields[3].Value * ticketgrid.Fields[1].Value;   
   end;

Si doy a enter estando en la columna 5:
Código Delphi [-]
if ticketgrid.col = 5 then   
   begin      
  tablaticket.Post; //Mando el dato     
   tablaticket.Append; //Preparo para insertar otro    
    ticketgrid.Fields[1].FocusControl; //Me situo en las unidades  
    end;


Por cierto antes de comprobar en que columna estoy pregunto si se ha pulsado enter:
if key = #13

pero no va bien salta donde le da la gana y no hace los calculos.


Necesito ayuda estoy echo un lio llevo 3 dias con esto.




Perdon por el ladrillazo y gracias por adelantado.

Última edición por taru fecha: 27-07-2006 a las 15:41:33.
Responder Con Cita