SET TERM ^ ;
CREATE OR ALTER procedure spi_estoque_transacao_regra (
regra_tipo integer,
gp_id integer,
perfil_up varchar(10),
familia_id integer,
localizacao_id integer,
tabela varchar(32),
tabela_nivel integer,
tabela_id integer,
estabelecimento_id integer,
data date,
produto_id integer,
tamanho integer,
quantidade numeric(10,5),
tipo char(1),
consumo char(1),
ccusto varchar(10),
observacao varchar(100),
transacao_id integer = null,
documento integer = null,
talao integer = 0,
peca_id varchar(100) = null)
as
declare variable regras integer;
declare variable regra_id integer;
declare variable localizacao_id_saida integer;
declare variable localizacao_id_entrada integer;
declare variable operacao_estoque_saida varchar(40);
declare variable operacao varchar(40);
declare variable operacao_estoque_entrada varchar(40);
declare variable usuario_id integer;
declare variable t01 numeric(10,5);
declare variable t02 numeric(10,5);
declare variable t03 numeric(10,5);
declare variable t04 numeric(10,5);
declare variable t05 numeric(10,5);
declare variable t06 numeric(10,5);
declare variable t07 numeric(10,5);
declare variable t08 numeric(10,5);
declare variable t09 numeric(10,5);
declare variable t10 numeric(10,5);
declare variable t11 numeric(10,5);
declare variable t12 numeric(10,5);
declare variable t13 numeric(10,5);
declare variable t14 numeric(10,5);
declare variable t15 numeric(10,5);
declare variable t16 numeric(10,5);
declare variable t17 numeric(10,5);
declare variable t18 numeric(10,5);
declare variable t19 numeric(10,5);
declare variable t20 numeric(10,5);
declare variable conferencia integer;
declare variable alocacao_tipo varchar(10);
declare variable alocacao_tabela_id integer;
declare variable alocacao_tab_item_id integer;
BEGIN
:REGRAS = 0;
for
select
count(id) over() REGRAS,
ID,
TIPO,
GP_ID,
PERFIL_UP,
FAMILIA_ID,
LOCALIZACAO_ID_SAIDA,
LOCALIZACAO_ID_ENTRADA,
CONFERENCIA,
OPERACAO_ESTOQUE_SAIDA,
OPERACAO_ESTOQUE_ENTRADA
from tbestoque_transacao_regra r
where r.tipo = :regra_tipo
and COALESCE(r.GP_ID,0) = COALESCE(:GP_ID,0)
and COALESCE(r.PERFIL_UP,0) = COALESCE(:PERFIL_UP,0)
and r.FAMILIA_ID = :FAMILIA_ID
and r.status = 1
into
:REGRAS,
:REGRA_ID,
:regra_tipo,
:GP_ID,
:PERFIL_UP,
:FAMILIA_ID,
:LOCALIZACAO_ID_SAIDA,
:LOCALIZACAO_ID_ENTRADA,
:CONFERENCIA,
:OPERACAO_ESTOQUE_SAIDA,
:OPERACAO_ESTOQUE_ENTRADA
DO
BEGIN
END
if(:REGRAS <> 1)then
begin
exception "..." 'REGRA DE TRANSACAO DE ESTOQUE ('||TIPO||')PARA O'
||' TIPO:'|| coalesce(:regra_tipo,0)
||' GP:'||coalesce(:GP_ID,0)
||' PERFIL UP:'||coalesce(:PERFIL_UP,'')
||' FAMILIA ID:'||coalesce(:FAMILIA_ID,0)
||' CONFIGURADA INCORRETAMENTE. ENTRE EM CONTATO COM O SUPORTE TECNICO, RAMAL 27';
end
if(TIPO = 'E')then
begin
:OPERACAO = :operacao_estoque_entrada;
:localizacao_id = fn_localizacao_codigo(:localizacao_id_entrada,:produto_id,:familia_id, :localizacao_id, :talao, :gp_id, :perfil_up);
end
else
if(TIPO = 'S')then
begin
:OPERACAO = :operacao_estoque_saida;
:localizacao_id = fn_localizacao_codigo(:localizacao_id_saida,:produto_id,:familia_id, :localizacao_id, :talao, :gp_id, :perfil_up);
end
else
begin
exception "..." 'TIPO DE TRANSACAO INVALIDA, INFORME E-ENTRASA OU S-SAIDA';
end
if ( coalesce(localizacao_id,0) = 0 ) then
begin
exception "..." 'REGRA DE TRANSACAO DE ESTOQUE: ' || REGRA_ID || ' - ('||TIPO||') PARA O'
||' TIPO:'|| coalesce(:regra_tipo,0)
||' GP:'||coalesce(:GP_ID,0)
||' PERFIL UP:'||coalesce(:PERFIL_UP,'')
||' FAMILIA ID:'||coalesce(:FAMILIA_ID,0)
||' CONFIGURADA INCORRETAMENTE. LOCALIZACAO NAO ENCONTRADA. ENTRE EM CONTATO COM O SUPORTE TECNICO, RAMAL 27';
end
if ( regra_tipo = 5 and peca_id is null ) then
BEGIN
peca_id = 'RD' || LPAD(talao,11,0);
END
--SAIDA
execute procedure SPI_ESTOQUE_TRANSACAO(
:tabela,
:tabela_nivel,
:tabela_id,
:estabelecimento_id,
:localizacao_id,
:data,
:produto_id,
:tamanho,
:quantidade,
:tipo,
:operacao,
:consumo,
:ccusto,
:observacao,
:transacao_id,
:documento,
:talao,
:regra_id,
:conferencia,
:PECA_ID
);
--
-- if ( :CONFERENCIA = '1' AND :TIPO = 'E' ) then
-- begin
-- ALOCACAO_TIPO = '';
-- ALOCACAO_TABELA_ID = 0;
-- ALOCACAO_TAB_ITEM_ID = 0;
--
-- IF ( REGRA_TIPO = 1 ) THEN
-- BEGIN
-- ALOCACAO_TIPO = 'K'; -- K = KANBAN
-- ALOCACAO_TABELA_ID = DOCUMENTO;
-- ALOCACAO_TAB_ITEM_ID = TALAO;
-- END
--
--
-- IF ( ALOCACAO_TIPO = '' OR ALOCACAO_TABELA_ID = 0 OR ALOCACAO_TAB_ITEM_ID = 0 ) THEN
-- BEGIN
-- exception "..." 'REGRA DE TRANSACAO DE ESTOQUE PARA O'
-- ||' TIPO:'|| coalesce(:regra_tipo,0)
-- ||' GP:'||coalesce(:GP_ID,0)
-- ||' PERFIL UP:'||coalesce(:PERFIL_UP,'')
-- ||' FAMILIA ID:'||coalesce(:FAMILIA_ID,0)
-- ||' CONFIGURADA INCORRETAMENTE. INFORMACOES DE ALOCACAO NAO ENCONTRADA. ENTRE EM CONTATO COM O SUPORTE TECNICO, RAMAL 27';
--
-- END
--
-- INSERT INTO TBESTOQUE_DETALHE_ALOCACAO (
-- ESTABELECIMENTO_ID,
-- TABELA_ID,
-- TAB_ITEM_ID,
-- TIPO,
-- LOCALIZACAO_ID,
-- PRODUTO_ID,
-- TAMANHO,
-- QUANTIDADE,
-- SALDO
-- ) VALUES (
-- :ESTABELECIMENTO_ID,
-- :ALOCACAO_TABELA_ID,
-- :ALOCACAO_TAB_ITEM_ID,
-- :ALOCACAO_TIPO,
-- :LOCALIZACAO_ID,
-- :PRODUTO_ID,
-- :TAMANHO,
-- :QUANTIDADE,
-- :QUANTIDADE
-- );
--
-- end
END
^
SET TERM ; ^
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TABELA IS
'Nome da tabela que realizou a transacao de estoque';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TABELA_ID IS
'Id da tabela que realizou a transacao de estoque';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.DATA IS
'Data da transacao de estoque ( Podera ser retroativa )';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TIPO IS
'Tipo de transacao para o estoque. E = Entrada; S = SAIDA';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.CONSUMO IS
'Identifica se eh operacao de consumo. 1 = SIM; 0 = NAO';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.CCUSTO IS
'Centro de custo responsavel pela transacao';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TRANSACAO_ID IS
'Id da transacao. NAO OBRIGATORIO';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.DOCUMENTO IS
'Numero do Documento de Identificacao. NAO OBRIGATORIO';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TALAO IS
'Id do talao. NAO OBRIGATORIO';
SET TERM ^ ;
CREATE OR ALTER trigger ttbremessa_consumo_b0u_03 for tbremessa_consumo
active before update position 0
AS
DECLARE VARIABLE REMESSA_COMPONENTE CHAR(1) ;
DECLARE VARIABLE LOCALIZACAO_ID INTEGER ;
DECLARE VARIABLE TABELA_ID INTEGER ;
DECLARE VARIABLE ESTOQUE_ID INTEGER ;
DECLARE VARIABLE OPERACAO_SAIDA VARCHAR(10) ;
DECLARE VARIABLE CCUSTO VARCHAR(10);
DECLARE VARIABLE GP_ID INTEGER;
DECLARE VARIABLE TMP_GP_ID INTEGER;
declare variable perfil_up varchar(50);
DECLARE VARIABLE FAMILIA_ID INTEGER;
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE VINCULO INTEGER;
declare variable VINCULO_QUANTIDADE INTEGER;
declare variable TALOES_PENDENTES VARCHAR(500);
Declare variable REMESSA VARChar(15);
Declare variable REMESSA_WEB Char(1);
DECLARE VARIABLE REQUISICAO CHAR(1);
Begin
SELECT FIRST 1
R.REMESSA,
COALESCE(WEB,'0')
FROM VWREMESSA R
WHERE R.REMESSA_ID = NEW.REMESSA
INTO REMESSA,
REMESSA_WEB;
IF (COALESCE(REMESSA_WEB,'0') = '1' ) THEN
Begin
/* ESTA TRIGGER SO SERA PROCESSADA NAS NOVAS REMESSAS (GCWEB) */
IF ( NEW.COMPONENTE = '1' OR NEW.COMPONENTE = '0' ) THEN
BEGIN
/* 1 - CONFERIDO */
IF ( OLD.CONFERENCIA = '0' AND NEW.CONFERENCIA = '1' AND NEW.QUANTIDADE_CONFERENCIA > 0) THEN
BEGIN
/* GUARDA O VALOR DE UM VINCULO D0 CONSUMO (SE HOUVER) */
VINCULO = COALESCE((
SELECT FIRST 1 V.ID
FROM TBREMESSA_CONSUMO_VINCULO V
WHERE V.CONSUMO_ID = NEW.ID
),0);
/* VERIFICA SE O CONSUMO TEM VINCULO */
IF( VINCULO > 0 ) THEN
BEGIN
/* GUARDA OS TALOES PENDETES DE PRODUCAO VINCULADOS A ESTE CONSUMO (SE HOUVER) */
TALOES_PENDENTES = (SELECT
CAST(LIST('[ ' || R.REMESSA || '/' || LPAD(D.REMESSA_TALAO_ID,4,'0') || ' (' ||
(CASE
D.STATUS
WHEN 1 THEN 'EM ABERTO'
WHEN 2 THEN 'EM PRODUCAO'
WHEN 3 THEN 'PRODUZIDO'
WHEN 6 THEN 'ENCERRADO'
ELSE 'INDEFINIDO' END) || ') ]',', ') AS VARCHAR(500))
FROM
TBREMESSA_CONSUMO_VINCULO V,
VWREMESSA_TALAO_DETALHE D,
VWREMESSA R
WHERE
V.CONSUMO_ID = NEW.ID
AND V.REMESSA_TALAO_DETALHE_ID = D.ID
AND V.REMESSA_ID = R.REMESSA_ID
AND D.STATUS IN ('1','2') /* EM ABERTO, EM PRODUCAO */);
/* VERIFICA SE HA TALOES VINCULADOS A ESTE CONSUMO QUE AINDA NAO FORAM PRODUZIDO */
IF ( TALOES_PENDENTES IS NOT NULL ) THEN
BEGIN
EXCEPTION "..." 'HA COMPONENTES DESTE TALAO QUE AINDA NAO FORAM PRODUZIDOS: ' || TALOES_PENDENTES || '. OPERACAO CANCELADA! '||
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .';
END
END
/* VERIFICA SE EH PROJECAO DE COMPONENTE */
IF ( NEW.COMPONENTE = '1' ) THEN
BEGIN
/* GUARDA A LOCALIZACAO DE PROCESSO (WIP) */
LOCALIZACAO_ID = COALESCE((SELECT FIRST 1 F.LOCALIZACAO_PROCESSO
FROM TBPRODUTO P, TBFAMILIA_FICHA F
WHERE F.FAMILIA_CODIGO = P.FAMILIA_CODIGO
AND F.ESTABELECIMENTO_CODIGO = NEW.ESTABELECIMENTO_ID
AND P.CODIGO = NEW.PRODUTO_ID),0);
/* VERIFICA SE A LOCALIZACAO DE PROCESSO ESTA CONFIGURADA */
IF ( LOCALIZACAO_ID = 0 ) THEN
BEGIN
EXCEPTION "..." 'FAMILIA DO PRODUTO SEM LOCALIZACAO DE PROCESSO (WIP) DEFINIDA. ID PROD.' || NEW.PRODUTO_ID || '. OPERACAO CANCELADA! '||
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
END
END
ELSE
BEGIN
VINCULO_QUANTIDADE = (SELECT COUNT(DISTINCT
CASE V.TIPO
WHEN 'R' THEN (SELECT FIRST 1 R.LOCALIZACAO_ENTRADA FROM TBREVISAO R WHERE R.ID = V.TABELA_ID)
WHEN 'D' THEN (SELECT FIRST 1 D.LOCALIZACAO_ID FROM VWREMESSA_TALAO_DETALHE D WHERE D.ID = V.TABELA_ID)
ELSE 'N#D' END)
FROM TBREMESSA_TALAO_VINCULO V
WHERE V.CONSUMO_ID = NEW.ID);
IF ( VINCULO_QUANTIDADE > 1 ) THEN
BEGIN
EXCEPTION "..." 'AS PECAS ALOCADAS, POSSUEM LOCALIZACOES DIFERENTES. OPERACAO CANCELADA!';
END
ELSE
IF ( VINCULO_QUANTIDADE = 1) THEN
BEGIN
/* GUARDA A LOCALIZACAO DA PECAS */
LOCALIZACAO_ID =
coalesce((SELECT DISTINCT
CASE V.TIPO
WHEN 'R' THEN (SELECT FIRST 1 R.LOCALIZACAO_ENTRADA FROM TBREVISAO R WHERE R.ID = V.TABELA_ID)
WHEN 'D' THEN (SELECT FIRST 1 D.LOCALIZACAO_ID FROM VWREMESSA_TALAO_DETALHE D WHERE D.ID = V.TABELA_ID)
ELSE 'N#D' END
FROM TBREMESSA_TALAO_VINCULO V
WHERE V.CONSUMO_ID = NEW.ID),0);
END
/*
TABELA_ID = (SELECT coalesce(sum(v.tabela_id),0) as tabela_id
FROM TBREMESSA_TALAO_VINCULO V
WHERE V.CONSUMO_ID = NEW.ID);
IF ( coalesce(TABELA_ID,0) = 0 ) THEN
BEGIN
EXCEPTION "..." 'VINCULO COM ERRO. ID PROD.' || NEW.PRODUTO_ID || '. EXCLUA O VINCULO DESTE PRODUTO E TENTE NOVAMENTE! '||
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
END
*/
/* GUARDA A LOCALIZACAO PADRAO */
/*LOCALIZACAO_ID = COALESCE((SELECT FIRST 1 P.LOCALIZACAO_CODIGO
FROM TBPRODUTO P
WHERE P.CODIGO = NEW.PRODUTO_ID),0); */
/* VERIFICA SE A LOCALIZACAO PADRAO ESTA CONFIGURADA */
/*
IF ( coalesce(LOCALIZACAO_ID,0) = 0 ) THEN
BEGIN
EXCEPTION "..." 'PRODUTO SEM LOCALIZACAO PADRAO DEFINIDA. ID PROD.' || NEW.PRODUTO_ID || '. OPERACAO CANCELADA! '||
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
END
*/
END
--Entrada no Estoque
ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);
NEW.CONTROLE_ESTOQUE = :ESTOQUE_ID;
REQUISICAO = COALESCE((SELECT FIRST 1 REQUISICAO
FROM VWREMESSA R
WHERE R.REMESSA_ID = NEW.REMESSA),'0');
/* SE FOR CONSUMO DE UMA REMESSA DE REQUISICAO E SE FOR UM CONSUMO DE MATERIA-PRIMA */
if ( REQUISICAO = '1' AND NEW.COMPONENTE = '0' ) then
BEGIN
/* SIGLA DA OPERACAO DE SAIDA DO ESTOQUE PARA REMESSAS DE REQUISICAO */
OPERACAO_SAIDA = (SELECT FIRST 1 VALOR_EXT FROM TBCONTROLE_N WHERE ID = 95);
END
ELSE
BEGIN
IF ( NEW.COMPONENTE = '1') THEN
BEGIN
/* SIGLA DA OPERACAO DE WORK IN PROCESS SAIDA */
OPERACAO_SAIDA = 'WPS';
END
ELSE
BEGIN
/* SIGLA DA OPERACAO DE SAIDA DO ESTOQUE */
OPERACAO_SAIDA = (SELECT FIRST 1 VALOR_EXT FROM TBCONTROLE_N WHERE ID = 97);
END
END
USUARIO_ID = (SELECT US.CODIGO FROM TBUSUARIO US WHERE US.USUARIO = (SELECT FIRST 1 MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION));
CCUSTO = (SELECT FIRST 1 U.CCUSTO
FROM TBUP U
WHERE U.ID = (SELECT FIRST 1 T.UP_ID
FROM VWREMESSA_TALAO T
WHERE T.REMESSA_ID = NEW.REMESSA
AND T.REMESSA_TALAO_ID = NEW.TALAO));
--so da saida se projeção maior do que 0
if(NEW.consumo_kg > 0)then
begin
tmp_gp_id = coalesce((
select first 1 gp_id
from tmpgp_estoque),0);
gp_id = (SELECT FIRST 1 T.gp_id
FROM VWREMESSA_TALAO T
WHERE T.REMESSA_ID = NEW.REMESSA
AND T.REMESSA_TALAO_ID = NEW.TALAO);
perfil_up = coalesce((select first 1 u.perfil from tbup u where u.id =
(SELECT FIRST 1 T.UP_ID
FROM VWREMESSA_TALAO T
WHERE T.REMESSA_ID = NEW.REMESSA
AND T.REMESSA_TALAO_ID = NEW.talao)),'');
if ( tmp_gp_id > 0 ) then
begin
gp_id = tmp_gp_id;
perfil_up = 'U';
end
familia_id = coalesce((select first 1 familia_codigo from tbproduto p where p.codigo = new.produto_id),0);
EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO_REGRA(
3,
:gp_id,
:perfil_up,
:familia_id,
:localizacao_id,
'TBREMESSA_CONSUMO',
3,
new.id,
new.estabelecimento_id,
(SELECT FIRST 1 T.DATA_PRODUCAO
FROM TBTURNO T
WHERE T.TURNO_CORRENTE = '1'),
new.produto_id,
new.tamanho,
NEW.QUANTIDADE_CONFERENCIA,
'S',
'1',
:CCUSTO,
'SAIDA POR CONSUMO DE REMESSA DE PRODUCAO. REMESSA:' || REMESSA || ' TALAO: ' || FN_LPAD(NEW.TALAO,4,0),
:ESTOQUE_ID,
NEW.REMESSA
);
/*
EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 (
NEW.ESTABELECIMENTO_ID,
:LOCALIZACAO_ID,
NEW.PRODUTO_ID,
'S', /* S = SAIDA DO ESTOQUE */
--CAST(NEW.datahora_conferencia AS DATE),
/* (SELECT FIRST 1 T.DATA_PRODUCAO
FROM TBTURNO T
WHERE T.TURNO_CORRENTE = '1'),
NEW.QUANTIDADE_CONFERENCIA,
IIF(NEW.TAMANHO = 1,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO = 2,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO = 3,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO = 4,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO = 5,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO = 6,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO = 7,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO = 8,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO = 9,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =10,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =11,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =12,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =13,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =14,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =15,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =16,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =17,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =18,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =19,NEW.QUANTIDADE_CONFERENCIA,0),
IIF(NEW.TAMANHO =20,NEW.QUANTIDADE_CONFERENCIA,0),
:ESTOQUE_ID,
NEW.REMESSA,
0,
0,
:OPERACAO_SAIDA,
NEW.ID,
0,
'1',
0,
:USUARIO_ID,
Current_Date,
0,
:CCUSTO,
'SAIDA POR PROJECAO DE CONSUMO DE REMESSA DE PRODUCAO',
'0',
0,
0,
0,
0
); */
end
END ELSE
BEGIN
/* 0 - EXCLUSAO DE CONFERENCIA */
IF ( OLD.CONFERENCIA = '1' AND NEW.CONFERENCIA = '0' ) THEN
BEGIN
NEW.CONTROLE_ESTOQUE = 0;
DELETE FROM TbEstoque_Transacao_Item
WHERE CONTROLE = OLD.CONTROLE_ESTOQUE
AND ESTABELECIMENTO_CODIGO = OLD.ESTABELECIMENTO_ID
AND PRODUTO_CODIGO = OLD.PRODUTO_ID;
END
END
END
END
END
^
SET TERM ; ^
SET TERM ^ ;
CREATE OR ALTER trigger ttbremessa_talao_vinculo_b0u_02 for tbremessa_talao_vinculo
active before update position 0
AS
DECLARE VARIABLE SALDO_BAIXAR NUMERIC(15,4) ;
DECLARE VARIABLE QUANTIDADE_SOBRA NUMERIC(15,4) ;
DECLARE VARIABLE QUANTIDADE_CONSUMO NUMERIC(15,4) ;
DECLARE VARIABLE QUANTIDADE_CONSUMO_ALTERNATIVO NUMERIC(15,4) ;
DECLARE VARIABLE RENDIMENTO_CONSUMO NUMERIC(15,4) ;
DECLARE VARIABLE VINCULO_QUANTIDADE INTEGER;
DECLARE VARIABLE VINCULO_NUMERO INTEGER;
DECLARE VARIABLE QTD_TEMP NUMERIC(15,4);
DECLARE VARIABLE MAIOR NUMERIC(15,4);
declare variable COMPONENTE CHAR(1);
declare variable REVISAO_ID INTEGER;
BEGIN
/* ESTA TRIGGER SO SERA PROCESSADA QUANDO FOR UM VINCULO DE CONSUMO (GCWEB) */
IF ( COALESCE(NEW.REMESSA_TALAO_DETALHE_ID,'') = '' AND NEW.CONSUMO_ID > 0 AND OLD.STATUS = '0' AND NEW.STATUS = '1' ) THEN
BEGIN
--quantidade total alocada
VINCULO_QUANTIDADE = (SELECT sum(v.quantidade) as QUANTIDADE
FROM TBREMESSA_TALAO_VINCULO V
WHERE V.TALAO_ID = NEW.TALAO_ID
AND V.CONSUMO_ID = NEW.CONSUMO_ID);
--quantidade de vinculos
VINCULO_NUMERO = (SELECT count(v.id) as NUMERO
FROM TBREMESSA_TALAO_VINCULO V
WHERE V.TALAO_ID = NEW.TALAO_ID
AND V.CONSUMO_ID = NEW.CONSUMO_ID);
--sobra
SELECT FIRST 1
C.QUANTIDADE_SOBRA,
C.COMPONENTE
FROM VWREMESSA_CONSUMO C
WHERE C.ID = NEW.CONSUMO_ID
INTO
:QUANTIDADE_SOBRA,
:COMPONENTE;
--saldo a baixar
SALDO_BAIXAR = coalesce((SELECT FIRST 1 C.saldo_baixar
FROM VWREMESSA_CONSUMO C
WHERE C.ID = NEW.CONSUMO_ID),0);
MAIOR = COALESCE((
SELECT FIRST 1 V.TABELA_ID
FROM TBREMESSA_TALAO_VINCULO V
WHERE V.TALAO_ID = NEW.TALAO_ID
AND V.CONSUMO_ID = NEW.CONSUMO_ID
AND V.TIPO = NEW.TIPO
ORDER BY V.QUANTIDADE DESC),0);
if(:MAIOR <> coalesce(NEW.TABELA_ID,0))then
begin
QTD_TEMP = 1;
end else
begin
QTD_TEMP = 0;
end
--QTD_TEMP = (SALDO_BAIXAR - COALESCE(:VQUANTIDADE,0)) - COALESCE(:QUANTIDADE_SOBRA,0);
if(coalesce(NEW.QUANTIDADE,0) < coalesce(QUANTIDADE_SOBRA,0) AND COMPONENTE = '0')then
EXCEPTION "..." 'HA MAIS ITENS DE CONSUMO ALOCADO DO QUE O NECESSARIO';
if((VINCULO_NUMERO > 1) and ( QTD_TEMP > 0 ))then
begin
QUANTIDADE_CONSUMO = coalesce(NEW.QUANTIDADE,0);
QUANTIDADE_CONSUMO_ALTERNATIVO = coalesce(NEW.QUANTIDADE_ALTERNATIVA,0);
UPDATE TBREMESSA_CONSUMO C set c.saldo_baixar = (coalesce(:SALDO_BAIXAR,0) - coalesce(NEW.QUANTIDADE,0)) WHERE C.ID = NEW.CONSUMO_ID;
end
else
begin
QUANTIDADE_CONSUMO = coalesce(NEW.QUANTIDADE,0) - coalesce(QUANTIDADE_SOBRA,0);
QUANTIDADE_CONSUMO_ALTERNATIVO = coalesce(NEW.QUANTIDADE_ALTERNATIVA,0);
UPDATE TBREMESSA_CONSUMO set saldo_baixar = coalesce(CONSUMO_KG,0) WHERE ID = NEW.CONSUMO_ID;
end
/* ATUALIZA O SALDO NA TABELA DO VINCULO */
/* 'D' = VWREMESSA_TALAO_DETALHE */
IF ( NEW.TIPO = 'D' ) THEN
BEGIN
UPDATE VWREMESSA_TALAO_DETALHE D SET
D.QUANTIDADE_SALDO = D.QUANTIDADE_SALDO - :QUANTIDADE_CONSUMO , --:VINCULO_QUANTIDADE,
D.QUANTIDADE_ALTERN_SALDO = D.QUANTIDADE_ALTERN_SALDO - :QUANTIDADE_CONSUMO_ALTERNATIVO
WHERE D.ID = NEW.TABELA_ID;
END
ELSE
/* 'R' = TBREVISAO */
IF ( NEW.TIPO = 'R' ) THEN
BEGIN
RENDIMENTO_CONSUMO = IIF( :QUANTIDADE_CONSUMO_ALTERNATIVO > 0 AND :QUANTIDADE_CONSUMO > 0,(QUANTIDADE_CONSUMO_ALTERNATIVO/QUANTIDADE_CONSUMO),0);
UPDATE TBREVISAO R SET
R.SALDO = (R.SALDO - :QUANTIDADE_CONSUMO), --:VINCULO_QUANTIDADE,
R.RENDIMENTO_CONSUMO = :RENDIMENTO_CONSUMO
WHERE R.ID = NEW.TABELA_ID;
END
ELSE
BEGIN
EXCEPTION "..." 'TIPO DE VINCULO INVALIDO! OPERACAO CANCELADA.' ||
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .';
END
END ELSE
BEGIN
IF ( COALESCE(NEW.REMESSA_TALAO_DETALHE_ID,'') = '' AND NEW.STATUS = '0' AND OLD.STATUS = '1' ) THEN
BEGIN
--quantidade de vinculos
VINCULO_NUMERO = (SELECT count(v.id) as NUMERO
FROM TBREMESSA_TALAO_VINCULO V
WHERE V.TALAO_ID = NEW.TALAO_ID
AND V.CONSUMO_ID = NEW.CONSUMO_ID);
--sobra
QUANTIDADE_SOBRA = (SELECT FIRST 1 C.QUANTIDADE_SOBRA
FROM VWREMESSA_CONSUMO C
WHERE C.ID = NEW.CONSUMO_ID);
--saldo a baixar
SALDO_BAIXAR = coalesce((SELECT FIRST 1 C.saldo_baixar
FROM VWREMESSA_CONSUMO C
WHERE C.ID = NEW.CONSUMO_ID),0);
--quantidade do maior vinculo
MAIOR = COALESCE((
SELECT FIRST 1 V.TABELA_ID
FROM TBREMESSA_TALAO_VINCULO V
WHERE V.TALAO_ID = NEW.TALAO_ID
AND V.CONSUMO_ID = NEW.CONSUMO_ID
AND V.TIPO = NEW.TIPO
ORDER BY V.QUANTIDADE DESC),0);
if(:MAIOR <> coalesce(NEW.TABELA_ID,0))then
begin
QTD_TEMP = 1;
end else
begin
QTD_TEMP = 0;
end
--QTD_TEMP = SALDO_BAIXAR - coalesce(NEW.QUANTIDADE,0) - coalesce(QUANTIDADE_SOBRA,0);
if((VINCULO_NUMERO > 1) and ( QTD_TEMP > 0 ))then
begin
QUANTIDADE_CONSUMO = coalesce(NEW.QUANTIDADE,0);
QUANTIDADE_CONSUMO_ALTERNATIVO = coalesce(NEW.QUANTIDADE_ALTERNATIVA,0);
UPDATE TBREMESSA_CONSUMO set saldo_baixar = (:SALDO_BAIXAR - coalesce(NEW.QUANTIDADE,0)) WHERE ID = NEW.CONSUMO_ID;
/* ATUALIZA O SALDO NA TABELA DO VINCULO */
/* 'D' = VWREMESSA_TALAO_DETALHE */
IF ( NEW.TIPO = 'D' ) THEN
BEGIN
UPDATE VWREMESSA_TALAO_DETALHE D SET
D.QUANTIDADE_SALDO = (D.QUANTIDADE_SALDO + :QUANTIDADE_CONSUMO), --:VINCULO_QUANTIDADE,
D.QUANTIDADE_ALTERN_SALDO = D.QUANTIDADE_ALTERN_SALDO + :QUANTIDADE_CONSUMO_ALTERNATIVO
WHERE D.ID = NEW.TABELA_ID;
END
ELSE
/* 'R' = TBREVISAO */
IF ( NEW.TIPO = 'R' ) THEN
BEGIN
RENDIMENTO_CONSUMO = IIF( :QUANTIDADE_CONSUMO_ALTERNATIVO > 0 AND :QUANTIDADE_CONSUMO > 0,(QUANTIDADE_CONSUMO_ALTERNATIVO/QUANTIDADE_CONSUMO),0);
UPDATE TBREVISAO R SET
R.SALDO = ((R.saldo - new.quantidade) + :QUANTIDADE_CONSUMO), --:VINCULO_QUANTIDADE,
R.RENDIMENTO_CONSUMO = :RENDIMENTO_CONSUMO
WHERE R.ID = NEW.TABELA_ID;
END
ELSE
BEGIN
EXCEPTION "..." 'TIPO DE VINCULO INVALIDO! OPERACAO CANCELADA.' ||
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .';
END
end
else
begin
QUANTIDADE_CONSUMO = coalesce(NEW.QUANTIDADE,0) - coalesce(QUANTIDADE_SOBRA,0);
QUANTIDADE_CONSUMO_ALTERNATIVO = coalesce(NEW.QUANTIDADE_ALTERNATIVA,0);
UPDATE TBREMESSA_CONSUMO set saldo_baixar = coalesce(CONSUMO_KG,0) WHERE ID = NEW.CONSUMO_ID;
/* ATUALIZA O SALDO NA TABELA DO VINCULO */
/* 'D' = VWREMESSA_TALAO_DETALHE */
IF ( NEW.TIPO = 'D' ) THEN
BEGIN
UPDATE VWREMESSA_TALAO_DETALHE D SET
D.QUANTIDADE_SALDO = (D.QUANTIDADE_SALDO + :QUANTIDADE_CONSUMO), --:VINCULO_QUANTIDADE,
D.QUANTIDADE_ALTERN_SALDO = D.QUANTIDADE_ALTERN_SALDO + :QUANTIDADE_CONSUMO_ALTERNATIVO
WHERE D.ID = NEW.TABELA_ID;
END
ELSE
/* 'R' = TBREVISAO */
IF ( NEW.TIPO = 'R' ) THEN
BEGIN
RENDIMENTO_CONSUMO = IIF( :QUANTIDADE_CONSUMO_ALTERNATIVO > 0 AND :QUANTIDADE_CONSUMO > 0,(QUANTIDADE_CONSUMO_ALTERNATIVO/QUANTIDADE_CONSUMO),0);
UPDATE TBREVISAO R SET
R.SALDO = ((R.saldo - new.quantidade) + :QUANTIDADE_CONSUMO), --:VINCULO_QUANTIDADE,
R.RENDIMENTO_CONSUMO = :RENDIMENTO_CONSUMO
WHERE R.ID = NEW.TABELA_ID;
END
ELSE
BEGIN
EXCEPTION "..." 'TIPO DE VINCULO INVALIDO! OPERACAO CANCELADA.' ||
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .';
END
end
END
END
END
^
SET TERM ; ^
SET TERM ^ ;
CREATE OR ALTER procedure spu_liberar_talao_coletor (
cod_barras varchar(100),
operador_id integer,
cod_up varchar(100))
returns (
id_saida integer,
id_entrada integer)
as
declare variable produto_id integer;
declare variable produto_descricao varchar(100);
declare variable operacao1 varchar(10);
declare variable operacao2 varchar(10);
declare variable localizacao_id_velha integer;
declare variable localizacao_id_nova integer;
declare variable localizacao_desc_velha varchar(100);
declare variable localizacao_desc_nova varchar(100);
declare variable remessa varchar(20);
declare variable talao varchar(20);
declare variable quantidade numeric(15,5);
declare variable familia integer;
declare variable id varchar(20);
declare variable quantidade_alt numeric(15,5);
declare variable tipo_cod_barras integer;
declare variable id_codbarras varchar(20);
declare variable posicao integer;
declare variable tamanho integer;
declare variable estab integer;
declare variable tratar_estoque integer;
declare variable estoque_id_saida integer;
declare variable estoque_id_entrada integer;
declare variable controle integer;
declare variable ccusto varchar(10);
declare variable acumulado integer;
declare variable gp integer;
declare variable perfil_up varchar(100);
declare variable regra_id integer;
declare variable conferencia integer;
declare variable desfazer integer;
declare variable estoque_id varchar(300);
declare variable old_localizacao integer;
declare variable letra varchar(10);
begin
:TIPO_COD_BARRAS = 0;
:TRATAR_ESTOQUE = 0;
if(position('P' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 1; POSICAO = 2; LETRA = 'P'; end
if(position('RD' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 2; POSICAO = 3; LETRA = 'RD'; end
if(position('RA' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 3; POSICAO = 3; LETRA = 'RA'; end
:TAMANHO = char_length(:COD_BARRAS);
:ID_CODBARRAS = substring(:COD_BARRAS from POSICAO for TAMANHO);
ID_CODBARRAS = cast(cast(ID_CODBARRAS as integer) as varchar(20));
CCUSTO = COALESCE((
SELECT FIRST 1 CCUSTO
FROM TBUP U
WHERE U.CODIGO1 = :COD_UP),'');
for
select
PRODUTO_ID,
PRODUTO_DESCRICAO,
OPERACAO1,
OPERACAO2,
LOCALIZACAO_ID_VELHA,
LOCALIZACAO_ID_NOVA,
LOCALIZACAO_DESC_VELHA,
LOCALIZACAO_DESC_NOVA,
REMESSA,
TALAO,
QUANTIDADE,
FAMILIA,
ID,
QUANTIDADE_ALT,
GP,
PERFIL_UP,
ESTAB,
TAMANHO,
TRATAR_ESTOQUE,
REGRA_ID,
CONFERENCIA,
DESFAZER,
ESTOQUE_ID,
OLD_LOCALIZACAO
from SPU_LIBERACAO_TALAO_COLETOR(:COD_BARRAS, :OPERADOR_ID, :COD_UP)
into
:PRODUTO_ID,
:PRODUTO_DESCRICAO,
:OPERACAO1,
:OPERACAO2,
:LOCALIZACAO_ID_VELHA,
:LOCALIZACAO_ID_NOVA,
:LOCALIZACAO_DESC_VELHA,
:LOCALIZACAO_DESC_NOVA,
:REMESSA,
:TALAO,
:QUANTIDADE,
:FAMILIA,
:ID,
:QUANTIDADE_ALT,
:GP,
:PERFIL_UP,
:ESTAB,
:TAMANHO,
:TRATAR_ESTOQUE,
:REGRA_ID,
:CONFERENCIA,
:DESFAZER,
:ESTOQUE_ID,
:OLD_LOCALIZACAO
do
begin
end
if(DESFAZER = 0)then
begin
if(:TRATAR_ESTOQUE = 1)then
begin
ESTOQUE_ID_SAIDA = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);
ESTOQUE_ID_ENTRADA = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);
--exception "..." :LOCALIZACAO_ID_VELHA||':'||:operacao1||' '||:localizacao_id_nova||':'||:operacao2;
execute procedure SPI_ESTOQUE_TRANSACAO(
'TBREMESSA_CONSUMO',
4,
:ID_CODBARRAS,
:ESTAB,
:LOCALIZACAO_ID_VELHA,
current_date,
:produto_id,
:tamanho,
:quantidade,
'S',
:operacao1,
'0',
'',
'SAIDA INTERNA DA PRODUCAO. PEÇA:'||:LETRA||'/'||:ID_CODBARRAS,
ESTOQUE_ID_SAIDA,
0,
:ID_CODBARRAS,
:REGRA_ID,
:CONFERENCIA,
:COD_BARRAS
);
execute procedure SPI_ESTOQUE_TRANSACAO(
'TBREMESSA_CONSUMO',
4,
:ID_CODBARRAS,
:ESTAB,
:localizacao_id_nova,
current_date,
:produto_id,
:tamanho,
:quantidade,
'E',
:operacao2,
'0',
:ccusto,
'RETORNO INTERNO P/PRODUCAO. PEÇA:'||:LETRA||'/'||:ID_CODBARRAS,
estoque_id_entrada,
0,
:ID_CODBARRAS,
:REGRA_ID,
:CONFERENCIA,
:COD_BARRAS
);
end
if(:TIPO_COD_BARRAS = 1)then
begin
update tbrevisao r
set r.situacao = 2,
r.estoque_id_s_transf = null,
r.estoque_id_e_transf = null,
r.localizacao_entrada = :localizacao_id_nova
where r.id = :ID_CODBARRAS;
end
if(:TIPO_COD_BARRAS = 2)then
begin
ACUMULADO = coalesce((select t.id from vwremessa_talao_detalhe d, vwremessa_talao t
where d.id = :ID_CODBARRAS
and t.remessa_id = d.remessa_id
and t.remessa_talao_id = d.remessa_talao_id),0);
if(:ACUMULADO <= 0)then
begin
exception "..." 'Erro ao consultar talão detalhado:'||coalesce(:produto_id,0);
end
update vwremessa_talao_detalhe t
set t.estoque_id_s_transf = :estoque_id_saida,
t.estoque_id_e_transf = :estoque_id_entrada,
t.localizacao_id = :localizacao_id_nova
where t.id = :ID_CODBARRAS;
update vwremessa_talao t
set t.status = 3
where t.id = :ACUMULADO;
end
if(:TIPO_COD_BARRAS = 3)then
begin
update vwremessa_talao t
set t.status = 3
where t.id = :ID_CODBARRAS;
end
end else
begin
execute procedure spu_excluir_liberacao(:ESTOQUE_ID, :OPERADOR_ID);
if(:TIPO_COD_BARRAS = 1)then
begin
update tbrevisao r
set r.situacao = 1,
r.estoque_id_s_transf = :estoque_id_saida,
r.estoque_id_e_transf = :estoque_id_entrada,
r.localizacao_entrada = :OLD_LOCALIZACAO
where r.id = :ID_CODBARRAS;
end
if(:TIPO_COD_BARRAS = 2)then
begin
ACUMULADO = coalesce((select t.id from vwremessa_talao_detalhe d, vwremessa_talao t
where d.id = :ID_CODBARRAS
and t.remessa_id = d.remessa_id
and t.remessa_talao_id = d.remessa_talao_id),0);
if(:ACUMULADO <= 0)then
begin
exception "..." 'Erro ao consultar talão detalhado:'||coalesce(:produto_id,0);
end
update vwremessa_talao_detalhe t
set t.estoque_id_s_transf = null,
t.estoque_id_e_transf = null,
t.localizacao_id = :OLD_LOCALIZACAO
where t.id = :ID_CODBARRAS;
update vwremessa_talao t
set t.status = 2
where t.id = :ACUMULADO;
end
if(:TIPO_COD_BARRAS = 3)then
begin
update vwremessa_talao t
set t.status = 2
where t.id = :ID_CODBARRAS;
end
end
id_saida = ESTOQUE_ID_SAIDA;
id_entrada = ESTOQUE_ID_ENTRADA;
suspend;
end
^
SET TERM ; ^
SETSET TERM ^ ;
CREATE OR ALTER procedure spi_estoque_transacao_regra (
regra_tipo integer,
gp_id integer,
perfil_up varchar(10),
familia_id integer,
localizacao_id integer,
tabela varchar(32),
tabela_nivel integer,
tabela_id integer,
estabelecimento_id integer,
data date,
produto_id integer,
tamanho integer,
quantidade numeric(10,5),
tipo char(1),
consumo char(1),
ccusto varchar(10),
observacao varchar(100),
transacao_id integer = null,
documento integer = null,
talao integer = 0,
peca_id varchar(100) = null)
as
declare variable regras integer;
declare variable regra_id integer;
declare variable localizacao_id_saida integer;
declare variable localizacao_id_entrada integer;
declare variable operacao_estoque_saida varchar(40);
declare variable operacao varchar(40);
declare variable operacao_estoque_entrada varchar(40);
declare variable usuario_id integer;
declare variable t01 numeric(10,5);
declare variable t02 numeric(10,5);
declare variable t03 numeric(10,5);
declare variable t04 numeric(10,5);
declare variable t05 numeric(10,5);
declare variable t06 numeric(10,5);
declare variable t07 numeric(10,5);
declare variable t08 numeric(10,5);
declare variable t09 numeric(10,5);
declare variable t10 numeric(10,5);
declare variable t11 numeric(10,5);
declare variable t12 numeric(10,5);
declare variable t13 numeric(10,5);
declare variable t14 numeric(10,5);
declare variable t15 numeric(10,5);
declare variable t16 numeric(10,5);
declare variable t17 numeric(10,5);
declare variable t18 numeric(10,5);
declare variable t19 numeric(10,5);
declare variable t20 numeric(10,5);
declare variable conferencia integer;
declare variable alocacao_tipo varchar(10);
declare variable alocacao_tabela_id integer;
declare variable alocacao_tab_item_id integer;
BEGIN
SELECT
REGRA_ID,
LOCALIZACAO_ID,
OPERACAO,
CONFERENCIA,
PECA_BARRAS
FROM
SPC_ESTOQUE_TRANSACAO_REGRA (
:regra_tipo,
:GP_ID,
:PERFIL_UP,
:PRODUTO_ID,
:TIPO,
:TALAO,
:PECA_ID
)
INTO
REGRA_ID,
LOCALIZACAO_ID,
OPERACAO,
CONFERENCIA,
PECA_ID
;
EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO(
:TABELA,
:TABELA_NIVEL,
:TABELA_ID,
:ESTABELECIMENTO_ID,
:LOCALIZACAO_ID,
:DATA,
:PRODUTO_ID,
:TAMANHO,
:QUANTIDADE,
:TIPO,
:OPERACAO,
:CONSUMO,
:CCUSTO,
:OBSERVACAO,
:TRANSACAO_ID,
:DOCUMENTO,
:TALAO,
:REGRA_ID,
:CONFERENCIA,
:PECA_ID
);
END
^
SET TERM ; ^
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TABELA IS
'Nome da tabela que realizou a transacao de estoque';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TABELA_ID IS
'Id da tabela que realizou a transacao de estoque';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.DATA IS
'Data da transacao de estoque ( Podera ser retroativa )';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TIPO IS
'Tipo de transacao para o estoque. E = Entrada; S = SAIDA';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.CONSUMO IS
'Identifica se eh operacao de consumo. 1 = SIM; 0 = NAO';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.CCUSTO IS
'Centro de custo responsavel pela transacao';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TRANSACAO_ID IS
'Id da transacao. NAO OBRIGATORIO';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.DOCUMENTO IS
'Numero do Documento de Identificacao. NAO OBRIGATORIO';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TALAO IS
'Id do talao. NAO OBRIGATORIO';
SET TERM ^ ;
CREATE OR ALTER trigger ttbremessa_talao_vinculo_b6i for tbremessa_talao_vinculo
active before insert position 6
AS
declare variable conferencia integer;
declare variable letra varchar(20);
declare variable CODIGO_BARRAS varchar(50);
begin
if(new.tipo = 'R')then
begin
letra = 'P0';
end
if(new.tipo = 'D')then
begin
letra = 'RD';
end
codigo_barras = :letra || lpad(new.tabela_id, 11, 0);
for
select first 1 i.conferencia from tbestoque_transacao_item i where i.peca_id = :codigo_barras and i.tipo = 'E' order by i.datahora descending
into
:conferencia
do
begin
if(:conferencia = 1)then
begin
exception "..." 'ESTA PECA NAO FOI CONFERIDA.';
--exception "..." 'ESTA PECA NAO FOI CONFERIDA.
Conferir';
end
end
end
^
SET TERM ; ^
SET TERM ^ ;
CREATE OR ALTER procedure spc_peca (
codigo_barras varchar(50))
returns (
tipo varchar(4),
tabela varchar(92),
id integer,
familia_id integer,
familia_descricao varchar(80),
localizacao_id integer,
localizacao_descricao varchar(200),
produto_id integer,
produto_descricao varchar(400),
tamanho integer,
tamanho_descricao varchar(200),
quantidade numeric(18,5),
saldo_fisico numeric(18,5),
saldo_alocado numeric(18,4),
saldo numeric(18,5),
um varchar(12),
quantidade_alternativo numeric(18,5),
saldo_fisico_alternativo numeric(18,8),
saldo_alocado_alternativo numeric(18,4),
saldo_alternativo numeric(18,8),
um_alternativo varchar(12),
status integer,
status_descricao varchar(84))
as
declare procedure sub_spc_locate_peca(codigo_barras varchar(50)) returns(tipo varchar(4), tabela varchar(36), id integer, localizacao_id integer, produto_id integer, tamanho integer, quantidade numeric(18,4), saldo_fisico numeric(18,4), quantidade_alternativo numeric(18,4), saldo_fisico_alternativo numeric(18,8), alocado_dados varchar(40), status integer) as begin
/* PECA DE TALAO DETALHADO */
if (position('RD' in codigo_barras) = 1) then --
begin --
id = cast(replace(codigo_barras, 'RD', '') as integer);
for
select trim('D') tipo,
trim('VWREMESSA_TALAO_DETALHE') tabela,
d.id,
d.localizacao_id,
d.produto_id,
d.tamanho,
d.quantidade_producao quantidade,
d.quantidade_saldo saldo_fisico,
d.quantidade_altern_producao quantidade_alternativo,
d.quantidade_altern_saldo saldo_fisico_alternativo,
(select lpad(coalesce(sum(v.quantidade), 0), 20) || lpad(coalesce(sum(v.quantidade_alternativa), 0), 20)
from tbremessa_talao_vinculo v
where v.status <> '1' and
v.tipo = 'D' and
v.tabela_id = d.id) alocado_dados,
iif(d.status = 3, 1, 0) status
from vwremessa_talao_detalhe d
where d.id = :id
into tipo,
tabela,
id,
localizacao_id,
produto_id,
tamanho,
quantidade,
saldo_fisico,
quantidade_alternativo,
saldo_fisico_alternativo,
alocado_dados,
status do suspend;
end --
else --
/* PECA DE TALAO DETALHADO */
if (position('P' in codigo_barras) = 1) then --
begin --
id = cast(replace(codigo_barras, 'P', '') as integer);
for
select trim('R') tipo,
trim('TBREVISAO') tabela,
r.id,
r.localizacao_entrada,
r.produto_id,
r.tamanho,
r.peso_liquido quantidade,
r.saldo saldo_fisico,
r.metragem quantidade_alternativo,
r.metragem_saldo saldo_fisico_alternativo,
(select lpad(coalesce(sum(v.quantidade), 0), 20) || lpad(coalesce(sum(v.quantidade_alternativa), 0), 20)
from tbremessa_talao_vinculo v
where v.status <> '1' and
v.tipo = 'R' and
v.tabela_id = r.id) alocado_dados,
iif(((r.resultado = 'I' or r.resultado = 'R' or avulso = '1') or (r.resultado = 'P' and r.status_ob = '2')), 1, 0) status
from tbrevisao r
where r.id = :id
into tipo,
tabela,
id,
localizacao_id,
produto_id,
tamanho,
quantidade,
saldo_fisico,
quantidade_alternativo,
saldo_fisico_alternativo,
alocado_dados,
status do suspend;
end --
end
begin
FOR
SELECT
Y.TIPO,
Y.TABELA,
Y.ID,
F.CODIGO FAMILIA_ID,
F.DESCRICAO FAMILIA_DESCRICAO,
L.CODIGO LOCALIZACAO_ID,
L.DESCRICAO LOCALIZACAO_DESCRICAO,
Y.PRODUTO_ID,
P.DESCRICAO PRODUTO_DESCRICAO,
Y.TAMANHO,
FN_TAMANHO_GRADE(P.GRADE_CODIGO,Y.TAMANHO) TAMANHO_DESCRICAO,
Y.QUANTIDADE,
Y.SALDO_FISICO,
Y.SALDO_ALOCADO,
Y.SALDO_FISICO - Y.SALDO_ALOCADO SALDO,
P.UNIDADEMEDIDA_SIGLA UM,
IIF(TRIM(F.UNIDADEMEDIDA_ALTERNATIVO) = '', NULL,Y.QUANTIDADE_ALTERNATIVO) QUANTIDADE_ALTERNATIVO,
IIF(TRIM(F.UNIDADEMEDIDA_ALTERNATIVO) = '', NULL,Y.SALDO_FISICO_ALTERNATIVO) SALDO_FISICO_ALTERNATIVO,
IIF(TRIM(F.UNIDADEMEDIDA_ALTERNATIVO) = '', NULL,Y.SALDO_ALOCADO_ALTERNATIVO) SALDO_ALOCADO_ALTERNATIVO,
IIF(TRIM(F.UNIDADEMEDIDA_ALTERNATIVO) = '', NULL,Y.SALDO_FISICO_ALTERNATIVO - Y.SALDO_ALOCADO_ALTERNATIVO) SALDO_ALTERNATIVO,
IIF(TRIM(F.UNIDADEMEDIDA_ALTERNATIVO) = '', NULL, TRIM(F.UNIDADEMEDIDA_ALTERNATIVO)) UM_ALTERNATIVO,
Y.STATUS,
Y.STATUS_DESCRICAO
FROM (
SELECT
TIPO,
TABELA,
ID,
LOCALIZACAO_ID,
PRODUTO_ID,
TAMANHO,
QUANTIDADE,
SALDO_FISICO,
CAST(SUBSTRING(ALOCADO_DADOS FROM 01 FOR 20) AS NUMERIC(15,4)) SALDO_ALOCADO,
QUANTIDADE_ALTERNATIVO,
SALDO_FISICO_ALTERNATIVO,
CAST(SUBSTRING(ALOCADO_DADOS FROM 21 FOR 40) AS NUMERIC(15,4)) SALDO_ALOCADO_ALTERNATIVO,
STATUS,
TRIM(CASE STATUS
WHEN 0 THEN 'INDISPONIVEL PARA USO'
WHEN 1 THEN 'DISPONIVEL PARA USO'
ELSE 'INDEFINIDO' END) STATUS_DESCRICAO
FROM (
SELECT
*
FROM
SUB_SPC_LOCATE_PECA(:CODIGO_BARRAS)) X
) Y,
TBPRODUTO P,
TBFAMILIA F,
TBLOCALIZACAO L
WHERE P.CODIGO = Y.PRODUTO_ID
AND F.CODIGO = P.FAMILIA_CODIGO
AND L.CODIGO = Y.LOCALIZACAO_ID
INTO
TIPO,
TABELA,
ID,
FAMILIA_ID,
FAMILIA_DESCRICAO,
LOCALIZACAO_ID,
LOCALIZACAO_DESCRICAO,
PRODUTO_ID,
PRODUTO_DESCRICAO,
TAMANHO,
TAMANHO_DESCRICAO,
QUANTIDADE,
SALDO_FISICO,
SALDO_ALOCADO,
SALDO,
UM,
QUANTIDADE_ALTERNATIVO,
SALDO_FISICO_ALTERNATIVO,
SALDO_ALOCADO_ALTERNATIVO,
SALDO_ALTERNATIVO,
UM_ALTERNATIVO,
STATUS,
STATUS_DESCRICAO
DO SUSPEND;
end
^
SET TERM ; ^
SET TERM ^ ;
CREATE OR ALTER trigger ttbremessa_talao_vinculo_b6i for tbremessa_talao_vinculo
active before insert position 6
AS
declare variable conferencia integer;
declare variable letra varchar(20);
declare variable CODIGO_BARRAS varchar(50);
declare variable GP_ID INTEGER;
declare variable PERFIL_UP VARCHAR(10);
declare variable PRODUTO_ID INTEGER;
declare variable LOCALIZACAO_REGRA INTEGER;
declare variable LOCALIZACAO_PECA INTEGER;
begin
if(new.tipo = 'R')then
begin
letra = 'P0';
end
if(new.tipo = 'D')then
begin
letra = 'RD';
end
codigo_barras = :letra || lpad(new.tabela_id, 11, 0);
SELECT FIRST 1
T.GP_ID,
U.PERFIL
FROM VWREMESSA_CONSUMO C,
VWREMESSA_TALAO T,
TBUP U
WHERE C.ID = 1964797
AND T.REMESSA_ID = C.REMESSA_ID
AND T.REMESSA_TALAO_ID = C.REMESSA_TALAO_ID
AND U.ID = T.UP_ID
INTO
GP_ID,
PERFIL_UP;
LOCALIZACAO_REGRA =
COALESCE((
SELECT LOCALIZACAO_ID
FROM SPC_ESTOQUE_TRANSACAO_REGRA(
3, -- CONSUMO
:GP_ID,
:PERFIL_UP,
NEW.PRODUTO_ID,
'S')),0);
localizacao_peca = COALESCE((
SELECT FIRST 1 LOCALIZACAO_ID
FROM spc_peca(:codigo_barras)),0);
IF ( localizacao_peca <> localizacao_regra ) THEN
BEGIN
exception "..." 'PECA NA LOCALIZACAO INCORRETA. ESPERADO: ' || localizacao_regra || ' RECEBIDO: ' || localizacao_peca;
END
for
select first 1 i.conferencia from tbestoque_transacao_item i where i.peca_id = :codigo_barras and i.tipo = 'E' order by i.datahora descending
into
:conferencia
do
begin
if(:conferencia = 1)then
begin
exception "..." 'ESTA PECA NAO FOI CONFERIDA.';
--exception "..." 'ESTA PECA NAO FOI CONFERIDA.
Conferir';
end
end
end
^
SET TERM ; ^
SET TERM ^ ;
CREATE OR ALTER procedure spc_estoque_transacao_regra (
i_regra_tipo integer,
i_gp_id integer,
i_perfil_up varchar(10),
i_produto_id integer,
i_tipo char(1),
i_talao integer = null,
i_peca_barras integer = null)
returns (
regra_id integer,
localizacao_id integer,
operacao varchar(15),
conferencia integer,
peca_barras varchar(50))
as
declare variable regras integer;
declare variable localizacao_id_saida integer;
declare variable localizacao_id_entrada integer;
declare variable operacao_estoque_saida varchar(40);
declare variable operacao_estoque_entrada varchar(40);
declare variable familia_id integer;
declare variable peca_tipo varchar(10);
declare variable peca_id integer;
BEGIN
IF ( I_gp_id IS NULL ) THEN
BEGIN
exception "..." 'ID DO GRUPO DE PRODUCAO OBRIGATORIO.';
END
IF ( I_PERFIL_UP IS NULL ) THEN
BEGIN
exception "..." 'PERFIL DA UP OBRIGATORIO.';
END
IF ( I_PRODUTO_ID IS NULL ) THEN
BEGIN
exception "..." 'ID DO PRODUTO OBRIGATORIO.';
END
IF ( I_TIPO IS NULL ) THEN
BEGIN
exception "..." 'TIPO DA TRANSACAO OBRIGATORIO.';
END
:REGRAS = 0;
FAMILIA_ID = COALESCE((SELECT FIRST 1 FAMILIA_CODIGO FROM tbproduto P WHERE P.codigo = :I_PRODUTO_ID),0);
IF ( familia_id = 0 ) THEN
BEGIN
exception "..." 'PRODUTO: ' || I_produto_id || ' SEM FAMILIA DEFINIDA.';
END
SELECT COUNT(ID) OVER() REGRAS,
ID,
TIPO,
GP_ID,
PERFIL_UP,
FAMILIA_ID,
LOCALIZACAO_ID_SAIDA,
LOCALIZACAO_ID_ENTRADA,
CONFERENCIA,
OPERACAO_ESTOQUE_SAIDA,
OPERACAO_ESTOQUE_ENTRADA
FROM TBESTOQUE_TRANSACAO_REGRA R
WHERE R.TIPO = :I_REGRA_TIPO
AND COALESCE(R.GP_ID,0) = COALESCE(:I_GP_ID,0)
AND COALESCE(R.PERFIL_UP,0) = COALESCE(:I_PERFIL_UP,0)
AND R.FAMILIA_ID = :FAMILIA_ID
AND R.STATUS = 1
INTO
:REGRAS,
:REGRA_ID,
:I_REGRA_TIPO,
:I_GP_ID,
:I_PERFIL_UP,
:FAMILIA_ID,
:LOCALIZACAO_ID_SAIDA,
:LOCALIZACAO_ID_ENTRADA,
:CONFERENCIA,
:OPERACAO_ESTOQUE_SAIDA,
:OPERACAO_ESTOQUE_ENTRADA;
IF(:REGRAS <> 1)THEN
BEGIN
EXCEPTION "..." 'REGRA DE TRANSACAO DE ESTOQUE ('||I_TIPO||')PARA O'
||' TIPO:'|| COALESCE(:I_REGRA_TIPO,0)
||' GP:'||COALESCE(:I_GP_ID,0)
||' PERFIL UP:'||COALESCE(:I_PERFIL_UP,'')
||' FAMILIA ID:'||COALESCE(:FAMILIA_ID,0)
||' CONFIGURADA INCORRETAMENTE. ENTRE EM CONTATO COM O SUPORTE TECNICO, RAMAL 27';
END
IF(I_TIPO = 'E')THEN
BEGIN
:OPERACAO = :OPERACAO_ESTOQUE_ENTRADA;
:LOCALIZACAO_ID = FN_LOCALIZACAO_CODIGO(:LOCALIZACAO_ID_ENTRADA,:I_PRODUTO_ID,:FAMILIA_ID, :LOCALIZACAO_ID, :I_TALAO, :I_GP_ID, :I_PERFIL_UP);
END
ELSE
IF(I_TIPO = 'S')THEN
BEGIN
:OPERACAO = :OPERACAO_ESTOQUE_SAIDA;
:LOCALIZACAO_ID = FN_LOCALIZACAO_CODIGO(:LOCALIZACAO_ID_SAIDA,:I_PRODUTO_ID,:FAMILIA_ID, :LOCALIZACAO_ID, :I_TALAO, :I_GP_ID, :I_PERFIL_UP);
END
ELSE
BEGIN
EXCEPTION "..." 'TIPO DE TRANSACAO INVALIDA, INFORME E-ENTRASA OU S-SAIDA';
END
IF ( COALESCE(LOCALIZACAO_ID,0) = 0 ) THEN
BEGIN
EXCEPTION "..." 'REGRA DE TRANSACAO DE ESTOQUE: ' || REGRA_ID || ' - ('||I_TIPO||') PARA O'
||' TIPO:'|| COALESCE(:I_REGRA_TIPO,0)
||' GP:'||COALESCE(:I_GP_ID,0)
||' PERFIL UP:'||COALESCE(:I_PERFIL_UP,'')
||' FAMILIA ID:'||COALESCE(:FAMILIA_ID,0)
||' CONFIGURADA INCORRETAMENTE. LOCALIZACAO NAO ENCONTRADA. ENTRE EM CONTATO COM O SUPORTE TECNICO, RAMAL 27';
END
IF ( I_REGRA_TIPO = 5 AND i_peca_barras IS NULL ) THEN
BEGIN
IF ( NOT (I_TALAO > 0) ) THEN
BEGIN
EXCEPTION "..." 'REGRA DE TRANSACAO DE ESTOQUE: ' || REGRA_ID || ' - ('||I_TIPO||') PARA O'
||' TIPO:'|| COALESCE(:I_REGRA_TIPO,0)
||' GP:'||COALESCE(:I_GP_ID,0)
||' PERFIL UP:'||COALESCE(:I_PERFIL_UP,'')
||' FAMILIA ID:'||COALESCE(:FAMILIA_ID,0)
||' CONFIGURADA INCORRETAMENTE. ID DO TALAO OBRIGATORIO. ENTRE EM CONTATO COM O SUPORTE TECNICO, RAMAL 27';
END
PECA_BARRAS = 'RD' || LPAD(I_TALAO,11,0);
END
fn_set_context('REGRA_LOCALIZACAO_ID',:localizacao_id);
SUSPEND;
END
^
SET TERM ; ^
SET TERM ^ ;
CREATE OR ALTER procedure spi_estoque_transacao_regra (
regra_tipo integer,
gp_id integer,
perfil_up varchar(10),
familia_id integer,
localizacao_id integer,
tabela varchar(32),
tabela_nivel integer,
tabela_id integer,
estabelecimento_id integer,
data date,
produto_id integer,
tamanho integer,
quantidade numeric(10,5),
tipo char(1),
consumo char(1),
ccusto varchar(10),
observacao varchar(100),
transacao_id integer = null,
documento integer = null,
talao integer = 0,
peca_id varchar(100) = null)
as
declare variable regras integer;
declare variable regra_id integer;
declare variable localizacao_id_saida integer;
declare variable localizacao_id_entrada integer;
declare variable operacao_estoque_saida varchar(40);
declare variable operacao varchar(40);
declare variable operacao_estoque_entrada varchar(40);
declare variable usuario_id integer;
declare variable t01 numeric(10,5);
declare variable t02 numeric(10,5);
declare variable t03 numeric(10,5);
declare variable t04 numeric(10,5);
declare variable t05 numeric(10,5);
declare variable t06 numeric(10,5);
declare variable t07 numeric(10,5);
declare variable t08 numeric(10,5);
declare variable t09 numeric(10,5);
declare variable t10 numeric(10,5);
declare variable t11 numeric(10,5);
declare variable t12 numeric(10,5);
declare variable t13 numeric(10,5);
declare variable t14 numeric(10,5);
declare variable t15 numeric(10,5);
declare variable t16 numeric(10,5);
declare variable t17 numeric(10,5);
declare variable t18 numeric(10,5);
declare variable t19 numeric(10,5);
declare variable t20 numeric(10,5);
declare variable conferencia integer;
declare variable alocacao_tipo varchar(10);
declare variable alocacao_tabela_id integer;
declare variable alocacao_tab_item_id integer;
declare variable v_peca_id integer;
declare variable v_peca_tipo varchar(10);
BEGIN
SELECT
REGRA_ID,
LOCALIZACAO_ID,
OPERACAO,
CONFERENCIA,
PECA_BARRAS
FROM
SPC_ESTOQUE_TRANSACAO_REGRA (
:regra_tipo,
:GP_ID,
:PERFIL_UP,
:PRODUTO_ID,
:TIPO,
:TALAO,
:PECA_ID
)
INTO
REGRA_ID,
LOCALIZACAO_ID,
OPERACAO,
CONFERENCIA,
PECA_ID
;
EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO(
:TABELA,
:TABELA_NIVEL,
:TABELA_ID,
:ESTABELECIMENTO_ID,
:LOCALIZACAO_ID,
:DATA,
:PRODUTO_ID,
:TAMANHO,
:QUANTIDADE,
:TIPO,
:OPERACAO,
:CONSUMO,
:CCUSTO,
:OBSERVACAO,
:TRANSACAO_ID,
:DOCUMENTO,
:TALAO,
:REGRA_ID,
:CONFERENCIA,
:PECA_ID
);
--
-- IF ( PECA_ID is not null ) THEN
-- begin
-- select first 1
-- tipo,
-- id
-- from spc_peca(:PECA_ID)
-- into V_peca_tipo,
-- V_peca_id;
--
-- if ( V_peca_tipo = 'R' ) then
-- begin
-- update tbrevisao r set r.localizacao_entrada = :LOCALIZACAO_ID where r.id = :V_peca_id;
-- end
-- else
-- if ( V_peca_tipo = 'D' ) then
-- begin
-- update vwremessa_talao_detalhe d set d.localizacao_id = :LOCALIZACAO_ID where d.id = :V_peca_id;
-- end
-- else
-- begin
-- exception "..." 'TIPO DE PECA NAO IDENTIFICADO.';
-- end
--
--
-- end
END
^
SET TERM ; ^
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TABELA IS
'Nome da tabela que realizou a transacao de estoque';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TABELA_ID IS
'Id da tabela que realizou a transacao de estoque';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.DATA IS
'Data da transacao de estoque ( Podera ser retroativa )';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TIPO IS
'Tipo de transacao para o estoque. E = Entrada; S = SAIDA';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.CONSUMO IS
'Identifica se eh operacao de consumo. 1 = SIM; 0 = NAO';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.CCUSTO IS
'Centro de custo responsavel pela transacao';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TRANSACAO_ID IS
'Id da transacao. NAO OBRIGATORIO';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.DOCUMENTO IS
'Numero do Documento de Identificacao. NAO OBRIGATORIO';
COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TALAO IS
'Id do talao. NAO OBRIGATORIO';
SET TERM ^ ;
CREATE OR ALTER trigger ttbpedido_item_proc_b0u_03 for tbpedido_item_processado
active before update position 0
AS
DECLARE VARIABLE REMESSA_COMPONENTE CHAR(1) ;
DECLARE VARIABLE LOCALIZACAO_ID INTEGER ;
DECLARE VARIABLE ESTOQUE_ID INTEGER ;
DECLARE VARIABLE alternativa INTEGER ;
DECLARE VARIABLE OPERACAO_ENTRADA VARCHAR(10) ;
declare variable PERFIL_UP VARCHAR(50);
DECLARE VARIABLE CCUSTO VARCHAR(10);
DECLARE VARIABLE RETORNO_SP VARCHAR(500);
Declare variable REMESSA VARChar(15);
Declare variable REMESSA_WEB Char(1);
declare variable familia_id integer;
Begin
SELECT FIRST 1
R.REMESSA,
COALESCE(WEB,'0')
FROM VWREMESSA R
WHERE R.REMESSA_ID = NEW.REMESSA
INTO REMESSA,
REMESSA_WEB;
IF (COALESCE(REMESSA_WEB,'0') = '1' ) THEN
Begin
/* ESTA TRIGGER SO SERA PROCESSADA NAS NOVAS REMESSAS (GCWEB) */
IF ( COALESCE(OLD.FAMILIA_CODIGO,0) = 0 ) THEN
BEGIN
/* 3 - PRODUZIDO */
IF ( OLD.SITUACAO = 2 AND NEW.SITUACAO = 3 ) THEN
BEGIN
NEW.DATA_PRODUCAO = (SELECT FIRST 1 T.DATA_PRODUCAO
FROM TBTURNO T
WHERE T.TURNO_CORRENTE = '1');
IF ( NOT (NEW.QUANTIDADE_PRODUCAO > 0) ) THEN
BEGIN
EXCEPTION "..." 'HA ITENS COM QUANTIDADE PRODUZIDA IGUAL A ZERO . OPERACAO CANCELADA! '||
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
END
/* Guarda o tipo da remessa ( '1' = Componente ) */
REMESSA_COMPONENTE = (SELECT FIRST 1 COMPONENTE FROM VWREMESSA WHERE REMESSA_ID = NEW.REMESSA);
/* VERIFICA SE A REMESSA EH DE COMPONENTE */
IF ( :REMESSA_COMPONENTE = '1' ) THEN
BEGIN
/* GUARDA A LOCALIZACAO DE PROCESSO (WIP) */
LOCALIZACAO_ID = COALESCE((SELECT FIRST 1 F.LOCALIZACAO_PROCESSO
FROM TBPRODUTO P, TBFAMILIA_FICHA F
WHERE F.FAMILIA_CODIGO = P.FAMILIA_CODIGO
AND F.ESTABELECIMENTO_CODIGO = NEW.ESTABELECIMENTO_CODIGO
AND P.CODIGO = NEW.PRODUTO_CODIGO),0);
/* VERIFICA SE A LOCALIZACAO DE PROCESSO ESTA CONFIGURADA */
IF ( LOCALIZACAO_ID = 0 ) THEN
BEGIN
EXCEPTION "..." 'FAMILIA DO PRODUTO SEM LOCALIZACAO DE PROCESSO (WIP) DEFINIDA. ID PRODUTO: ' || NEW.PRODUTO_CODIGO || '. OPERACAO CANCELADA! '||
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
END
/* SIGLA DA OPERACAO DE ENTRADA NO ESTOQUE WORK IN PROCESS ENTRADA */
OPERACAO_ENTRADA = 'WPE';
END
ELSE
BEGIN
/* GUARDA A LOCALIZACAO PADRAO */
LOCALIZACAO_ID = COALESCE((SELECT FIRST 1 P.LOCALIZACAO_CODIGO
FROM TBPRODUTO P
WHERE P.CODIGO = NEW.PRODUTO_CODIGO),0);
/* VERIFICA SE A LOCALIZACAO PADRAO ESTA CONFIGURADA */
IF ( LOCALIZACAO_ID = 0 ) THEN
BEGIN
EXCEPTION "..." 'PRODUTO SEM LOCALIZACAO PADRAO DEFINIDA. CÓD. PRODUTO: ' || NEW.PRODUTO_CODIGO || '. OPERACAO CANCELADA! '||
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
END
/* SIGLA DA OPERACAO DE ENTRADA NO ESTOQUE PADRAO */
OPERACAO_ENTRADA = (SELECT FIRST 1 VALOR_EXT FROM TBCONTROLE_N WHERE ID = 30);
END
--Entrada no Estoque
ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);
NEW.ESTOQUE_ID = :ESTOQUE_ID;
CCUSTO = (SELECT FIRST 1 U.CCUSTO
FROM TBUP U
WHERE U.ID = (SELECT FIRST 1 T.UP_ID
FROM VWREMESSA_TALAO T
WHERE T.REMESSA_ID = NEW.REMESSA
AND T.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE));
perfil_up = coalesce((select first 1 u.perfil from tbup u where u.id =
(SELECT FIRST 1 T.UP_ID
FROM VWREMESSA_TALAO T
WHERE T.REMESSA_ID = NEW.REMESSA
AND T.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE)),'');
familia_id = coalesce((
select first 1 familia_codigo
from tbproduto
where codigo = new.produto_codigo),0);
NEW.QUANTIDADE_PRODUCAO = CAST(NEW.QUANTIDADE_PRODUCAO AS NUMERIC(15,4));
NEW.LOCALIZACAO_CODIGO = :LOCALIZACAO_ID;
EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO_REGRA(
5,
new.programacao_esteira,
:perfil_up,
:familia_id,
new.localizacao_codigo,
'TBPEDIDO_ITEM_PROCESSADO',
1,
new.controle,
new.estabelecimento_codigo,
NEW.DATA_PRODUCAO,
new.produto_codigo,
new.tamanho,
new.quantidade_producao,
'E',
'0',
:CCUSTO,
'ENTRADA POR REMESSA DE PRODUCAO. REMESSA:' || REMESSA || ' TALAO: ' || FN_LPAD(NEW.REMESSA_ACUMULADO_CONTROLE,4,0),
:ESTOQUE_ID,
NEW.REMESSA,
new.controle
);
NEW.localizacao_codigo = COALESCE(fn_get_context_temporary('REGRA_LOCALIZACAO_ID'),NEW.localizacao_codigo);
/*
EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 (
NEW.ESTABELECIMENTO_CODIGO,
:LOCALIZACAO_ID,
NEW.PRODUTO_CODIGO,
'E', /* E = ENTRADA NO ESTOQUE */
/* NEW.DATA_PRODUCAO,
NEW.QUANTIDADE_PRODUCAO,
IIF(NEW.TAMANHO = 1,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO = 2,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO = 3,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO = 4,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO = 5,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO = 6,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO = 7,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO = 8,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO = 9,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =10,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =11,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =12,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =13,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =14,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =15,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =16,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =17,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =18,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =19,NEW.QUANTIDADE_PRODUCAO,0),
IIF(NEW.TAMANHO =20,NEW.QUANTIDADE_PRODUCAO,0),
:ESTOQUE_ID,
NEW.REMESSA,
0,
0,
:OPERACAO_ENTRADA,
NEW.CONTROLE,
0,
0,
0,
0,
Current_Date,
0,
:CCUSTO,
'ENTRADA POR REMESSA DE PRODUCAO',
'0',
0,
0,
0,
0
);
*/
END else
begin
IF ( OLD.SITUACAO = 3 AND NEW.SITUACAO = 2 ) THEN
BEGIN
DELETE FROM TbEstoque_Transacao_Item
WHERE CONTROLE = OLD.estoque_id
AND ESTABELECIMENTO_CODIGO = OLD.estabelecimento_codigo
AND PRODUTO_CODIGO = OLD.produto_codigo;
END
END
END
END
END
^
SET TERM ; ^