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 ; ^