Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

Gostaria que dessem uma analisada nas alterações que fiz.

ACBrAAC.IdentPaf.OutrosArquivos essa propriedade são os arquivos usados pelo paf?

Se sim, quando abro o arquivo e insiro algum arquivo com seu respectivo md5, que salvo o mesmo.

E depois abro ele novamente não estava vindo os dados salvos no mesmo.

Não sei se é permitido salvar a lista de arquivos no arquivo auxiliar, se for possivel eu implementei essa alteração.


//Arquivo ACBrAAc.pas

procedure TACBrAAC.AbrirArquivo ;

var

  Ini: TMemIniFile;

  SL : TStringList;

  MS : TMemoryStream ;

  I  : Integer ;

  S, R : AnsiString ;

  Linha, Ident : String ;

  Continua : Boolean ;

  CRC : Word ;

begin

  GravaLog( 'AbrirArquivo');


  Continua := True;

  if Assigned( fsOnAntesAbrirArquivo ) then

     fsOnAntesAbrirArquivo( Continua );


  if not Continua then

  begin

     GravaLog( 'AbrirArquivo abortado' );

     exit;

  end ;


  if NomeArquivoAux = '' then

     raise EACBrAAC_SemNomeArquivo.Create( ACBrStr('Nome do Arquivo não Informado em: ACBrAAC.NomeArquivoAux') ) ;


  if not FileExists( fsNomeCompleto ) then

     raise EACBrAAC_ArqNaoEncontrado.Create(

        ACBrStr( 'Arquivo Auxiliar Criptografado'+sLineBreak+

                 '"'+NomeArquivoAux+'"'+sLineBreak+

                 'não encontrado') );


  fsDtHrArquivo := FileDateToDateTime( FileAge( fsNomeCompleto ) );


  // Lê arquivo de modo binário e transfere para a AnsiString = S //

  MS := TMemoryStream.Create;

  try

    MS.LoadFromFile( fsNomeCompleto );

    MS.Position := 0;

    SetLength(S, MS.Size);

    MS.ReadBuffer(PChar(S)^, MS.Size);

  finally

    MS.Free;

  end;


  SL  := TStringList.Create ;

  Ini := TMemIniFile.Create('') ;

  try

     // DEBUG

     // GravaLog('Arquivo Lido: '+sLineBreak+ S );

     R := DesCriptografar( S ) ;

     // DEBUG

     //GravaLog('Arquivo Descriptografado: '+sLineBreak+ R );


     SL.Text := R;

     Ini.SetStrings( SL );


     if GravarDadosSH then

     begin

        fsIdentPAF.Empresa.Cep         := Ini.ReadString('SH','Cep','');

        fsIdentPAF.Empresa.Cidade      := Ini.ReadString('SH','Cidade','');

        fsIdentPAF.Empresa.CNPJ        := Ini.ReadString('SH','CNPJ','');

        fsIdentPAF.Empresa.Contato     := Ini.ReadString('SH','Contato','');

        fsIdentPAF.Empresa.Email       := Ini.ReadString('SH','Email','');

        fsIdentPAF.Empresa.Endereco    := Ini.ReadString('SH','Endereco','');

        fsIdentPAF.Empresa.IE          := Ini.ReadString('SH','IE','');

        fsIdentPAF.Empresa.IM          := Ini.ReadString('SH','IM','');

        fsIdentPAF.Empresa.RazaoSocial := Ini.ReadString('SH','Nome','');

        fsIdentPAF.Empresa.Telefone    := Ini.ReadString('SH','Telefone','');

        fsIdentPAF.Empresa.Uf          := Ini.ReadString('SH','Uf','');

     end ;


     if GravarDadosPAF then

     begin

        fsIdentPAF.NumeroLaudo           := Ini.ReadString('PAF','NumeroLaudo',''); // Número do Laudo

        fsIdentPAF.VersaoER              := Ini.ReadString('PAF','VersaoER','');    // Versão do Roteiro Executado na Homologação

        fsIdentPAF.Paf.Nome              := Ini.ReadString('PAF','Nome','');        // Nome do Sistema PAF

        fsIdentPAF.Paf.Versao            := Ini.ReadString('PAF','Versao','');      // Versão do Sistema PAF

        fsIdentPAF.Paf.PrincipalExe.Nome := Ini.ReadString('PAF','NomeExe','');     // Nome do Principal EXE do PAF

        fsIdentPAF.Paf.PrincipalExe.MD5  := Ini.ReadString('PAF','MD5Exe','');      // MD5 do Principal EXE do PAF

     end ;

     fsIdentPAF.ArquivoListaAutenticados.MD5 := Ini.ReadString('PAF','MD5','');     // MD5 do arquivo que contem a lista de arquivos autenticados


     if GravarDadosPAF and GravarDadosSH then

     begin

       CRC := StringCrc16( fsIdentPAF.Empresa.RazaoSocial +

                           fsIdentPAF.Empresa.CNPJ +

                           fsIdentPAF.Empresa.IE +

                           fsIdentPAF.Empresa.IM +

                           fsIdentPAF.Paf.Nome +

                           fsIdentPAF.Paf.Versao +

                           fsIdentPAF.ArquivoListaAutenticados.MD5 );

       if Ini.ReadInteger('CHK','CRC16',0) <> CRC then

          raise EACBrAAC_ArquivoInvalido.Create(

             ACBrStr('Arquivo: '+NomeArquivoAux+' inválido') );

     end ;


     fsIdentPAF.ECFsAutorizados.Clear;

     I := 0 ;

     while True do

     begin

        Ident := 'ECF_'+IntToStrZero(I,4);

        Linha := Ini.ReadString( 'ECFs', Ident, '*FIM*' );


        if Linha = '*FIM*' then

           break ;


        with fsIdentPAF.ECFsAutorizados.New do

        begin

           LinhaDados := Linha;

        end;


        Inc( I ) ;

     end ;

     //Inicio da Alteração

     fsIdentPAF.OutrosArquivos.Clear;

     I := 0 ;

     while True do

     begin

        Ident := 'ARQ_'+IntToStrZero(I,4);

        Linha := Ini.ReadString( 'ARQs', Ident, '*FIM*' );


        if Linha = '*FIM*' then

           break ;


        with fsIdentPAF.OutrosArquivos.New do

        begin

           LinhaDados := Linha;

        end;


        Inc( I ) ;

     end ;

     //Fim da Alteração

     Params.Clear;

     I := 0 ;

     while True do

     begin

        Ident := 'L_'+IntToStrZero(I,4);

        Linha := Ini.ReadString( 'Params', Ident, '*FIM*' );


        if Linha = '*FIM*' then

           break ;


        Params.Add( Linha );

        Inc( I ) ;

     end ;


     if Assigned( fsOnDepoisAbrirArquivo ) then

        fsOnDepoisAbrirArquivo( Self );


  finally

     Ini.Free ;

     SL.Free;

  end ;

