Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Creio que há um erro na função ArquivoMFD_DLL do TACBrECFBematech.

 

No código:

 

caminho := ExtractFilePath(Application.ExeName) + 'PAFECF\Arquivos\' + 'LMFC_ATO_COTEPE_1704_'+ GetDataTime + '.txt';

 

A função:

ACBrECF.PafMF_LMFC_Cotepe1704(StrToDate(edData1.Text), StrToDate(edData2.Text), caminho); 

Que serve para gerar a leitura de memória fiscal completa de acordo com o ato cotepe

não está funcionando corretamente, aparece essa mensagem de erro:

 

Erro na execução de xBematech_FI_ArquivoMFD.
Arquivo: "D:\Workdir\PAFECF\PAFECF\Arquivos\LMFC_ATO_COTEPE_1704_31052013-111511.txt" não gerado
O comando não pôde ser executado!

 

- Creio que seja por que está gerando o arquivo na unidade C com o

padrão MFDBE051275600000059247_20130525_095037.TXT

 

Formato do Padrão: MFD + número de série ECF + data e hora do ECF;

 

 

* Não deveria gerar no caminho que eu passei por parâmetro na função? Aguardo retorno.

  • Consultores
Postado

De onde vem essa parte do caminho "D:\Workdir\PAFECF"? Você procurou saber? Pois o restante, ("PAFECF\Arquivos\LMFC_ATO_COTEPE_1704_31052013-111511.txt"), aparece no seu código... mas essa parte não aparece.

[]'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.
  • Consultores
Postado

São funções diferentes que usam métodos diferentes para pegar os dados. Uma usa o comando #8 e a outra a chamada da DLL.

 

Por favor, faça a seguinte verificação:

Altere as funções ArquivoMFD_DLL do arquivo ACBrECFBematech.pas para procurar os arquivos na pasta "c:\". Faça isso alterando a seguinte linha:

  FindFiles( FileMask, Arquivos );

Para

