SET TERM ^ ;

CREATE OR ALTER procedure SPC_NF_QUEBRA_SEQUENCIA (
    DATA1 date,
    DATA2 date)
returns (
    ESTABELECIMENTO_CNPJ varchar(14),
    SERIE varchar(3),
    NUMERO_NF varchar(20),
    DATA_EMISSAO date,
    SITUACAO integer,
    XML char(2),
    RESULTADO varchar(100),
    TIPO varchar(20),
    ESPECIE char(2),
    "GENERATOR" varchar(20))
as
declare variable VNUMERO_NF integer;
declare variable VDATA_EMISSAO date;
declare variable VSITUACAO integer;
declare variable VXML char(2);
declare variable VSEQ integer;
declare variable NF_ID integer;
declare variable CONTADOR_ERRO integer;
declare variable INU_INI integer;
declare variable INU_FIM integer;
BEGIN

  vSEQ = 0;
  CONTADOR_erro = 0;

  FOR
  SELECT DISTINCT E.CNPJ, SERIE, ESPECIE, C.GENERATOR
    FROM TBCONFIGURACAO_NF C, TBESTABELECIMENTO E
   WHERE C.NATUREZA = 1
     AND C.AMBIENTE = 1
     AND E.CODIGO = C.ESTABELECIMENTO_ID
    ORDER BY E.CNPJ, C.GENERATOR
     INTO :ESTABELECIMENTO_CNPJ, :SERIE, :ESPECIE, :GENERATOR
     DO BEGIN

--     IF (TIPO = 'S') THEN
--        BEGIN

