ACBrLib

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

pauloa1
Usuário Nível 3
Usuário Nível 3
Mensagens: 227
Registrado em: 25 Jun 2008 14:57
Localização: Augusto Pestana-RS

ACBrLib

Mensagem por pauloa1 »

Se não for o limpalista()
coloca nesse código:

Onde tem if !Empty(hResult)
bufferLen := STR_LEN
buffer := Space(bufferLen)
oErr := DllCall(oDll, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
MsgStop(buffer, "Erro: "+Str(hResult))
endif

coloca

Onde tem if !Empty(hResult)
bufferLen := STR_LEN

If bufferLen > STR_LEN
buffer := Space(bufferLen + 256 )
endif

buffer := Space(bufferLen)
oErr := DllCall(oDll, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
MsgStop(buffer, "Erro: "+Str(hResult))
endif

Paulo
Avatar do usuário
oribeiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 15 Fev 2013 07:35
Localização: Itu/SP
Contato:

ACBrLib

Mensagem por oribeiro »

Paulo,

Obrigado por tentar ajudar.

Tentei com o comando nfe_limparlista e sem ele, mas o resultado é o mesmo.

Alguma outra sugestão?
Oscar Ribeiro
xHarbour+Fwh+WorkShop
pauloa1
Usuário Nível 3
Usuário Nível 3
Mensagens: 227
Registrado em: 25 Jun 2008 14:57
Localização: Augusto Pestana-RS

ACBrLib

Mensagem por pauloa1 »

Tentou a segunda opção que passei?

Paulo
Avatar do usuário
oribeiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 15 Fev 2013 07:35
Localização: Itu/SP
Contato:

ACBrLib

Mensagem por oribeiro »

Tentei. Mas não deu resultado.
Você conseguiu rodar o exemplo que eu enviei anexo?
Oscar Ribeiro
xHarbour+Fwh+WorkShop
pauloa1
Usuário Nível 3
Usuário Nível 3
Mensagens: 227
Registrado em: 25 Jun 2008 14:57
Localização: Augusto Pestana-RS

ACBrLib

Mensagem por pauloa1 »

No seu exe anexado abre a danfe normal.

Você carregou o xml antes do comando imprimir?

nfe:LimparLista()
NFE:CarregarXML(xml )
NFE:Imprimir( ,0, ,"True" , , , )

Paulo
Avatar do usuário
oribeiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 15 Fev 2013 07:35
Localização: Itu/SP
Contato:

ACBrLib

Mensagem por oribeiro »

O meu EXE abre normal, mas você tentou abrir o SAT logo depois da NFE? Ou abrir primeiro o SAT e depois a NFe? Aqui dá erro.
Oscar Ribeiro
xHarbour+Fwh+WorkShop
pauloa1
Usuário Nível 3
Usuário Nível 3
Mensagens: 227
Registrado em: 25 Jun 2008 14:57
Localização: Augusto Pestana-RS

ACBrLib

Mensagem por pauloa1 »

Eu não uso SAT.

Paulo
Avatar do usuário
oribeiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 15 Fev 2013 07:35
Localização: Itu/SP
Contato:

ACBrLib

Mensagem por oribeiro »

Paulo,
Tente executar o meu exemplo e imprimir a NFe e logo depois o SAT, sem sair do programa. Você vai ver o erro.
Oscar Ribeiro
xHarbour+Fwh+WorkShop
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

ACBrLib

Mensagem por JoséQuintas »

Que eu me lembre, no fonte da ACBRDLL pode ser feito em duas etapas.

O que acontece? Precisa caber o resultado na variável.
Quando o resultado não cabe, é chamado novamente, ou como complemento, pra pegar a mensagem maior.

Tipo:

Código: Selecionar todos

buffer := 256
variavel := Space(buffer)
ChamaRotina( @variavel, @buffer )
IF buffer > 256
   novavariavel := Space(buffer)
   // outra rotina com variavel maior
ENDIF
Variável por referência é pointer, uma posição da memória.
Cada linguagem de programação tem seu próprio estilo de controle disso.
Ao passar a string por referência, está indicando a posição da memória.
A DLL vai gravar a nova string nesse espaço de memória, e se a string for maior, é quando invade posição de memória que não faz parte da variável, causando GPF.
Pra evitar esse erro, é onde o ACBR usou a limitação de tamanho.
Acontece que pode existir conteúdo maior que esse tamanho, então o conteúdo fica incompleto.
O ACBR tem lá no PRG uma segunda chamada, pra quando acontece isso, usando uma string maior pra pegar o resultado completo.

Verifica se na parte que fez colocou essa "chamada de complemento".
Ela usa o tamanho que foi retornado na primeira chamada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

ACBrLib

Mensagem por JoséQuintas »

Usando o que postaram antes:

Código: Selecionar todos

bufferLen := STR_LEN
buffer := Space(bufferLen)
oErr := DllCall(oDll, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
Esse bufferlen tem duas funções:

1 - avisar o ACBR sobre o limite de texto que cabe
2 - por referência é para que o ACBR retorne nela qual o tamanho usado/necessário.

Se o tamanho é maior do que o texto, significa que faltou espaço, e é onde entra a segunda chamada.

Outra alternativa seria alterar de Space(256) pra Space(50000), pelo menos vai ter menos exceções.
E sempre usar Substr( variavel, ntamanho ) no resultado, porque o espaço adicional vai conter "lixo".
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
oribeiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 15 Fev 2013 07:35
Localização: Itu/SP
Contato:

ACBrLib

Mensagem por oribeiro »

José Quintas,
Se possível, por favor, compile o exemplo que coloquei acima e veja se consegue me ajudar.
Não consigo imprimir NFe e SAT sem antes sair da aplicação. Isso está me tirando o sono.
Obrigado.
Oscar Ribeiro
xHarbour+Fwh+WorkShop
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

ACBrLib

Mensagem por Itamar M. Lins Jr. »

Olá!
Não consigo imprimir NFe e SAT sem antes sair da aplicação. Isso está me tirando o sono.
Já testou com o Harbour usando GCC ?

Está usando xHarbour com qual compilador ? BCC 5x ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
oribeiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 15 Fev 2013 07:35
Localização: Itu/SP
Contato:

ACBrLib

Mensagem por oribeiro »

Uso xHarbour 1.2.3. Build 20180311
Bcc73

Itamar,
Por favor, tente compilar o exemplo que coloquei num zip anexo acima para ver se imprime NFe e Sat .
Obrigado
Oscar Ribeiro
xHarbour+Fwh+WorkShop
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

ACBrLib

Mensagem por Itamar M. Lins Jr. »

Ola!
Cadê o PRG PURO! sem fivewin, etc... para compilar com qualquer Harbour ?
O ZIP só tem EXE

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
oribeiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 15 Fev 2013 07:35
Localização: Itu/SP
Contato:

ACBrLib

Mensagem por oribeiro »

Itamar,

O Anexo contém o PRG com FiveWin (não sei usar somente o xHarbour).

Contém também as DLL, Acbrlib.ini e dois xmls de exemplo, um de nfe e outro de sat.

Obrigado pelo seu interesse em ajudar.
Anexos
ACBrTeste.zip
Exe, Prg, DLL e xmls de exemplo
(6.88 MiB) Baixado 500 vezes
Oscar Ribeiro
xHarbour+Fwh+WorkShop
Responder