Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-12-2011
ilchicho ilchicho is offline
Miembro
 
Registrado: jul 2010
Posts: 12
Poder: 0
ilchicho Va por buen camino
Como descontar cantidad de stock en tabla de Articulos.

desde ya muchas gracias a todos por los aportes, estoy empezando a morar desde otro punto de vista.
a interpretar como son los pasos en los cuales se tendría que mover una empresa.

guillotmarc me marca error en el codigo: IF (deleting) THEN
Precompiler Error: Syntax error - ).

cree el trigger ta como me indicaste y cuando compilo me marca en rojo esa porcion de codigo
es que como en el deleting tengo que darle una opcion??
IF (deleting ( ) ) THEN

Hace tiempo vi algo en java donde programamos mas o menos de esta forma pero busque y no me doy cuenta que puede ser.

Gracias Guillot
Responder Con Cita
  #2  
Antiguo 01-12-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
Hola.

¿ Que versión de Firebird utilizas ?. Ese condicional está escrito utilizando una variable disponible desde Firebird 2.0 en adelante.

Si aún utilizas Firebird 1.0 o 1.5, probablemente ya sea hora de que hagas el cambio, estas versiones son muy antiguas.

Un trigger alternativo, sin usar esa variable, sería :

Código SQL [-]
SET TERM ^ ;

CREATE TRIGGER RECALCULAR_STOCK for DETALLE_P
active after insert or update or delete position 0
AS
begin

  UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = coalesce(new.CODIGO, old.CODIGO))
  WHERE ID_ARTICULO = coalesce(new.CODIGO, old.CODIGO);
end
^

SET TERM ; ^

NOTA: Ese condicional está para solventar el problema de que en un Trigger AFTER DELETE, las variables NEW no tienen valor, y hay que consultar el valor OLD del código de artículo (mientras que en un Trigger AFTER INSERT ocurre exactamente lo contrario). En la segunda propuesta, se solventa el problema mediante el uso de la función COALESCE.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 01-12-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
Eliminado por código SQL mal formateado.

Corrección posteada en un nuevo mensaje.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #4  
Antiguo 01-12-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
Finalmente, la opción que va a funcionar en cualquier versión de Interbase o Firebird, por antigua que sea (ya que utilizamos la sintaxis más básica y común) es crear tres triggers, uno para cada operación que se puede hacer en la tabla:

Código SQL [-]
SET TERM ^ ;

CREATE TRIGGER RECALCULAR_STOCK_AI for DETALLE_P
active after insert position 0
AS
begin

  UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = new.CODIGO)
  WHERE ID_ARTICULO = new.CODIGO, old.CODIGO;
end
^

CREATE TRIGGER RECALCULAR_STOCK_AU for DETALLE_P
active after update position 0
AS
begin

  UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = new.CODIGO)
  WHERE ID_ARTICULO = new.CODIGO;


  UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = old.CODIGO)
  WHERE ID_ARTICULO = old.CODIGO;
end
^

CREATE TRIGGER RECALCULAR_STOCK_AD for DETALLE_P
active after delete position 0
AS
begin

  UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = old.CODIGO)
  WHERE ID_ARTICULO = old.CODIGO;
end
^

SET TERM ; ^

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 02-12-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 25
José Luis Garcí Va camino a la fama
Hola ilchicho, lo que tu quieres hacer de regular Stock en presupuestos o pedidos, es una reserva o retención de mercancía, esto se hace de la siguiente manera, debes crear una nueva tabla, con el campo común del Código del producto, el del Cliente, el Tipo de Documento y número de este, además debes de añadir el campo reserva de Stock y fecha de la reserva. esto en cuanto a la tabla, se puede añadir un campo más que sería el de días de reserva, pero este último puedes controlarlo por código o tenerlo incluido en la tabla de Configuración.

Por código cuando controlas el Stock debes de añadir dos labels donde marque el Stock reservado y el Stock actual-el reservado (teniendo en cuenta siempre que sólo contaría el que este dentro del plazo dado (fecha actual esta dentro de la fecha de reserva + el número de días de la reserva)), sería bueno que eliminases las reservas ya caducadas o añadir otro campo indicando que están caducadas.

Espero te sirva el planteamiento.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #6  
Antiguo 03-12-2011
ilchicho ilchicho is offline
Miembro
 
Registrado: jul 2010
Posts: 12
Poder: 0
ilchicho Va por buen camino
Como descontar cantidad de stock en tabla de Articulos.

ante todo sigo agradeciendo, muchas gracias,
les comento como estoy haciendo lo del codigo por que parece que algo estoy haciendo mal porque no he notado nada.
desde SQL Manager for InterBase & Firebird sobre trigger hago clic con el boton derecho y cree como me indico GUILLOT en un primer momento el primer trigger no notando ningun cambio, y asi probando con los otros trigger y no noto que se modifique, tengo una mercaderia XX que tiene un stock de 15 entonces en el presupuesto tomo 5 articulos XX, y segun me dijo un amigo solo se tendria que modificar el stock de ese articulo a 10.
consulte con otros amigos por el codigo y me dijeron que esta muy bueno, el tema es que ninguno tiene manejo de delphi y sql manager entonces no se si ademas de crearlo en el sql manager tengo que invocarlo desde el delphi o en la base desde el datamodule, mil disculpas por mi ignorancia, pero ya que me meti en esto brete quiero desafiarlo hasta que me salga, ya que de esa forma se aprende un poco mas y mejor creo.

bueno mis amigos del club estoy a merced de sus ayudas nuevamente.

Gracias, Alejandro
Responder Con Cita
  #7  
Antiguo 03-12-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Tienes que crear TODOS los triggers indicados por guillotmarc, y luego en tu código delphi cuando haces cualquier entrada, modificación, etc. del stock, se cambiará automáticamente en la base de datos.
¡¡¡Pero pon aquí tu código, que lo revisemos!!!
Responder Con Cita
  #8  
Antiguo 04-12-2011
ilchicho ilchicho is offline
Miembro
 
Registrado: jul 2010
Posts: 12
Poder: 0
ilchicho Va por buen camino
Como descontar cantidad de stock en tabla de Articulos.

Querida gente no se si estoy poniendo mal los trigger o que esta pasando,
puede ser que sea tambien el navo yo, pero no me actualiza el stock.
asi que les envio el proyecto para que lo miren, depaso por ahy les sirve o no,
y si me pueden dar una mano perfecto y sino bueno colaboro con algo.

gracias

Aqui el proyecto, va en el c y la base tb en el c

http://www.clubdelphi.com/foros/C:\U...IRUBROSOSA.rar

Última edición por Casimiro Noteví fecha: 04-12-2011 a las 10:52:36.
Responder Con Cita
  #9  
Antiguo 04-12-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
¿Pero dónde lo has puesto?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
descontar mercancia de una tabla a otra elsamurai Conexión con bases de datos 11 15-12-2010 04:21:44
Como borrar articulos con relacion a otra tabla kaeltas SQL 5 12-01-2010 23:41:26
tabla articulos josi Varios 28 02-04-2008 10:30:55
como puedo saber la cantidad de campos que tiene una tabla CottonMouth OOP 1 27-06-2007 07:02:49
cantidad de articulos juanchopit Varios 3 20-09-2005 05:57:54


La franja horaria es GMT +2. Ahora son las 18:31:50.


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