Árvore de páginas

Versões comparadas

Chave

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

...

  • Ter os XMLs das notas fiscais armazenados nos diretórios padrão do produto, para as soluções padrão da TOTVS, que são TSS e Neogrid. Caso seja utilizado alguma outra solução para o envio das notas fiscais a SEFAZ ou caso utilize as soluções padrão com algum tipo de customização, ficará sob responsabilidade do cliente a construção de uma EPC para buscar os XMLs das notas fiscais. Para estes casos a TOTVS irá fornecer um modelo de EPC, caso o cliente queira desenvolver. Haverá ainda a possibilidade de contratação da nossa Fábrica de Software para construção da EPC.


Informações
titleImportante

Esta EPC deverá ser vinculada no programa "nota-fiscal_data" através da rotina "Manutenção de Programa - men\men012aa.r" do Foundation, campo "Programa UPC" conforme mostra a imagem abaixo:

Image Added


  • Modelo EPC a ser utilizada de forma específica para busca de XML das Notas Fiscais Eletrônicas (clicar em "Expandir Origem")
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.

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".
                ** 
                **1) 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.
                **
                **
                **2) Exemplo de busca efetuada pelo TC2 no produto padrão: 
                    FOR FIRST param-gener NO-LOCK 
                        WHERE param-gener.cod-chave-1 = "param-geral-tc":U 
                        AND   param-gener.cod-param   = "dir-doctos-lidos":U /*Pasta Received*/ : 
        
                        ASSIGN c-cod-dir-histor-xml = param-gener.cod-valor .
            
                        IF  SUBSTRING(c-cod-dir-histor-xml, LENGTH(c-cod-dir-histor-xml), 1) <> "\" THEN
                            ASSIGN c-cod-dir-histor-xml = c-cod-dir-histor-xml + "\".
                        ASSIGN c-cod-dir-histor-xml = c-cod-dir-histor-xml + "RECEIVED\".
    
                    END.
    
                    bloco_leitura:
                    FOR EACH  integr-totvs-colab 
                        WHERE integr-totvs-colab.cod-edi   = "170" 
                        AND   integr-totvs-colab.cod-docto = nota-fiscal.cod-chave-aces-nf-eletro
                        AND   integr-totvs-colab.log-lido  = yes NO-LOCK:
    
                        EMPTY TEMP-TABLE tt-comunica.
                        {cdp/cd0590.i2 "tt-comunica" "integr-totvs-colab"}
                        
                        if  tt-comunica.cStat = "100" then  do:
                            assign cArquivoXML = c-cod-dir-histor-xml + "\" + trim(ENTRY(2, integr-totvs-colab.cod-msg, "|")).
                            leave bloco_leitura.
                        END.
                        
                    end.
                  
                ** 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.

CERTIFICADO NO PROGRESS

A conexão realizada com o Totvs Apps utiliza o protocolo seguro HTTPS, por este motivo, para que seja possível realizar a conexão, é necessário que o Progress possua instalado o certificado correspondente.

...