Fórum Cálculo de Saldo em uma Trigger ow SP. #51836
28/07/2005
0
Boa tarde,
meu problema é o seguinte tenho uma tabela de movimento de produtos com os campos: codigo, produto, tipo, qtd, sld.
e gostaria que a cada nova inclusão, alteração ow exclusão o saldo fosse atualizado.
o saldo de cada registro é calculado de acordo como o movimento dos registros anteriores a ele. e conforme o campo tipo que pode ser de entrada ow saida eu sei se devo somar ow diminuir a quantidade do saldo. já tentei fazer isto via trigger mas naum deu certo se alguem puder dar uma luz ficarei muito grato.
t+
meu problema é o seguinte tenho uma tabela de movimento de produtos com os campos: codigo, produto, tipo, qtd, sld.
e gostaria que a cada nova inclusão, alteração ow exclusão o saldo fosse atualizado.
o saldo de cada registro é calculado de acordo como o movimento dos registros anteriores a ele. e conforme o campo tipo que pode ser de entrada ow saida eu sei se devo somar ow diminuir a quantidade do saldo. já tentei fazer isto via trigger mas naum deu certo se alguem puder dar uma luz ficarei muito grato.
t+
Tronbr
Curtir tópico
+ 0
Responder
Posts
31/07/2005
Eduardo Pereira
A utilização de trigger me parece a solução mais indicada para o seu problema, como você pensou.
A utilização do campo ´saldo´ na tabela movimento é que talvez não seja muito apropriada. O saldo poderia estar na tabela de produtos, por exemplo.
Divulgue o código dos triggers para vermos o que há de errado.
[]´s
Eduardo Pereira
A utilização do campo ´saldo´ na tabela movimento é que talvez não seja muito apropriada. O saldo poderia estar na tabela de produtos, por exemplo.
Divulgue o código dos triggers para vermos o que há de errado.
[]´s
Eduardo Pereira
Responder
Gostei + 0
31/07/2005
Vinicius2k
Colega,
Acho que vc não deve manter este ´saldo´ gravado na tabela.
Se o que vc quer é uma espécie de ´extrato´, minha sugestão é que vc utilize um Stored Procedure selecionável.
Existem alguns exemplos aqui no fórum e segue abaixo um que não é exatamente o que vc precisa, mas a idéia é, basicamente, a mesma:
T+
Acho que vc não deve manter este ´saldo´ gravado na tabela.
Se o que vc quer é uma espécie de ´extrato´, minha sugestão é que vc utilize um Stored Procedure selecionável.
Existem alguns exemplos aqui no fórum e segue abaixo um que não é exatamente o que vc precisa, mas a idéia é, basicamente, a mesma:
CREATE PROCEDURE SP_EXTRATOCONTACAIXA ( IDEMPRESA SMALLINT, DATAINICIAL DATE, DATAFINAL DATE) RETURNS ( DATA DATE, DOCUMENTO INTEGER, HISTORICO VARCHAR (50) CHARACTER SET WIN1252, VALOR NUMERIC (11, 2), VALORDC CHAR (1) CHARACTER SET WIN1252, SALDO NUMERIC (11, 2), SALDODC CHAR (1) CHARACTER SET WIN1252) AS DECLARE VARIABLE CREDITOS NUMERIC(11,2); DECLARE VARIABLE DEBITOS NUMERIC(11,2); DECLARE VARIABLE SALDOANT NUMERIC(11,2); BEGIN DATA = :DATAINICIAL; HISTORICO = ´SALDO ANTERIOR´; SELECT SUM(M.VALORMOVIMENTO) FROM MOVIMENTOCAIXA M WHERE M.IDEMOVIMENTO = :IDEMPRESA AND M.TIPOMOVIMENTO = ´C´ AND M.DATAMOVIMENTO < :DATAINICIAL INTO :CREDITOS; IF (CREDITOS IS NULL) THEN CREDITOS = 0; SELECT SUM(M.VALORMOVIMENTO) FROM MOVIMENTOCAIXA M WHERE M.IDEMOVIMENTO = :IDEMPRESA AND M.TIPOMOVIMENTO = ´D´ AND M.DATAMOVIMENTO < :DATAINICIAL INTO :DEBITOS; IF (DEBITOS IS NULL) THEN DEBITOS = 0; SALDO = CREDITOS - DEBITOS; IF (SALDO < 0) THEN BEGIN SALDO = SALDO * (-1); SALDODC = ´D´; END ELSE SALDODC = ´C´; SUSPEND; DATA = NULL; DOCUMENTO = NULL; HISTORICO = NULL; VALOR = NULL; VALORDC = NULL; SALDO = NULL; SALDODC = NULL; /****/ SALDOANT = 0; FOR SELECT M.DATAMOVIMENTO, M.IDMOVIMENTO, M.HISTORICOMOVIMENTO, M.VALORMOVIMENTO, M.TIPOMOVIMENTO FROM MOVIMENTOCAIXA M WHERE M.IDEMOVIMENTO = :IDEMPRESA AND (M.DATAMOVIMENTO BETWEEN :DATAINICIAL AND :DATAFINAL) INTO :DATA, :DOCUMENTO, :HISTORICO, :VALOR, :VALORDC DO BEGIN IF (NOT VALORDC IS NULL) THEN BEGIN IF (VALORDC = ´C´) THEN SALDO = SALDOANT + VALOR; ELSE IF (VALORDC = ´D´) THEN SALDO = SALDOANT - VALOR; SALDOANT = SALDO; IF (SALDO < 0) THEN BEGIN SALDO = SALDO * (-1); SALDODC = ´D´; END ELSE SALDODC = ´C´; SUSPEND; DATA = NULL; DOCUMENTO = NULL; HISTORICO = NULL; VALOR = NULL; VALORDC = NULL; SALDO = NULL; SALDODC = NULL; END END /****/ DATA = DATAFINAL; HISTORICO = ´SALDO´; SALDO = SALDOANT; IF (SALDO < 0) THEN BEGIN SALDO = SALDO * (-1); SALDODC = ´D´; END ELSE SALDODC = ´C´; SUSPEND; END
T+
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)