Clipper On Line • Ver Tópico - ACBrLib
Mudar para estilo Clássico
Discussão sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (ECF, TEF, SINTEGRA, NF-e, ECD, EFD, etc.)
Postar uma resposta

ACBrLib

29 Jun 2020 13:30

Ola!
Pois é, agora eles estão ficando igual a SefazClass de 10 anos atrás, que aliás, nem é DLL, é no próprio fonte.

Santo de casa não faz milagre. Só não usei pq na época bem antes já usava a AcbrMonitor.
Mas voltando ao assunto pq, estão achando que estou denegrindo a DLL ?
O objetivo do post não é esse. O objetivo é saber o que vamos fazer, adicionar mudar no sistema para usar a DLL.
Quais as vantagens de adicionar essa DLL ? Se compensa ressuscitar um modulo meu, de ECF de padaria/supermercado...
É o que estou tentando ver nessas minhas postagens.
Eu tenho 1 EXE sem DLL. Só vou tirar NFCe por 1 CPU, mas vou precisar mudar deixar isso aberto para vários emitir.
Interface de Programação de Aplicações ou Interface de Programação de Aplicação), cuja sigla API provém do Inglês Application Programming Interface, é um ...

Não enxergo a DLL como API, falta algumas características para ser API. No caso as telas que uma API faz e linguagem própria.
Quem disse que compensa não explicou como está fazendo.
Sim compensa usar a DLL é legal, pagam suporte etc... Mas cadê, tá fazendo como ?
Tem um sistema aparte ou apenas um módulo único EXE com tudo ? Usam DBF ou algum SGBD ?

Saudações,
Itamar M. Lins Jr.

ACBrLib

29 Jun 2020 13:52

Postaram há tempos atrás, mas diferente daquele link que mostrei.
Como eu disse.... quando se trata de algo que se pode ganhar dinheiro, parece que a ajuda para.
Talvez porque pagam pra receber ajuda, acabam não ajudando.... rs

ACBrLib

29 Jun 2020 13:59

Usando as Classes de Alto Nível.
Para os usuários SAC existe um recurso ainda mais poderoso para se trabalhar com o ACBrLib, que seriam, as Classes de Alto Nível as quais farão a comunicação entre sua aplicação e as bibliotecas ACBr, com elas é possível utilizar os comandos de forma mais simples sem qualquer preocupação com as chamadas diretas das bibliotecas ACBr.


Pelo jeito, pagando, dá pra usar do jeito que foi mostrado.
Talvez parecido com o uso de ADO, com win_OleCreateObject() e usar a classe Delphi como se fosse parte do Harbour.
Mas se é comercial.... não pode ser distribuído.

ACBrLib

29 Jun 2020 14:12

Se postarem o uso real, poderíamos criar as classes pra fazer exatamente igual, sem precisar pagar.
Até ajudo, mesmo sem usar, mas não vou ficar pesquisando isso, e muito menos ficar testando.

No ACBR com certeza não vão mostrar, porque isso tiraria a necessidade de pagar pela outra DLL.

Recapitulando:

Tem a DLL grátis, de livre distribuição.
Pode ser criada uma classe baseada nela, TALVEZ equivalente à DLL paga.
Podemos fazer isso juntos, com vantagem pra todos, ou cada um que se vire.

E aí? o fórum é uma comunidade, ou é cada um por si?

ACBrLib

29 Jun 2020 14:18

Ola!
que seriam, as Classes de Alto Nível as quais farão a comunicação entre sua aplicação e as bibliotecas ACBr,

Bem que gostaria de ver essa classe para Harbour, se é diferente do que usamos, se bem que a classe da ACBrLib para Harbour está no SVN, e é igual a todas as outras que já existem e usamos.

Saudações,
Itamar M. Lins Jr.

ACBrLib

29 Jun 2020 14:22

Chamou atenção no fonte VB de exemplo

Código:
Public Sub InicializarLib(Optional ByVal eArqConfig As String = "", _
                          Optional ByVal eChaveCrypt As String = "")

    SetLibPath
    Dim retorno As Long

    retorno = NFE_Inicializar(eArqConfig, eChaveCrypt)
    CheckResult retorno
End Sub


precisa chave criptográfica pra liberar o uso?

http://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/VB6/NFe/Imports/ACBrNFe.cls

ACBrLib

29 Jun 2020 14:26

Em Harbour.... apesar de esquisito...

Código:
METHOD New(eArqConfig, eChaveCrypt) CLASS ACBrNFe
    local hResult, buffer, bufferLen, oErr

    eArqConfig :=if(eArqConfig = nil, '', eArqConfig)
    eChaveCrypt:=if(eChaveCrypt = nil, '', eChaveCrypt)

    ::hHandle := DllLoad(ACBrLIB)
    if EMPTY(::hHandle) // Eric.Developer: xHarbour retorna 0x00000000
        oErr := ErrorNew()
        oErr:Severity := ES_ERROR       
        oErr:Description := "Erro a carregar a dll [" + ACBrLIB + "]"
        Throw(oErr)
    endif
    hResult := DllCall(::hHandle, DLL_OSAPI, "NFE_Inicializar", hb_StrToUTF8(eArqConfig), hb_StrToUTF8(eChaveCrypt))
    ::CheckResult(hResult)
    RETURN Self


