Página 4 de 7

ACBrLib

Enviado: 27 Out 2020 14:58
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

ACBrLib

Enviado: 27 Out 2020 16:18
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?

ACBrLib

Enviado: 28 Out 2020 09:11
por pauloa1
Tentou a segunda opção que passei?

Paulo

ACBrLib

Enviado: 29 Out 2020 13:28
por oribeiro
Tentei. Mas não deu resultado.
Você conseguiu rodar o exemplo que eu enviei anexo?

ACBrLib

Enviado: 29 Out 2020 14:55
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

ACBrLib

Enviado: 29 Out 2020 15:54
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.

ACBrLib

Enviado: 30 Out 2020 09:17
por pauloa1
Eu não uso SAT.

Paulo

ACBrLib

Enviado: 30 Out 2020 09:55
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.

ACBrLib

Enviado: 30 Out 2020 11:03
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.

ACBrLib

Enviado: 30 Out 2020 11:22
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".

ACBrLib

Enviado: 30 Out 2020 15:31
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.

ACBrLib

Enviado: 30 Out 2020 18:29
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.

ACBrLib

Enviado: 30 Out 2020 19:28
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

ACBrLib

Enviado: 31 Out 2020 07:23
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.

ACBrLib

Enviado: 31 Out 2020 14:00
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.