
restar 2 campos de 2 tablas diferentes
#1
Posted 05 September 2012 - 04:31 PM
#2
Posted 05 September 2012 - 05:02 PM
Aunque lo que pides se puede hacer dependiendo de la DB que uses, creo que más que restar de dos tablas, tu inconveniente está más en el diseño de la base de datos. Una manera de solucionar esto es agregando un campo "EXISTENCIAS" en la tabla de Productos, que aumenta con cada entrada y disminuye con cada salida, cosa que puedes hacer mediante un trigger (dependiendo de la DB que uses), o directamente desde Delphi.
Saludos.
#3
Posted 05 September 2012 - 05:03 PM
#4
Posted 05 September 2012 - 05:21 PM
Lo que dice Wilson es mas logico, si tienes una tabla entradas otra salidas seguramente tambien tienes una de productos con su respectivo codigo.
Agregas un campo existencias a la tabla de productos y cada vez que aumentas o disminuyes la existencia se hace un update de esa tabla.
saludos
PD: No te sirvio el codigo que puse en Clubdelphi ?
#5
Posted 05 September 2012 - 05:22 PM
En el entendido que tu tabla productos tiene un campo "CODIGO" con valores que no se repiten.
/*ENTRADAS*/
CREATE OR ALTER TRIGGER ENTRADAS_BI FOR ENTRADAS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
update PRODUCTOS
set Existencias = Existencias + new.Cantidad
where CODIGO = new.CODIGO;
end
CREATE OR ALTER TRIGGER ENTRADAS_BU FOR ENTRADAS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
update PRODUCTOS
set Existencias = Existencias - old.Cantidad
where CODIGO = old.CODIGO;
update PRODUCTOS
set Existencias = Existencias + new.Cantidad
where CODIGO = new.CODIGO;
end
CREATE OR ALTER TRIGGER ENTRADAS_BD FOR ENTRADAS
ACTIVE BEFORE DELETE POSITION 0
AS
begin
update PRODUCTOS
set Existencias = Existencias - old.Cantidad
where CODIGO = old.CODIGO;
end
/*SALIDAS*/
CREATE OR ALTER TRIGGER SALIDAS_BI FOR SALIDAS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
update PRODUCTOS
set Existencias = Existencias - new.Cantidad
where CODIGO = new.CODIGO;
end
CREATE OR ALTER TRIGGER SALIDAS_BU FOR SALIDAS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
update PRODUCTOS
set Existencias = Existencias + old.Cantidad
where CODIGO = old.CODIGO;
update PRODUCTOS
set Existencias = Existencias - new.Cantidad
where CODIGO = new.CODIGO;
end
CREATE OR ALTER TRIGGER SALIDAS_BD FOR SALIDAS
ACTIVE BEFORE DELETE POSITION 0
AS
begin
update PRODUCTOS
set Existencias = Existencias + old.Cantidad
where CODIGO = old.CODIGO;
end
#6
Posted 05 September 2012 - 05:23 PM
no es que no me haya servido si no que como esta en access no supe relacionarla con mysql es por eso que ya no puede avanzar pero si lo intente
#7
Posted 05 September 2012 - 05:24 PM
No esta en access, esta en sql, osea, sirve en cualquier base de datos.
Saludos
#8
Posted 05 September 2012 - 05:55 PM
/*ENTRADAS*/
DELIMITER $$
CREATE TRIGGER `ENTRADAS_BI`
BEFORE INSERT FOR `ENTRADAS`
FOR EACH ROW
begin
update PRODUCTOS
set Existencias = Existencias + new.Cantidad
where CODIGO = new.CODIGO;
end$$
DELIMITER;
DELIMITER $$
CREATE TRIGGER `ENTRADAS_BU`
BEFORE UPDATE FOR `ENTRADAS`
FOR EACH ROW
begin
update PRODUCTOS
set Existencias = Existencias - old.Cantidad
where CODIGO = old.CODIGO;
update PRODUCTOS
set Existencias = Existencias + new.Cantidad
where CODIGO = new.CODIGO;
end$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `ENTRADAS_BD`
BEFORE DELETE FOR `ENTRADAS`
FOR EACH ROW
begin
update PRODUCTOS
set Existencias = Existencias - old.Cantidad
where CODIGO = old.CODIGO;
end$$
DELIMITER ;
/*SALIDAS*/
DELIMITER $$
CREATE TRIGGER `SALIDAS_BI`
BEFORE INSERT FOR `SALIDAS`
FOR EACH ROW
begin
update PRODUCTOS
set Existencias = Existencias - new.Cantidad
where CODIGO = new.CODIGO;
end$$
DELIMITER;
DELIMITER $$
CREATE TRIGGER `SALIDAS_BU`
BEFORE UPDATE FOR `SALIDAS`
FOR EACH ROW
begin
update PRODUCTOS
set Existencias = Existencias + old.Cantidad
where CODIGO = old.CODIGO;
update PRODUCTOS
set Existencias = Existencias - new.Cantidad
where CODIGO = new.CODIGO;
end$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `SALIDAS_BD`
BEFORE DELETE FOR `SALIDAS`
FOR EACH ROW
begin
update PRODUCTOS
set Existencias = Existencias + old.Cantidad
where CODIGO = old.CODIGO;
end$$
DELIMITER ;
#9
Posted 06 September 2012 - 08:21 AM
Select Entradas.Codigo, Entradas.Nombre,
Entradas.Cantidad - coalesce(Salidas.Cantidad,0) Existencia
From TablaEntradas Entradas
Left Join TablaSalidas Salidas
On Entradas.Codigo = Salidas.Codigo
Esta consulta te muestra la existencia de los artículos en entradas con respecto a las salidas...
#10
Posted 06 September 2012 - 03:00 PM
#11
Posted 06 September 2012 - 03:43 PM
necesitas especificar el codigo del producto.
Si en las tablas tienes multiples entradas y salidas necesitas, a mi modo de ver, especificar las condiciones de la consulta.
Yo ademas de pensar en la tabla productos, crearia un where, osea condicion, con el codigo del producto y la fecha.
saludos
#12
Posted 06 September 2012 - 03:57 PM
y no podras darme una idea porque no conosco mucho de este tema de mysl estuve investigando y lo intente con esto pero nada
SELECT Entradas.Codigo, Entradas.Nombre,
sum(Entradas.Cantidad) - COALESCE(Salidas.Cantidad,0) Existencia
FROM Entradas
LEFT JOIN Salidas
ON Entradas.Codigo = Salidas.Codigo
#13
Posted 06 September 2012 - 04:32 PM
hola
y no podras darme una idea porque no conosco mucho de este tema de mysl estuve investigando y lo intente con esto pero nada
Te marca error?, podrías contarnos por qué no se ajusta a lo que necesitas?
#14
Posted 06 September 2012 - 04:35 PM
#15
Posted 06 September 2012 - 04:40 PM
Revisa el tutorial de facturacion, en espacial el form factura, veras muchas cosas.
Aqui esta el codigo.
Saludos