http://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/Harbour/NFe/ACBrNFe.prg

ACBrLib

29 Jun 2020 14:39

Sei lá...
Não gostei, mas vai ficar mais rápido que EXE separado.
E com certeza os fontes são direcionados pra Xharbour, e poderiam ser muito melhores.
Não só em fonte Harbour, mas na DLL, que talvez aqui seja o uso da grátis, e não da versão paga.

Código:
Function Main ()
   local nfe
   
   nfe := ACBrNFe():New()

   nfe:ConfigGravarValor("Principal", "LogNivel", "4") // logParanoico     
   nfe:ConfigGravarValor("Principal", "LogPath", hb_dirBase() + "Logs")
   nfe:ConfigGravar()
   
   nfe:CarregarXML(hb_dirBase() + "nfe.xml")

   nfe:Imprimir("", 1, "", "True", hb_dirBase() + "rftd.jpg", "", "")
   
   ?nfe:Nome
   ?nfe:Versao
   
return NIL

ACBrLib

29 Jun 2020 14:50

teste rápido: coisa de principiante.

declarou #include com nome de pasta
ACBrNFe.prg:1: error F0029 Can't open #include file '..\Comum\acbrlib.ch'

variáveis pra nada
ACBrNFe.prg:93: warning W0003 Variable 'BUFFER' declared but not used in function '77:ACBRNFE_NEW'
ACBrNFe.prg:93: warning W0003 Variable 'BUFFERLEN' declared but not used in function '77:ACBRNFE_NEW'

Além da LIB de compatibilidade XHarbour, que já é problema, ainda tem a lib de compatibilidade xbase++

c:/temp/ACBrNFe.o:ACBrNFe.c:(.data+0x3e8): undefined reference to `HB_FUN_DLLLOAD'
c:/temp/ACBrNFe.o:ACBrNFe.c:(.data+0x448): undefined reference to `HB_FUN_THROW'
c:/temp/ACBrNFe.o:ACBrNFe.c:(.data+0x458): undefined reference to `HB_FUN_DLLCALL'
c:/temp/ACBrNFe.o:ACBrNFe.c:(.data+0x488): undefined reference to `HB_FUN_DLLUNLOAD'
hbmk2: Hint: Add input file 'hbxpp.hbc' for missing Harbour function(s):
DllUnload(), DllCall(), DllLoad()
hbmk2: Hint: Add input file 'xhb.hbc' for missing Harbour function(s): Throw()

compilando com compatibilidade xharbour, xbase++ e desativando checagens do Harbour, compilou o exemplo.

Provavelmente vai gerar problemas com outras coisas, mas compilou.

ACBrLib

29 Jun 2020 15:05

Ola!
Isso eu já tinha visto... Tô levantado a questão aqui no grupo...
Pq estão usando a contrib do Pritpal Bedi para isso ?

Saudações,
Itamar M. Lins Jr.

ACBrLib

29 Jun 2020 22:00

Boa noite, acredito que no tempo em que vivemos tecnologicamente as SoftHouse estão começando ou já começamos a enfrentar um problema em que palavras não vou conseguir explicar para os senhores porem vou colocar um link de uma palestra da Gertech onde perto do final o palestrante vai clarear o que já vem acontecendo e a importância da nossa soberania na cadeia da automação comercial. https://www.youtube.com/watch?v=WAYhjxNUgqo , neste link os senhores vão ver o que vem acontecendo nas falsas promessas destas empresas grandes com soluções milagrosas para emissão de documentos eletrônicos para SoftHouse!!!

ACBrLib

29 Jun 2020 22:26

Itamar M. Lins Jr. escreveu:Isso eu já tinha visto... Tô levantado a questão aqui no grupo...
Pq estão usando a contrib do Pritpal Bedi para isso ?


Suposição apenas:
Infelizmente, para quem olha o Harbour, a versão oficial é 3.0
Provavelmente por isso acaba ficando com fonte problemático.

ACBrLib

27 Out 2020 10:07

Pessoal,
Espero que todos estejam bem.
Estou migrando do ACBrMonitor para o ACBrLib e estou com um sério problema.
Não consigo imprimir NFe e SAT sem antes sair da aplicação.
Por favor, deem uma olhada onde estou errando.

Código:
#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

ACBrLib

27 Out 2020 10:11

Ahh, utilizo o FHW + xHarbour.

Segue o programa teste compilado.

Ao executar, tente imprimir NFe e depois SAT ou vice-versa sem sair do programa.

ACBrLib

27 Out 2020 14:54

Olá!

vc está usando isso nfe:LimparLista()
antes de enviar o camando pra imprimir ?

Paulo
Postar uma resposta