• Viernes 8 de Noviembre de 2024, 16:42

Autor Tema:  Triggers para actualizar Saldos  (Leído 6275 veces)

MArio85

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Triggers para actualizar Saldos
« en: Jueves 3 de Septiembre de 2009, 01:12 »
0
Hola tengo 3 Tablas en mysql:
Clientes
Clve_Cliente     Razon_Social     Direccion      RFC ......................     Saldo
.
.
.

Facturas
Clve_Fact    Clve_Cliente      No_Fact      Concepto .........   Saldo
.
.
.

Pagos
Clve_Pago       Clve_Fact .........   Abono
.
.

Nota: Reemplaze "........." Por campos de las tablas que no son importantes para esta situacion en especifico.

Necesito algo que me actualize el saldo de facturas caundo se haga un pago y asi mismo se actualize el saldo del cliente (formado por la suma de todas las facturas). Por lo que eh visto lo que necesito son los triggers no? tengo la version 5. 0.19 de mysql por lo que creo si funcionan los triggers, pero no se como se usan, como se programarian los triggers o cuantos necesitaria para actualizar los saldos de las diferentes tablas???

Saludos

Thanatos-chan

  • Miembro MUY activo
  • ***
  • Mensajes: 136
  • Nacionalidad: do
    • Ver Perfil
Re: Triggers para actualizar Saldos
« Respuesta #1 en: Jueves 3 de Septiembre de 2009, 22:00 »
0
que tal Mario85,

si buscas en el foro veras dos temas que te podrían ayudar.

http://foros.solocodigo.com/viewtopic.php?f=58&t=40100&p=145646&hilit=trigger#p145646
http://foros.solocodigo.com/viewtopic.php?f=58&t=38270&p=139257&hilit=trigger#p139257

tambien puedes ve ejemplos en la pagina de soporte de mysql.

http://dev.mysql.com/doc/refman/5.0/es/create-trigger.html

si te fijas en los ejemplos tu necesitas un trigger de "AFTER INSERT" y lo vas a crear para la tabla pagos.

lo que si debes tomar en cuenta es que necesitas identificar "cual" cliente hace el pago para saber a cual cliente actualizar en tu tabla  de clientes

ya dentro del trigger necesitas actualizar las tablas, ej, la de factura seria mas o menos así.

update pagos
set saldo=pagos.saldo - new.abono
where clve_fact=new.clve_fact;

esto tomando en cuenta la naturaleza de los conceptos, ya que es una abono a una factura el saldo de la factura sera igual a el saldo menos el abono realizado.

para la tabla cliente seria mas o menos asi:

NUMERO_FACTURA=new.clve_fact;
select SUM(t1.saldo) into SALDO_CLIENTE from facturas as t1,cliente as t2 where t1.clve_fact=NUMERO_FACTURA and t1.clve_cliente=t2.clve_cliente;
update clientes
set saldo =SALDO_CLIENTE;

para este caso tendras que declrar variables "NUMERO_FACTURA" Y "SALDO_CLIENTE" ya que lo que estas pidiendo es un "SUM" de las facturas pero segun tus tablas al momento de hacer un insert en pagos no se sabe cual es el cliente y por tanto se tiene que hacer un join con facturas para saber que cliente es, si tu tabla de pagos tuviera el campo clve_cliente no tuvieras que hacer el join.

bueno espero te halla servido de ayuda.
Que es un genio???? yo superare a un genio con trabajo duro, y eso es todo.