Página 5 de 7

ACBrLib

Enviado: 02 Nov 2020 09:50
por rubens
Bom dia...
No anexo que baixei aqui não tem prg não...
Os teste que fiz no executável aqui... só imprime um independente da ordem... quando vai imprimir o outro dá pau...
Lista.JPG
att..
Rubens

ACBrLib

Enviado: 02 Nov 2020 11:59
por JoséQuintas
Agora faça outro teste.
Salve quantos XML quiser em uma pasta, e nessa pasta chame o test.exe, e acione a primeira opção, de gerar danfe.
test.zip
(769.65 KiB) Baixado 525 vezes

Código: Selecionar todos

FUNCTION TestDanfe()

   LOCAL oDanfe, oFile, oFileList, cFilePdf

   oFileList := Directory( "*.xml" )
   FOR EACH oFile IN oFileList
      oDanfe := hbNfeDaGeral():New()
      cFilePdf := Substr( oFile[ F_NAME ], 1, At( ".", oFile[ F_NAME ] ) ) + "pdf"
      fErase( cFilePdf )
      //oDanfe:cLogoFile := JPEGImage()
      oDanfe:cDesenvolvedor := "www.josequintas.com.br"
      oDanfe:ToPDF( oFile[ F_NAME ], cFilePdf )
      ? oFile[ F_NAME ], oDanfe:cRetorno
      PDFOpen( cFilePdf )
   NEXT

   RETURN NIL

FUNCTION PDFOpen( cFile )

   IF File( cFile )
      WAPI_ShellExecute( NIL, "open", cFile, "",, WIN_SW_SHOWNORMAL )
      Inkey(1)
   ENDIF

   RETURN NIL

ACBrLib

Enviado: 03 Nov 2020 10:57
por rubens
Bom dia...
Quintas...
Usei muito a sua solução.. e foi muito satisfatória e sou muito grato a você.
Não querendo cuspir no prato que comi... mas fica muito dependente de você...
Qualquer alteração que precisa a gente precisa mudar os fontes... e daí não consegue acompanhar as suas atualizações..
Daí o interesse pelo ACBRLIB ou ACBRDLL.. Já estou usando para impressão e colocarei para emitir nfce. Então quanto mais gente aderir e pudermos ajudar uns aos outros menos bugs aparecerão nos clientes..
Houve mudança em algo, tipo layout etc o time do acbr faz as mudanças e a gente só baixa a DLL de novo..
E isso vale para toda a parte fiscal.. .

Att..

Rubens

ACBrLib

Enviado: 03 Nov 2020 12:03
por oribeiro
Rubens,
Bom dia. Me ajuda a resolver esse erro. Não consigo imprimir NFe e SAT no mesmo programa, sem ter que sair dele antes. É ruim heim! Risos
Segue o programa:

Código: Selecionar todos


