Ir para conteúdo
  • Cadastre-se

dev botao

Erro PafMF_MFD_Espelho


marcelosouzadias
  • Este tópico foi criado há 3603 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

esta dando o erro ao gerar o comando ECF.PafMF_MFD_Espelho(dtDatIni, dtDatFim, sv.FileName);

a seguinte mensagem

Erro ao executar xBematech_FI_ArquivoMFD.

Cod.: -1 - Erro de Execução na Função. Verifique!

tanto na minha aplicação e no de teste da acbr

por favor alguma orientação

Atenciosamente

marcelo

Link para o comentário
Compartilhar em outros sites

Também estava com sérios problemas nestas funções do ACBr que chamam as DLLs da Bematech:

ACBr: PafMF_MFD_Espelho => DLL: Bematech_FI_EspelhoMFD

ACBr: PafMF_MFD_Cotepe1704 => DLL: Bematech_FI_ArquivoMFD

ACBr: PafMF_LMFC_Cotepe1704 => DLL: Bematech_FI_ArquivoMFD

O meu padrão é sempre deixar todas as DLLs e o arquivo INI na pasta da aplicação, não coloco nada em outras pastas (Windows ou System32):

- BemaFI32.dll (6.1.0.0)

- BemaMFD.dll (2.1.0.0)

- BemaMFD2.dll (2.1.0.0)

- BemaMFD2_MP4000THFI.dll (2.1.0.0)

- sign_bema.dll

- BemaFI32.ini

- openssl.exe

- libeay32.dll (0.9.8.1)

- ssleay32.dll (0.9.8.1)

Deixando o INI na pasta do aplicativo, o ACBr modifica automaticamente o PATH ao executar a função "AbrePortaSerialDLL".

Isso funciona somente na PRIMEIRA execução do aplicativo. Após o INI original ter sido modificado, caso eu fechasse o aplicativo e iniciasse novamente, ao tentar executar as funções, lá vinha o erro mencionado.

Explicando melhor...

PRIMEIRA EXECUÇÃO:

- Path = C:\

ao chamar as funções...

- Path = diretório conforme parâmetro "NomeArquivo"

APÓS PRIMEIRA EXECUÇÃO:

- Path = diretório conforme parâmetro "NomeArquivo" da última execução

ao chamar as funções...

- Path = diretório conforme parâmetro "NomeArquivo"

Então, como a PRIMEIRA EXECUÇÃO sempre dava certo, tive que forçar a gravação do PATH = C:\ a cada inicialização do ECF. Meu código ficou mais ou menos assim:

ACBrECF.Ativar;


Ini := TIniFile.Create( ExtractFilePath( Application.ExeName ) + 'BemaFI32.ini' );

