Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Bloco de código
titleExemplo EPC - nota-fiscal_data.p
collapsetrue
/*****************************************************************************************************
 ** OBJETIVO..: Retornar o conteúdo do arquivo XML de uma NF-e
 ** 
 ** IMPORTANTE: o conteúdo deste programa não poderá ser alterado para manter
 **             seu correto funcionamento.
 **             O único ponto que deverá ser alterado pelo cliente é no que diz respeito à busca do 
 **             arquivo XML da nota fiscal recebida através do buffer da temp-table tt-nota-fiscal
 ** 
*****************************************************************************************************/
{include/i-epc200.i1 nota-fiscal_data}

DEFINE INPUT        PARAMETER p-ind-event AS CHAR NO-UNDO.
DEFINE INPUT-OUTPUT PARAMETER TABLE FOR tt-epc. 

DEFINE TEMP-TABLE tt-nota-fiscal   NO-UNDO
    FIELD nr-nota-fis              AS CHARACTER
    FIELD serie                    AS CHARACTER
    FIELD cod-esp                  AS CHARACTER
    FIELD nr-parcelas              AS INTEGER
    FIELD nr-fatura                AS CHARACTER
    FIELD dt-emis-nota             AS DATE
    FIELD cod-estabel              AS CHARACTER
    FIELD cod-empresa              AS CHARACTER
    FIELD ind-tip-nota             AS CHARACTER
    FIELD cod-chave-aces-nf-eletro AS CHARACTER
    FIELD cod-emitente             AS INTEGER
    FIELD xml-nota-fiscal          AS CLOB
    FIELD dt-atualiza              AS DATE
    FIELD hr-atualiza              AS CHARACTER
    FIELD idi-sit-nf-eletro        AS INTEGER.

DEFINE VARIABLE h-bf-tt-nota-fiscal AS   HANDLE                  NO-UNDO.
DEFINE VARIABLE lXmlNfe             AS   LONGCHAR                NO-UNDO.
DEFINE VARIABLE cArquivoXML         AS   CHARACTER               NO-UNDO.
DEFINE VARIABLE c-cod-estabel       LIKE nota-fiscal.cod-estabel NO-UNDO.
DEFINE VARIABLE c-serie             LIKE nota-fiscal.serie       NO-UNDO.
DEFINE VARIABLE c-nr-nota-fis       LIKE nota-fiscal.nr-nota-fis NO-UNDO.
DEFINE VARIABLE c-cod-dir-histor-xml AS  CHARACTER               NO-UNDO.

IF  p-ind-event = "Retorna_Conteudo_XML" THEN DO:
    FIND FIRST tt-epc 
         WHERE tt-epc.cod-event     = p-ind-event 
           AND tt-epc.cod-parameter = "tt-nota-fiscal":U NO-LOCK NO-ERROR.

    IF AVAIL tt-epc THEN DO:
        ASSIGN h-bf-tt-nota-fiscal = WIDGET-HANDLE(tt-epc.val-parameter) NO-ERROR.

        IF ERROR-STATUS:ERROR THEN
            RETURN "OK":U.

        IF VALID-HANDLE(h-bf-tt-nota-fiscal) THEN DO:
            ASSIGN c-cod-estabel = h-bf-tt-nota-fiscal:BUFFER-FIELD("cod-estabel"):BUFFER-VALUE
                   c-serie       = h-bf-tt-nota-fiscal:BUFFER-FIELD("serie"):BUFFER-VALUE 
                   c-nr-nota-fis = h-bf-tt-nota-fiscal:BUFFER-FIELD("nr-nota-fis"):BUFFER-VALUE.
    
            FOR FIRST nota-fiscal
                WHERE nota-fiscal.cod-estabel = c-cod-estabel
                  AND nota-fiscal.serie       = c-serie
                  AND nota-fiscal.nr-nota-fis = c-nr-nota-fis NO-LOCK:
                
                /***************************************************************************************************************************
                ** BUSCA DO DIRETÓRIO + ARQUIVO XML REFERENTE À NOTA FISCAL 
                ** ALTERAR SOMENTE NESTE BLOCO ENTRE OS COMENTÁRIOS
                
                ** Colocar aqui a lógica para localizar o XML da nota fiscal posicionada
                ** IMPORTANTE! A variável "cArquivoXML" deverá ser atualizada com o diretório + arquivo XML referente à nota fiscal 
                **
                ** Ex.: ASSIGN cArquivoXML = "\\servidor\diretorio\XML_NFe\311815320201214172138.xml".
                ** 
                ** Exemplo de busca efetuada pelo TSS no produto padrão:
                
                   FOR FIRST param-nf-estab 
                       WHERE param-nf-estab.cod-estabel = nota-fiscal.cod-estabel NO-LOCK:
                        ASSIGN c-cod-dir-histor-xml = param-nf-estab.cod-caminho-xml.
                   END.  
                
                   ASSIGN c-nr-nota-xml = TRIM(nota-fiscal.cod-estabel) +                              
                                          SUBSTR(nota-fiscal.cod-chave-aces-nf-eletro,23,3) + 
                                          TRIM(STRING(INTEGER(SUBSTR(nota-fiscal.cod-chave-aces-nf-eletro,26,9)),">>9999999")) + ".XML"
                       
                          c-chave-xml = TRIM(nota-fiscal.cod-chave-aces-nf-eletro) + ".XML".    
                          
                    IF  SEARCH(c-cod-dir-histor-xml + "/" + c-nr-nota-xml) <> ? THEN
                        ASSIGN cArquivoXML = c-cod-dir-histor-xml + "/" + c-nr-nota-xml.
                  
                    IF  SEARCH(c-cod-dir-histor-xml + "/" + c-chave-xml) <> ? THEN
                        ASSIGN cArquivoXML = c-cod-dir-histor-xml + "/" + c-chave-xml.
                
                **  
                ** NÃO ALTERAR A PARTIR DESTE PONTO PARA BAIXO!        
                ****************************************************************************************************************************/
    
                IF  cArquivoXML <> ""
                AND search(cArquivoXML) <> ? THEN DO:
                    COPY-LOB FROM FILE cArquivoXML TO lXmlNfe.
                END.
    
                IF lXmlNfe <> "" THEN
                   ASSIGN h-bf-tt-nota-fiscal:BUFFER-FIELD("xml-nota-fiscal"):BUFFER-VALUE = lXmlNfe.
            END.
        END.
    END.
END.

...