Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 04-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Cuando se da doble click al dbgrid2 se inserta en detfactura el dato, me imagino que es la tabla temporal.
Se pretende con el boto (Nueva factura) borrar el contenido de la tabla temporal detfactura e insertar todo el contenido en la tabla detfacturafinal ????.
Buena pregunta.
Si es asi, el boton nueva factura tiene que recorrer la tabla temporal e ir insertando en la tabla nueva o final, pero segun algo, este algo tiene que ser el numero de factura.
Saludos
si, se guarda en la factura detfacturafinal que la del detalle y con el numero de factura y demas datos como, fecha, codigo del cliente y codigodetallefactura, en factura.
Responder Con Cita
  #22  
Antiguo 04-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
El dbgrid3 esta ligado a la tabla detfactura (temporal), es un componente que tiene que ver lo que esta en el dataset, no lo puedes limpiar sin quitar los datos.
Osea, no puedes limpiar sin GUARDAR primero los datos en la tabla detfacturafinal y factura.
Me sigues ?
me entiendes ?
Saludos
si te entiendo, me refiero a limpiar cualquier dato anterior osea de la facturacion anterior que haya quedado o la limpieza se podria realizar en el boton guardar, despues de almacenar los datos en detfacturafinal y factura limpia detfactura.
osea limpiar antes de cargar, boton nuevo o limpiar despues de guardar boton guardar.
Responder Con Cita
  #23  
Antiguo 04-08-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Primero tienes que guardar y luego limpiar.
Lo que no entiendo es para que usar una tabla temporal ?, no entiendo el concepto del uso. ?
Para mi seria mas logico guardar los datos en las tablas correspondientes de una vez no veo la necesidad de doble trabajo.
Tal vez me explicas la razon ?
saludos
__________________
Siempre Novato
Responder Con Cita
  #24  
Antiguo 04-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
La tabla temporal la agregue, porque no se si puedo limpiar el Grid en donde se muestra el detalle de la carga, entonces, al borrar la tabla temporal el grid quedaba limpio para una nueva carga de factura, seguramente esto esta mal, pero es lo que se me ocurrio, tal vez pueda limpiar el grid sin limpiar la tabla y la temporal este de mas, ¿no?
Responder Con Cita
  #25  
Antiguo 04-08-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Mira que sencillo.
Si la tabla temporal es para borrar el contenido del dbgrid esta de mas.
Para que no se vea el contenido ya que usas Tables haces un filtro, al numero de factura, por ejemplo la factura 0 que no tenga nada, el dbgrid quedara vacio ya que no tendra datos.
Creo que por el nivel al que llevas el programa te estas complicando la vida con el uso de sql, de momento.
De todos modos, si sigues empeñado en el uso de la tabla temporal haz un filtro y ya.
Código Delphi [-]
var
   Filtro : String;
begin
   If (DBEdit5.Text <> '') then
   begin
      Table2.Filtered := False;
      Filtro := 'ID_Factura = '+DBEdit5.Text;
     Table2.Filter := Filtro;
      Table2.Filtered := True
   end
   else Table2.Filtered := False;
end;
Es lo mismo que haras sin la tabla temporal, directamente.
Este codigo lo puedes poner en el boton Nueva Factura.
Saludos
NOTA: Si no funciona con el dbedit5 que es el que tiene el numero de factura entonces crea una variable.
Si quieres que no muestre nada, osea, limpio el dbgrid3, en vez del dbedit5 pon el numero cero (0) si esa factura no tiene nada o incluso no existe.
__________________
Siempre Novato
Responder Con Cita
  #26  
Antiguo 04-08-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No ver contenido del dbgrid sin borrar nada en ninguna tabla.
Boton Nueva factura.

Código Delphi [-]
var
   Filtro : String;
   fact: Integer;
begin
     fact:= 0:
     Table2.Filtered := False;
     Filtro := 'ID_Factura = '+fact;
     Table2.Filter := Filtro;
     Table2.Filtered := True
   end
   else Table2.Filtered := False;
end;

saludos
__________________
Siempre Novato
Responder Con Cita
  #27  
Antiguo 04-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Prove el codigo, limpia el Grid pero deja un registro, pero esto significa que deberia un DBEedit para la carga del numero de factura en la primer solapa, no? para que sea mas visual y no confundir al usuario, que opinas?.
en la primera pone todos los datos y carga inclusive el numero de factura.
en la segunda lo ve mas limpio para poder guardar e imprimir la factura
en la tercera el historico de todas la facturas realizadas.
Saludos.
Responder Con Cita
  #28  
Antiguo 04-08-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Yo quitaría la solapa de detalle esta de mas y pondria los dos botones que quedan en la primera solapa.
En la solapa de historial tambien haria un filtro, pero esta vez por cliente ya que se supone que es el historial de alguien.
Otra cosa que haria seria eliminar el boton de sub total y de total, estan de mas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #29  
Antiguo 04-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
el ultimo codigo me tira un error Incompatible types: 'String' and 'Integer' aunque a filtro lo cambie por integer
en estas lineas
Código Delphi [-]
Filtro := 'ID_Factura '= + fact;
     Table2.Filter := Filtro;
Voy a tener muy en cuenta tus consejos, saludos.
Responder Con Cita
  #30  
Antiguo 04-08-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Tienes que cambiar a fact por string;
El problema no esta en filtro, esta en fact:
Código Delphi [-]
var
   Filtro : String;
   fact: String;
begin
     fact:= '0':
     Table2.Filtered := False;
     Filtro := 'ID_Factura = '+fact;
     Table2.Filter := Filtro;
     Table2.Filtered := True
   end
   else Table2.Filtered := False;
end;
Eso quiere decir que el numero de factura en el campo factura es string y no integer.
Para eliminar los botones creas un procedimiento con el codigo del boton 2 y el boton 3 lo llamas cuando necesites.
Asi simplemente cuando le des doble click al dbgrdi2 saldra el subtotal y el total, en cuanto al descuento e incremento se hace lo mismo, se llama al procedimiento y listo.
Saludos
No estoy muy seguro en paradox, recuerda que de esto no se amigo.
__________________
Siempre Novato
Responder Con Cita
  #31  
Antiguo 04-08-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Procedimiento calcula:
Colocar el procedure al principio, asi:
Código Delphi [-]
    procedure DBEdit5Change(Sender: TObject);
    procedure calcula; // aqui....
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form14: TForm14;
  fecha:Tdate;
  S,D,I,total:Real;
  e,c:integer;
implementation

Crear el procedimiento:

Código Delphi [-]
procedure calcula;
var
  TotalGanancias : Currency;
  Marca : TBookMarkStr;
begin
 // subTotal
 TotalGanancias := 0;
 Marca := Table2.Bookmark;//Almacenamos la posición del registro actual en nuestra marca
 Table2.DisableControls;//Deshabilitamos los controles enlazados a nuestro  DataSet
 Table2.First;
 While Not Table2.Eof do
  begin
   TotalGanancias := TotalGanancias + Table2.FieldbyName('TotalImp').ASCurrency;
   Table2.Next;
  end;
    Table2.EnableControls;//Habilitamos nuevamente los controles
    Table2.Bookmark := Marca;//Restauramos a la posición del registro de nuestra marca
 Edit2.Text:=CurrToStr(TotalGanancias);
 S:=StrToFloat(Edit2.Text);
 // total
 total:=S-D+I;
 Edit5.Text:=FloatToStr(total);
end;

Colocar el procedimiento en el dobleclick del dbgrid2: (revisa al final del codigo es lo unico que cambia)
Código Delphi [-]
procedure TForm14.DBGrid2DblClick(Sender: TObject);
begin
Table2.Open;
if combobox1.Text = 'Productos' then
  begin
   datasource5.DataSet:= Table4;  // tabla de productos
   Table2.Insert; // inserta un campo
   Table2Cod_prodser.Value:= Table4Cod_prod.Value; // el campo cod_prod de la tabla nueva es igual al de la tabla5
   Table2Codigo.Value:= Table4Codigo.Value;
   Table2Descripcion.Value:= Table4Descripcion.Value;
  // Table2Unidad.Value:= Table4Unidad.Value;
   Table2Importunidad.Value:= Table4ImpVent.Value;
   Table2Cantidad.Value:= StrToFloat(Edit1.Text);  //cantidad cargada por el usuario
   Table2TotalImp.Value:=Table2Cantidad.Value * Table2Importunidad.Value;   // multiplica la cantidad por el valor unitario
   Table2.Post; // guarda el dato en la tabla nueva.
   end;
  if combobox1.Text = 'Servicios' then
  begin
  datasource3.DataSet:= Table3;  // tabla servicios
   Table2.Insert; // inserta un campo
   Table2Cod_prodser.Value:= Table5Cod_servcio.Value; // el campo cod_servicio de la tabla nueva es igual al de la tabla3
   Table2Codigo.Value:= Table5Codigo.Value;
   Table2Descripcion.Value:= Table5Servicio.Value;
   Table2Cantidad.Value:= StrToFloat(Edit1.Text);  // cantidad cargada por el usuario
   Table2Importunidad.Value:= Table5ImpServ.Value;
   Table2TotalImp.Value:=Table2Cantidad.Value * Table2Importunidad.Value;
   Table2.Post; // guarda el dato en la tabla nueva.
   end;
   calcula; // aqui....
end;

Llamar al procedimiento en el edit3 y el 4 en el evento onchange:
Código Delphi [-]
procedure TForm14.Edit3Change(Sender: TObject);
begin
D:=StrToFloat(Edit2.text)*StrToFloat(Edit3.Text)/100;
if edit2.Text = ' ' then
begin
    edit2.Text = '0'.
end
else
calcula;

end;
Código Delphi [-]
procedure TForm14.Edit4Change(Sender: TObject);
begin
I:=StrToFloat(Edit2.text)*StrToFloat(Edit4.Text)/100;
if edit4.Text = ' ' then
begin
    edit4.Text = '0'.
end
else
calcula;
end;

Parece mucho trabajo ya que tienes que modificar algunas cosas, pero te daras cuenta que crear procedimientos ajustados a tu necesidad te ayuda a no repetir codigo, simplemente lo llamas cuando necesites.
saludos
Espero que estemos aprendiendo algo a nuestra edad....
__________________
Siempre Novato
Responder Con Cita
  #32  
Antiguo 04-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
gracias lo ire probando mañana a ver que pasa. saludos
Responder Con Cita
  #33  
Antiguo 04-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Tienes que cambiar a fact por string;
El problema no esta en filtro, esta en fact:
Código Delphi [-]var Filtro : String; fact: String; begin fact:= '0'; Table2.Filtered := False; Filtro := 'ID_Factura = '+fact; Table2.Filter := Filtro; Table2.Filtered := True end else Table2.Filtered := False; //[Error] Unit14.pas(324): ';' expected but 'ELSE' found end; //[Error] Unit14.pas(325): '.' expected but ';' found
Hola Caral, ya probe el procedimiento y esta funcionando, en cuanto a esto me tira el error puesto arriba, parece algo con la puntuacion pero no se, ya probe poniendolo despues del true, pero sigue igual.
Faltaria el boton guardar para almacenar todo y poder verlo en el historial, mientras tanto voy probando Qreport, aunque tengo que tener datos que ver para imprimir, saludos.
Responder Con Cita
  #34  
Antiguo 04-08-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola

Código Delphi [-]
var
   Filtro : String;
   fact: String;
