Jump to content
Fivewin Brasil

oribeiro

Membros
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    35

Posts posted by oribeiro

  1. Xi, meu amigo. Não sei.

    No meu xHarbour funciona redondinho e estou trabalhando agora no ACBrSAT32.Dll e depois vou para o CTe. Daí eu substituirei por completo o uso do ACBrMonitorPLUS.

    Meu xHarbour é o 1.2.3 Build( 20180311)

    As Libs que eu inclui no projeto são essas:

    LIBFILES = $(FWH)\lib\fivehx.lib $(FWH)\lib\fivehc.lib lang.lib vm.lib rtl.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib dbffpt.lib common.lib gtgui.lib codepage.lib ct.lib libeay32.lib ssleay32.lib tipssl.lib tip.lib pcrepos.lib hsx.lib hbsix.lib zlib.lib hbzip.lib png.lib hbzebra.lib $(CC_DIR)\lib\import32.lib $(CC_DIR)\lib\cw32.lib $(CC_DIR)\lib\psdk\msimg32.lib $(CC_DIR)\lib\psdk\psapi.lib $(CC_DIR)\lib\psdk\shell32.lib $(SQL)\sql.lib $(SQL)\libmysql.lib $(SQL)\libpq.lib
     

  2. Pronto! A NFe está 100% funcional com a DLL. Ficou muito rápido!

    Revisei essa classe e incluí algumas funções:

    * ACBrLib.Prg
    * CLASSE para emissão de NFe com a Biblioteca ACBrNFe32.Dll
    * Revisão: Oscar Ribeiro
    
    #include "FiveWin.ch"
    
    #define DLL_CDECL   0x08
    #define DLL_STDCALL 0x20
    #define DLL_SYSTEM  0x04
    #define STR_LEN     256
    #define ACBrLIB     pPath+'ACBrNFe32.dll'
    
    CREATE CLASS ACBrNFe
    
    HIDDEN:
        VAR hHandle
        METHOD CheckResult(hResult)
    
    VISIBLE:
        METHOD New(eArqConfig, eChaveCrypt) CONSTRUCTOR
        DESTRUCTOR Destroy
    
        METHOD Nome
        METHOD Versao
    
        METHOD ConfigLer(eArqConfig)
        METHOD ConfigGravar(eArqConfig)
        METHOD ConfigLerValor(eSessao, eChave)
        METHOD ConfigGravarValor(eSessao, eChave, eValor)
    
        METHOD CarregarXML(eArquivoOuXml)
        METHOD CarregarINI(eArquivoOuIni)
        METHOD ObterXml(AIndex)
        METHOD GravarXml(AIndex, eNomeArquivo, ePathArquivo)
        METHOD ObterIni(AIndex)
        METHOD GravarIni(AIndex, eNomeArquivo, ePathArquivo)
        METHOD CarregarEventoXML(eArquivoOuXml)
        METHOD CarregarEventoINI(eArquivoOuIni)
        METHOD LimparLista()
        METHOD LimparListaEventos()
    
        METHOD Assinar()
        METHOD Validar()
        METHOD ValidarRegrasdeNegocios()
        METHOD VerificarAssinatura()
        METHOD GerarChave(ACodigoUF, ACodigoNumerico, AModelo, ASerie, ANumero, ATpEmi, AEmissao, ACNPJCPF)
        METHOD ObterCertificados()
        METHOD GetPath(tipo)
        METHOD GetPathEvento(aCodEvento)
    
        METHOD StatusServico()
        METHOD Consultar(eChaveOuNFe, AExtrairEventos)
        METHOD ConsultarCadastro(cUF, nDocumento, nIE, sResposta, esTamanho)
        METHOD Inutilizar(ACNPJ, AJustificativa, Ano, Modelo, Serie, NumeroInicial, NumeroFinal)
        METHOD Enviar(ALote, Imprimir, Sincrono, Zipado)
        METHOD ConsultarRecibo(ARecibo)
        METHOD Cancelar(eChave, eJustificativa, eCNPJ, ALote)
        METHOD EnviarEvento(ALote)
    
        METHOD DistribuicaoDFePorUltNSU(acUFAutor, eCNPJCPF, eultNSU)
        METHOD DistribuicaoDFePorNSU(acUFAutor, eCNPJCPF, eNSU)
        METHOD DistribuicaoDFePorChave(acUFAutor, eCNPJCPF, echNFe)
    
        METHOD EnviarEmail(ePara, eChaveNFe, aEnviaPDF, eAssunto, eMensagem, eCc, eAnexos)
        METHOD EnviarEmailEvento(ePara, eChaveEvento, eChaveNFe, aEnviaPDF, eAssunto, eMensagem, eCc, eAnexos)
    
        METHOD Imprimir(cImpressora, nNumCopias, cProtocolo, bMostrarPreview, cMarcaDagua, bViaConsumidor, bSimplificado)
        METHOD ImprimirPDF()
        METHOD ImprimirEvento(eArquivoXmlNFe, eArquivoXmlEvento)
        METHOD ImprimirEventoPDF(eArquivoXmlNFe, eArquivoXmlEvento)
        METHOD ImprimirInutilizacao(eArquivoXml)
        METHOD ImprimirInutilizacaoPDF(eArquivoXml)
    
    END CLASS
    
    METHOD New(eArqConfig, eChaveCrypt) CLASS ACBrNFe
        local hResult, buffer, bufferLen, oErr
        eArqConfig :=if(eArqConfig = nil, pDado+'ACBrLib.ini', eArqConfig)
        eChaveCrypt:=if(eChaveCrypt = nil, '', eChaveCrypt)
        ::hHandle := DllLoad( ACBrLIB )
        if EMPTY(::hHandle) // Eric.Developer: xHarbour retorna 0x00000000
            MsgAlert("Não consegui carregar a biblioteca.","ACBrNFe32")
            RETURN nil
        endif
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Inicializar", hb_StrToUTF8(eArqConfig), hb_StrToUTF8(eChaveCrypt))
        ::CheckResult(hResult)
        RETURN Self
    
    PROCEDURE Destroy CLASS ACBrNFe
        DllCall(::hHandle, DLL_STDCALL, "NFE_Finalizar")
        DllUnload(::hHandle)
        RETURN
    
    METHOD CheckResult(hResult) CLASS ACBrNFe
        local buffer, bufferLen, oErr
        bufferLen := STR_LEN
        buffer    := Space(bufferLen)
        oErr := DllCall(::hHandle, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
        if !Empty(oErr)
           if IsUtf8( buffer )
              buffer := HB_OemToAnsi(HB_UTF8ToStr( buffer ))
           endif
           MsgAlert("Não consegui obter o retorno da biblioteca:"+chr(13)+chr(13)+buffer, "ACBrNFe32: "+Alltrim(Str(oErr)))
        else
           if bufferLen > STR_LEN
              buffer := Space(bufferLen)
              DllCall(::hHandle, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
           endif
        endif
        if IsUtf8( buffer )
           buffer := HB_OemToAnsi(HB_UTF8ToStr( buffer ))
        endif
        RETURN buffer
    
    METHOD Nome CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Nome", @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD Versao CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Versao", @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD ConfigLer(eArqConfig) CLASS ACBrNFe
        local hResult
        eArqConfig :=if(eArqConfig = nil, pDado+'ACBrLib.ini', eArqConfig)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConfigLer", hb_StrToUTF8(eArqConfig))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD ConfigGravar(eArqConfig) CLASS ACBrNFe
        local hResult
        eArqConfig :=if(eArqConfig = nil, pDado+'ACBrLib.ini', eArqConfig)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConfigGravar", hb_StrToUTF8(eArqConfig))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD ConfigLerValor(eSessao, eChave) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConfigLerValor", hb_StrToUTF8(eSessao), hb_StrToUTF8(eChave), @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD ConfigGravarValor(eSessao, eChave, eValor) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConfigGravarValor", hb_StrToUTF8(eSessao), hb_StrToUTF8(eChave), hb_StrToUTF8(eValor))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD CarregarXML(eArquivoOuXml) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_CarregarXML", hb_StrToUTF8(eArquivoOuXml))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD CarregarINI(eArquivoOuIni) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_CarregarINI", hb_StrToUTF8(eArquivoOuIni))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD ObterXml(AIndex) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ObterXml", AIndex, @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD GravarXml(AIndex, eNomeArquivo, ePathArquivo) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_GravarXml", AIndex, hb_StrToUTF8(eNomeArquivo), hb_StrToUTF8(ePathArquivo))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD ObterIni(AIndex) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ObterIni", AIndex, @buffer, @bufferLen)
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD GravarIni(AIndex, eNomeArquivo, ePathArquivo) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_GravarIni", AIndex, hb_StrToUTF8(eNomeArquivo), hb_StrToUTF8(ePathArquivo))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD CarregarEventoXML(eArquivoOuXml) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_CarregarEventoXML", hb_StrToUTF8(eArquivoOuXml))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD CarregarEventoINI(eArquivoOuIni) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_CarregarEventoINI", hb_StrToUTF8(eArquivoOuIni))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD LimparLista() CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_LimparLista")
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD LimparListaEventos() CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_LimparListaEventos")
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD Assinar() CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Assinar")
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD Validar() CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Validar")
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD ValidarRegrasdeNegocios() CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ValidarRegrasdeNegocios")
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD VerificarAssinatura() CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_VerificarAssinatura")
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD GerarChave(ACodigoUF, ACodigoNumerico, AModelo, ASerie, ANumero, ATpEmi, AEmissao, ACNPJCPF) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_GerarChave", ACodigoUF, ACodigoNumerico, AModelo, ASerie, ANumero, ATpEmi, AEmissao, ACNPJCPF, @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD ObterCertificados() CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ObterCertificados", @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD GetPath(tipo)
        local hResult, buffer, bufferLen
        tipo:=if(tipo=nil,0,tipo)
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_GetPath", tipo, @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD GetPathEvento(aCodEvento)
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_GetPathEvento", hb_StrToUTF8(aCodEvento), @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD StatusServico() CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_StatusServico", @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD Consultar(eChaveOuNFe, AExtrairEventos) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        AExtrairEventos := if(AExtrairEventos=nil, .F., AExtrairEventos)
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Consultar", hb_StrToUTF8(eChaveOuNFe), AExtrairEventos, @buffer, @bufferLen)
        if !Empty(buffer)
           if IsUtf8( buffer )
              buffer := HB_OemToAnsi(HB_UTF8ToStr( buffer ))
           endif
           RETURN buffer
        endif
        RETURN ::CheckResult(hResult)
    
    METHOD ConsultarCadastro(cUF, nDocumento) CLASS ACBrNFe // 02-09-2020 Oscar Ribeiro: NFE_ConsultaCadastro(  cUF, nDocumento, nIE, sResposta, esTamanho )
        local hResult, buffer, bufferLen
        cUF       := if(cUF=nil, pEstado, cUF)
        nDocumento:= if(nDocumento=nil, "00000000000000", nDocumento)
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConsultaCadastro", hb_StrToUTF8(cUF), hb_StrToUTF8(nDocumento), .F., @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD Inutilizar(ACNPJ, AJustificativa, Ano, Modelo, Serie, NumeroInicial, NumeroFinal) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Inutilizar", hb_StrToUTF8(ACNPJ), hb_StrToUTF8(AJustificativa), Ano, Modelo, Serie, NumeroInicial, NumeroFinal, @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD Enviar(ALote, Imprimir, Sincrono, Zipado) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        Imprimir := if(Imprimir=nil, .F., Imprimir)
        Sincrono := if(Sincrono=nil, .T., Sincrono)
        Zipado   := if(Zipado=nil, .F., Zipado)
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Enviar", ALote, Imprimir, Sincrono, Zipado, @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD ConsultarRecibo(ARecibo) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConsultarRecibo", hb_StrToUTF8(ARecibo), @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD Cancelar(eChave, eJustificativa, eCNPJ, ALote) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Cancelar", hb_StrToUTF8(eChave), hb_StrToUTF8(eJustificativa), hb_StrToUTF8(eCNPJ), ALote, @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD EnviarEvento(ALote) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_EnviarEvento", ALote, @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD DistribuicaoDFePorUltNSU(acUFAutor, eCNPJCPF, eultNSU) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_DistribuicaoDFePorUltNSU", acUFAutor, hb_StrToUTF8(eCNPJCPF), hb_StrToUTF8(eultNSU), @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD DistribuicaoDFePorNSU(acUFAutor, eCNPJCPF, eNSU) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_DistribuicaoDFePorNSU", acUFAutor, hb_StrToUTF8(eCNPJCPF), hb_StrToUTF8(eNSU), @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD DistribuicaoDFePorChave(acUFAutor, eCNPJCPF, echNFe) CLASS ACBrNFe
        local hResult, buffer, bufferLen
        bufferLen := STR_LEN
        buffer := Space(bufferLen)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_DistribuicaoDFePorChave", acUFAutor, hb_StrToUTF8(eCNPJCPF), hb_StrToUTF8(echNFe), @buffer, @bufferLen)
        RETURN ::CheckResult(hResult)
    
    METHOD EnviarEmail(ePara, eChaveNFe, aEnviaPDF, eAssunto, eMensagem, eCc, eAnexos) CLASS ACBrNFe
        local hResult
        ePara     := if(ePara=nil, "", ePara)
        eChaveNFe := if(eChaveNFe=nil, "", eChaveNFe)
        aEnviaPDF := if(aEnviaPDF=nil, .T., aEnviaPDF)
        eAssunto  := if(eAssunto=nil, "Anexo encontram-se o DANFe e o XML da sua NF-e.", eAssunto)
        eMensagem := if(eMensagem=nil, "Anexo encontram-se o DANFe e o XML da sua NF-e.", eMensagem)
        if !Empty(eMensagem) .and. Left(Upper(eMensagem),6)<>"<HTML>"
           eMensagem := "<html><body>"+ eMensagem +"</body></html>" // Transforma a mensagem em HTML simples
        endif
        eCC       := if(eCC=nil, "", eCC)
        eAnexos   := if(eAnexos=nil, "", eAnexos)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_EnviarEmail", hb_StrToUTF8(ePara), hb_StrToUTF8(eChaveNFe), aEnviaPDF, hb_StrToUTF8(eAssunto), hb_StrToUTF8(eCc), hb_StrToUTF8(eAnexos), hb_StrToUTF8(eMensagem))
        if !Empty(hResult)
           RETURN "Não consegui enviar o email."
        endif
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD EnviarEmailEvento(ePara, eChaveEvento, eChaveNFe, aEnviaPDF, eAssunto, eMensagem, eCc, eAnexos) CLASS ACBrNFe
        local hResult
        ePara     := if(ePara=nil, "", ePara)
        eChaveEvento := if(eChaveEvento=nil, "", eChaveEvento)
        eChaveNFe := if(eChaveNFe=nil, "", eChaveNFe)
        aEnviaPDF := if(aEnviaPDF=nil, .T., aEnviaPDF)
        eAssunto  := if(eAssunto=nil, "Anexo encontram-se o DANFe e o XML da sua NF-e.", eAssunto)
        eMensagem := if(eMensagem=nil, "Anexo encontram-se o DANFe e o XML da sua NF-e.", eMensagem)
        if !Empty(eMensagem) .and. Left(Upper(eMensagem),6)<>"<HTML>"
           eMensagem := "<html><body>"+ eMensagem +"</body></html>" // Transforma a mensagem em HTML simples
        endif
        eCC       := if(eCC=nil, "", eCC)
        eAnexos   := if(eAnexos=nil, "", eAnexos)
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_EnviarEmailEvento", hb_StrToUTF8(ePara), hb_StrToUTF8(eChaveEvento), hb_StrToUTF8(eChaveNFe), aEnviaPDF, hb_StrToUTF8(eAssunto), hb_StrToUTF8(eCc), hb_StrToUTF8(eAnexos), hb_StrToUTF8(eMensagem))
        if !Empty(hResult)
           RETURN "Não consegui enviar o email."
        endif
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD Imprimir(cImpressora, nNumCopias, cProtocolo, bMostrarPreview, cMarcaDagua, bViaConsumidor, bSimplificado) CLASS ACBrNFe
        local hResult
        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
    
    METHOD ImprimirPDF() CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ImprimirPDF")
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD ImprimirEvento(eArquivoXmlNFe, eArquivoXmlEvento) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ImprimirEvento", hb_StrToUTF8(eArquivoXmlNFe), hb_StrToUTF8(eArquivoXmlEvento))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD ImprimirEventoPDF(eArquivoXmlNFe, eArquivoXmlEvento) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ImprimirEventoPDF", hb_StrToUTF8(eArquivoXmlNFe), hb_StrToUTF8(eArquivoXmlEvento))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD ImprimirInutilizacao(eArquivoXml) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ImprimirInutilizacao", hb_StrToUTF8(eArquivoXml))
        ::CheckResult(hResult)
        RETURN nil
    
    METHOD ImprimirInutilizacaoPDF(eArquivoXml) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ImprimirInutilizacaoPDF", hb_StrToUTF8(eArquivoXml))
        ::CheckResult(hResult)
        RETURN nil
    
    *Eof( ACBrLib.Prg )

     

  3. Consegui avançar até o nfe:enviar()

             nfe:=ACBrNFe():New(pDado+"ACBrLib.ini")
             lRet:=nfe:CarregarIni(cAux)
             lRet:=nfe:Assinar()
             lRet:=nfe:Validar()
             lRet:=nfe:Enviar() // NFE_Enviar( (ALote, AImprimir, ASincrono, AZipado, sResposta, esTamanho );

    Onde eu consigo o número do lote que foi validado para o comando Enviar()

  4. Não sei o que estou fazendo de errado, um simples comando como esse abaixo trava a minha aplicação.

       // LÊ UMA TAG DO ARQUIVO ACBRLIB.INI //
       cBuffer := Space( STR_LEN ) // STR_LEN = 256
       oNFe := DllCall( oACBrLib, "DLL_STDCALL", "NFE_ConfigLerValor", "DFe", "ArquivoPFX", cBuffer, STR_LEN)  // ESTÁ TRAVANDO NO RETORNO

     

    Deu ERRO IRRECUPERÁVEL 9015 - hb_vmDo()

    Assinatura do erro:
      Nome do Evento de Problema:    APPCRASH
      Nome do Aplicativo:    TESTACBR.exe
      Versão do Aplicativo:    0.0.0.0
      Carimbo de Data/Hora do Aplicativo:    00000000
      Nome do Módulo de Falhas:    ACBrNFe32.dll
      Versão do Módulo de Falhas:    0.4.6.92
      Carimbo de Data/Hora do Módulo de Falhas:    00000000
      Código de Exceção:    c0000005
      Deslocamento de Exceção:    00045e22
      Versão do sistema operacional:    6.1.7601.2.1.0.18.10
      Identificação da Localidade:    1046
      Informações Adicionais 1:    0a9e
      Informações Adicionais 2:    0a9e372d3b4ad19135b953a78882e789
      Informações Adicionais 3:    0a9e
      Informações Adicionais 4:    0a9e372d3b4ad19135b953a78882e789

  5. Em 26/08/2020 at 21:13, Jorge Andrade disse:

    xRetornoStatusWeb := DllCall( "ACBrNFe32.dll",  "DC_CALL_STD" , "NFE_StatusServico")

    Lembre que, ao vc criar o INI e estiver td certo, vc só precisa carregar ele da próxima vez entendeu? O retorno veja no manual.

     

    Estou a uma semana estudando essa DLL e gostando muito. Vou substituir todos os comandos que utilizo com o monitor pelos da DLL.

    Me diz uma coisa, para eu conseguir uma resposta do NFE_StatusServico, o que eu preciso configurar primeiro? Certificado Digital? UF? Etc. Pergunto isso porque o comando só está me retornando (-10).

  6. Pessoal,

    Vamos implementar essa DLL na aplicação no lugar do ACBrNFeMonitor?

    Estou tentando usar a Classe anexa, mas se não conseguir vou tentar usar diretamente a DLL.

    Estou compilando sem erro e consigo imprimir um XML assim:

       local nfe

       nfe := ACBrNFe():New()

       nfe:ConfigGravarValor("Principal", "LogNivel", "4")
       nfe:ConfigGravarValor("Principal", "LogPath",  "Logs")
       nfe:ConfigGravar()

       nfe:CarregarXML("nfe.xml")

       nfe:Imprimir("", 1, "", "True", "will.jpg", "", "")

       ?nfe:Nome
       ?nfe:Versao
     

    Daí tentei um comando que gera um retorno, mas a resposta está sempre em branco:

          nfe:=ACBrNFe():New()

          ? nfe:StatusServico()
     

    Alguma idéia?

     

     

    acbrlib.prg

  7. Marca,

    Por favor, quando você tiver um tempinho, coloque aqui um exemplo de como fazer um looping passando por todos os registros de uma tabela no Banco SQL e alterando a informação de um campo usando somente comandos nativos.

    Vou testar das duas formas.

    Obrigado.

  8. Pessoal, 

    Como posso fazer essa rotina usando comandos nativos do MYSQL.

    Desse jeito está dando erro na linha do REPLACE.

    Estou usando SQLRDD.

       oSql:=SQLCon(cTipo,cHost,cBase,cUser,cPass)
       DbUseArea(.T.,"SQLRDD",cSql, cAlias, (lExclusive=.F.)) // USE (cSql) NEW SHARED ALIAS (cAlias)
       Select(cAlias)
       (cAlias)->(DbGoTop())
       Do While !(cAlias)->(Eof())
          xNome := LimpaNome((cAlias)->Nome)
          if     !" "$xNome
             // DELETE //
             MSGWAIT("DELETADO: "+xNome, (cAlias)->Nome, 0.1)
             (cAlias)->(DbDelete())
          elseif xNome<>Alltrim((cAlias)->Nome)
             // MODIFICA //
             MSGWAIT(xNome, (cAlias)->Nome, 0.1)
             Replace (cAlias)->Nome With xNome
          endif
          (cAlias)->(DbSkip())
          SySRefresh()
       EndDo

     

  9. João,

    Com SMTPSend.exe eu consegui enviar email de HotMail e OutLook.

    Assim:

    ********************************************************************************************
    Function EnviaHotMail( cDe, cPara, cMensagem, cCC, cBCC, cSMTP, cAssunto, cAnexo, cSenhMail )
    ********************************************************************************************
                TRY
                   cFileName := "htm.txt" // Cria arquivo HTML com a Mensagem
                   MemoWrit(cFileName, cMensagem)
                   cFileTxt  := "cmd.txt" // Cria arquivo TXT para o Comandos
                   cFileRet  := "ret.txt" // Cria arquivo TXT para o Retorno
                   MemoWrit(cFileTxT, "-f"   +cDe       +CRLF+;
                                      "-t"   +cPara     +CRLF+;
                                      "-c"   +cCC       +CRLF+;
                                      "-b"   +cBCC      +CRLF+;
                                      "-h"   +cSMTP     +CRLF+;
                                      "-s"   +cAssunto  +CRLF+;
                                      "-a"   +cAnexo    +CRLF+;
                                      "-mbhi"+cFileName +CRLF+;
                                      "-lu"  +cDe       +CRLF+;
                                      "-lp"  +cSenhMail +CRLF+;
                                      "-mfH"            +CRLF+;
                                      "-dNFSD"          +CRLF )
                   MyRun(pPath+"SmtpSend.Exe -@" + cFileTxt + " >"+cFileRet, 0) // Executa o smtpsend.exe
                   lRet := iif("Message sent!"$memoread(cFileRet), .T., .F.)    // Verifica o Retorno
                   FErase( cFileName )               // Apaga arquivo HTML
                   FErase( cFileTxt  )               // Apaga arquivo TXT
                   FErase( cFileRet  )               // Apaga arquivo Retorno
                   SysRefresh()
                CATCH oError
                   lRet := .F.
                END
                lRet:=.T.
    
    
    ********************************************************************************************
    Function MYRUN( cComando )   // MsgRun(): Executa um comando DOS e espera até terminar.
    ********************************************************************************************
       Local oShell, Ret
       oShell := CreateObject( "WScript.Shell" )
       Ret    := oShell:Run( "%comspec% /c " + cComando, 0, .t. )
       oShell := Nil
    Return If( Ret=0, .t., .f. )

     

×
×
  • Create New...