Ir para conteúdo
  • Cadastre-se

dev botao

Elgin (ACBrECFFiscNET.pas) LMFC - Ato 17/04


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

Recommended Posts

  • Membros Pro

Bom dia...

Consegui uma ECF K-Fiscal, da Elgin para testar no nosso PAF. Então o único problema que tivemos foi que o arquivo gerado pela função "PafMF_LMFC_Cotepe1704" gera um arquivo com TDM no lugar de MF. Confome o roteiro para o PAF, o tipo de arquivo tem que ser MF. Então o pessoal do suporte da Elgin me passou que teríamos que alterar um parâmetro na chamada da DLL.

Tem que ser assim:

        iRet := xElgin_GeraArquivoATO17Binario( ArqTmp, NomeArquivo, CooIni,

                                                CooFim, 'C', Prop, 'MF');

Observe o parâmetro MF no lugar do TDM que havia antes.

Isto serve tanto para a função por DATA quanto por COO.

[]´s

Ivan

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Grande Daniel !

Seguem funções corrigidas:

procedure TACBrECFFiscNET.ArquivoMFD_DLL(ContInicial, ContFinal: Integer; NomeArquivo: AnsiString;

  Documentos: TACBrECFTipoDocumentoSet;

  Finalidade: TACBrECFFinalizaArqMFD; TipoContador: TACBrECFTipoContador);

Var

  iRet : Integer;

  PortaSerial, ModeloECF, NumFab : String;

  CooIni, CooFim, Prop, ArqTmp : String ;

  OldAtivo : Boolean ;

  cFinalidade:String;

begin

  NumFab      := NumSerie;

  ModeloECF   := SubModeloECF;

  CooIni      := IntToStrZero( ContInicial, 6 ) ;

  CooFim      := IntToStrZero( ContFinal, 6 ) ;

  Prop        := IntToStr( StrToIntDef( UsuarioAtual, 1) ) ;

  PortaSerial := fpDevice.Porta ;


  LoadDLLFunctions;

  OldAtivo := Ativo;

  try

     Ativo := False;


     if pos(fsMarcaECF, 'urano') > 0 then

      begin

        if (Finalidade = finMF) then

           cFinalidade := 'MF'

        else if (Finalidade = finTDM) then

           cFinalidade := 'TDM'

        else

           cFinalidade := 'MFD';


        ArqTmp := ExtractFilePath( NomeArquivo ) + 'ACBr.TDM' ;

        if FileExists( NomeArquivo ) then

           DeleteFile( NomeArquivo ) ;


        iRet := xDLLReadLeMemorias( PAnsiChar(PortaSerial),

                                    PAnsiChar(ArqTmp),

                                    PAnsiChar(NumFab), '1');


        if iRet <> 0 then

           raise Exception.Create( ACBrStr( 'Erro ao executar DLLReadLeMemorias.' + sLineBreak +

                                            'Cod.: '+ IntToStr(iRet) + ' - ' +

                                            GetErroAtoCotepe1704(iRet) )) ;


        iRet := xDLLATO17GeraArquivo( PAnsiChar( ArqTmp ),

                                      PAnsiChar( NomeArquivo ),

                                      PAnsiChar( CooIni ),

                                      PAnsiChar( CooFim ), 'C', '1',

                                      PAnsiChar( cFinalidade ) );


        if iRet <> 0 then

           raise Exception.Create( ACBrStr( 'Erro ao executar DLLATO17GeraArquivo.' + sLineBreak +

                                            'Cod.: '+ IntToStr(iRet) + ' - ' +

                                            GetErroAtoCotepe1704(iRet) )) ;

      end

     else if pos(fsMarcaECF, 'dataregis|termoprinter') > 0 then

      begin

        iRet := xGera_PAF( PAnsiChar( PortaSerial ) ,

                           PAnsiChar( ModeloECF ),

                           PAnsiChar( NomeArquivo ),

                           PAnsiChar( CooIni ),

                           PAnsiChar( CooFim ) );


        if iRet <> 0 then

           raise Exception.Create( ACBrStr( 'Erro ao executar Gera_PAF.'+sLineBreak+

                                            'Cod.: '+IntToStr(iRet) + ' - ' +

                                            GetErroAtoCotepe1704(iRet) )) ;


        if not FileExists( NomeArquivo ) then

           raise Exception.Create( ACBrStr( 'Erro na execução de Gera_PAF.'+sLineBreak+

                                            ': "'+NomeArquivo + '" não gerado' ))

      end


     else if (fsMarcaECF = 'elgin') then

      begin

        AbrePortaSerialDLL(fpDevice.Porta, ExtractFilePath(NomeArquivo));


        ArqTmp := ExtractFilePath( NomeArquivo ) + 'Memoria.tdm' ;


        iRet := xElgin_LeMemoriasBinario( ArqTmp, NumFab, true );


        if (iRet <> 1) then

           raise Exception.Create(ACBrStr('Erro ao executar Elgin_LeMemoriasBinario.'+sLineBreak+

                                                   'Cod.: ' + IntToStr(iRet))) ;


        if not FilesExists( ArqTmp ) then

           raise Exception.Create(ACBrStr('Erro na execução de Elgin_LeMemoriasBinario.'+sLineBreak+

                                          'Arquivo binário não gerado!'));


        iRet := xElgin_GeraArquivoATO17Binario( ArqTmp, NomeArquivo, CooIni,

                                                CooFim, 'C', Prop, 'MF');


        if (iRet <> 1) then

           raise Exception.Create(ACBrStr('Erro ao executar Elgin_GeraArquivoATO17Binario.'+sLineBreak+

                                          'Cod.: ' + IntToStr(iRet))) ;


        xElgin_FechaPortaSerial();

      end

     else

        raise Exception.Create( ACBrStr( 'ArquivoMFD_DLL por COO ainda não Implementado para: '+fsMarcaECF ) ) ;

  finally

    Ativo := OldAtivo ;

  end;

end;

e
procedure TACBrECFFiscNET.ArquivoMFD_DLL(DataInicial, DataFinal: TDateTime;

  NomeArquivo: AnsiString; Documentos: TACBrECFTipoDocumentoSet;

  Finalidade: TACBrECFFinalizaArqMFD);

Var

  iRet      : Integer;

  PortaSerial, ModeloECF, NumFab, ArqTmp, Prop : String;

  DiaIni, DiaFim : AnsiString;

  OldAtivo  : Boolean;

  cFinalidade:String;

begin

  NumFab      := NumSerie;

  ModeloECF   := SubModeloECF;

  PortaSerial := fpDevice.Porta;

  Prop        := IntToStr( StrToIntDef( UsuarioAtual, 1) ) ;


  LoadDLLFunctions;

  OldAtivo := Ativo;

  try

     Ativo := False;


     if pos(fsMarcaECF, 'urano') > 0 then

      begin

        if (Finalidade = finMF) then

           cFinalidade := 'MF'

        else if (Finalidade = finTDM) then

           cFinalidade := 'TDM'

        else

           cFinalidade := 'MFD';


        ArqTmp := ExtractFilePath( NomeArquivo ) + 'ACBr.TDM' ;

        if FileExists( NomeArquivo ) then

           DeleteFile( NomeArquivo ) ;


        DiaIni := FormatDateTime('yyyymmdd', DataInicial);

        DiaFim := FormatDateTime('yyyymmdd', DataFinal);


        iRet := xDLLReadLeMemorias( PAnsiChar( PortaSerial ),

                                    PAnsiChar( ArqTmp ),

                                    PAnsiChar( NumFab ), '1');


        if iRet <> 0 then

           raise Exception.Create( ACBrStr( 'Erro ao executar DLLReadLeMemorias.' + sLineBreak +

                                            'Cod.: '+ IntToStr(iRet) + ' - ' +

                                            GetErroAtoCotepe1704(iRet) )) ;


        iRet := xDLLATO17GeraArquivo( PAnsiChar( ArqTmp ),

                                      PAnsiChar( NomeArquivo ),

                                      PAnsiChar( DiaIni ),

                                      PAnsiChar( DiaFim ),

                                      'M', '1',

                                      PAnsiChar( cFinalidade ) );


        if iRet <> 0 then

           raise Exception.Create( ACBrStr( 'Erro ao executar DLLATO17GeraArquivo.' + sLineBreak +

                                            'Cod.: '+ IntToStr(iRet) + ' - ' +

                                            GetErroAtoCotepe1704(iRet) )) ;

      end

     else if pos(fsMarcaECF, 'dataregis|termoprinter') > 0 then

      begin

        DiaIni := FormatDateTime('dd/mm/yyyy', DataInicial);

        DiaFim := FormatDateTime('dd/mm/yyyy', DataFinal);


        iRet := xGera_AtoCotepe1704_Periodo_MFD( PAnsiChar( PortaSerial ),

                                                 PAnsiChar( ModeloECF ),

                                                 PAnsiChar( NomeArquivo ),

                                                 PAnsiChar( DiaIni ),

                                                 PAnsiChar( DiaFim ) );


        if iRet <> 0 then

           raise Exception.Create( ACBrStr( 'Erro ao executar Gera_AtoCotepe1704_Periodo_MFD.'+sLineBreak+

                                            'Cod.: '+IntToStr(iRet) + ' - ' +

                                            GetErroAtoCotepe1704(iRet) )) ;


        if not FileExists( NomeArquivo ) then

           raise Exception.Create( ACBrStr( 'Erro na execução de Gera_AtoCotepe1704_Periodo_MFD.'+sLineBreak+

                                            'Arquivo: "'+NomeArquivo + '" não gerado' ))

      end

     else if (fsMarcaECF = 'elgin') then

      begin

        DiaIni := FormatDateTime('yyyymmdd', DataInicial);

        DiaFim := FormatDateTime('yyyymmdd', DataFinal);


        AbrePortaSerialDLL( PortaSerial, ExtractFilePath(NomeArquivo) );


        ArqTmp := ExtractFilePath( NomeArquivo ) + 'Memoria.tdm' ;


        iRet := xElgin_LeMemoriasBinario( ArqTmp, NumFab, true );



        if (iRet <> 1) then

           raise Exception.Create(ACBrStr('Erro ao executar Elgin_LeMemoriasBinario.'+sLineBreak+

                                          'Cod.: ' + IntToStr(iRet))) ;


        if not FilesExists( ArqTmp ) then

           raise Exception.Create(ACBrStr('Erro na execução de Elgin_LeMemoriasBinario.'+sLineBreak+

                                          'Arquivo binário não gerado!'));


        iRet := xElgin_GeraArquivoATO17Binario( ArqTmp, NomeArquivo, DiaIni,

                                                DiaFim, 'D', Prop, 'MF');


        if (iRet <> 1) then

           raise Exception.Create(ACBrStr('Erro ao executar Elgin_GeraArquivoATO17Binario.'+sLineBreak+

                                          'Cod.: ' + IntToStr(iRet))) ;


        xElgin_FechaPortaSerial();

      end

     else

        raise Exception.Create( ACBrStr( 'ArquivoMFD_DLL por período ainda não Implementado para: '+fsMarcaECF ) ) ;

  finally

     Ativo := OldAtivo ;

  end ;

end;

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • Moderadores

Boa tarde Ivan

estou com um Elgin X5 e estou tentando gerar o Arq. MFD e também a LMFC para o Cotepe 17/04

mas está dando erro nas chamadas que tem da dll, ao baixar os arquivos do site da elgin

está me dizendo que devo utilizar outras 3 dlls pra trazer esses dados pra mim

você tem mais informações?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Olá Juliomar...

Bom.. Quando fiz os testes com a Elgin, só funcionava na porta COM1. Eles estavam com problemas na DLL e iriam lançar outra versão.

Talvez já tenham feito isto. Você precisa mesmo de 3 dll's: elgin.dll, leitura.dll e ato17.dll;

Altere o arquivo ELGIN.INI, setando a porta correta;

Bom.. espero que tenha ajudado!

[]´s

Ivan

ps: Só para constar: O suporte da Elgin é muito bom .. fiquei impressionado com o atendimento deles.

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Fundadores

Apliquei uma possível correção para o problema...

Pelo que pude observar, a solução proposta pelo Ivan apenas trocou o parâmetro "TDM" por "MF"... isso poderia causar problemas em outras leituras

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

  • 1 mês depois ...

Boa tarde,

talvez possam me ajudar, estou com uma impressora da marca Urano, modelo LOGGER, preciso gerar o arquivo MFD - o ATO 17/04 - creio que através da dll ATO17.dll porém gera o arquivo ACBR.TDM e até gera o relacionado ao MFD, porém somente com 1KB com 2 linhas que armazenam as informações do ECF e a terceira que é o EAD, porém as informações pertinentes ao período solicitado não são exibidas.

Alguém teria alguma sugestão? Estou utilizando o ACBRECF da pasta de exemplos do ACBR. E seleciono por impressora o ecfFiscnet.

Obrigado

[]s Rômulo

"Não me envergonho de mudar de opinião, porque não me envergonho de pensar" (Blaise Pascal)

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Entre em contato com o Fabricante e verifique se essas são as mais atualizadas... (pode ser uma página desatualizada)

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

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