Fórum procedure de atualização de estoque #55322
23/02/2006
0
ola amigos, desenvolvi essa procedure para atualizar meu cadastro de produtos de acordo com o lançamento de notas fiscais, o problema é o seguinte existe produtos que não são somados ao estoque e sim adicionado como um novo produto, tb existem produtos que serão somando aos que ja existem na tabela segue abaixo minha procedure :
Problema não consigo atualizar os produtos, inserindo produtos novos esta tudo ok
CREATE PROCEDURE ENTRADA_ESTOQUE (
I_ACAO CHAR(1),
I_EMPRESA INTEGER,
I_NOTA_COMPRA VARCHAR(20),
I_DATA_COMPRA DATE,
I_COD_MODELO VARCHAR(13),
I_ESN_IMEI VARCHAR(15),
I_ICCID VARCHAR(20),
I_CTN VARCHAR(18),
I_CUSTO_PAGO NUMERIC(18,2),
I_ESTOQUE INTEGER,
I_VALOR_VENDA NUMERIC(18,2),
I_VENDIDO CHAR(1))
RETURNS (
R_MOD VARCHAR(13))
AS
begin
IF (:I_ACAO = ´I´) THEN
BEGIN
INSERT INTO PRODUTO (PRO_EMPRESA,
PRO_NOTA_COMPRA,
PRO_DATA_COMPRA,
PRO_COD_MODELO,
PRO_ESN_IMEI,
PRO_ICCID,
PRO_CTN,
PRO_CUSTO_PAGO,
PRO_ESTOQUE,
PRO_VALOR_VENDA,
PRO_VENDIDO)
values (
:I_EMPRESA,
:I_NOTA_COMPRA,
:I_DATA_COMPRA,
:I_COD_MODELO,
:I_ESN_IMEI,
:I_ICCID,
:I_CTN,
:I_CUSTO_PAGO,
:I_ESTOQUE,
:I_VALOR_VENDA,
:I_VENDIDO);
WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_INSERT;
END
IF (:i_acao = ´S´) THEN
BEGIN
FOR SELECT PRO_COD_MODELO
FROM PRODUTO
WHERE PRO_COD_MODELO = :i_cod_modelo AND
PRO_EMPRESA = :i_empresa
INTO :r_mod
DO
suspend;
IF (:r_mod IS NULL) THEN
BEGIN
INSERT INTO PRODUTO (PRO_EMPRESA,
PRO_NOTA_COMPRA,
PRO_DATA_COMPRA,
PRO_COD_MODELO,
PRO_ESN_IMEI,
PRO_ICCID,
PRO_CTN,
PRO_CUSTO_PAGO,
PRO_ESTOQUE,
PRO_VALOR_VENDA,
PRO_VENDIDO)
values (
:I_EMPRESA,
:I_NOTA_COMPRA,
:I_DATA_COMPRA,
:I_COD_MODELO,
:I_ESN_IMEI,
:I_ICCID,
:I_CTN,
:I_CUSTO_PAGO,
:I_ESTOQUE,
:I_VALOR_VENDA,
:I_VENDIDO);
WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_INSERT;
END
IF (:r_mod IS NOT NULL) THEN
BEGIN
UPDATE PRODUTO SET PRO_CUSTO_PAGO = :I_CUSTO_PAGO,
PRO_ESTOQUE = PRO_ESTOQUE + :I_ESTOQUE,
PRO_VALOR_VENDA = :I_CUSTO_PAGO
WHERE pro_cod_modelo = :I_COD_MODELO AND
PRO_EMPRESA = :I_EMPRESA;
WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_UPDATE;
END
END
end
Problema não consigo atualizar os produtos, inserindo produtos novos esta tudo ok
CREATE PROCEDURE ENTRADA_ESTOQUE (
I_ACAO CHAR(1),
I_EMPRESA INTEGER,
I_NOTA_COMPRA VARCHAR(20),
I_DATA_COMPRA DATE,
I_COD_MODELO VARCHAR(13),
I_ESN_IMEI VARCHAR(15),
I_ICCID VARCHAR(20),
I_CTN VARCHAR(18),
I_CUSTO_PAGO NUMERIC(18,2),
I_ESTOQUE INTEGER,
I_VALOR_VENDA NUMERIC(18,2),
I_VENDIDO CHAR(1))
RETURNS (
R_MOD VARCHAR(13))
AS
begin
IF (:I_ACAO = ´I´) THEN
BEGIN
INSERT INTO PRODUTO (PRO_EMPRESA,
PRO_NOTA_COMPRA,
PRO_DATA_COMPRA,
PRO_COD_MODELO,
PRO_ESN_IMEI,
PRO_ICCID,
PRO_CTN,
PRO_CUSTO_PAGO,
PRO_ESTOQUE,
PRO_VALOR_VENDA,
PRO_VENDIDO)
values (
:I_EMPRESA,
:I_NOTA_COMPRA,
:I_DATA_COMPRA,
:I_COD_MODELO,
:I_ESN_IMEI,
:I_ICCID,
:I_CTN,
:I_CUSTO_PAGO,
:I_ESTOQUE,
:I_VALOR_VENDA,
:I_VENDIDO);
WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_INSERT;
END
IF (:i_acao = ´S´) THEN
BEGIN
FOR SELECT PRO_COD_MODELO
FROM PRODUTO
WHERE PRO_COD_MODELO = :i_cod_modelo AND
PRO_EMPRESA = :i_empresa
INTO :r_mod
DO
suspend;
IF (:r_mod IS NULL) THEN
BEGIN
INSERT INTO PRODUTO (PRO_EMPRESA,
PRO_NOTA_COMPRA,
PRO_DATA_COMPRA,
PRO_COD_MODELO,
PRO_ESN_IMEI,
PRO_ICCID,
PRO_CTN,
PRO_CUSTO_PAGO,
PRO_ESTOQUE,
PRO_VALOR_VENDA,
PRO_VENDIDO)
values (
:I_EMPRESA,
:I_NOTA_COMPRA,
:I_DATA_COMPRA,
:I_COD_MODELO,
:I_ESN_IMEI,
:I_ICCID,
:I_CTN,
:I_CUSTO_PAGO,
:I_ESTOQUE,
:I_VALOR_VENDA,
:I_VENDIDO);
WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_INSERT;
END
IF (:r_mod IS NOT NULL) THEN
BEGIN
UPDATE PRODUTO SET PRO_CUSTO_PAGO = :I_CUSTO_PAGO,
PRO_ESTOQUE = PRO_ESTOQUE + :I_ESTOQUE,
PRO_VALOR_VENDA = :I_CUSTO_PAGO
WHERE pro_cod_modelo = :I_COD_MODELO AND
PRO_EMPRESA = :I_EMPRESA;
WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_UPDATE;
END
END
end
Uiliangurjon
Curtir tópico
+ 0
Responder
Posts
23/02/2006
Emerson Nascimento
tente assim:
CREATE PROCEDURE ENTRADA_ESTOQUE ( I_ACAO CHAR(1), I_EMPRESA INTEGER, I_NOTA_COMPRA VARCHAR(20), I_DATA_COMPRA DATE, I_COD_MODELO VARCHAR(13), I_ESN_IMEI VARCHAR(15), I_ICCID VARCHAR(20), I_CTN VARCHAR(1, I_CUSTO_PAGO NUMERIC(18,2), I_ESTOQUE INTEGER, I_VALOR_VENDA NUMERIC(18,2), I_VENDIDO CHAR(1)) RETURNS ( R_MOD VARCHAR(13)) AS begin IF (:I_ACAO = ´S´) THEN BEGIN SELECT PRO_COD_MODELO FROM PRODUTO WHERE PRO_COD_MODELO = :i_cod_modelo AND PRO_EMPRESA = :i_empresa INTO :r_mod; IF (:r_mod is null) THEN I_ACAO = ´I´; END IF (:I_ACAO = ´I´) THEN BEGIN r_mod = I_COD_MODELO; INSERT INTO PRODUTO (PRO_EMPRESA, PRO_NOTA_COMPRA, PRO_DATA_COMPRA, PRO_COD_MODELO, PRO_ESN_IMEI, PRO_ICCID, PRO_CTN, PRO_CUSTO_PAGO, PRO_ESTOQUE, PRO_VALOR_VENDA, PRO_VENDIDO) values ( :I_EMPRESA, :I_NOTA_COMPRA, :I_DATA_COMPRA, :I_COD_MODELO, :I_ESN_IMEI, :I_ICCID, :I_CTN, :I_CUSTO_PAGO, :I_ESTOQUE, :I_VALOR_VENDA, :I_VENDIDO); WHEN SQLCODE -625 DO EXCEPTION ERRO_CAMPOS_OBRIGATORIOS; WHEN ANY DO EXCEPTION ERRO_INSERT; END ELSE BEGIN UPDATE PRODUTO SET PRO_CUSTO_PAGO = :I_CUSTO_PAGO, PRO_ESTOQUE = PRO_ESTOQUE + :I_ESTOQUE, PRO_VALOR_VENDA = :I_CUSTO_PAGO WHERE pro_cod_modelo = :I_COD_MODELO AND PRO_EMPRESA = :I_EMPRESA; WHEN SQLCODE -625 DO EXCEPTION ERRO_CAMPOS_OBRIGATORIOS; WHEN ANY DO EXCEPTION ERRO_UPDATE; END end
Responder
Gostei + 0
23/02/2006
Uiliangurjon
Funcionou corretamente!!!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)