Clipper On Line • Ver Tópico - ACBrLib

ACBrLib

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

Moderador: Moderadores

 

ACBrLib

Mensagempor rubens » 02 Nov 2020 09:50

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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

ACBrLib

Mensagempor JoséQuintas » 02 Nov 2020 11:59

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 236 vezes


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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

ACBrLib

Mensagempor rubens » 03 Nov 2020 10:57

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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

ACBrLib

Mensagempor oribeiro » 03 Nov 2020 12:03

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:

#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

Oscar Ribeiro
xHarbour+Fwh+WorkShop
Avatar de usuário

oribeiro
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 30
Data de registro: 15 Fev 2013 06:35
Cidade/Estado: Itu/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

ACBrLib

Mensagempor rubens » 03 Nov 2020 16:58

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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

ACBrLib

Mensagempor oribeiro » 03 Nov 2020 17:45

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.
Oscar Ribeiro
xHarbour+Fwh+WorkShop
Avatar de usuário

oribeiro
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 30
Data de registro: 15 Fev 2013 06:35
Cidade/Estado: Itu/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

ACBrLib

Mensagempor JoséQuintas » 03 Nov 2020 19:05

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

ACBrLib

Mensagempor MSDN » 04 Nov 2020 09:40

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/ConfiguracoesdaBiblioteca17.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.
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

ACBrLib

Mensagempor Itamar M. Lins Jr. » 04 Nov 2020 11:20

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

ACBrLib

Mensagempor Itamar M. Lins Jr. » 04 Nov 2020 11:45

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

ACBrLib

Mensagempor MSDN » 04 Nov 2020 13:25

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.
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

ACBrLib

Mensagempor oribeiro » 04 Nov 2020 15:00

Grande Quintas,
Foi só não descarregar a DLL que resolveu o meu problema.
A sua sugestão foi certeira!
Muitíssimo obrigado.
Oscar Ribeiro
xHarbour+Fwh+WorkShop
Avatar de usuário

oribeiro
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 30
Data de registro: 15 Fev 2013 06:35
Cidade/Estado: Itu/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

ACBrLib

Mensagempor Itamar M. Lins Jr. » 05 Nov 2020 13:16

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

ACBrLib

Mensagempor rochinha » 07 Nov 2020 00:13

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:

#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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

ACBrLib

Mensagempor oribeiro » 07 Nov 2020 05:38

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.
Oscar Ribeiro
xHarbour+Fwh+WorkShop
Avatar de usuário

oribeiro
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 30
Data de registro: 15 Fev 2013 06:35
Cidade/Estado: Itu/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Anterior Próximo



Retornar para Legislação Fiscal e Tributária

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro