Ir al contenido


Foto

restar 2 campos de 2 tablas diferentes


  • Por favor identifícate para responder
14 respuestas en este tema

#1 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 05 septiembre 2012 - 04:31

que hay amigos tengo un problemita que tratare de explicar tengo 2 tablas llamadas entradas y salidas en las 2 tengo los mismos campos que son codigo, nombre, unidad, cantidad, precio, importe lo que quiero haces es sacar la cantidad total por codigo de cada tabla y me arroje un total de la resta de entradas y salidas, a lo mejor no me explico bien, por ejemplo en entradas tengo 5 productos con el mismo codigo X y en salidas tengo 3 productos de codigo x entonces logico me queda de existencia de ese producto 2 es lo que no puedo sacae esa resta porque estan en diferentes tablas ojala me puedan ayudar
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 05 septiembre 2012 - 05:02

¿Que base de datos estás usando?.

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.
  • 0

#3 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 05 septiembre 2012 - 05:03

pue si me gustaria intentarlo asi como dices no se si me podrias ayudar la base de datos que utilizo es mysql
  • 0

#4 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 05 septiembre 2012 - 05:21

Hola
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 ?
  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 05 septiembre 2012 - 05:22

Lastimosamente no tengo mucha experiencia con MySql, pero te voy a poner los Triggers de la manera como se hacen en Firebird, a ver si otro compañero nos colabora con la traducción a MySql.
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


  • 0

#6 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 05 septiembre 2012 - 05:23

HOLA
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
  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 05 septiembre 2012 - 05:24

Hola
No esta en access, esta en sql, osea, sirve en cualquier base de datos.
Saludos
  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 05 septiembre 2012 - 05:55

Allí miré de afán un manual de MySql y los Triggers podrían ser así, aunque insisto en la asesoría de un compañero con más experiencia en MySQl para que nos corrija si hay algún error en la sintaxis. Con la parte  lógica  no hay ningún problema.


/*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 ;


  • 0

#9 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 06 septiembre 2012 - 08:21

Si lo que quieres es una consulta quedaría de la siguiente manera....



      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...


  • 0

#10 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 06 septiembre 2012 - 03:00

abra manera de ajusta esto ultimo sabes que si me arroja resultado pero no me lo arroja bien, yo necesti que todos los codigos iguales de entradas se resten con todos los codigos de salidas para saber la existencia exacta del producto pero asi me lo arroja mal
  • 0

#11 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 06 septiembre 2012 - 03:43

Hola
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
  • 0

#12 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 06 septiembre 2012 - 03:57

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

SELECT Entradas.Codigo, Entradas.Nombre, 
                sum(Entradas.Cantidad) - COALESCE(Salidas.Cantidad,0) Existencia
        FROM  Entradas
  LEFT JOIN  Salidas
            ON Entradas.Codigo = Salidas.Codigo

  • 0

#13 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 06 septiembre 2012 - 04:32

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?
  • 0

#14 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 06 septiembre 2012 - 04:35

no me marca error pero por decir tengo varios registros con el mismo codigo en entradas y salidas y lo que necesito es que me sume todas las entradas de un codigo y todas las salidas y se resten y me de el resultado u de esta forma me arroja mal el resultdo
  • 0

#15 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 06 septiembre 2012 - 04:40

Hola
Revisa el tutorial de facturacion, en espacial el form factura, veras muchas cosas.
Aqui esta el codigo.
Saludos
  • 0




IP.Board spam blocked by CleanTalk.