--            TIPO = 'NF.SAIDA';
            VSEQ = 0;
            NF_ID = 0;
    
            FOR SELECT
            NUMERO_NOTAFISCAL,
            DATA_EMISSAO,
            SITUACAO,
            XML,
            TIPO
            /*||' - '||COALESCE(
            IIF(XML='07', 'TRANSMITIDO',
            IIF(XML='08', 'CANCELADO',
            IIF(XML='09', 'INUTILIZADO',
            IIF(XML='10', 'DENEGADO',
                          'NAO TRANSMITIDO')))),'NAO TRANSMITIDO') AS XML*/
            FROM (
                    SELECT N.NUMERO_NOTAFISCAL,
                           N.DATA_EMISSAO, N.SITUACAO,
                           COALESCE((SELECT MAX(L.XML) FROM TBNF_LOTE L WHERE L.NFS_CONTROLE = N.CONTROLE),'') XML,
                           N.CONTROLE, '21150 - Saida' TIPO

                      FROM TBNFS N, TBESTABELECIMENTO E
                     WHERE N.DATA_EMISSAO BETWEEN :DATA1 AND :DATA2
                       AND N.NATUREZA = 1
                       AND E.CODIGO = N.ESTABELECIMENTO_CODIGO
                       AND E.CNPJ = :ESTABELECIMENTO_CNPJ
                       AND N.SERIE = :SERIE
                       AND N.CFOP_CODIGO <> '9.999'
                       AND N.ESPECIE = :ESPECIE

                    UNION ALL

                    SELECT N.NUMERO_NOTAFISCAL,
                           N.DATA_EMISSAO, N.SITUACAO,
                           COALESCE((SELECT MAX(L.XML) FROM TBNF_LOTE L WHERE L.NFE_CONTROLE = N.CONTROLE),'') XML,
                           N.CONTROLE, '21140 - Entrada' TIPO

                      FROM TBNFE N, TBESTABELECIMENTO E
                     WHERE N.DATA_EMISSAO BETWEEN :DATA1 AND :DATA2
                       AND N.NATUREZA = 1
                       AND N.ESTABELECIMENTO_CODIGO = E.CODIGO
                       AND E.CNPJ = :ESTABELECIMENTO_CNPJ
                       AND N.SERIE = :SERIE
                       AND N.CFOP_CODIGO <> '9.999'
                       AND N.ESPECIE = :ESPECIE

                    UNION ALL

                    SELECT PDV.NUMERO_CFE as NUMERO_NOTAFISCAL,
                           PDV.DATA_EMISSAO,
                           PDV.SITUACAO,
                           IIF(PDV.SITUACAO = 2, '07', '08') AS XML,
                           PDV.ID, '19040 - Saida' TIPO

                      FROM TBPDV_CFE PDV, TBESTABELECIMENTO E
                     WHERE PDV.DATA_EMISSAO BETWEEN :DATA1 AND :DATA2
                       AND PDV.ESTABELECIMENTO_ID = E.CODIGO
                       AND E.CNPJ = :ESTABELECIMENTO_CNPJ
                       AND PDV.SERIE = :SERIE
                       AND PDV.TIPO IN (1,2)    /*0 = CUPOM FISCAL
                                                  1 = NF-E
                                                  2 = NFC-E
                                                  3 = ROMANEIO*/
                       AND PDV.SITUACAO IN (2,3)/*1 = ATIVO
                                                  2 = AUTORIZADO
                                                  3 = CANCELADO*/
                       AND ((PDV.TIPO = 1 AND :ESPECIE = '55') or
                            (PDV.TIPO = 2 AND :ESPECIE = '65'))

                    ORDER BY 1

                  )
            WHERE XML <> '09'
            INTO :vNUMERO_NF ,
                 :vDATA_EMISSAO,
                 :vSITUACAO,
                 :vXML,
                 :TIPO
              DO BEGIN
    
                 IF(vSEQ = 0) Then
                    vSEQ = vNUMERO_NF;
    
                 if(vSEQ = vNUMERO_NF) Then
                    Begin
    
                    NUMERO_NF = vNUMERO_NF;
                    DATA_EMISSAO = vDATA_EMISSAO;
                    SITUACAO = vSITUACAO;
                    XML = vXML;
                    IF(vXML ='07') Then BEGIN RESULTADO = '07 - AUTORIZADO'; CONTADOR_ERRO = 0; End else
                    IF(vXML ='08') Then BEGIN RESULTADO = '08 - CANCELADO';  CONTADOR_ERRO = 0; End else
                    IF(vXML ='10') Then BEGIN RESULTADO = '09 - DENEGADO';   CONTADOR_ERRO = 0; End else
                                              RESULTADO = 'FALHA - DOCUMENTO NAO AUTORIZADO';

                    SUSPEND;
    
                    End else
    
                 if (vSEQ < vNUMERO_NF) Then
                    Begin
    
                     While (vSEQ < vNUMERO_NF) Do
                        Begin
                        NF_ID = 0;

                        /* VER NA TBNFS */
                        IF (NF_ID = 0) THEN
                            BEGIN

                                    NF_ID =
                                    Coalesce((SELECT FIRST 1 CONTROLE FROM TBNFS N, TBESTABELECIMENTO E
                                               WHERE N.ESTABELECIMENTO_CODIGO = E.CODIGO
                                                 AND E.CNPJ = :ESTABELECIMENTO_CNPJ
                                                 AND N.SERIE = :SERIE
                                                 and N.NUMERO_NOTAFISCAL = :vSEQ
                                                 AND N.NATUREZA = 1    
                                                 AND N.CFOP_CODIGO <> '9.999'
                                                 AND N.ESPECIE = :ESPECIE
                                              ),0);
            
                                    if (NF_ID > 0) then
                                        BEGIN
                                            FOR SELECT
                                            NUMERO_NOTAFISCAL,
                                            DATA_EMISSAO,
                                            SITUACAO,
                                            XML
                                            FROM (
                                                    SELECT N.NUMERO_NOTAFISCAL, N.DATA_EMISSAO, N.SITUACAO,
                                                           COALESCE((SELECT MAX(L.XML) FROM TBNF_LOTE L WHERE L.NFS_CONTROLE = N.CONTROLE),'') XML 
                                                      FROM TBNFS N
                                                     WHERE N.CONTROLE = :NF_ID
                                                  )
                                            INTO :NUMERO_NF,
                                                 :DATA_EMISSAO,
                                                 :SITUACAO,
                                                 :XML
                                              DO BEGIN
                                                    IF(XML ='07') Then BEGIN RESULTADO = '07 - AUTORIZADO'; CONTADOR_ERRO = 0; End else
                                                    IF(XML ='08') Then BEGIN RESULTADO = '08 - CANCELADO';  CONTADOR_ERRO = 0; End else
                                                    IF(XML ='09') Then BEGIN RESULTADO = '09 - INUTILIZADO';CONTADOR_ERRO = 0; End else
                                                    IF(XML ='10') Then BEGIN RESULTADO = '10 - DENEGADO';   CONTADOR_ERRO = 0; End else
                                                        RESULTADO = 'FALHA - DOCUMENTO NAO AUTORIZADO';
                                                    SUSPEND;
                                                 END
            
                                        END
                            END

                        /* VER NA TBNFE */
                        IF (NF_ID = 0) THEN
                            BEGIN

                            NF_ID =
                            Coalesce((SELECT FIRST 1 CONTROLE FROM TBNFE N, TBESTABELECIMENTO E
                                       WHERE N.ESTABELECIMENTO_CODIGO = E.CODIGO
                                         AND E.CNPJ = :ESTABELECIMENTO_CNPJ
                                         AND N.SERIE = :SERIE
                                         and N.NUMERO_NOTAFISCAL = :vSEQ
                                         AND N.NATUREZA = 1
                                         AND N.CFOP_CODIGO <> '9.999'
                                         AND N.ESPECIE = :ESPECIE),0);
    
                            if (NF_ID > 0) then
                                BEGIN
                                    FOR SELECT
                                    NUMERO_NOTAFISCAL,
                                    DATA_EMISSAO,
                                    SITUACAO,
                                    XML
                                    FROM (
                                            SELECT N.NUMERO_NOTAFISCAL, N.DATA_EMISSAO, N.SITUACAO,
                                                   COALESCE((SELECT MAX(L.XML) FROM TBNF_LOTE L WHERE L.NFE_CONTROLE = N.CONTROLE),'') XML
                                              FROM TBNFe N
                                             WHERE N.CONTROLE = :NF_ID
                                          )
                                    INTO :NUMERO_NF,
                                         :DATA_EMISSAO,
                                         :SITUACAO,
                                         :XML 
                                      DO BEGIN
                                            IF(XML ='07') Then BEGIN RESULTADO = '07 - AUTORIZADO'; CONTADOR_ERRO = 0; End else
                                            IF(XML ='08') Then BEGIN RESULTADO = '08 - CANCELADO';  CONTADOR_ERRO = 0; End else
                                            IF(XML ='09') Then BEGIN RESULTADO = '09 - INUTILIZADO';CONTADOR_ERRO = 0; End else
                                            IF(XML ='10') Then BEGIN RESULTADO = '10 - DENEGADO';   CONTADOR_ERRO = 0; End else
                                                RESULTADO = 'FALHA - DOCUMENTO NAO AUTORIZADO';
                                            SUSPEND;
                                         END
    
                                END
                            END 
                            
                        /* VER NA TBPDV */
                        IF (NF_ID = 0) THEN
                            BEGIN
                                                          
                            NF_ID =
                            COALESCE((SELECT PDV.ID
                              FROM TBPDV_CFE PDV, TBESTABELECIMENTO E
                             WHERE PDV.ESTABELECIMENTO_ID = E.CODIGO
                               AND E.CNPJ = :ESTABELECIMENTO_CNPJ
                               AND PDV.SERIE = :SERIE
                               AND PDV.NUMERO_CFE = :vSEQ
                               AND PDV.TIPO IN (1,2)
                               AND PDV.SITUACAO IN (2,3)
                               AND ((PDV.TIPO = 1 AND :ESPECIE = '55') or
                                    (PDV.TIPO = 2 AND :ESPECIE = '65'))),0);

                            if (NF_ID > 0) then
                                BEGIN
                                    FOR SELECT
                                    NUMERO_NOTAFISCAL,
                                    DATA_EMISSAO,
                                    SITUACAO,
                                    XML
                                    FROM (
                                        SELECT PDV.NUMERO_CFE as NUMERO_NOTAFISCAL,
                                               PDV.DATA_EMISSAO,
                                               PDV.SITUACAO,
                                               IIF(PDV.SITUACAO = 2, '07', '08') AS XML
                                          FROM TBPDV_CFE PDV
                                         WHERE PDV.ID = :NF_ID
                                         )
                                INTO :NUMERO_NF,
                                     :DATA_EMISSAO,
                                     :SITUACAO,
                                     :XML 
                                  DO BEGIN
                                            IF(XML ='07') Then BEGIN RESULTADO = '07 - AUTORIZADO'; CONTADOR_ERRO = 0; End else
                                            IF(XML ='08') Then BEGIN RESULTADO = '08 - CANCELADO';  CONTADOR_ERRO = 0; End else
                                            IF(XML ='09') Then BEGIN RESULTADO = '09 - INUTILIZADO';CONTADOR_ERRO = 0; End else
                                            IF(XML ='10') Then BEGIN RESULTADO = '10 - DENEGADO';   CONTADOR_ERRO = 0; End else
                                            RESULTADO = 'FALHA - DOCUMENTO NAO AUTORIZADO';
                                        SUSPEND;
                                     END

                                END
                            END




                        /* VER INUTILIZADAS */
                        if (NF_ID = 0) then
                            BEGIN

                            NF_ID =
                            COALESCE((SELECT INU.ID
                              FROM TBNF_INUTILIZADOS INU, TBESTABELECIMENTO E
                             WHERE INU.ESTABELECIMENTO_ID = E.CODIGO
                               AND E.CNPJ = :ESTABELECIMENTO_CNPJ
                               AND INU.SERIE = :SERIE
                               AND :vSEQ BETWEEN INU.NUMERO_INICIAL AND INU.NUMERO_FINAL
                              -- AND INU.TIPO = 1 /* SAIDA */
                               AND COALESCE(INU.PROTOCOLO_INUTILIZACAO,'') <> ''
                               AND INU.ESPECIE = :ESPECIE ),0);

                            if (NF_ID > 0) then
                                BEGIN
                                    FOR SELECT
                                    NUMERO_NOTAFISCAL,
                                    DATA_EMISSAO,
                                    SITUACAO,
                                    XML,
                                    INU_INI,
                                    INU_FIM
                                    FROM (
                                        SELECT FN_LPAD(INU.NUMERO_INICIAL,6,'0')||'-'||
                                               FN_LPAD(INU.NUMERO_FINAL,6,'0') AS NUMERO_NOTAFISCAL,
                                               INU.DATA_EMISSAO,
                                               0 AS SITUACAO,
                                               '09' AS XML,
                                               INU.NUMERO_INICIAL AS INU_INI,
                                               INU.NUMERO_FINAL AS INU_FIM
                                          FROM TBNF_INUTILIZADOS INU
                                         WHERE INU.ID = :NF_ID
                                         )
                                INTO :NUMERO_NF,
                                     :DATA_EMISSAO,
                                     :SITUACAO,
                                     :XML,
                                     :INU_INI,
                                     :INU_FIM
                                  DO BEGIN
                                            IF(XML ='07') Then BEGIN RESULTADO = '07 - AUTORIZADO'; CONTADOR_ERRO = 0; End else
                                            IF(XML ='08') Then BEGIN RESULTADO = '08 - CANCELADO';  CONTADOR_ERRO = 0; End else
                                            IF(XML ='09') Then BEGIN RESULTADO = '09 - INUTILIZADO';CONTADOR_ERRO = 0; End else
                                            IF(XML ='10') Then BEGIN RESULTADO = '10 - DENEGADO';   CONTADOR_ERRO = 0; End else
                                            RESULTADO = 'FALHA - DOCUMENTO NAO AUTORIZADO';
                                        SUSPEND;
                                     vSEQ = :INU_FIM;
                                     END

                                END
                
                            END

                        if (NF_ID = 0) then
                            BEGIN

                                NUMERO_NF = :vSEQ;
                                --DATA_EMISSAO = null;
                                SITUACAO = 0;
                                XML = '';
                                RESULTADO = 'FALHA - DOCUMENTO INEXISTENTE';
                                CONTADOR_ERRO = CONTADOR_ERRO + 1;
                                SUSPEND;
    
                                IF (CONTADOR_ERRO >= 10000) THEN
                                    BEGIN
                                        NUMERO_NF = 0;
                                        RESULTADO = 'FALHA - MAIS DE 10000 DOCUMENTOS INEXISTENTES!';
                                        vSEQ = vNUMERO_NF;
                                        SUSPEND;

                                        --EXIT;
                                    END 
                
                           END 
            
                       vSeq = vSEQ + 1;
                       End /* WHILE */
            
                   if (vSEQ = vNUMERO_NF) Then
                       Begin
            
                            NUMERO_NF = vNUMERO_NF;
                            DATA_EMISSAO = vDATA_EMISSAO;
                            SITUACAO = vSITUACAO;
                            XML = vXML;
                                IF(vXML ='07') Then BEGIN RESULTADO = '07 - AUTORIZADO'; CONTADOR_ERRO = 0; End else
                                IF(vXML ='08') Then BEGIN RESULTADO = '08 - CANCELADO';  CONTADOR_ERRO = 0; End else
                                IF(vXML ='10') Then BEGIN RESULTADO = '09 - DENEGADO';   CONTADOR_ERRO = 0; End else
                                RESULTADO = 'FALHA - DOCUMENTO NAO AUTORIZADO';
                            SUSPEND;
                        End
        
                   End /* if (vSEQ < vNUMERO_NF) Then */
            
               vSeq = vSEQ + 1;
               END  /* INTO */