#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_CDECL, "NFE_Inicializar", hb_StrToUTF8("ACBrLib.Ini"), hb_StrToUTF8(""))
    hResult := DllCall(oDll, DLL_CDECL, "NFE_CarregarXML", hb_StrToUTF8(eArquivoOuXml))
    hResult := DllCall(oDll, DLL_CDECL, "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_CDECL, "NFE_UltimoRetorno", @buffer, @bufferLen)
       MsgStop(buffer, "Erro: "+Str(hResult))
    endif
    DllCall(oDll, DLL_CDECL, "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_CDECL, "SAT_Inicializar", hb_StrToUTF8("ACBrLib.Ini"), hb_StrToUTF8(""))
    hResult := DllCall(oDll, DLL_CDECL, "SAT_ImprimirExtratoVenda", hb_StrToUTF8(eArquivoOuXml), hb_StrToUTF8(cImpressora))
    if !Empty(hResult)
       bufferLen := STR_LEN
       buffer    := Space(bufferLen)
       oErr := DllCall(oDll, DLL_CDECL, "SAT_UltimoRetorno", @buffer, @bufferLen)
       MsgStop(buffer, "Erro: "+Str(hResult))
    endif
    DllCall(oDll, DLL_CDECL, "SAT_Finalizar")
    DllUnload(oDll)
return nil




ACBrLib

Enviado: 03 Nov 2020 16:58
por rubens
Boa tarde...
Pelo que vi de diferente aí do que eu uso.... é só a liberação da DLL...
Tenta depois do dllunload aí colocar

oDll := NIL

Não consigo compilar seu exemplo agora... mas a noite vou compilar (com harbour sem lib) e te falo o resultado...

Att..
Rubens

ACBrLib

Enviado: 03 Nov 2020 17:45
por oribeiro
Obrigado Rubens, pela sua disposição em ajudar.
Não havia colocado oDll:=Nil antes porque a variável está definida como local em cada função.
Mesmo assim, eu coloquei agora, compilei e infelizmente o problema persiste.
Só dá para imprimir o outro documento se sair do programa e entrar novamente. Parece que algo está ficando na memória depois da impressão.
Aguardo a sua compilação a noite para ver se descobre algo que possa ser feito.

ACBrLib

Enviado: 03 Nov 2020 19:05
por JoséQuintas
Vai no chute....

Tente uma coisa: usar variáveis diferentes das usadas nas chamadas.
Algumas podem ser passadas como pointer, como referência com a variável da DLL.
De repente, alguma dessas variáveis podem estar prendendo a DLL.

Ou outra tentativa:
Uma vez carregada a DLL, não descarregue a não ser no final do programa.
Se o problema está em carregar/descarregar, estaria sendo eliminado isso.

ACBrLib

Enviado: 04 Nov 2020 09:40
por MSDN
Minha sugestão é que olhe com atenção o arquivo INI, ali é que realmente importa no caso do ACBr LIB, pois ele configura o comportamento da DLL.
Link com as informações possíveis no INI : https://acbr.sourceforge.io/ACBrLib/Con ... eca17.html
Muitas vezes, a falta de informar no INI que era para salvar um arquivo pode ocasionar erros incompreensíveis no ACBr ( o Quintas vai comentar sobre isso...rss ), já passei por isso, tanto com o ACBr LIB como programando em Delphi com ACBr.

ACBrLib

Enviado: 04 Nov 2020 11:20
por Itamar M. Lins Jr.
Olá!
Infelizmente(no caso de testes) ele usar xHarbour com Fivewin.
Acredito que aqui usamos Harbour com Minigui, Hwgui.
Dificulta fazermos testes. Um exemplo CRU(sem lib visual) seria mais fácil para todos testarem.

Saudações,
Itamar M. Lins Jr.

ACBrLib

Enviado: 04 Nov 2020 11:45
por Itamar M. Lins Jr.
Olá!
Não querendo cuspir no prato que comi... mas fica muito dependente de você...
Qualquer alteração que precisa a gente precisa mudar os fontes... e daí não consegue acompanhar as suas atualizações..
Daí o interesse pelo ACBRLIB ou ACBRDLL.. Já estou usando para impressão e colocarei para emitir nfce. Então quanto mais gente aderir e pudermos ajudar uns aos outros menos bugs aparecerão nos clientes..
Não vejo dessa forma.
e daí não consegue acompanhar as suas atualizações..
Este pensamento se aplica para o ACBr. Quem está acompanho o "calhamaço" de atualizações que sofre quase diariamente o ACBr ?

A SEFAZCLASS não tem essas mudanças. Apenas correções simples e possíveis atualizações ditadas pelo governo.

Para nós que usamos xBase o projeto do Quintas é bem melhor, pq quanto mais programadores xBase usarem, melhor será(ia). Ainda mais que as correções e adições no código é de fácil entendimento para qualquer programador xBase e usando ACBr é exatamente o contrário. Usando ACBr, estamos dependentes dos programadores de outra linguagem que não é a nossa padrão.
Infelizmente se não cobrar e ter uma equipe com marketing etc... não é valorizado. (Santo de casa não faz milagres.)
Se tivesse BUGs no projeto ou o projeto deixasse a desejar, tudo bem, mais é exatamente o contrário, é bem documentado, os fontes são de fácil entendimento, qualquer pessoa pode fazer forks e mandar paths.
Quando comecei com NFe não tinha o SEFAZCLASS, infelizmente. Mas vejo que é muito mais leve que a ACBRLIB.
Lembrando que pode ser criada a SEFAZCLASS LIB/DLL. Que seria muito mais simples para nós.

Lembrando: Aqui nesse senário não tem segredos, usamos o que MANDA a legislação, toda correção e adição partem do governo, não é exclusividade do pessoal do ACBr.

Agora, podemos nos sentir mais seguros e cômodos usando ACBr, porque estamos pagando.

Saudações,
Itamar M. Lins Jr.

ACBrLib

Enviado: 04 Nov 2020 13:25
por MSDN
Itamar chegou dando uma voadora e um mata-leão....e tem razão dessa vez !
Eu estudei e fiz muitos e muitos testes para conseguir usar a DLL do Projeto ACBr e emitir NFC-e para o sistema de restaurante que vendo no Mercado Livre.
Ficou uma beleza, é muito rápido o processo de enviar o XML e receber a resposta, não tenho do que me queixar...mas....
1 - Eu tive que fazer um cadastro no site do ACBr com meu CNPJ para ter 15 dias de acesso grátis aos arquivos que são obtidos de forma paga, por isso consegui ter acesso à DLL e fazer os testes necessários para poder ter o sistema OK, após esse período vc não tem mais acesso e pode escolher entre os planos mensais, de 3 meses, de 6 meses ou de 1 ano, sendo que caso queira pagar o valor do plano mensal e ter acesso total por 30 dias corridos ao site e baixar o que precisar nesse período, e depois não pagar mais e só voltar dali a uns 4 meses e pagar novamente o valor mensal, pode ser feito.
No sistema de restaurante anteriormente eu usava a Sefazclass do Quintas para enviar e receber o retorno da Sefaz, no caso da emissão de NFC-e, e a diferença é somente em velocidade, mais nada, o XML é todo criado usando o que o Quintas disponibilizou, então, no fringir do "ovos", o que eu vi nos meus testes ? A Sefazclass usa CAPICOM que só roda no Windows para fazer a comunicação com a Sefaz, e outra DLL para assinar o XML, o ACBr não usa CAPICOM, utiliza outras DLL que funcionam tanto em Windows como Linux, e que são mais rápidas que a CAPICOM, fora isso, no ACBr vc precisa ter a pasta Schemas para que ele valide o XML que vc fez contra as "matrizes" para ver se tudo está ok, mas esse serviço é totalmente dispensável se vc como programador fizer o que está escrito no site da Sefazclass, que é ler a documentação oficial do governo e entender de uma vez por todas como deve dispor as informações dentro do XML, pq criar o XML é a coisa mais fácil do mundo, o problema todo é entender o que e como colocar dentro do XML.
RESUMINDO - eu já programei com ACBr no Delphi para NF-e e NFC-e, e vendo o projeto ACBr LIB que usa DLL, ficou claro que o que falta para a Sefazclass decolar é só trocar o CAPICOM por outra DLL (a usada pelo ACBr).
Tanto o ACBr como os componentes da Tecnospeed por exemplo, não criam o XML pra vc, eles só cuidam de enviar e dar retorno do que foi enviado, a parte mais dificil de todo o processo é entender as regras fiscais para montar o XML, e não enviar ele para a Receita !!!!
De minha parte, quero ver se ainda este ano consigo dar inicio nos testes com Sefazclass+SSL, e claro, tendo sucesso vou passar pro Quintas disponibilizar no Git da Sefazclass.

ACBrLib

Enviado: 04 Nov 2020 15:00
por oribeiro
Grande Quintas,
Foi só não descarregar a DLL que resolveu o meu problema.
A sua sugestão foi certeira!
Muitíssimo obrigado.

ACBrLib

Enviado: 05 Nov 2020 13:16
por Itamar M. Lins Jr.
Olá!
quero ver se ainda este ano consigo dar inicio nos testes com Sefazclass+SSL,
Aguardando.
Será bom para a SEFAZCLASS, não sabia dessa limitação, fui olhar os fontes e só funciona com CAPICOM e está desfasado mesmo.
Bom também que o
oribeiro escreveu:Grande Quintas,
Foi só não descarregar a DLL que resolveu o meu problema.
A sua sugestão foi certeira!
Muitíssimo obrigado.
resolveu o problema dele.

Saudações,
Itamar M. Lins Jr.

ACBrLib

Enviado: 07 Nov 2020 00:13
por rochinha
Amiguinhos,

Sei que resolveu seu problema. Mas como o uso de carregamentos de DLL/OCX geralmente faço no corpo principal uma unica vez para evitar travamentos pense nas seguintes mudanças:

Código: Selecionar todos

#include 'FIVEWIN.CH'
#define DLL_CDECL   0x08
#define DLL_STDCALL 0x20
#define DLL_SYSTEM  0x04
#define STR_LEN     256
	 
function Main()
   local oWnd
   public oACBrNFe32 := DllLoad( 'ACBrNFe32.dll' )
   public oACBrSat32 := DllLoad( 'ACBrSat32.dll' )
   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 := oACBrNFe32 // DllLoad( 'ACBrNFe32.dll' )
...	 

static function ImprimirSAT(eArquivoOuXml, cImpressora)
    local hResult, bufferLen, buffer, oErr
    local oDll := oACBrSat32 // DllLoad( 'ACBrSat32.dll' )
...
Assim o carregamento estará na memória sempre mas a chamada poderá ocorrer quantas vezes necessárias sem precisar descarregar.

ACBrLib

Enviado: 07 Nov 2020 05:38
por oribeiro
Grande Rochinha,
Muito obrigado pela dica.
No meu sistema, eu estou utilizando três classes, uma para cada DLL: NFe, SAT e CTe. Agora estão todas funcionando 100%. Se alguém desejar utilizá-las, avise que eu disponibilizo.
Um abraço a todos.