begin
     fact:= '0':
     Table2.Filtered := False;
     Filtro := 'ID_Factura = '+fact;
     Table2.Filter := Filtro;
     Table2.Filtered := True
   
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #35  
Antiguo 04-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Gracias Caral, buen dia.
veamos los pasos, entro a facturacion, apreto el boton nueva factura, me borra u oculta los datos del DBGrid.
cargo un numero de factura en el DBEdit5 que ahora lo puse en la primer hoja con todo el reto de cosas.
hago doble click para cargar en el DBGrid2 de servicios o pruductos y me tira el siguiente error ... raised exception class EDBEngineError with message 'key violation'. Process stopped...
parece que se soluciona de un lado y de desarregla de otro
Responder Con Cita
  #36  
Antiguo 04-08-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
La tabla esta filtrada, no puedes abrir algo que ya esta abierto.
a ver asi:
Código Delphi [-]
procedure TForm14.DBGrid2DblClick(Sender: TObject);
begin
Table2.Filtered := False;
Table2.Close;
Table2.Open;
if combobox1.Text = 'Productos' then
  begin
   datasource5.DataSet:= Table4;  // tabla de productos
   Table2.Insert; // inserta un campo
   Table2Cod_prodser.Value:= Table4Cod_prod.Value; // el campo cod_prod de la tabla nueva es igual al de la tabla5
   Table2Codigo.Value:= Table4Codigo.Value;
   Table2Descripcion.Value:= Table4Descripcion.Value;
  // Table2Unidad.Value:= Table4Unidad.Value;
   Table2Importunidad.Value:= Table4ImpVent.Value;
   Table2Cantidad.Value:= StrToFloat(Edit1.Text);  //cantidad cargada por el usuario
   Table2TotalImp.Value:=Table2Cantidad.Value * Table2Importunidad.Value;   // multiplica la cantidad por el valor unitario
   Table2.Post; // guarda el dato en la tabla nueva.
   end;
  if combobox1.Text = 'Servicios' then
  begin
  datasource3.DataSet:= Table3;  // tabla servicios
   Table2.Insert; // inserta un campo
   Table2Cod_prodser.Value:= Table5Cod_servcio.Value; // el campo cod_servicio de la tabla nueva es igual al de la tabla3
   Table2Codigo.Value:= Table5Codigo.Value;
   Table2Descripcion.Value:= Table5Servicio.Value;
   Table2Cantidad.Value:= StrToFloat(Edit1.Text);  // cantidad cargada por el usuario
   Table2Importunidad.Value:= Table5ImpServ.Value;
   Table2TotalImp.Value:=Table2Cantidad.Value * Table2Importunidad.Value;
   Table2.Post; // guarda el dato en la tabla nueva.
   end;
   calcula; // aqui....
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #37  
Antiguo 04-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
No al hacer doble click en el producto para cargar, me tira el nuevamente el error, le agregue
Table2.Filtered := False;
Table2.Close;
pero hace lo mismo, no se si me comi algo, donde dice ' calcula; // aqui....' debo poner algo? o asi simplemente esta llamando al procedimiento?
Responder Con Cita
  #38  
Antiguo 04-08-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Puede que el problema este por ahi.
Si no hay datos el procedimiento calcula dara un error en las variables ya que no tienen datos.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #39  
Antiguo 04-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Me siento bastante inutil al no poder aportar opciones.
Responder Con Cita
  #40  
Antiguo 04-08-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
El problema no es tuyo es que te esta tratando de ayudar un novato.
Saludos
__________________
Siempre Novato
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar registro de una Tabla a otra Tabla, sin repetirse MaMu Conexión con bases de datos 22 11-04-2013 15:29:11
Mysql: copiar los campos de una tabla de una base de datos a otra tabla de otra base? patriram MySQL 4 02-11-2007 16:00:24
copiar datos de una tabla en otra fedelphi Firebird e Interbase 6 24-08-2007 03:59:36
Copiar un registro de una tabla en otra... JuanErasmo SQL 6 10-07-2007 23:08:15
Copiar Tabla de una BD a Otra BD en Firebird pcicom SQL 3 14-02-2005 16:31:15


La franja horaria es GMT +2. Ahora son las 23:58:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi