Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ¿Cómo "sacar" la existencia de un producto? (https://www.clubdelphi.com/foros/showthread.php?t=82318)

Yare 22-02-2013 06:30:36

¿Cómo "sacar" la existencia de un producto?
 
Hola soy nueva aquí en el foro, aunque lo sigo bastante... También en Delphi soy novata...
Por ahora estoy haciendo un control de inventarios... Pero tengo el problema de que no puedo mostrar la
existencia por producto... No sé como hacerlo...
Tengo la tabla de existencia
-Código_barras
-Cantidad

Ventas
-Código_barras
-Cantidad
....y los demás campos

Compras
-Código_barras
-Cantidad
....Y más campos


Entonces lo que quiero es que en la forma de ventas me muestre la existencia en un dbedit...
Por la venta que ejecute en ese rato, o sea por código... :confused:

Yare 22-02-2013 07:15:25

Hola
 
Puse está sentencia en el interactive de ib console y la ejecute en un query... sin embargo de un producto por ejemplo, vendí 1 pieza y tenia 2 pero en el stock me devuelve un 6

Select (sum(registro.Cantidad)-Sum(ventas.Cantidad)) as stock From registro, ventas where registro.codigo_barras = ventas.codigo_barras


¿Alguien que pueda ayudarme?

Además lo que pongo en ese DBEDIT lo quiero guardar en la BD pero creo que por ser un Query no me deja... :confused:

ecfisa 22-02-2013 07:54:05

Hola Yare.

Paciencia, paciencia que no hay muchos deambulando a esta hora... :)

Agrega al form:
  • Un TIBQuery, (o el equivalente en los componentes que uses) que le daremos por nombre: Tu_Query.
  • Un TDataSource asociado al query que denominaremos: dsQuery.
  • Un TDBEdit para ir mostrando la existencia.
Las asignaciones de los ejemplos siguientes podes realizarlas desde el Object Inspector en tiempo de diseño; para darle más claridad lo hago por código .

Si ya tenes actualizadas las existencias en tabla EXISTENCIA:
Código Delphi [-]
procedure TForm.FormCreate(Sender: TObject);
begin
  with Tu_Query do
  begin
    DataSource:= dsVentas; // TDataSource asociado a tabla VENTAS
    Close;
    SQL.Clear;
    SQL.Add('SELECT CANTIDAD AS STOCK FROM EXISTENCIA');
    SQL.Add('WHERE CODIGO_BARRAS = :CODIGO_BARRAS'); // (*)
    Open;
  end;
  DBEdit1.DataSource:= dsQuery;
  DBEdit1.DataField := 'STOCK';
end;

Si no tenes actualizadas las existencias en la tabla EXISTENCIA, podes obtenerlas restando a el campo CANTIDAD de la tabla COMPRAS el campo CANTIDAD de la tabla VENTAS. Para lo que habría que cambiar un poco la consulta:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  with Tu_Query do
  begin
    DataSource:= dsVentas; // TDataSource asociado a tabla VENTAS
    Close;
    SQL.Clear;
    SQL.Add('SELECT TC.CANTIDAD - TV.CANTIDAD AS STOCK');
    SQL.Add('FROM COMPRAS TC, VENTAS TV');
    SQL.Add('WHERE TC.CODIGO_BARRAS = TV.CODIGO_BARRAS');
    SQL.Add('AND TV.CODIGO_BARRAS = :CODIGO_BARRAS'); // (*)
    Open;
  end;
  DBEdit1.DataSource:= dsQuery;
  DBEdit1.DataField := 'STOCK';
end;
De ambos modos mientras te vayas desplazando por los diferentes artículos mostrará la existencia en el TDBEdit.

(*) Es indispensable que lo que sigue a los ':' (CODIGO_BARRAS) sea exáctamente el nombre del campo de la tabla VENTAS. Y que la propiedad DataSource del query apunte al TDataSource asociado a la tabla VENTAS para que se vaya mostrando la existencia al desplazarse por la misma.

Saludos.

Yare 22-02-2013 17:55:54

Error...
 
Gracias por responder de verdad, es un embrollo total... Siento que es tan sencillo, pero las existencias no me salen... :confused:
Código Delphi [-]
 with Modulo_datos.Ds_Tabla_existencias do
  begin
    Modulo_datos.Ds_Tabla_existencias:= Modulo_datos.Ds_tabla_ventas;
    Close;
    SQL.Clear;
    SQL.Add('SELECT registro.CANTIDAD - ventas.CANTIDAD AS STOCK');
    SQL.Add('FROM registro, ventas');
    SQL.Add('WHERE registro.CODIGO_BARRAS = ventas.CODIGO_BARRAS');
    SQL.Add('AND ventas.CODIGO_BARRAS = :CODIGO_BARRAS'); 
    Open;
  end;
  DBEdit1.DataSource:= Modulo_datos.Ds_Tabla_existencias;
  DBEdit1.DataField := 'STOCK';
end;


Y me marca como error: Undeclared identifier "SQL" ..... Missing Operator Semicolon...

Revise los punto y coma pero no funciono.

¿Me podrían auxiliar? :o

ecfisa 22-02-2013 18:11:08

Hola Yare.
Cita:

