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...
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.
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.