Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Urgente, preciso de ajuda pois estou na homologação de meu sistema.

Ao efetuar a chamada ACBRECF.PafMF_LMFC_Cotepe1704 estou recebendo a seguinte mensagem de erro (veja imagem em anexo).

Pelo que analisei no código fonte, o problema está na leitura do COO inicial e COO final que estão sendo lidos de uma leitura de memoria fiscal. (veja imagem em anexo).

Veja que há um FOR iniciando da posição 36 da LMF e terminando no Retorno.Count - 30 (que acaba ficando em 34), nem chega a entrar no FOR, pois o retorno é 64-30 = 34, assim retornando o COO Inicial | Final = 0. Creio que essa LMF pode variar dependendo do hardware, não sei lhes confirmar esta informação.

Utilizamos na homologação uma BEMATECH MP-4000 TH FI.

Aqui para testes estou utilizando o EMUL2100.

Preciso urgente da ajuda de vocês, obrigado mais uma vês,

Lucas Borin.

post-1946-13548987607016.jpg

post-1946-13548987607102.jpg

  • Fundadores
Postado

Você não testou isso antes de ir para a homologação ??

Fica muito difícil corrigir isso "na correria"... Lembre-se que o ACBr é mantido por voluntários... e que todos trabalham no seu tempo livre...

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.

  • Fundadores
Postado

Tente substituir a Função CRZtoCOO por esta abaixo:


procedure TACBrECFBematech.CRZToCOO(const ACRZIni, ACRZFim: Integer;
var ACOOIni, ACOOFim: Integer);
var
Retorno: TStringList;
CRZi, CRZf: string;
Linha: string;
I, PosCOO: Integer;
begin
Retorno := TStringList.Create;
try
Self.LeituraMemoriaFiscalSerial(ACRZIni, ACRZFim, Retorno);

PosCOO := 0;
ACOOIni := 0;
ACOOFim := 0;
CRZi := IntToStrZero(ACRZIni,4)+' ';
CRZf := IntToStrZero(ACRZFim,4)+' ';

I := 0 ;
while (I begin
Linha := Retorno[I];

if PosCOO = 0 then // Já achou o cabeçalho ?
begin
if (pos('CRZ ',Linha) = 1) then
PosCOO := pos('COO ', Linha);
end
else
begin
if Copy(Linha, 1, 6) = CRZi then
ACOOIni := StrToIntDef(Copy(Linha, PosCOO, 6), 0) ;

if Copy(Linha, 1, 6) = CRZf then
ACOOFim := StrToIntDef(Copy(Linha, PosCOO, 6), 0) ;
end ;

Inc( I ) ;
end ;

ACOOIni := max(ACOOIni,1);
ACOOFim := max(ACOOFim,ACOOIni);
finally
Retorno.Free;
end;
end;
[/code]

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.

Postado

Você não testou isso antes de ir para a homologação ??

Fica muito difícil corrigir isso "na correria"... Lembre-se que o ACBr é mantido por voluntários... e que todos trabalham no seu tempo livre...

Tranquilo, o problema é que testamos e provavelmente foram atualizadas as DLL na sequencia, mas consegui entrar em contato com o Régys ontem a noite e ele irá ajustar aquela função.

Realmente o problema que está na rotina de leitura dos COO, pois está efetuando a leitura diretamente da LFM que varia de impressora para impressora.

Obrigado Daniel,

Lucas Borin.

Postado

Tente substituir a Função CRZtoCOO por esta abaixo:


procedure TACBrECFBematech.CRZToCOO(const ACRZIni, ACRZFim: Integer;

  var ACOOIni, ACOOFim: Integer);

var

  Retorno: TStringList;

  CRZi, CRZf: string;

  Linha: string;

  I, PosCOO: Integer;

begin

  Retorno := TStringList.Create;

  try

    Self.LeituraMemoriaFiscalSerial(ACRZIni, ACRZFim, Retorno);


    PosCOO  := 0;

    ACOOIni := 0;

    ACOOFim := 0;

    CRZi    := IntToStrZero(ACRZIni,4)+'  ';

    CRZf    := IntToStrZero(ACRZFim,4)+'  ';


    I := 0 ;

    while (I < Retorno.Count) and (ACOOIni = 0) and (ACOOFim = 0) do

    begin

      Linha := Retorno[I];


      if PosCOO = 0 then  // Já achou o cabeçalho ?

      begin

        if (pos('CRZ ',Linha) = 1) then

          PosCOO := pos('COO ', Linha);

      end

      else

      begin

        if Copy(Linha, 1, 6) = CRZi then

          ACOOIni := StrToIntDef(Copy(Linha, PosCOO, 6), 0) ;


        if Copy(Linha, 1, 6) = CRZf then

          ACOOFim := StrToIntDef(Copy(Linha, PosCOO, 6), 0) ;

      end ;


      Inc( I ) ;

    end ;


    ACOOIni := max(ACOOIni,1);

    ACOOFim := max(ACOOFim,ACOOIni);

  finally

    Retorno.Free;

  end;

end;

Vou tentar trocar esta função, já lhe retorno.

  • Fundadores
Postado

Regys,

A rotina ainda pode cair nos seguintes Bugs...

- Se CRZIni e CRZFim forem iguais ela não achará o CRZFim

- Se o COO estiver em coluna diferente de 13 ela pode truncar o valor... No exemplo que achei na internet o COO está iniciando na 12

http://www.bematech.com.br/suporte/tuto ... ml?lmf.htm

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.

Postado

codigo do SVN, nada anormal.

O erro acontece exatamente em:

linha 4067 em diante


     Texto := TStringList.Create;

     try

       Texto.LoadFromFile( ArqTmp+'_ESP_TMP' + '.txt' );

       Try

         DiaIni := copy( Texto.Strings[ 6 ], 1, 10 );

         StrtoDate(DiaIni);  ----> AQUI

       Except

         DiaIni := copy( Texto.Strings[ 7 ], 1, 10 );

       end;

Ao inves de pegar a data está pegando a IM:

Alterado Data e Hora: 17/07/2011 20:28:01V

ECF AUTORIZADO EXCLUSIVAMENTE PARA TREINAMENTO

OU DESENVOLVIMENTO

SEM VALOR FISCAL

CNPJ:11.111.111/1111-11

IE:111.111.111

IM:11.111

------------------------------------------------

17/07/2011 20:28:01V COO:001388

Eu acertei a hora da impressora no dia, com isso desceu uma linha.

Além disso para mim sempre está na linha 7 ou 8.

Ajustando assim, na minha ecf funciona, mas sei que é cambiarra..

Postado

Apaguei tudo, baixei no SVN.

A rotina funciona para algumas faixas de CRZ.

Porém se algum dia tiver alterado a hora junto a redução, não funciona pois desloca uma linha abaixo


Alterado Data e Hora: 17/07/2011 20:28:01V

ECF AUTORIZADO EXCLUSIVAMENTE PARA TREINAMENTO

              OU DESENVOLVIMENTO

               SEM VALOR FISCAL

Postado

Estou chamando com PafMF_LMFC_Cotepe1704(nCrzIni,nCrzFim,cNomeArquivo)

Anexei o arquivo ACBrECFBematech.pas que estou usando (baixado via SVN após excluir a pasta fontes).

Vasculhei HD a procurar de pas ou dcu e o único que tenho é o anexado.

Conforme comentei o erro só acontece quando há ajuste do horário do ecf na redução.

Se por acaso o arquivo ACBrECFBematech.pas estiver diferente, poderia anexar ao fórum?

obrigado pelo empenho.

ACBrECFBematech.pas

  • Fundadores
Postado

vc pode capturar a Leitura de Memoria Fiscal em disco e anexa-la aqui ?

Modifique a rotina para:

Self.LeituraMemoriaFiscalSerial(ACRZIni, ACRZFim, Retorno);

Retorno.SaveToFile( 'c:\temp\retorno.txt' ) ;

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.

Postado

anexos arquivo solicitado e arquivos que a rotina gerou no processo.

Pergunta, debugando eu chego sempre na linha 4069, que na rotina deveria pegar a data.

Observe que se não der certo (try), ele tenta a linha seguinte.

No meu caso, está uma linha depois (linha 8).

// Cria um objeto do tipo TStringList para Ler o arquivo gerado

Texto := TStringList.Create;

try

Texto.LoadFromFile( ArqTmp+'_ESP_TMP' + '.txt' );

Try

DiaIni := copy( Texto.Strings[ 6 ], 1, 10 );

StrtoDate(DiaIni);

Except

DiaIni := copy( Texto.Strings[ 7 ], 1, 10 );

end;

retorno1.txt

ACBr_ESP_TMP.txt

ACBr_ESP_.txt

  • Fundadores
Postado

humm.. agora que notei que estamos falando de rotinas diferentes :)

Essas DLLs da Bematech são um saco... ficar caçando Strings sempre dará problema... Vou tentar modificar essa rotinas de forma semelhante a CRZtoCOO

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.

  • Este tópico foi criado há 4773 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.