SET TERM ^ ; CREATE OR ALTER procedure SPUI_NF_INUTILIZADOS as declare variable NF_ID integer; declare variable ESTABELECIMENTO_ID integer; declare variable NUMERO_NOTAFISCAL integer; declare variable SERIE integer; declare variable USUARIO_ID integer; declare variable TIPO integer; declare variable NF_INUTILIZADOS_ID integer; declare variable IMPORTACAO integer; declare variable DATA_EMISSAO date; declare variable PROTOCOLO_INUTILIZACAO varchar(20); declare variable JUSTIFICATIVA varchar(50); BEGIN FOR SELECT X.NF_ID, X.ESTABELECIMENTO_ID, X.NUMERO_NOTAFISCAL, X.SERIE, X.USUARIO_ID, X.DATA_EMISSAO, X.PROTOCOLO_INUTILIZACAO, X.JUSTIFICATIVA, X.TIPO, X.NF_INUTILIZADOS_ID FROM ( SELECT B.CONTROLE AS NF_ID, B.ESTABELECIMENTO_CODIGO ESTABELECIMENTO_ID, B.NUMERO_NOTAFISCAL, B.SERIE, B.USUARIO_CODIGO USUARIO_ID, B.DATA_EMISSAO, B.PROTOCOLO_CANCELAMENTO PROTOCOLO_INUTILIZACAO, B.MOTIVO_CANCELAMENTO JUSTIFICATIVA, 1 AS TIPO, B.NF_INUTILIZADOS_ID FROM TBNFS B WHERE B.SITUACAO = 3 AND B.NATUREZA = 1 AND B.CFOP_CODIGO = '9.999' UNION SELECT B.CONTROLE AS NF_ID, B.ESTABELECIMENTO_CODIGO ESTABELECIMENTO_ID, B.NUMERO_NOTAFISCAL, B.SERIE, B.USUARIO_CODIGO USUARIO_ID, B.DATA_EMISSAO, B.PROTOCOLO_CANCELAMENTO PROTOCOLO_INUTILIZACAO, B.MOTIVO_CANCELAMENTO JUSTIFICATIVA, 0 AS TIPO, B.NF_INUTILIZADOS_ID FROM TBNFE B WHERE B.SITUACAO = 3 AND B.NATUREZA = 1 AND B.CFOP_CODIGO = '9.999' ) X ORDER BY X.ESTABELECIMENTO_ID, X.NUMERO_NOTAFISCAL, X.SERIE, X.TIPO INTO :NF_ID, :ESTABELECIMENTO_ID, :NUMERO_NOTAFISCAL, :SERIE, :USUARIO_ID, :DATA_EMISSAO, :PROTOCOLO_INUTILIZACAO, :JUSTIFICATIVA, :TIPO, :NF_INUTILIZADOS_ID DO BEGIN :IMPORTACAO = 1; IF(COALESCE(:NF_INUTILIZADOS_ID, 0) = 0) THEN BEGIN :NF_INUTILIZADOS_ID = GEN_ID(GTBNF_INUTILIZADOS, 1); END ELSE BEGIN :IMPORTACAO = COALESCE((SELECT FIRST 1 K.IMPORTACAO FROM TBNF_INUTILIZADOS K WHERE K.ID = :NF_INUTILIZADOS_ID), 0); END UPDATE OR INSERT INTO TBNF_INUTILIZADOS (ID, ESTABELECIMENTO_ID, NUMERO_INICIAL, NUMERO_FINAL, SERIE, TIPO, JUSTIFICATIVA, DATA_EMISSAO, PROTOCOLO_INUTILIZACAO, XML, USUARIO_ID, IMPORTACAO) VALUES (:NF_INUTILIZADOS_ID, :ESTABELECIMENTO_ID, :NUMERO_NOTAFISCAL, :NUMERO_NOTAFISCAL, :SERIE, :TIPO, :JUSTIFICATIVA, :DATA_EMISSAO, :PROTOCOLO_INUTILIZACAO, NULL, :USUARIO_ID, :IMPORTACAO) MATCHING (ID); IF(:TIPO = 0) THEN BEGIN UPDATE TBNFE T SET T.NF_INUTILIZADOS_ID = :NF_INUTILIZADOS_ID WHERE T.CONTROLE = :NF_ID; END ELSE BEGIN UPDATE TBNFS T SET T.NF_INUTILIZADOS_ID = :NF_INUTILIZADOS_ID WHERE T.CONTROLE = :NF_ID; END END END ^ SET TERM ; ^