end ;


procedure TACBrAAC.SalvarArquivo ;

var

  Ini: TMemIniFile;

  SL : TStringList;

  I  : Integer ;

  Ident  : String ;

  ArqBak : String ;

  R      : AnsiString ;

  Continua : Boolean ;

  CRC : Word ;

begin

  GravaLog( 'GravarArqRegistro' );


  Continua := True;

  if Assigned( fsOnAntesGravarArquivo ) then

    fsOnAntesGravarArquivo( Continua );


  if not Continua then

  begin

    GravaLog( 'GravarArqRegistro abortado' );

    exit;

  end ;


  if NomeArquivoAux = '' then

    raise EACBrAAC_SemNomeArquivo.Create( ACBrStr('Nome do Arquivo não Informado em: ACBrAAC.NomeArquivoAux') ) ;


  if GravarDadosSH then

  begin

    if (fsIdentPAF.Empresa.RazaoSocial = '') or (fsIdentPAF.Empresa.CNPJ = '') then

      raise EACBrAAC_ArquivoInvalido.Create(

         ACBrStr('SH_RazaoSocial e/ou SH_CNPJ não informados') );

  end ;


  if GravarDadosPAF then

  begin

    if (fsIdentPAF.Paf.Nome = '') or (fsIdentPAF.Paf.Versao = '')then

      raise EACBrAAC_ArquivoInvalido.Create(

         ACBrStr('PAF_Nome e/ou PAF_Versao não informados') );

  end ;


  SL  := TStringList.Create ;

  Ini := TMemIniFile.Create( '' ) ;

  try

     if GravarDadosSH then

     begin

        Ini.WriteString('SH','CNPJ',fsIdentPAF.Empresa.CNPJ);

        Ini.WriteString('SH','Nome',fsIdentPAF.Empresa.RazaoSocial);

        Ini.WriteString('SH','Cep',fsIdentPAF.Empresa.Cep);

        Ini.WriteString('SH','Cidade',fsIdentPAF.Empresa.Cidade);

        Ini.WriteString('SH','Contato',fsIdentPAF.Empresa.Contato);

        Ini.WriteString('SH','Email',fsIdentPAF.Empresa.Email);

        Ini.WriteString('SH','Endereco',fsIdentPAF.Empresa.Endereco);

        Ini.WriteString('SH','IE',fsIdentPAF.Empresa.IE);

        Ini.WriteString('SH','IM',fsIdentPAF.Empresa.IM);

        Ini.WriteString('SH','Telefone',fsIdentPAF.Empresa.Telefone);

        Ini.WriteString('SH','Uf',fsIdentPAF.Empresa.Uf);

     end ;


     if GravarDadosPAF then

     begin

        Ini.WriteString('PAF','Nome',fsIdentPAF.Paf.Nome);                 // Nome do Sistema PAF

        Ini.WriteString('PAF','Versao',fsIdentPAF.Paf.Versao);             // Versão do Sistema PAF

        Ini.WriteString('PAF','NumeroLaudo',fsIdentPAF.NumeroLaudo);       // Número do Laudo

        Ini.WriteString('PAF','VersaoER',fsIdentPAF.VersaoER);             // Versão do Roteiro Executado na Homologação

        Ini.WriteString('PAF','NomeExe',fsIdentPAF.Paf.PrincipalExe.Nome); // Nome do Principal EXE do PAF

        Ini.WriteString('PAF','MD5Exe',fsIdentPAF.Paf.PrincipalExe.MD5);   // MD5  do Principal EXE do PAF

     end ;

     Ini.WriteString('PAF','MD5',fsIdentPAF.ArquivoListaAutenticados.MD5); // MD5 do arquivo que contem a lista de arquivos autenticados


     // Lista de ECFs autorizados a usar o PAF-ECF no estabelecimento

     For I := 0 to fsIdentPAF.ECFsAutorizados.Count-1 do

     begin

        Ident := 'ECF_'+IntToStrZero(I,4);

        Ini.WriteString( 'ECFs', Ident, fsIdentPAF.ECFsAutorizados[I].LinhaDados );

     end ;


     //Inicio da Alteração

     // Lista de Arquivos

     For I := 0 to fsIdentPAF.OutrosArquivos.Count-1 do

     begin

        Ident := 'ARQ_'+IntToStrZero(I,4);

        Ini.WriteString( 'ARQs', Ident, fsIdentPAF.OutrosArquivos[I].LinhaDados );

     end ;

     //Fim da Alteração


     // Lista de parametros adicionais

     For I := 0 to Params.Count-1 do

     begin

        Ident := 'L_'+IntToStrZero(I,4);

        Ini.WriteString( 'Params', Ident, Params[I] );

     end ;


     if GravarDadosPAF and GravarDadosSH then

     begin

       // Calculando o CRC //

       CRC := StringCrc16( fsIdentPAF.Empresa.RazaoSocial +

                           fsIdentPAF.Empresa.CNPJ +

                           fsIdentPAF.Empresa.IE +

                           fsIdentPAF.Empresa.IM +

                           fsIdentPAF.Paf.Nome +

                           fsIdentPAF.Paf.Versao +

                           fsIdentPAF.ArquivoListaAutenticados.MD5 );

       Ini.WriteInteger('CHK','CRC16',CRC);

     end ;


     Ini.GetStrings( SL );


     // DEBUG

     //GravaLog('Arquivo em Memoria: '+sLineBreak+ SL.Text );

     R := Criptografar( SL.Text );

     // DEBUG

     //GravaLog('Arquivo Criptografado: '+sLineBreak+ R );


     if fsCriarBAK then

     begin

        ArqBak := ChangeFileExt( fsNomeCompleto, '.bak');

        DeleteFile( ArqBak );

        RenameFile( fsNomeCompleto, ArqBak );

     end ;


     WriteToTXT( fsNomeCompleto, R, False, False );


     if fsEfetuarFlush then

        FlushToDisk( fsNomeCompleto );


     fsDtHrArquivo := FileDateToDateTime( FileAge( fsNomeCompleto ) );


     if Assigned( fsOnDepoisGravarArquivo ) then

        fsOnDepoisGravarArquivo( Self );

  finally

     Ini.Free ;

     SL.Free;

  end ;

