Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • 1 mês depois ...
Postado (editado)

 

Descobri, porque que gera certo na Elgin Fit e da erro na Elgin K, veja a procedure abaixo:

 

procedure TACBrECFFiscNET.ArquivoMFD_DLL(DataInicial, DataFinal: TDateTime;
  NomeArquivo: AnsiString; Documentos: TACBrECFTipoDocumentoSet;
  Finalidade: TACBrECFFinalizaArqMFD);
Var
  iRet : Integer;
  PortaSerial, ModeloECF, NumFab, ArqTmp, Prop : AnsiString;
  DiaIni, DiaFim : AnsiString;
  OldAtivo  : Boolean;
  cFinalidade:AnsiString;
begin
  NumFab      := NumSerie;
  ModeloECF   := SubModeloECF;
  PortaSerial := fpDevice.Porta;
  Prop        := IntToStr( StrToIntDef( UsuarioAtual, 1) ) ;
 
  LoadDLLFunctions;
  OldAtivo := Ativo;
  try
     Ativo := False;
 
     if (Finalidade = finMF) then
        cFinalidade := 'MF'
     else if (Finalidade in [finTDM,finNFPTDM]) then
        cFinalidade := 'TDM'
     else
        cFinalidade := 'MFD';
 
     if pos(fsMarcaECF, 'dataregis|termoprinter') > 0 then
      begin
        DiaIni := FormatDateTime('dd/mm/yyyy', DataInicial);
        DiaFim := FormatDateTime('dd/mm/yyyy', DataFinal);
 
        if (Finalidade = finMF) then
          iRet := xGera_AtoCotepe1704_Periodo_MF( PortaSerial, ModeloECF,
                                                 NomeArquivo, DiaIni, DiaFim )
        else
          iRet := xGera_AtoCotepe1704_Periodo_MFD( PortaSerial, ModeloECF,
                                                 NomeArquivo, DiaIni, DiaFim );
 
        if iRet <> 0 then
           raise EACBrECFERRO.Create( ACBrStr( 'Erro ao executar Gera_AtoCotepe1704_Periodo_MFD.'+sLineBreak+
                                            'Cod.: '+IntToStr(iRet) + ' - ' +
                                            GetErroAtoCotepe1704(iRet) )) ;
 
        if not FileExists( NomeArquivo ) then
           raise EACBrECFERRO.Create( ACBrStr( 'Erro na execução de Gera_AtoCotepe1704_Periodo_MFD.'+sLineBreak+
                                            'Arquivo: "'+NomeArquivo + '" não gerado' ))
      end
     else if (fsMarcaECF = 'elgin') then //Quando estou gerando da elgin k entra neste if, porque a marca é elgin
      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 EACBrECFERRO.Create(ACBrStr('Erro ao executar Elgin_LeMemoriasBinario.'+sLineBreak+
                                          'Cod.: ' + IntToStr(iRet))) ;
 
        if not FilesExists( ArqTmp ) then
           raise EACBrECFERRO.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, cFinalidade); //Erro na execução desta função
 
        if (iRet <> 1) then
           raise EACBrECFERRO.Create(ACBrStr('Erro ao executar Elgin_GeraArquivoATO17Binario.'+sLineBreak+
                                          'Cod.: ' + IntToStr(iRet))) ;
 
        xElgin_FechaPortaSerial();
      end
     else    // Urano e demais 
      begin
        if (Finalidade = finNFPTDM) then //Quando gero pela elgin fit cai aqui, porque o nome da ecf que vem é ZPM
        begin
           //TODO: gerar o "nome do arquivo" no padrão CAT-52
           //Geralmente as DLL's precisam somente do diretório, o nome do arquivo é gerado automaticamente.
           //No caso da Urano você deve especificar o nome do arquivo (ACBr tem alguma função pra gerar esse nome no padrão cat?)
           if Length(Trim(ExtractFileName(NomeArquivo))) = 0 then
              NomeArquivo := NomeArquivo + 'CAT52.txt';
        end;
 
        ArqTmp := ExtractFilePath( NomeArquivo ) + 'ACBr.TDM' ;
        if FileExists( NomeArquivo ) then
           DeleteFile( NomeArquivo ) ;
 
        DiaIni := FormatDateTime('yyyymmdd', DataInicial);
        DiaFim := FormatDateTime('yyyymmdd', DataFinal);
 
        iRet := xDLLReadLeMemorias( PortaSerial, ArqTmp, NumFab, '1');
 
        if iRet <> 0 then
           raise EACBrECFERRO.Create( ACBrStr( 'Erro ao executar DLLReadLeMemorias.' + sLineBreak +
                                            'Cod.: '+ IntToStr(iRet) + ' - ' +
                                            GetErroAtoCotepe1704(iRet) )) ;
 
        iRet := xDLLATO17GeraArquivo( ArqTmp, NomeArquivo, DiaIni, DiaFim,
                                      'M', '1', cFinalidade );
 
        if iRet <> 0 then
           raise EACBrECFERRO.Create( ACBrStr( 'Erro ao executar DLLATO17GeraArquivo.' + sLineBreak +
                                            'Cod.: '+ IntToStr(iRet) + ' - ' +
                                            GetErroAtoCotepe1704(iRet) )) ;
      end ;
  finally
     Ativo := OldAtivo ;
  end ;