try

  Ini.WriteString( 'Sistema', 'Porta', ECF.Porta );

  Ini.WriteString( 'Sistema', 'Path', 'C:\' );           // <= AQUI ESTÁ A "GAMBIARRA"

finally

  Ini.Free;

end;{try}

Pronto. Todos os problemas resolvidos.

P.S. Tentei todas as formas possíveis antes desta solução (INI no System32, gravando ou não o PATH, etc etc). A única forma que funcionou foi esta citada acima.

Utilizo aqui uma MP-3000 TH FI.

Leandro Gobbo

Leandro Gobbo

Link para o comentário
Compartilhar em outros sites

  • Consultores

Também não entendi. Qual o objetivo de alterar o Path para C:\ ao invés da pasta do programa?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Por algum motivo obscuro (falha na DLL da bematech), se eu alterar o PATH=pasta do programa a cada inicialização, ou deixar somente o ACBr alterar o path lá na função "AbrePortaSerialDLL", as funções que utilizam as DLLs da bematech não funcionam.

Somente funciona se eu alterar o PATH=C:\ a cada inicialização. Posteriormente o próprio ACBr modifica este path para a pasta do programa, mas ai já não há mais problemas e tudo continua funcionando normalmente.

Ou seja, caso o INI esteja na pasta do programa, sempre tem que ser iniciado com o PATH=C:\

Depois, com o programa aberto, este PATH pode ser alterado normalmente (como faz o ACBr "AbrePortaSerialDLL").

Mas a cada inicialização do aplicativo sou obrigado a resetar o PATH = C:\ novamente.

A impressão que dá é que a DLL precisa do PATH=C:\ na primeira função a ser executada. Depois esse PATH pode ser mudado sem interferir nas funções da DLL.

É esquisito, mas aqui foi o único jeito que funcionou para continuar deixando o INI na pasta do programa.

Leandro Gobbo

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Gobbo,

A DLL da Bamatech gera um Log... você poderia anexa-lo ? Talvez no Log da DLL contenha informações mais detelhadas sobre o problema...

Em todo caso, se houver um Bug na DLL precisamos reporta-lo para eles corrigirem...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Daniel

Com o PATH=pasta do programa, quando tento gerar o PafMF_LMFC_Cotepe1704, os arquivos de log da Bematech não são criados:

- BematechXXX.log

- BemaMFD2.log

O erro trava a minha aplicação fechando-a automaticamente.

Mas o log do ACBr é gerado até a linha abaixo:

-- 01:26:48 ArquivoMFD_DLL( 01/03/2012 , 03/03/2012 , C:\Documents and Settings\Priori\Meus documentos\Priori\Projetos\EstoquePDV\Exe\MenuFiscal\BE070771200200000210_01032012_03032012_LMFC_AtoCotepe1704.txt ) 

            TX -> [STX][ENQ][NUL][FS]#[11]J[NUL]

   01:26:48 RX <- [NUL][1][NUL][NUL][NUL][NUL]

A aplicação trava na chamada da função "LoadDLLFunctions", gera uma mensagem de "Exceção desconhecida" e fecha meu aplicativo.

Alguma ideia do que seja?

Leandro Gobbo

Leandro Gobbo

Link para o comentário
Compartilhar em outros sites

Régys

Sim, já tentei de tudo que foi jeito:

- somente o INI no System32 e as DLLs na pasta do programa;

- tudo no System32 (INI + DLLs);

- tudo na pasta do programa (INI + DLLs).

De qualquer jeito acontece o mesmo erro do meu post anterior.

Parece ser problema no tamanho do PATH configurado, que extrapola alguma quantidade máxima de caracteres.

Por isso que quando inicio com o PATH=C:\ tudo funciona perfeitamente.

Leandro Gobbo

P.S. O log gerado é da função ArquivoMFD, mas esse erro também acontece com o EspelhoMFD (título e objeto deste tópico). Ambas usam as DLLs da Bematech.

As outras funções que usam comunicação direta via porta serial não ocorrem problemas, posso gerar os arquivos em qualquer pasta sem erros.

Leandro Gobbo

Link para o comentário
Compartilhar em outros sites

O interessante é que na minha última homologação em jan/2011, com a versão do ACBr e as DLLs da Bematech daquela época, tudo funcionava sem esse problema.

Vai entender...

Mas obrigado pela atenção. Somente tive a intenção de alertar algum usuário que tenha o mesmo problema que este meu.

Leandro Gobbo

Leandro Gobbo

Link para o comentário
Compartilhar em outros sites

  • Moderadores

O duro dessa parte da homologação é que o componente utiliza a dll, por conta das chaves de criptografia da MFD e pela própria leitura da MFD que somente a dll pode fazer, dai estamos sujeitados aos caprichos e erros da dll, infelizmente.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

  • Consultores

Talvez o problema não seja o tamanho, mas que o caminho contém espaços.

Já tive um problema assim antes, só não me lembro se foi com a DLL da Bematech... Seria o caso de testar.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Pessoal, acompanhando as conversas, estou tentando utilizar essa mesma função "PafMF_MFD_Espelho" no ACBR monitor, e me retorna o erro "Erro ao carregar a função Bematech_FI_abrePortaSerial de Bemafi32.dll". Vi que o pessoal comenta para atualizar as DLLs da bematech, mas no caso do Monitor, onde deve ser atualizado essas DLLs? Um detalhe é que estou utilizando o Emulador da Bematech, mas funciona tudo sem problemas. Outro detalhe é que o mesmo problema acontece no ECFTeste.exe. A versão do meu Monitor é a 0.9.9b.

Abraços

Link para o comentário
Compartilhar em outros sites

  • Consultores

De acordo com a Bematech as funções Espelho MFD, Arquivo MFD são suportadas pelo Emulador sim.

Mas devem ser feitas pela porta serial (virtual ou física) e o arquivo INI da Bematech(BemaFI32.ini) deve estar configurado com a chave EmulMFD em 0.

fonte:http://partners.bematech.com.br/forum/viewtopic.php?f=8&t=6195

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Estou com o mesmo problema "Erro ao executar bematech_fi_espelhoMFD cod.: -1 Erro de execução na função. Verifique!". Estranho que antes de atualizar as dll´s, o ECFTeste.exe retornava o erro na função bematech_fi_abreportaserial, agora ele retorna esse daí. Baixei os arquivos do link acima e copiei todos para a basta do acbr monitor, mas o erro persiste.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3603 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.