-
Total de ítens
252 -
Registro em
-
Última visita
Contact Methods
-
Website URL
http://www.oasysitu.com
Últimos Visitantes
1.765 visualizações
oribeiro's Achievements
-
oribeiro started following Erro no ACBrNFCeDANFeFPDF ao criar a DLL no Lazarus
-
Erro no ACBrNFCeDANFeFPDF ao criar a DLL no Lazarus
um tópico no fórum postou oribeiro NFC-e - Nota Fiscal do Consumidor Eletrônica
Pessoal, Fui atualizar as DLLs hoje no lázaro e não consegui criar o ACBrNFe32.DLL Está dando erro na linha 51 do ACBrLibNFeDataModule.pad(51,3) Fatal: Impossivel localizar ACBrNFCeDANFeFPDF do Inspetor de projeto. Poderiam me ajudar, por favor? -
Rafael, Encontrei uma solução. Se eu não descarregar a biblioteca da memória, ou seja se eu não usar o DllUnload( oDll ), funciona tudo perfeitamente! Essas bibliotecas da ACBr são um show. Muito obrigado.
-
Obrigado Daniel, eu não sei nem por onde começar a mexer nos fontes e só falta isso para começarmos a utilizar as DLL em vez do monitor. As DLLs ficaram muito boas, o processo fica muito rápido dentro da aplicação sem a necessidade da troca de arquivos com o monitor. Parabéns aos desenvolvedores pelo excelente trabalho.
-
Rafael, Coloquei o problema no site ClipperBr e no do Fivewin e todos estão com o mesmo problema. Não conseguimos imprimir NFe e SAT no mesmo sistema sem precisar sair e entrar novamente. Alguma coisa fica na memória quando se usa o comando imprime dentro de um DLL do ACBr que impede a impressão em outra DLL do próprio ACBr. Via programação já tentei de tudo.
-
Bom dia, Rafael. Estou feliz pelo seu envolvimento nesse assunto e pelo seu interesse em ajudar. Nós ainda vamos chegar lá. Risos Eu troquei para CDECL mas deu o mesmo resultado. Notei que qualquer outra função das DLLs funcionam em conjunto, por exemplo: Posso enviar email pelas duas DLLs no mesmo progrma, enviar NFe e logo depois criarCFe. Não dá erro. O único problema é a impressão. Não consigo ImprimirNFe e depois imprimir o ExtratoSAT sem ter que sair do programa e entrar novamente. Eu tenho algum problema somente com a impressão que parece deixar algo preso na memória que causa esse impedimento. #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 Tentei com os três e tentei colocar a NFe com um código e o SAT com outro. O resultado foi o mesmo. #define DLL_CDECL 0x08 #define DLL_STDCALL 0x20 #define DLL_SYSTEM 0x04
-
Rafael, deixa eu comentar algo positivo: Coloquei esse problema no fórum do Fivewin para ver se alguém dá alguma luz sobre o que pode estar interferindo no bom funcionamento da DLL nessa plataforma. Quem sabe alguma alma boa nos dá alguma luz.
-
Meu amigo, aí ficou difícil heim! Parece que o problema está com o uso da DLL com o Fivewin para xHarbour. O pior é que eu não sei nem por onde começar a procurar a solução porque lá no fórum do Fivewin parece que não estão utilizando ainda a DLL. Eu queria deixar tudo funcionando para incentivá-los porque me parece ser muito superior ao uso do monitor. Além das duas DLLs: ACBrNFe32.dll e ACBrSAT32.dll, há alguma outra DLL ou LIB que precisa estar na mesma pasta do programa? Notei no seu video que há outras DLLs lá.
-
Rafael, Muito obrigado pelo seu esforço em me ajudar. Coloquei numa pasta o aplicativo que lhe enviei com as duas DLLs e executei. Montei um vídeo para você ver o que acontece aqui em qualquer equipamento que eu executo esse mesmo exemplo. Video_Exemplo.zip
-
Rafael, Não estou imprimindo o logo nem na DANFe nem no extrato do SAT, não dá erro quando eu só imprimo NFe ou só imprimo SAT, mas de qualquer forma, eu segui a sua orientação e tirei o path do logo do ACBRLib.ini. Meu programa exemplo é muito simples mas eu não enviei as DLL juntas para não disponibilizá-las aqui no fórum, achei que não poderia fazer isso. Mas se você colocar as duas DLLs ACBRNFE32.DLL e ACBRSAT32.DLL na mesma pasta onde você abrir o programa que lhe enviei, acho que conseguirá executar. Testei aqui em vários equipamentos e ele roda. Segue o código que escrevi. #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 Imprimir() @ 3,40 BUTTON "Imprime SAT" size 100,50 OF oWnd ACTION ImprimirExtratoVenda() set message of oWnd to "Teste ACBrLib" date time noinset activate window oWnd centered return nil function Imprimir(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 function ImprimirExtratoVenda(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
-
Rafael, Baixei todos os fontes e compilei com o Lazarus, realmente notei que você alterou alguns fontes do ACBrPosPrinter e também do Sat, mas o erro continua o mesmo. Se eu imprimo o SAT e depois vou imprimir a NFe dá erro: "Failet to create win32 control, error: 0". Você pode, por favor, colocar as suas novas DLLs na mesma pasta que a aplicação anexa e rodar para verificar o erro? samples.zip
-
Boa tarde, meu amigo. Obrigado. Se eu pegar os fontes do trunk2 e compilar é a mesma coisa que baixar a DLL no fórum do ACBr?
-
Rafael, Apenas para te dar uma informação adicional, eu terminei hoje a rotina de Conhecimento de Transporte com a ACBrCTe32.DLL e o erro de impressão é o mesmo, ou seja, se eu imprimo um CT-e, não consigo imprimir depois uma NF-e nem um SAT sem antes sair do sistema e entrar novamente. Para te manter posicionado, hoje eu tentei usar todos os comandos de limpeza de memória e de DLL carregadas, e também tentei fazer a chamada da lib PosPrinter após a impressão da NFe para ver se libera o SAT, mas não deu. * oDll := DllLoad( 'ACBrPosPrinter32.dll' ) hResult := DllCall(oDll, DLL_STDCALL, "POS_Inicializar", hb_StrToUTF8("ACBrLib.Ini"), hb_StrToUTF8("")) hResult := DllCall(oDll, DLL_STDCALL, "POS_Finalizar") DllUnload(oDll) * SET RESOURCES TO GlobalFree() Release All SysRefresh() Clear Memory Memory(-1) // Libera memoria que foi alocada por variáveis que não estão mais em uso Hb_GCall( .T. ) // Tira sugeira da memória *
-
Rafael, Apenas para te dar uma informação adicional, eu terminei hoje a rotina de Conhecimento de Transporte com a ACBrCTe32.DLL e o erro de impressão é o mesmo, ou seja, se eu imprimo um CT-e, não consigo imprimir depois uma NF-e nem um SAT sem antes sair do sistema e entrar novamente.