Empezado por Yare (Mensaje 455422)
[size="4"][
Y me marca como error: Undeclared identifier "SQL" ..... Missing Operator Semicolon...

¿ Que componente es Modulo_datos.Ds_Tabla_existencias ? Juego mi cabeza que no es un query...

También sería muy útil que nos menciones que componentes estas usando (IBX,ADO,etc).

Por favor cuando incluyas código en tus mensaje usa etiquetas para darle más legibilidad, esta imágen explica el uso:


(Ya las agregué a tu mensaje)

Saludos.:)

ElDioni 22-02-2013 18:11:45

¿Será por el with?
 
Prueba así

Código Delphi [-]
   
begin  
Modulo_datos.Ds_Tabla_existencias:= Modulo_datos.Ds_tabla_ventas;
Modulo_datos.Ds_Tabla_existencias.Close;     
Modulo_datos.Ds_Tabla_existencias.SQL.Clear;     
Modulo_datos.Ds_Tabla_existencias.SQL.Add('SELECT registro.CANTIDAD - ventas.CANTIDAD AS STOCK');     
Modulo_datos.Ds_Tabla_existencias.SQL.Add('FROM registro, ventas');     
Modulo_datos.Ds_Tabla_existencias.SQL.Add('WHERE registro.CODIGO_BARRAS = ventas.CODIGO_BARRAS'); 
Modulo_datos.Ds_Tabla_existencias.SQL.Add('AND ventas.CODIGO_BARRAS = :CODIGO_BARRAS');      
Modulo_datos.Ds_Tabla_existencias.Open;   
DBEdit1.DataSource:= Modulo_datos.Ds_Tabla_existencias;   
DBEdit1.DataField := 'STOCK'; 
end;

Saludos.

ElDioni 22-02-2013 18:14:13

Cita:

Empezado por ecfisa (Mensaje 455424)
Hola Yare.


¿ Que componente es Modulo_datos.Ds_Tabla_existencias ? Juego mi cabeza que no es un query...

Pues si, ahora que lo dices...

Yare 22-02-2013 18:35:23

Cierto no un un Query estoy mandando llamar a la tabla de existencias.... por medio del datasource...

Uso componentes: Ttable y Tdatasource en el Data Module...
Estoy usando IBconsole como manejador de base datos...

Lo que pasa es que mandé llamar al Query, y tuve el problema de que me decía que no existe el código_barras...


Modulo_datos.Ds_Tabla_existencias corresponde a el datasource de la tabla de existencias....

Yare 22-02-2013 18:46:04

Hola, gracias por ayudarme... Me marca errores también... No entiendo porque me sale el error, que no tengo declarado SQL o la sentencia close... Por que sucederá eso???


Cita:

Empezado por ElDioni (Mensaje 455425)
Prueba así

Código Delphi [-]
   
begin  
Modulo_datos.Ds_Tabla_existencias:= Modulo_datos.Ds_tabla_ventas;
Modulo_datos.Ds_Tabla_existencias.Close;     
Modulo_datos.Ds_Tabla_existencias.SQL.Clear;     
Modulo_datos.Ds_Tabla_existencias.SQL.Add('SELECT registro.CANTIDAD - ventas.CANTIDAD AS STOCK');     
Modulo_datos.Ds_Tabla_existencias.SQL.Add('FROM registro, ventas');     
Modulo_datos.Ds_Tabla_existencias.SQL.Add('WHERE registro.CODIGO_BARRAS = ventas.CODIGO_BARRAS'); 
Modulo_datos.Ds_Tabla_existencias.SQL.Add('AND ventas.CODIGO_BARRAS = :CODIGO_BARRAS');      
Modulo_datos.Ds_Tabla_existencias.Open;   
DBEdit1.DataSource:= Modulo_datos.Ds_Tabla_existencias;   
DBEdit1.DataField := 'STOCK'; 
end;

Saludos.


ecfisa 22-02-2013 20:15:31

Hola Yare.

Cita:

Uso componentes: Ttable y Tdatasource en el Data Module..
Ahora vamos mejor... Sabiendo que estas usando BDE, la sintáxis de la consulta para un TQuery cambia un poco:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  with Tu_Query do
  begin
    DataSource:= dsVentas; // TDataSource asociado a tabla VENTAS
    Close;
    SQL.Clear;
    SQL.Add('SELECT "COMPRAS".CANTIDAD - "VENTAS".CANTIDAD AS STOCK');
    SQL.Add('FROM COMPRAS , VENTAS');
    SQL.Add('WHERE "COMPRAS".CODIGO_BARRAS = "VENTAS".CODIGO_BARRAS');
    SQL.Add('AND "VENTAS".CODIGO_BARRAS = :CODIGO_BARRAS'); // (*)
    Open;
  end;
  DBEdit1.DataSource:= dsQuery;
  DBEdit1.DataField := 'STOCK';
end;

Saludos.

Yare 22-02-2013 23:13:08

Gracias!!!
 
Muchísimas gracias de verdad... Si funcionó... Todavía no puedo creerlo, duré muchos días entrando al Club pero no se me ocurrió preguntar... Me ha ayudado muchísimo... EFICSA.... he aprendido algo nuevo de verdad... Espero pronto llegar a saber así....

Y una última pregunta... Por ser un Query, no lo puedo mostrar en un Qreport? :D


Estoy feliz!!!!

Yare 22-02-2013 23:28:24

Gracias infinitas
 
Ya pude hacerlo, me equivoqué en cuanto a la selección del Query....

estoy muy contenta, me sale todo perfectamente... Gracias a todos por ayudarme... :D



Gracias infinitas de todo corazón!


La franja horaria es GMT +2. Ahora son las 11:21:11.

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