end;
 
Alguma ideia de como solucionar o problema?

 

Bom dia a todos, eu também estava com este mesmo erro  e consertei da seguinte forma:

 

nesta parte do código logo abaixo em vermelho o ArqTmp vem com o diretorio do arquivo mais o nome, utilizado nesta linha ArqTmp := ExtractFilePath( NomeArquivo ) + 'Memoria.tdm' ;
Já NomeArquivo, traz como parametro o diretório que voce passar quando chama o ACBrECF1.PafMF_GerarCAT52, que por sinal esta função do ACBrECF chama outra função fsECF.PafMF_GerarCAT52 do ACBrECFClass. E nesta ultima função o tipo dela é virtual. Então digamos que eu tenha passado o diretorio C:\PAF como parametro na função ACBrECF1.PafMF_GerarCAT52, quando ele chega nesta ultima funçao citada pelo Jocimar, o NomeArquivo fica como C:\PAF\ .
Desta forma este xElgin_GeraArquivoATO17Binario não encontra a pasta para salvar  o arquivo.
 iRet := xElgin_GeraArquivoATO17Binario( ArqTmp, NomeArquivo, DiaIni,
                                                DiaFim, 'D', Prop, cFinalidade); //Erro na execução desta função
 
Já neste código abaixo dá certo porque como foi comentado o nome do CAT-52 é especificado. 
else    // Urano e demais
      begin
        if (Finalidade = finNFPTDM) then //Quando gero pela elgin fit cai aqui, porque o nome da ecf que vem é ZPM
           //TODO: gerar o "nome do arquivo" no padrão CAT-52
           //Geralmente as DLL's precisam somente do diretório, o nome do arquivo é gerado automaticamente.
           //No caso da Urano você deve especificar o nome do arquivo (ACBr tem alguma função pra gerar esse nome no padrão cat?)
           if Length(Trim(ExtractFileName(NomeArquivo))) = 0 then
              NomeArquivo := NomeArquivo + 'CAT52.txt';
        end;
 
Obs.: percorrendo o código encontrei isto como descrevi, minha solução foi também especificar o NomeArquivo:= NomeArquivo+'CAT.txt' dentro do  if (fsMarcaECF = 'elgin') .
Ai o arquivo foi gerado certinho.
Agora outra dúvida que me bateu, ele gerou em arquivo txt, no caso da Elgin e Epson TM-T81 FBIII para este mesmo arquivo, eles não geram arquivos diários com nome estranho, tipo a Bematech que gera além do txt arquivos com este nome: 'BEJ86891.11E'?
Pergunto porque tenho clientes em Porto Velho em que seus contadores querem de qualquer forma estes arquivos diarios, a solução que tenho no momento para gerar estes arquivos diarios é pelo aplicativo disponibilizado pela empresa das impressoras.
Lembrando que estou usando as ultimas DLLs do componente ACBr atualizadas.
Editado por Paulinho
  • 4 semanas depois ...
  • Fundadores
Postado

Fiz uma reforma nesse método (já no SVN)

 

[*] Ajuste no método PafMF_GerarCAT52 para utilizar a nomenclatura de arquivos
    conforme definido na lei, o que deve corrigir a geração deste formato de
    arquivo para alguns modelos de ECF    (por:DSA)

 

 

Porém gostaria de citar uma observação que deixei nos fontes:

 

 

 

ATENÇÃO !! 

Para geração de arquivos programas de cidadania, como Nota


    Fiscal Paulista, Nota Alogoana, etc.. se o seu ECF é MFD (termico), utilize


    o método  **

PafMF_MFD_Cotepe1704

**...


    O Layout de arquivo CAT52 foi criado pelo governo de SP, para ser utilizado


    somente nas seguintes situações:


    - ECF sem MFD (as antigas matriciais)


    - Geração do arquivo com base nas informações do Banco de Dados e não da MFD


 

  • Curtir 2
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á 3977 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.