oribeiro Posted December 28, 2020 Report Share Posted December 28, 2020 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. rochinha 1 Quote Link to comment Share on other sites More sharing options...
vilian Posted January 4, 2021 Report Share Posted January 4, 2021 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 ? Quote Link to comment Share on other sites More sharing options...
vilian Posted January 5, 2021 Report Share Posted January 5, 2021 Bom dia Amigos, Já entendi que o problema está na configuração do ACBrLib.ini. O que vocês definem nele ? Poderiam postar um exemplo de ACBrLib.ini ? Quote Link to comment Share on other sites More sharing options...
oribeiro Posted January 5, 2021 Report Share Posted January 5, 2021 Vilian, tudo bem? O ACBrLib cria um arquivi .INI padrão e funcional. Daí você só altera o que precisar. Quote Link to comment Share on other sites More sharing options...
vilian Posted January 5, 2021 Report Share Posted January 5, 2021 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. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted January 5, 2021 Report Share Posted January 5, 2021 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 Quote Link to comment Share on other sites More sharing options...
vilian Posted January 5, 2021 Report Share Posted January 5, 2021 Perfeito. Era isso mesmo! O acesso ao certificado já funcionou, obrigado Agora quando tento verificar o status do serviço ( NFE_StatusServico ) está retornando o seguinte: -10, Access Violation. Saberia me dizer o pq ? Quote Link to comment Share on other sites More sharing options...
oribeiro Posted January 5, 2021 Report Share Posted January 5, 2021 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() Quote Link to comment Share on other sites More sharing options...
oribeiro Posted January 5, 2021 Report Share Posted January 5, 2021 Essa classe está redondinha. Se preferir, trabalhe com ela. ACBrNFe.prg Quote Link to comment Share on other sites More sharing options...
vilian Posted January 5, 2021 Report Share Posted January 5, 2021 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... Quote Link to comment Share on other sites More sharing options...
oribeiro Posted January 5, 2021 Report Share Posted January 5, 2021 Eu tive esse erro no início e era o certificado digital que eu não estava conseguindo configurar. Quote Link to comment Share on other sites More sharing options...
vilian Posted January 5, 2021 Report Share Posted January 5, 2021 e como vc resolveu ? Quote Link to comment Share on other sites More sharing options...
oribeiro Posted January 5, 2021 Report Share Posted January 5, 2021 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() Quote Link to comment Share on other sites More sharing options...
vilian Posted January 6, 2021 Report Share Posted January 6, 2021 Valeu ! Obrigado Quote Link to comment Share on other sites More sharing options...
vilian Posted January 6, 2021 Report Share Posted January 6, 2021 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 rochinha 1 Quote Link to comment Share on other sites More sharing options...
oribeiro Posted January 6, 2021 Report Share Posted January 6, 2021 Muito boa a sua dica Vilian. Eu preferi utilizar classes e não tive esse problema, mas, quem for utilizar função vai precisar dessa sua informação. Obrigado meu amigo. O erro que estava dando resolveu? Quote Link to comment Share on other sites More sharing options...
vilian Posted January 6, 2021 Report Share Posted January 6, 2021 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 ? Quote Link to comment Share on other sites More sharing options...
oribeiro Posted January 6, 2021 Report Share Posted January 6, 2021 Não fiz a NFCe ainda. Só fiz NFe, SAT e CTe Quote Link to comment Share on other sites More sharing options...
rochinha Posted January 6, 2021 Report Share Posted January 6, 2021 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? Quote Link to comment Share on other sites More sharing options...
vilian Posted January 7, 2021 Report Share Posted January 7, 2021 Obrigado Rochinha, Vou testar aqui. Aproveitando... Vocês já conseguiram pegar os dados do certificado (ex: Validade) como ? Quote Link to comment Share on other sites More sharing options...
qiinfo Posted April 1, 2021 Report Share Posted April 1, 2021 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. Quote Link to comment Share on other sites More sharing options...
macs Posted April 5, 2021 Report Share Posted April 5, 2021 Alguém já tem a classe pronta pra utilização da ACBrLib.dll que possa compartilhar? Quote Link to comment Share on other sites More sharing options...
infosys2 Posted October 9, 2021 Report Share Posted October 9, 2021 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 ? Quote Link to comment Share on other sites More sharing options...
oribeiro Posted October 10, 2021 Report Share Posted October 10, 2021 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() Quote Link to comment Share on other sites More sharing options...
vilian Posted July 7, 2022 Report Share Posted July 7, 2022 Boa Tarde Amigos, Vcs sabem me dizer se existe algum recurso na ACBrLib para exibir a lista de certificados instalados em um Micro ? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.