Jump to content
Fivewin Brasil

ACBRLIB ou melhor ACBRDLL


Jorge Andrade

Recommended Posts

Boa Tarde Amigos,
Estou fazendo os primeiros testes com a ACBrLib e estou com um problema na utilização da função NFE_StatusServico(), que sempre retorna um código -10, Indicando que houve erro ao consultar o status de serviço. Colocando o nível de log em 4, consegui  visualizar a seguinte mensagem:

 SetRetorno(-10, WebService Consulta Status serviço:
- Inativo ou Inoperante tente novamente.
DadosPFX, ArquivoPFX, URLPFX ou NumeroSerie não especificados !)

Acredito que o erro esteja acontecendo por causa da falta dos dados do certificado, mas não consegui identificar como definir isso com a ACBrLib. Poderiam me ajudar ?
 

Link to comment
Share on other sites

Tudo Bem Oscar, e com vc ?
Sim, percebi que o ACBRLib cria um arquivo .INI, mas aqui não funcionou :(
Acredito que falta definir algum parâmetro, ou tenho algum parâmetro definido errado, uma vez que não consegue acessar o certificado.

[DFe]
SSLCryptLib=3
SSLHttpLib=2
SSLXmlSignLib=4
UF=PA
TimeZone.Modo=0
TimeZone.Str=
URLPFX=
ArquivoPFX=c:\tec2000\memory71\37874051000152.pfx
DadosPFX=
Senha=12345
NumeroSerie=
VerificarValidade=1

Definido assim, está gerando uma mensagem de erro, informando que a senha do certificado está errada, mas não está. Uso esse certificado, com essa senha,  normalmente coma dll da flexdocs.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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()
 

Link to comment
Share on other sites

Obrigado Oscar,
Eu já estou fazendo assim. Segue o log detalhado:

05/01/21 15:50:46:184 - NFE_StatusServico
05/01/21 15:50:46:189 - Travar
05/01/21 15:50:46:792 - Destravar
05/01/21 15:50:46:808 -    SetRetorno(-10, Access violation)
05/01/21 15:50:52:594 - LIB_Finalizar
05/01/21 15:50:52:603 - Finalizar

Ainda acho que é algo faltando na configuração...

Link to comment
Share on other sites

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()

 

Link to comment
Share on other sites

Boa Tarde Amigos,
Só a título de informação, quem pretender usar a ACBRLib declarando as funções com o DLL32, deve modificar as funções que retornam dados do seguinte modo:

De:
DLL32 FUNCTION NFE_StatusServico( param1 AS STRING, param2 AS LONG ) AS LONG PASCAL FROM "NFE_StatusServico" LIB oACBrNFe32

Para:
DLL32 FUNCTION NFE_StatusServico( @param1 AS STRING, @param2 AS LONG ) AS LONG PASCAL FROM "NFE_StatusServico" LIB oACBrNFe32

Link to comment
Share on other sites

Amiguinhos,

Citar

Sim, resolveu com essa modificação. Aproveitando... Não encontrei nada ainda sobre a geração do QRCODE para NFCe. Vc sabe como a ACBrLib gera ele ?

Pelo que pude testar da impressão dos danfes se eu pegar um XML padrão 55 e trocar para 65 ele emite um DANFe NFC-e bunitim com QRCode. Não fiz nenhuma configuração só adcionei o ACBrLib.ini que encontrei aqui ou ali, principalmente porque não vi alguma interface para configurá-lo e ele é diferente do .ini do Monitor padrão.

Eu entendi a sua indagação?

Link to comment
Share on other sites

  • 2 months later...

Olá Vilian,

Caso não tenha conseguido recuperar a data de validade do certificado, você consegue esta informação através do método: "ObterCertificados"

No meu caso o alterei a classe para retornar o Buffer com as informações do certificado assim:


METHOD ObterCertificados( cBuffer ) CLASS ACBrNFe

    local nResult, nBufferLen

    nBufferLen := STR_LEN
    cBuffer    := space( nBufferLen )
    nResult    := ::MyDllCall( "NFE_ObterCertificados", @cBuffer, @nBufferLen )

return ::CheckResult( nResult )

 

cDadosCert := ::oObj:ObterCertificados( @cBuffer )

Rossine.

 

Link to comment
Share on other sites

  • 6 months later...
Em 05/01/2021 at 15:35, oribeiro disse:

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

Como você consegue pegar o numero de serie do certificado digital  ? 

Link to comment
Share on other sites

Boa tarde amigo,

Para obter o certificado eu faço assim:
     

      oDll:=ACBrNFe():New(pDado+"ACBrLib.ini")
      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"
      ret:=oDll:ObterCertificados()



 

Link to comment
Share on other sites

  • 8 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...