Ir para conteúdo
  • Cadastre-se

dev botao

Duplicidade de diretórios para salvar NFe


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

Recommended Posts

Boa tarde, depurei agora o sistema, e acabei de ver que a função TArquivosConf.GetPath está sendo chamada no inicio do sistema ao ler as configurações e configurar o componente conforme acontece no exemplo da NFe do ACBr, após fechar o sistema ele chama novamente esta função e dobra o caminho após percorrer os itens da FOrdenacaoPath.Item.

Isto deveria acontecer mesmo? ou estou fazendo alguma sobreposição de propriedades do componentes que causa essa duplicação?

Link para o comentário
Compartilhar em outros sites

  • Moderadores
40 minutos atrás, Arthur Freitas disse:

Boa tarde, depurei agora o sistema, e acabei de ver que a função TArquivosConf.GetPath está sendo chamada no inicio do sistema ao ler as configurações e configurar o componente conforme acontece no exemplo da NFe do ACBr, após fechar o sistema ele chama novamente esta função e dobra o caminho após percorrer os itens da FOrdenacaoPath.Item.

Isto deveria acontecer mesmo? ou estou fazendo alguma sobreposição de propriedades do componentes que causa essa duplicação?

Não deveria. Estranho mesmo. por favor se quiser fazer acorreção e anexar aqui a unit

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

Boa tarde,

Consegui resovler adicionando uma verificação de proteção na parametrização do PathSalvar na função TArquivosConf.GetPath, caso haja melhoramentos no código, desculpe em nao ajudar 100%
Estou adicionando a unit em anexo

function TArquivosConf.GetPath(const APath: string; const ALiteral: string; const CNPJ: string = ''; const IE: string = ''; Data: TDateTime = 0; const ModeloDescr: string = ''): string;

  procedure AddPathOrder(AAdicionar: Boolean; AItemOrdenacaoPath: TTagOrdenacaoPath);
  begin
    if AAdicionar then
      FOrdenacaoPath.Add.Item := AItemOrdenacaoPath;
  end;

var
  wDia, wMes, wAno: word;
  Dir, Modelo, sAno, sMes, sDia, CNPJ_temp, IE_temp: string;
  LenLiteral, i: integer;
begin
  if EstaVazio(APath) then
    Dir := PathSalvar
  else
    Dir := APath;

  //se nao foi informada nenhuma ordenação, cria ordenação na ordem anterior (compatibilidade)
  if (FOrdenacaoPath.Count = 0) then
  begin
    AddPathOrder(SepararPorCNPJ, opCNPJ);
    AddPathOrder(SepararPorIE, opIE);
    AddPathOrder(SepararPorModelo, opModelo);
    AddPathOrder((SepararPorAno or SepararPorMes or SepararPorDia), opData);
    AddPathOrder(AdicionarLiteral, opLiteral);
  end;

  for i := 0 to FOrdenacaoPath.Count - 1 do
  begin
    case FOrdenacaoPath[i].Item of
      opCNPJ:
        begin
          CNPJ_temp := OnlyNumber(CNPJ);

          if EstaVazio(CNPJ_temp) then
            if Assigned(fpConfiguracoes.Owner) then
              CNPJ_temp := OnlyNumber(TACBrDFe(fpConfiguracoes.Owner).SSL.CertCNPJ);

          if NaoEstaVazio(CNPJ_temp) and not AnsiContainsText(Dir, CNPJ_temp) then
            Dir := PathWithDelim(Dir) + CNPJ_temp;
        end;

      opIE:
        begin
          IE_temp := OnlyNumber(IE);

          if NaoEstaVazio(IE_temp) and not AnsiContainsText(Dir, IE_temp) then
            Dir := PathWithDelim(Dir) + IE_temp;
        end;

      opModelo:
        begin
          if (ModeloDescr = '') and Assigned(fpConfiguracoes.Owner) then
            Modelo := TACBrDFe(fpConfiguracoes.Owner).GetNomeModeloDFe
          else
            Modelo := ModeloDescr;

          if not AnsiContainsText(Dir, Modelo) then
            Dir := PathWithDelim(Dir) + Modelo;
        end;

      opData:
        begin
          if Data = 0 then
            Data := Now;

          DecodeDate(Data, wAno, wMes, wDia);
          sDia := IntToStrZero(wDia, 2);
          sMes := IntToStrZero(wMes, 2);
          sAno := IntToStrZero(wAno, 4);

          if SepararPorAno and not AnsiContainsText(Dir, sAno) then
            Dir := PathWithDelim(Dir) + sAno;

          if SepararPorMes and not AnsiContainsText(Dir, sMes) then
          begin
            if SepararPorAno and not AnsiContainsText(Dir, sMes) then
              Dir := PathWithDelim(Dir) + sMes
            else if not AnsiContainsText(Dir, sAno + sMes) then
              Dir := PathWithDelim(Dir) + sAno + sMes;

            if SepararPorDia and not AnsiContainsText(Dir, sDia) then
              Dir := PathWithDelim(Dir) + sDia;
          end;
        end;

      opLiteral:
        begin
          LenLiteral := Length(ALiteral);

          if (LenLiteral > 0) then
          begin
            if (RightStr(Dir, LenLiteral) <> ALiteral) and not AnsiContainsText(Dir, ALiteral) then
              Dir := PathWithDelim(Dir) + ALiteral;
          end;
        end;
    end;
  end;

  if not DirectoryExists(Dir) then
    ForceDirectories(Dir);

  Result := Dir;
end;

 

ACBrDFeConfiguracoes.pas

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Creio não ser possível usar o arquivo para comparar a mudança visto que deve ter aplicado algum formatador

tente reverter e efetuar somente a correção, veja abaixo

image.png

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

18 minutos atrás, Juliomar Marchetti disse:

Creio não ser possível usar o arquivo para comparar a mudança visto que deve ter aplicado algum formatador

tente reverter e efetuar somente a correção, veja abaixo

image.png

Pois eh. Apliquei sim. Do cnpack. Vou fazer isso. De qualquer forma aqui resolveu comparando se já havia a informação que o fOrdenacaoPath.Item

adiciona para cada item ao diretório Path salvar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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