end ;


//Arquivo ACBrPAFClass

  { TACBrECFArquivo }


  TACBrECFArquivo = class( TPersistent )

  private

    fsMD5: string;

    fsNome: String;

    //Linha Adicionada

    function GetLinhaDados : String ;

    //Linha Adicionada

    procedure SetLinhaDados(const AValue : String) ;

    procedure SetMD5(const AValue : string) ;

    procedure SetNome(const AValue : String) ;

  published

    property Nome: String read fsNome write SetNome;

    property MD5: string read fsMD5 write SetMD5;

    //Linha Adicionada

    property LinhaDados : String read GetLinhaDados write SetLinhaDados ;

  end;


//Função Adicionada

function TACBrECFArquivo.GetLinhaDados: String;

begin

  Result := Nome+ '|' +

            MD5;

end;


//Procedimento Adicionada

procedure TACBrECFArquivo.SetLinhaDados(const AValue: String);

var

   SL : TStringList ;

begin

  SL := TStringList.Create;

  try

     SL.Text := StringReplace( AValue, '|', sLineBreak, [rfReplaceAll] ) ;


     if SL.Count < 2 then exit ;


     Nome    := SL[0] ;

     MD5     := SL[1] ;

  finally

     SL.Free;

  end ;

end;

Segue arquivos alterados:

ACBrAAC.pas

ACBrPAFClass.pas

Postado

Gostaria que dessem uma analisada nas alterações que fiz.

ACBrAAC.IdentPaf.OutrosArquivos essa propriedade são os arquivos usados pelo paf?

Se sim, quando abro o arquivo e insiro algum arquivo com seu respectivo md5, que salvo o mesmo.

E depois abro ele novamente não estava vindo os dados salvos no mesmo.

Não sei se é permitido salvar a lista de arquivos no arquivo auxiliar, se for possivel eu implementei essa alteração.

Realmente essa propriedade não é salva no arquivo auxiliar, mas poderia. Ela foi criada com a finalidade de atender o Relatório Identificação do PAF-ECF, na hora de impressão, mas decidimos não gravar a relação para não sobrecarregar o arquivo auxiliar, tenha em mente que esse arquivo é manipulado constantemente, para atualizar GT, então quanto maior ele seja mais probabilidade de erro, aconselho a vc montar essa lista dinamicamente, lendo os arquivo do diretório, pois vc terá que fazer isso toda hora para passar o MD neles, ou guardar essa relação eu outro lugar, e dessa leitura dinâmica alimentar, essa propriedade.

Obs: Se os componentes ACBrAAC e ACBrPAF, estiverem interligados, vc só precisa alimentar a propriedade OutrosArquivo, pois ela sever como fonte para que o registro N3, seja gerado com a lista correta.

Abraço

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

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

The popup will be closed in 10 segundos...