--      END /* TIPO = S */


















/*$$IBEC$$ 
     IF (TIPO = 'E') THEN
        BEGIN

            TIPO = 'NF.ENTRADA';
            VSEQ = 0;
            NF_ID = 0;
    
            FOR SELECT
            NUMERO_NOTAFISCAL,
            DATA_EMISSAO,
            SITUACAO,
            XML
             $$IBEC$$*//*||' - '||COALESCE(
            IIF(XML='07', 'TRANSMITIDO',
            IIF(XML='08', 'CANCELADO',
            IIF(XML='09', 'INUTILIZADO',
            IIF(XML='10', 'DENEGADO',
                          'NAO TRANSMITIDO')))),'NAO TRANSMITIDO') AS XML*//*$$IBEC$$ 
            FROM (
                    SELECT N.NUMERO_NOTAFISCAL,
                           N.DATA_EMISSAO, N.SITUACAO,
                           COALESCE((SELECT MAX(L.XML) FROM TBNF_LOTE L WHERE L.NFE_CONTROLE = N.CONTROLE),'') XML,
                           N.CONTROLE

                      FROM TBNFE N, TBESTABELECIMENTO E
                     WHERE N.DATA_EMISSAO BETWEEN :DATA1 AND :DATA2
                       AND N.NATUREZA = 1
                       AND N.ESTABELECIMENTO_CODIGO = E.CODIGO
                       AND E.CNPJ = :ESTABELECIMENTO_CNPJ
                       AND N.SERIE = :SERIE
                       AND N.CFOP_CODIGO <> '9.999'
                       AND N.ESPECIE = :ESPECIE

                    ORDER BY 1

                  )
            WHERE XML <> '09'
            INTO :vNUMERO_NF ,
                 :vDATA_EMISSAO,
                 :vSITUACAO,
                 :vXML 
              DO BEGIN
    
                 IF(vSEQ = 0) Then
                    vSEQ = vNUMERO_NF;
    
                 if(vSEQ = vNUMERO_NF) Then
                    Begin
    
                    NUMERO_NF = vNUMERO_NF;
                    DATA_EMISSAO = vDATA_EMISSAO;
                    SITUACAO = vSITUACAO;
                    XML = vXML;
                    IF(vXML ='07') Then BEGIN RESULTADO = 'OK - AUTORIZADO'; CONTADOR_ERRO = 0; End else
                    IF(vXML ='08') Then BEGIN RESULTADO = 'OK - CANCELADO';  CONTADOR_ERRO = 0; End else
                    IF(vXML ='10') Then BEGIN RESULTADO = 'OK - DENEGADO';   CONTADOR_ERRO = 0; End else
                        RESULTADO = 'FALHA - DOCUMENTO NAO AUTORIZADO';
                    SUSPEND;
    
                    End else
    
                 if (vSEQ < vNUMERO_NF) Then
                    Begin
    
                     While (vSEQ < vNUMERO_NF) Do
                        Begin
                        NF_ID = 0;

                         $$IBEC$$*//* VER NA TBNFE *//*$$IBEC$$ 
                        IF (NF_ID = 0) THEN
                            BEGIN

                            NF_ID =
                            Coalesce((SELECT FIRST 1 CONTROLE FROM TBNFE N, TBESTABELECIMENTO E
                                       WHERE N.ESTABELECIMENTO_CODIGO = E.CODIGO
                                         AND E.CNPJ = :ESTABELECIMENTO_CNPJ
                                         AND N.SERIE = :SERIE
                                         and N.NUMERO_NOTAFISCAL = :vSEQ
                                         AND N.NATUREZA = 1
                                         AND N.CFOP_CODIGO <> '9.999'
                                         AND N.ESPECIE = :ESPECIE),0);
    
                            if (NF_ID > 0) then
                                BEGIN
                                    FOR SELECT
                                    NUMERO_NOTAFISCAL,
                                    DATA_EMISSAO,
                                    SITUACAO,
                                    XML
                                    FROM (
                                            SELECT N.NUMERO_NOTAFISCAL, N.DATA_EMISSAO, N.SITUACAO,
                                                   COALESCE((SELECT MAX(L.XML) FROM TBNF_LOTE L WHERE L.NFE_CONTROLE = N.CONTROLE),'') XML
                                              FROM TBNFe N
                                             WHERE N.CONTROLE = :NF_ID
                                          )
                                    INTO :NUMERO_NF,
                                         :DATA_EMISSAO,
                                         :SITUACAO,
                                         :XML 
                                      DO BEGIN
                                            IF(XML ='07') Then BEGIN RESULTADO = 'OK - AUTORIZADO'; CONTADOR_ERRO = 0; End else
                                            IF(XML ='08') Then BEGIN RESULTADO = 'OK - CANCELADO';  CONTADOR_ERRO = 0; End else
                                            IF(XML ='09') Then BEGIN RESULTADO = 'OK - INUTILIZADO';CONTADOR_ERRO = 0; End else
                                            IF(XML ='10') Then BEGIN RESULTADO = 'OK - DENEGADO';   CONTADOR_ERRO = 0; End else
                                                RESULTADO = 'FALHA - DOCUMENTO NAO AUTORIZADO';
                                            SUSPEND;
                                         END
    
                                END
                            END





                         $$IBEC$$*//* VER INUTILIZADAS *//*$$IBEC$$ 
                        if (NF_ID = 0) then
                            BEGIN

                            NF_ID =
                            COALESCE((SELECT INU.ID
                              FROM TBNF_INUTILIZADOS INU, TBESTABELECIMENTO E
                             WHERE INU.ESTABELECIMENTO_ID = E.CODIGO
                               AND E.CNPJ = :ESTABELECIMENTO_CNPJ
                               AND INU.SERIE = :SERIE
                               AND :vSEQ BETWEEN INU.NUMERO_INICIAL AND INU.NUMERO_FINAL
                               AND INU.TIPO = 0  $$IBEC$$*//* ENTRADA *//*$$IBEC$$ 
                               AND COALESCE(INU.PROTOCOLO_INUTILIZACAO,'') <> ''
                               AND INU.ESPECIE = :ESPECIE ),0);

                            if (NF_ID > 0) then
                                BEGIN
                                    FOR SELECT
                                    NUMERO_NOTAFISCAL,
                                    DATA_EMISSAO,
                                    SITUACAO,
                                    XML,
                                    INU_INI,
                                    INU_FIM
                                    FROM (
                                        SELECT FN_LPAD(INU.NUMERO_INICIAL,6,'0')||'-'||
                                               FN_LPAD(INU.NUMERO_FINAL,6,'0') AS NUMERO_NOTAFISCAL,
                                               INU.DATA_EMISSAO,
                                               0 AS SITUACAO,
                                               '09' AS XML,
                                               INU.NUMERO_INICIAL AS INU_INI,
                                               INU.NUMERO_FINAL AS INU_FIM
                                          FROM TBNF_INUTILIZADOS INU
                                         WHERE INU.ID = :NF_ID
                                         )
                                INTO :NUMERO_NF,
                                     :DATA_EMISSAO,
                                     :SITUACAO,
                                     :XML,
                                     :INU_INI,
                                     :INU_FIM
                                  DO BEGIN
                                            IF(XML ='07') Then BEGIN RESULTADO = 'OK - AUTORIZADO'; CONTADOR_ERRO = 0; End else
                                            IF(XML ='08') Then BEGIN RESULTADO = 'OK - CANCELADO';  CONTADOR_ERRO = 0; End else
                                            IF(XML ='09') Then BEGIN RESULTADO = 'OK - INUTILIZADO';CONTADOR_ERRO = 0; End else
                                            IF(XML ='10') Then BEGIN RESULTADO = 'OK - DENEGADO';   CONTADOR_ERRO = 0; End else
                                            RESULTADO = 'FALHA - DOCUMENTO NAO AUTORIZADO';
                                        SUSPEND;
                                     vSEQ = :INU_FIM;
                                     END

                                END
                
                            END

                        if (NF_ID = 0) then
                            BEGIN

                                NUMERO_NF = :vSEQ;
                                --DATA_EMISSAO = null;
                                SITUACAO = 0;
                                XML = '';
                                RESULTADO = 'FALHA - DOCUMENTO INEXISTENTE';
                                CONTADOR_ERRO = CONTADOR_ERRO + 1;
                                SUSPEND;
    
                                IF (CONTADOR_ERRO >= 3000) THEN
                                    BEGIN
                                        NUMERO_NF = 0;
                                        RESULTADO = 'FALHA - MAIS DE 3000 DOCUMENTOS INEXISTENTES!';
                                        SUSPEND;
                                        EXIT;
                                    END 
                
                           END
            
                       vSeq = vSEQ + 1;
                       End  $$IBEC$$*//* WHILE *//*$$IBEC$$ 
            
                   if (vSEQ = vNUMERO_NF) Then
                       Begin
            
                            NUMERO_NF = vNUMERO_NF;
                            DATA_EMISSAO = vDATA_EMISSAO;
                            SITUACAO = vSITUACAO;
                            XML = vXML;
                            IF(vXML ='07') Then BEGIN RESULTADO = 'OK - AUTORIZADO'; CONTADOR_ERRO = 0; End else
                            IF(vXML ='08') Then BEGIN RESULTADO = 'OK - CANCELADO';  CONTADOR_ERRO = 0; End else
                            IF(vXML ='10') Then BEGIN RESULTADO = 'OK - DENEGADO';   CONTADOR_ERRO = 0; End else
                                RESULTADO = 'FALHA - DOCUMENTO NAO AUTORIZADO';
                            SUSPEND;
                        End
        
                   End  $$IBEC$$*//* if (vSEQ < vNUMERO_NF) Then *//*$$IBEC$$ 
            
               vSeq = vSEQ + 1;
               END   $$IBEC$$*//* INTO *//*$$IBEC$$ 

      END  $$IBEC$$*//* TIPO = E */
    END
END
^

SET TERM ; ^