FindFiles( 'C:\'+ FileMask, Arquivos );

Essas linhas são as linhas 3665 e 3748 no arquivo atual. Veja se isso resolve seu problema.

[]'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.
Postado

É isso mesmo, mas não dá certo se fizer isso: 'C:\' + FileMask,

pois antes disso o FileMask está recebendo assim:

 

FileMask := FilePath + Prefixo + Trim(NumSerie) + '_' +
              FormatDateTime('yyyymmdd',Now ) + '_*.TXT';

 

 

ai no caso desse projeto vai ficar assim: C:\D:\Workdir\PAFECF\PAFECF\Arquivos\LMFC_ATO_COTEPE_1704_31052013-111511.txt

e outra coisa, o arquivo mfd é salvo de acordo com o PATH que fica no registro do windows. Se fizer assim dá certo:

 

Na declaração:   

S: string;

 

No médoto:

 

SetLength(S, MAX_PATH);
  if GetWindowsDirectory(PChar(S), MAX_PATH) > 0 then
    S := string(S)[1] + ':\';

 

// O S será preenchido de acordo com o PATH definido no registro do windows, que tem também no bemafi32.ini com o nome

// Path, pode ser C:\ , D:\ ... 

 

FileMask := S + Prefixo + Trim(NumSerie) + '_' +
              FormatDateTime('yyyymmdd',Now ) + '_*.TXT';

 

aí, quando for executar a função FindFiles, dá certo!

 

FindFiles( FileMask, Arquivos );

  • Fundadores
Postado

Se desejar sugerir alguma correção, por favor anexe os fontes alterados para analise...

 

Evite o máximo possível o uso de APIs do Windows, já que o ACBr é multiplataforma...

 

Se compreendi o problema, a DLL está gerando o arquivo em pasta diferente da informada no BemaFi32.INI ? Se SIM, isso me parece mais um Bug da DLL

 

A DLL está na mesma pasta da sua aplicação ?

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

Desculpa a demora para responder...

 

O problema não está na dll, pois o arquivo está sendo gerado na pasta informada no BEMAFI32.INI, mas não

estava transferindo para o diretório que é passado no terceiro parâmetro da função ACBrECF.PafMF_LMFC_Cotepe1704.

Porém eu alterei apenas na função da bematech, não sei dizer se nos outros ECF's estão gerando corretamento, até

porque cada um tem uma forma de implementar a função.

 

Segue abaixo as funções alteradas:

 

 

procedure TACBrECFBematech.ArquivoMFD_DLL(DataInicial, DataFinal: TDateTime;
  NomeArquivo: AnsiString; Documentos: TACBrECFTipoDocumentoSet;
  Finalidade: TACBrECFFinalizaArqMFD);
Var
  Arquivos : TStringList ;
  Resp, Tipo : Integer ;
  DiaIni, DiaFim, Prop, Prefixo, FileMask, FilePath : AnsiString ;
  OldAtivo : Boolean ;
  {$IFDEF LINUX} Cmd, ArqTmp : String ; {$ENDIF}
  S: string;
begin
  Prop     := IntToStr( StrToIntDef( UsuarioAtual, 1) ) ;
  FilePath := ExtractFilePath( NomeArquivo );
  Tipo     := 2;
  Prefixo  := 'TDM';
 
  FinalidadeToTipoPrefixo( Finalidade, Tipo, Prefixo );
 
 {$IFDEF LINUX}
  ArqTmp := FilePath +'ACBr.mfd';
  DeleteFile( ArqTmp ) ;
 
  DiaIni := FormatDateTime('ddmmyy',DataInicial) ;
  DiaFim := FormatDateTime('ddmmyy',DataFinal) ;
 
  OldAtivo := Ativo ;
  try
     Ativo := False;
 
     Cmd := fpDevice.Porta + ' ' + ArqTmp+' 3 ' + DiaIni + ' ' + DiaFim + ' ' + Prop;
     RunCommand('./linuxmfd',Cmd,True) ;
 
     if not FileExists( ArqTmp ) then
        raise EACBrECFErro.Create( ACBrStr('Erro na execução do utilitário "linuxmfd" '+
                                        'Arquivo: '+ArqTmp+' não foi criado' ) ) ;
 
     SysUtils.DeleteFile( NomeArquivo ) ;
     Cmd := NomeArquivo + ' ' + ArqTmp + ' 3 ' + DiaIni + ' ' + DiaFim + ' ' + Prop ;
     RunCommand('./bemamfd2',Cmd,True) ;
 
     if not FileExists( NomeArquivo ) then
        raise EACBrECFErro.Create( ACBrStr( 'Erro na execução do utilitário "bemamfd2".'+sLineBreak+
                                'Arquivo: "'+NomeArquivo + '" não gerado' )) ;
  finally
     DeleteFile( ArqTmp ) ;
     Ativo := OldAtivo ;
  end;
 {$ELSE}
  LoadDLLFunctions;
 
  DiaIni   := FormatDateTime('dd"/"mm"/"yyyy', DataInicial) ;
 
  DiaFim   := FormatDateTime('dd"/"mm"/"yyyy', DataFinal) ;
  SetLength(S, MAX_PATH);
  if GetWindowsDirectory(PChar(S), MAX_PATH) > 0 then
    S := string(S)[1] + ':\';
  FileMask := S + Prefixo + Trim(NumSerie) + '_' +
              FormatDateTime('yyyymmdd',Now ) + '_*.TXT';
 
 
 
 
  Arquivos := TStringList.Create;
  OldAtivo := Ativo ;
  try
     DeleteFile( NomeArquivo );
     DeleteFiles( FileMask );
 
     AbrePortaSerialDLL( FilePath ) ;
     // erro aqui...
     Resp := xBematech_FI_ArquivoMFD( '', DiaIni, DiaFim, 'D', '0' + Prop, Tipo,
                                      cChavePublica, cChavePrivada, 1 ) ;
 
     if (Resp <> 1) then
        raise EACBrECFErro.Create( ACBrStr( 'Erro ao executar xBematech_FI_ArquivoMFD.'+sLineBreak+
                                         AnalisarRetornoDll(Resp) )) ;
 
     FindFiles( FileMask, Arquivos );
 
     if Arquivos.Count < 1 then
        raise EACBrECFErro.Create( ACBrStr( 'Erro na execução de xBematech_FI_ArquivoMFD.'+sLineBreak+
                                'Arquivo: "'+NomeArquivo + '" não gerado' )) ;
 
     RenameFile( Arquivos[0], NomeArquivo );
  finally
     Arquivos.Free;
     FechaPortaSerialDLL( OldAtivo );
  end;
 {$ENDIF}
end;

 

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

 

procedure TACBrECFBematech.ArquivoMFD_DLL( ContInicial, ContFinal : Integer;
  NomeArquivo : AnsiString; Documentos : TACBrECFTipoDocumentoSet;
  Finalidade: TACBrECFFinalizaArqMFD; TipoContador: TACBrECFTipoContador);
Var
  Arquivos : TStringList ;
  Resp, Tipo : Integer ;
  Prop, COOIni, COOFim, Prefixo, FileMask, FilePath : AnsiString ;
  OldAtivo : Boolean ;
  S: string;
  {$IFDEF LINUX} Cmd, ArqTmp : String ; {$ENDIF}
begin
  FilePath := ExtractFilePath( NomeArquivo );
  Tipo     := 2;
  Prefixo  := 'TDM';
 
  if TipoContador = tpcCRZ then
    CRZToCOO(ContInicial, ContFinal, ContInicial, ContFinal) ;
 
  FinalidadeToTipoPrefixo( Finalidade, Tipo, Prefixo );
 
  Prop   := IntToStr( StrToIntDef( UsuarioAtual, 1) ) ;
  COOIni := IntToStrZero( ContInicial, 6 ) ;
  COOFim := IntToStrZero( ContFinal, 6 ) ;
 
 {$IFDEF LINUX}
  ArqTmp := FilePath + 'ACBr.mfd';
  DeleteFile( ArqTmp ) ;
 
  OldAtivo := Ativo ;
  try
     Ativo := False;
 
     Cmd := fpDevice.Porta + ' ' + ArqTmp+' 3 ' + COOIni + ' ' + COOFim + ' ' + Prop;
     RunCommand('./linuxmfd',Cmd,True) ;
 
     if not FileExists( ArqTmp ) then
        raise EACBrECFErro.Create( ACBrStr('Erro na execução do utilitário "linuxmfd" '+
                                        'Arquivo: '+ArqTmp+' não foi criado' ) ) ;
 
     SysUtils.DeleteFile( NomeArquivo ) ;
     Cmd := NomeArquivo + ' ' + ArqTmp + ' 3 ' + COOIni + ' ' + COOFim + ' ' + Prop ;
     RunCommand('./bemamfd2',Cmd,True) ;
 
     if not FileExists( NomeArquivo ) then
        raise EACBrECFErro.Create( ACBrStr( 'Erro na execução do utilitário "bemamfd2".'+sLineBreak+
                                'Arquivo: "'+NomeArquivo + '" não gerado' )) ;
  finally
     DeleteFile( ArqTmp ) ;
     Ativo := OldAtivo ;
  end;
 {$ELSE}
  LoadDLLFunctions;
  SetLength(S, MAX_PATH);
  if GetWindowsDirectory(PChar(S), MAX_PATH) > 0 then
    S := string(S)[1] + ':\';
  FileMask := S + Prefixo + Trim(NumSerie) + '_' +
              FormatDateTime('yyyymmdd',Now ) + '_*.TXT';
 
  Arquivos := TStringList.Create;
  OldAtivo := Ativo ;
  try
     DeleteFile( NomeArquivo );
     DeleteFiles( FileMask );
 
     AbrePortaSerialDLL( FilePath ) ;
 
     Resp := xBematech_FI_ArquivoMFD( '', COOIni,  COOFim, 'C', Prop, Tipo,
                                      cChavePublica, cChavePrivada, 1 ) ;
     if (Resp <> 1) then
        raise EACBrECFErro.Create( ACBrStr( 'Erro ao executar xBematech_FI_ArquivoMFD.'+sLineBreak+
                                         AnalisarRetornoDll(Resp) )) ;
 
     FindFiles( FileMask, Arquivos );
 
     if Arquivos.Count < 1 then
        raise EACBrECFErro.Create( ACBrStr( 'Erro na execução de xBematech_FI_ArquivoMFD.'+sLineBreak+
                                'Arquivo: "'+NomeArquivo + '" não gerado' )) ;
 
     RenameFile( Arquivos[0], NomeArquivo );
  finally
     Arquivos.Free;
     //DeleteFile( ArqTmp ) ;
     FechaPortaSerialDLL( OldAtivo );
  end;
 {$ENDIF}
end;

 

  • Consultores
Postado

Você deve atualizar o arquivo pelo SVN e anexar aqui o arquivo alterado para facilitar a comparação. Numa função grande assim fica difícil descobrir o que você alterou.

[]'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.
  • Consultores
Postado

Em baixo da caixa onde você digita a resposta aparece o botão para anexar arquivos.

post-196-0-92972800-1370524989_thumb.jpg

 

Caso não esteja conseguindo visualizar, você deve estar no modo mais simples para responder. Nesse caso, do lado do botão Responder tem um outro botão, Mais Opções. Clique nele.

post-196-0-10055500-1370525090.jpg

[]'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.
  • Consultores
Postado

Nem clicando em mais opções?

[]'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.
  • Consultores
Postado

Olá Anderson,

 

  Obrigado pelo esforço. As suas mudanças partem do princípio que o programa vai usar Windows. Não tenho como testar em outros ambientes não Windows, assim não posso subir essas alterações.

Temos duas opções:

  1. Alterar o código para que fique independente do SO;
  2. Aguardar um outro desenvolvedor que desenvolve em Lazarus e usa linux para 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.
  • Moderadores
Postado

A questão do timeout o Daniel postou um fragmento de codigo para tratar isso

onde consiste em pegar a informação do timeout do componente antes da redução z

aumentar para um tempo consideravel, emitir a Z e depois retornar o valor default para o timeout

 

Sobre a geração do Cotepe 17/04 uso ela e até tive o uso bastante assiduo dela nesses ultimos dias devido a fiscalização que pediu a geração dos arquivos

entre eles um é esse e não obtive problemas

 

sobre a geração do arquivo cotepe que eu tenho aqui nos fontes não é o path mas sim um caminho completo com um nome de arquivo a ser gerado

abaixo o trecho do meu codigo

ArqName := ExtractFilePath(Application.ExeName) + 'LMFCPer.txt';

PDV.ACBrECF.PafMF_LMFC_Cotepe1704(cxdtdtIni.Date, cxdtdtFim.Date,
              ArqName);

Segue em anexo o arquivo ACBrECFBematech.pas alterado, fiz uma alteração também

no timeout da redução z na bematech, às vezes 40 segundos não é o bastante

para imprimir uma redução z.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

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

 

Postado

o path é onde o arquivo é gerado inicialmente, ao executar a função da bematech, o que o código faz

por baixo dos panos é transferir do caminho do path(no meu caso C:\) para o diretório

que foi passado no terceiro parâmetro da função ACBrECF.PafMF_LMFC_Cotepe1704;

  • 3 semanas depois ...
  • Fundadores
Postado

Anderson,

 

Notei que suas modificações podem quebrar código de outros métodos, ao trocar a propriedade "Prop" pela string "0"...

 

Aparentemente você está instalando a DLL na pasta Windows\system e não na mesma pasta do seu .EXE...

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.

  • 4 semanas depois ...
  • Este tópico foi criado há 4135 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.