Jump to content
Fivewin Brasil

oribeiro

Membros
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    35

Posts posted by oribeiro

  1. Boa tarde, meu amigo.
    Fiz um teste com o BaixaXml e achei fantástico. Acho que conseguirei adaptá-lo para o meu sistema. Parabéns pelo trabalho e obrigado.

    Eu tentei baixar um XML emitido pelo próprio cliente e deu esse erro:
    NFE.DistribuicaoDFePorChaveNFe("SP","35968671000125","35210135968671000125550000000001021090001029")
    ERRO: Rejeicao: CNPJ-Base consultado difere do CNPJ-Base do Certificado Digital

    Isso significa que eu não conseguirei baixar os XML emitidos pelo próprio cliente?
     

  2. Depois que eu passei a configurar o certificado usando as funções do ACBrLib o erro acabou.
    Dentro do programa eu faço desse jeito:


    Uma única vez eu crio o parâmetro, assim:

               oDll:=ACBrNFe():New(pDado+"ACBrLib.ini")
    
               /////////////////////////
               // PRINCIPAL           //
               /////////////////////////
               oDll:ConfigGravarValor("Principal", "LogPath",         cPastaTmp)
               oDll:ConfigGravarValor("Principal", "LogNivel",              "0") // 0-Nenhum  4-Mostra Tudo
               oDll:ConfigGravarValor("Principal", "CodificacaoResposta",   "0") // 0-UTF8 1-ANSI
    
               /////////////////////////
               // DF-e                //
               /////////////////////////
               oDll:ConfigGravarValor("DFe", "ArquivoPFX",  Alltrim(pDFeCerti) ) // pCertDig
               oDll:ConfigGravarValor("DFe", "Senha",       Alltrim(pDFeSenha) ) // pCertSen
               oDll:ConfigGravarValor("DFe", "NumeroSerie", Alltrim(pDFeNumSer)) // É necessário ter gravado o certificao antes
               oDll:ConfigGravarValor("DFe", "VerificarValidade",           "1")
               oDll:ConfigGravarValor("DFe", "SSLCryptLib",                 "3") // Default=1 -> 0=cryNone 1=cryOpenSSL "3=cryWinCrypt"
               oDll:ConfigGravarValor("DFe", "SSLHttpLib",                  "2") // Default=3 -> 0=httpNone 1=httpWinINet "2=httpWinHttp" 3=httpOpenSSL
               oDll:ConfigGravarValor("DFe", "SSLXmlSignLib",               "4") // Defailt=4 -> 0=xsNone "4=xsLibXml2"
               oDll:ConfigGravarValor("DFe", "UF",                      pEstado)
               oDll:ConfigGravarValor("DFe", "TimeZone.Modo",               "0")
               oDll:ConfigGravarValor("DFe", "TimeZone.Str",                 "")
    
               /////////////////////////
               // NF-e                //
               /////////////////////////
               oDll:ConfigGravarValor("NFe", "Visualizar",                  "0") // 1-Mostra as mensagens de retorno 0-Não mostra
               oDll:ConfigGravarValor("NFe", "Ambiente",                    "0") // 0-producao 1-homologação
               oDll:ConfigGravarValor("NFe", "FormaEmissao",                "0") // 0-Normal 4-Contingência SVC
               oDll:ConfigGravarValor("NFe", "PathArquivoMunicipios", cPastACBr+"MunIBGE") // Criar uma pasta com esses Schemas e incluir no instalador
               oDll:ConfigGravarValor("NFe", "PathSchemas",           cPastACBr+"Schemas")
    //         oDll:ConfigGravarValor("NFe", "IniServicos",           cPastACBr+"INIS")
               oDll:ConfigGravarValor("NFe", "PathNFe",               cPastaXml)
               oDll:ConfigGravarValor("NFe", "PathEvento",            cPastaXml)
               oDll:ConfigGravarValor("NFe", "PathInu",               cPastaXml)
               oDll:ConfigGravarValor("NFe", "PathSalvar",            cPastaTmp)
               oDll:ConfigGravarValor("NFe", "Download.PathDownload", cPastaXml)
    
               oDll:ConfigGravarValor("NFe", "Download.SepararPorNome",     "0")
               oDll:ConfigGravarValor("NFe", "SalvarGer",                   "1")
               oDll:ConfigGravarValor("NFe", "ExibirErroSchema",            "1")
               oDll:ConfigGravarValor("NFe", "RetirarAcentos",              "1")
               oDll:ConfigGravarValor("NFe", "RetirarEspacos",              "1")
               oDll:ConfigGravarValor("NFe", "IdentarXML",                  "1")
    
               oDll:ConfigGravarValor("NFe", "ValidarDigest",               "0")
               oDll:ConfigGravarValor("NFe", "IdCSC",                  "000001")
               oDll:ConfigGravarValor("NFe", "CSC", "92052b84-e609-436c-8c27-a3922e509922")
               oDll:ConfigGravarValor("NFe", "ModeloDF",                    "0") // 0=NFe 1=NFCe
               oDll:ConfigGravarValor("NFe", "VersaoDF",                    "3") // 3=Versao 4.00
               oDll:ConfigGravarValor("NFe", "AtualizarXMLCancelado",       "1")
               oDll:ConfigGravarValor("NFe", "VersaoQRCode",                "2")
               oDll:ConfigGravarValor("NFe", "CamposFatObrigatorios",       "1") // adicionar tag
               oDll:ConfigGravarValor("NFe", "TagNT2018005",                "1") // 0 nunca 1 producao 2 somente homologacao 3 sempre
    
               oDll:ConfigGravarValor("NFe", "SalvarWS",                    "1")
               oDll:ConfigGravarValor("NFe", "Timeout",                  "5000")
               oDll:ConfigGravarValor("NFe", "TimeoutPorThread",            "0")
    
               oDll:ConfigGravarValor("NFe", "SSLType",                     "5") // Default=0 -> 0=LT_all 1=LT_SSLv2 2=LT_SSLv3 3=LT_TLSv1 4=LT_TLSv1_1 5=LT_TLSv1_2 6=LT_SSHv2
               oDll:ConfigGravarValor("NFe", "AjustaAguardaConsultaRet",    "1") //sim
               oDll:ConfigGravarValor("NFe", "AguardarConsultaRet",         "0")
               oDll:ConfigGravarValor("NFe", "IntervaloTentativas",      "1000")
               oDll:ConfigGravarValor("NFe", "Tentativas",                  "5")
    
               oDll:ConfigGravarValor("NFe", "SalvarArq",                   "1") // ARQUIVOS DE EVENTOS
               oDll:ConfigGravarValor("NFe", "AdicionarLiteral",            "0")
               oDll:ConfigGravarValor("NFe", "SepararPorCNPJ",              "0")
               oDll:ConfigGravarValor("NFe", "SepararPorModelo",            "0")
    
               oDll:ConfigGravarValor("NFe", "SepararPorAno",               "0")
               oDll:ConfigGravarValor("NFe", "SepararPorMes",               "0")
               oDll:ConfigGravarValor("NFe", "SepararPorDia",               "0")
               oDll:ConfigGravarValor("NFe", "SalvarEvento",                "1")
               oDll:ConfigGravarValor("NFe", "SalvarApenasNFeProcessadas",  "1")
    
               oDll:ConfigGravarValor("NFe", "EmissaoPathNFe",              "0") // por data de emissão
               oDll:ConfigGravarValor("NFe", "NormatizarMunicipios",        "1")
    
               oDll:ConfigGravarValor("NFe", "IdCSRT",                       "")
               oDll:ConfigGravarValor("NFe", "CSRT",                         "")
    
               // NF-e - DANFE - Configuração da Impressão //
               oDll:ConfigGravarValor("DANFE", "Impressora",  Alltrim(pNFeImpr))
               oDll:ConfigGravarValor("DANFE", "MostraPreview", iif(pNFePrev,"1","0"))
               oDll:ConfigGravarValor("DANFE", "MostraSetup",               "0")
               oDll:ConfigGravarValor("DANFE", "MostraStatus",              "0")
               oDll:ConfigGravarValor("DANFE", "PathLogo",    Alltrim(pNFeLogo))
               oDll:ConfigGravarValor("DANFE", "PathPDF",             cPastaTmp)
               oDll:ConfigGravarValor("DANFE", "UsaSeparadorPathPDF",       "0")
               oDll:ConfigGravarValor("DANFE", "NomeDocumento",              "")
               oDll:ConfigGravarValor("DANFE", "Copias",                     "")
               oDll:ConfigGravarValor("DANFE", "MargemInferior",         "0,10")
               oDll:ConfigGravarValor("DANFE", "MargemSuperior",         "0,00")
               oDll:ConfigGravarValor("DANFE", "MargemEsquerda",         "0,00")
               oDll:ConfigGravarValor("DANFE", "MargemDireita",          "0,00")
    //         oDll:ConfigGravarValor("DANFE", "CasasDecimais.Formato",  "0,00")
    //         oDll:ConfigGravarValor("DANFE", "CasasDecimais.MaskqCom", "0,00")
    //         oDll:ConfigGravarValor("DANFE", "CasasDecimais.MaskvUnCom","0,00")
    //         oDll:ConfigGravarValor("DANFE", "CasasDecimais.qCom",     "0,00")
    //         oDll:ConfigGravarValor("DANFE", "CasasDecimais.vUnCom",   "0,00")
    //         oDll:ConfigGravarValor("DANFE", "TipoDANFE",                 "1")
    //         oDll:ConfigGravarValor("DANFE", "ImprimeTotalLiquido",        "")
    //         oDll:ConfigGravarValor("DANFE", "ExpandeLogoMarca",          "1") // 0-expande 1-nao
    //         oDll:ConfigGravarValor("DANFE", "ExpandeLogoMarca.Altura",   "0") // Define a altura da logo marca expandida.
    //         oDll:ConfigGravarValor("DANFE", "ExpandeLogoMarca.Esquerda", "0") // Define a posição a esquerda da logomarca expandida.
    //         oDll:ConfigGravarValor("DANFE", "ExpandeLogoMarca.Topo",     "0") // Define a posição ao topo da logomarca expandida.
    //         oDll:ConfigGravarValor("DANFE", "ExpandeLogoMarca.Largura",  "0") // Define a largura da logomarca expandida.
    //         oDll:ConfigGravarValor("DANFE", "ExpandeLogoMarca.Dimensionar","0") // Define a logomarca expandida deve esticar no tamanho total ou não. 0 = Não 1 = Sim
    //         oDll:ConfigGravarValor("DANFE", "ExpandeLogoMarca.Esticar",  "0") // Define a logomarca expandida deve esticar no tamanho total ou não. 0 = Não 1 = Sim
    
               // NF-e - Configuração do Email //
               oDll:ConfigGravarValor("Email", "Nome", Alltrim(TrocAcentos(pNome)))
               oDll:ConfigGravarValor("Email", "Servidor",                pSmtp)
               oDll:ConfigGravarValor("Email", "Conta",                  pEmail)
               oDll:ConfigGravarValor("Email", "Usuario",                pEmail)
               oDll:ConfigGravarValor("Email", "Senha",               pSenhMail)
               oDll:ConfigGravarValor("Email", "Porta", Alltrim(Str(pPortMail)))
               oDll:ConfigGravarValor("Email", "SSL",     iif(pSsl="S","1","0"))
               oDll:ConfigGravarValor("Email", "Codificacao",                "")
               oDll:ConfigGravarValor("Email", "TLS",                       "0")
               oDll:ConfigGravarValor("Email", "Timeout",                   "0")
               oDll:ConfigGravarValor("Email", "Confirmacao",               "0")
               oDll:ConfigGravarValor("Email", "ConfirmacaoEntrega",        "0")
               oDll:ConfigGravarValor("Email", "SegundoPlano",              "0")
               oDll:ConfigGravarValor("Email", "Tentativas",                "1")
               oDll:ConfigGravarValor("Email", "IsHTML",                    "0")
               oDll:ConfigGravarValor("Email", "Priority",                  "1")
    
               oDll:ConfigGravarValor("Emissor", "CNPJ",       StrNum(pCGC,.F.))
               oDll:ConfigGravarValor("Emissor", "RazaoSocial",  Alltrim(TrocAcentos(pNome )))
               oDll:ConfigGravarValor("Emissor", "NomeFantasia", Alltrim(TrocAcentos(pAbrev)))
    
               // Salva as configurações //
               oDll:ConfigGravar(pDado+"ACBrLib.ini")
    
               // Finaliza a DLL //
               oDll:Destroy()
               oDll:=nil

     

    Depois, eu consulto o SERVIÇO SEFAZ assim:
     

          //////////////////////////////////////
          // INICIA A NFe COM O ACBrNFe32.DLL //
          //////////////////////////////////////
          nfe:=ACBrNFe():New(pDado+"ACBrLib.ini")
    
          //////////////////////////////////////
          // CONSULTA O SERVIÇO SEFAZ         //
          //////////////////////////////////////
          lRet := ""
          nfe:ConfigGravarValor("NFE", "Visualizar", "1") // 1-Mostra as mensagens de retorno 0-Não mostra
          lRet:=nfe:StatusServico()

     

  3. Tente deixar essa opção com o número 4 que ele mostra tudo o que está acontecendo e retorna o erro em detalhes.
             oDll:ConfigGravarValor("Principal", "LogNivel", "4") // 0-Nenhum 4-Mostra Tudo

    Eu uso assim e está funcionando:
             nfe:ConfigGravarValor("NFE", "Visualizar", "1") // 1-Mostra as mensagens de retorno 0-Não mostra
             lRet:=nfe:StatusServico()
     

  4. Crie em tempo de execução

               oDll:=ACBrNFe():New(pDado+"ACBrLib.ini")
    
               /////////////////////////
               // PRINCIPAL           //
               /////////////////////////
               oDll:ConfigGravarValor("Principal", "LogPath",         cPastaTmp)
               oDll:ConfigGravarValor("Principal", "LogNivel",              "0") // 0-Nenhum  4-Mostra Tudo
               oDll:ConfigGravarValor("Principal", "CodificacaoResposta",   "0") // 0-UTF8 1-ANSI
    
               /////////////////////////
               // DF-e                //
               /////////////////////////
               oDll:ConfigGravarValor("DFe", "ArquivoPFX",  Alltrim(pDFeCerti) ) // pCertDig
               oDll:ConfigGravarValor("DFe", "Senha",       Alltrim(pDFeSenha) ) // pCertSen
               oDll:ConfigGravarValor("DFe", "NumeroSerie", Alltrim(pDFeNumSer)) // É necessário ter gravado o certificao antes
               oDll:ConfigGravarValor("DFe", "VerificarValidade",           "1")
               oDll:ConfigGravarValor("DFe", "SSLCryptLib",                 "3") // Default=1 -> 0=cryNone 1=cryOpenSSL "3=cryWinCrypt"
               oDll:ConfigGravarValor("DFe", "SSLHttpLib",                  "2") // Default=3 -> 0=httpNone 1=httpWinINet "2=httpWinHttp" 3=httpOpenSSL
               oDll:ConfigGravarValor("DFe", "SSLXmlSignLib",               "4") // Defailt=4 -> 0=xsNone "4=xsLibXml2"
               oDll:ConfigGravarValor("DFe", "UF",                      pEstado)
               oDll:ConfigGravarValor("DFe", "TimeZone.Modo",               "0")
               oDll:ConfigGravarValor("DFe", "TimeZone.Str",                 "")

    A senha precisa ser gravada pelo ACBrLib, pois ela é criptografada

  5. Boa tarde, Rochinha.
    Eu baixei os fontes do ACBrLib e compilei com o Lazarus.
    Está tudo funcionando perfeitamente, inclusive o envio direto para a impressora, sem o preview.

    Aqui as LIBs do ACBr de NF-e, CT-e, SAT e Mail estão rodando 100%

    É muito fácil baixar os fontes e criar as DLLs com o Lazarus. 

  6. Pessoal,

    Não consigo imprimir NFe e SAT dentro do mesmo programa usando as DLL.

    Não sei se é um problema local ou se é na DLL.

    É possível vocês testarem aí e me dizer se o problema acontece aí também?

    Se possível, compilem o ACBrTest.prg no seu Fivewin para xHarbour e veja se consegue imprimir a NFe e o SAT sem fechar o programa.

    Coloquem na mesma pasta o ACBrNFe32.dll e o ACBrS?AT32.dll.

    Obrigado.

    #include 'FIVEWIN.CH'
    #define DLL_CDECL   0x08
    #define DLL_STDCALL 0x20
    #define DLL_SYSTEM  0x04
    #define STR_LEN     256
    
    function Main()
       local oWnd
       define window oWnd from 5,5 to 30,85 title "ACBrLib Teste"
       @ 3,10 BUTTON "Imprime NF-e" size 100,50 OF oWnd ACTION ImprimirNFE()
       @ 3,40 BUTTON "Imprime SAT"  size 100,50 OF oWnd ACTION ImprimirSAT()
       set message of oWnd to "Teste ACBrLib" date time noinset
       activate window oWnd centered
    return nil
    
    static function ImprimirNFE(eArquivoOuXml, cImpressora, nNumCopias, cProtocolo, bMostrarPreview, cMarcaDagua, bViaConsumidor, bSimplificado)
        local hResult, bufferLen, buffer, oErr
        local oDll := DllLoad( 'ACBrNFe32.dll' )
        eArquivoOuXml   := if(eArquivoOuXml=nil, "acbrnfe.xml", eArquivoOuXml)
        cImpressora     := if(cImpressora=nil, "", cImpressora)
        nNumCopias      := if(nNumCopias=nil, 1, nNumCopias)
        cProtocolo      := if(cProtocolo=nil, "", cProtocolo)
        bMostrarPreview := if(bMostrarPreview=nil, "True", bMostrarPreview)
        cMarcaDagua     := if(cMarcaDagua=nil, "", cMarcaDagua)
        bViaConsumidor  := if(bViaConsumidor=nil, "", bViaConsumidor)
        bSimplificado   := if(bSimplificado=nil, "", bSimplificado)
        hResult := DllCall(oDll, DLL_STDCALL, "NFE_Inicializar", hb_StrToUTF8("ACBrLib.Ini"), hb_StrToUTF8(""))
        hResult := DllCall(oDll, DLL_STDCALL, "NFE_CarregarXML", hb_StrToUTF8(eArquivoOuXml))
        hResult := DllCall(oDll, DLL_STDCALL, "NFE_Imprimir", hb_StrToUTF8(cImpressora), nNumCopias, hb_StrToUTF8(cProtocolo), hb_StrToUTF8(bMostrarPreview), hb_StrToUTF8(cMarcaDagua), hb_StrToUTF8(bViaConsumidor), hb_StrToUTF8(bSimplificado))
        if !Empty(hResult)
           bufferLen := STR_LEN
           buffer    := Space(bufferLen)
           oErr := DllCall(oDll, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
           MsgStop(buffer, "Erro: "+Str(hResult))
        endif
        DllCall(oDll, DLL_STDCALL, "NFE_Finalizar")
        DllUnload(oDll)
    return nil
    
    static function ImprimirSAT(eArquivoOuXml, cImpressora)
        local hResult, bufferLen, buffer, oErr
        local oDll := DllLoad( 'ACBrSat32.dll' )
        eArquivoOuXml   := if(eArquivoOuXml=nil, "acbrsat.xml", eArquivoOuXml)
        cImpressora     := if(cImpressora=nil, "", cImpressora)
        hResult := DllCall(oDll, DLL_STDCALL, "SAT_Inicializar", hb_StrToUTF8("ACBrLib.Ini"), hb_StrToUTF8(""))
        hResult := DllCall(oDll, DLL_STDCALL, "SAT_ImprimirExtratoVenda", hb_StrToUTF8(eArquivoOuXml), hb_StrToUTF8(cImpressora))
        if !Empty(hResult)
           bufferLen := STR_LEN
           buffer    := Space(bufferLen)
           oErr := DllCall(oDll, DLL_STDCALL, "SAT_UltimoRetorno", @buffer, @bufferLen)
           MsgStop(buffer, "Erro: "+Str(hResult))
        endif
        DllCall(oDll, DLL_STDCALL, "SAT_Finalizar")
        DllUnload(oDll)
    return nil

     

    ACBrTest.zip

  7. 8 horas atrás, sygecom disse:

    Pessoal,

    Alguem sabe se já tem NFSe no ACBRLIB / DLL ?

    Lá no fórum esse assunto está em alta. Tem vários programadores usando e testando. Acho que em breve teremos uma LIB dessa função. Se você compilar os fontes acho que já dá para usar.

  8. As rotinas são as das DLLs correspondentes. Não faço nada de diferente. Se eu só imprimo SAT não dá erro. Se eu só imprimo NFe não dá erro. Mas se eu imprimo um e depois vou imprimir o outro dá erro -10 retorno do comando e não imprime.

    Segue:

    SAT

    METHOD ImprimirExtratoVenda(eArqXMLVenda, eNomeImpressora) CLASS ACBrSat
        local hResult
        eNomeImpressora := if(eNomeImpressora=nil, "", eNomeImpressora)
        hResult := DllCall(::hHandle, DLL_STDCALL, "SAT_ImprimirExtratoVenda", hb_StrToUTF8(eArqXMLVenda), hb_StrToUTF8(eNomeImpressora))
        ::CheckResult(hResult)
        RETURN nil

    NFE

    METHOD Imprimir(cImpressora, nNumCopias, cProtocolo, bMostrarPreview, cMarcaDagua, bViaConsumidor, bSimplificado) CLASS ACBrNFe
        local hResult
        cImpressora     := if(cImpressora=nil, "", cImpressora)
        nNumCopias      := if(nNumCopias=nil, 1, nNumCopias)
        cProtocolo      := if(cProtocolo=nil, "", cProtocolo)
        bMostrarPreview := if(bMostrarPreview=nil, "True", bMostrarPreview)
        cMarcaDagua     := if(cMarcaDagua=nil, "", cMarcaDagua)
        bViaConsumidor  := if(bViaConsumidor=nil, "", bViaConsumidor)
        bSimplificado   := if(bSimplificado=nil, "", bSimplificado)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Imprimir", hb_StrToUTF8(cImpressora), nNumCopias, hb_StrToUTF8(cProtocolo), hb_StrToUTF8(bMostrarPreview), hb_StrToUTF8(cMarcaDagua), hb_StrToUTF8(bViaConsumidor), hb_StrToUTF8(bSimplificado))
        ::CheckResult(hResult)
        RETURN nil

     

×
×
  • Create New...