Fórum Estrutura plano de contas e Treeview #452759

21/08/2013

0

Ao utilizar o código abaixo para criar conta de Centro de custo com estrutura #.###.#### o sistema não consegui gerar a sequência correta.

Eu crio a 1. Despesas. Até aí tudo bem.

Quando eu vou criar a conta filha ele cria com código 1.1, daí altera para a estrutura 1.001 e fica tudo certo.

Quando vou criar a segunda conta filha, ele gera o código 1.001.001 ele gera o código 1.0011 quando o certo seria 1.001.1.

Daí eu altero manual e coloco como 2.001.001 e fica tudo certo novamente. Mas daí vem outro problema bastante ruim, quando gero outra conta que deveria ter o código 2.001.002 ele gera o código 2.001002.

Poderia me ajudar em como solucionar?

Pensei em criar no arquivo INI o campo de estrutura que quero trabalhar para o sistema formatar e la colocar por exemplo 9.999.999 ou #.###.### para que o sistema crie com essa estrutura definida, mas não sei como formar ou criar função para contar os dígitos formatar para os devidos lugares.

function CriaConta(ContaPai,ContaWoner: String): String;
var
  tmpConta: TADODataSet;
  vPos,qNumero_Conta,vPai: Integer;
  dv_subconta,DV,DV_NovaConta,
  GrupoPai, ContaCorrelata,conta: string;
begin
  result := ''1.'';

  tmpConta := TADODataSet.Create(nil);
  try
    tmpConta.Connection := cdsCentrocusto.Connection;
    tmpConta.CommandText := ''SELECT Max(CentroCusto.Conta) AS SubConta''
                           +'' FROM CentroCusto''
                           +'' GROUP BY CentroCusto.IdCentroCusto_Woner''
                           +'' HAVING CentroCusto.IdCentroCusto_Woner Like :pConta;'';
    tmpConta.Parameters.ParamByName(''pConta'').Value := ContaWoner;
    try
      tmpConta.Open;
    except
      On E: Exception do
        raise E.Create(PChar(''Erro ao tentar criar nova conta!''+#13+#10+''ERRO: ''+E.Message));
    end;
    DV_SubConta := tmpConta.FieldByName(''SubConta'').AsString;
    vPos := Pos(''.'', Funcoes.ReversoTexto(DV_SubConta));
    if vPos > 0 then
    begin
      DV := RightStr(DV_SubConta, vPos);
      qNumero_Conta := vPos-1;
    end
    else
    begin
      DV := DV_SubConta;
      qNumero_Conta := 0;
    end;
    DV := StringReplace(DV, ''.'', '''',[rfReplaceAll]);
    if Trim(DV) = EmptyStr then
      DV := ''0'';
    vPos := StrToInt(DV);
    Inc(vPos);
    vPai := (Pos(''.'',ContaPai)-1);
    if vPai = 1 then
      result := ContaPai+ZerosEsquerda(vPos,qNumero_Conta-1)
    else
      result := ContaPai+''.''+ZerosEsquerda(vPos,qNumero_Conta-1);
  finally
    tmpconta.Close;
    tmpConta.Free;
  end;
end;
Paulo Andrade

Paulo Andrade

Responder

Posts

24/08/2013

Paulo Andrade

Ninguém pode dar uma luz?
Responder

Gostei + 0

18/05/2015

Paulo Andrade

Sobe
Responder

Gostei + 0

14/06/2015

Paulo Andrade

Sobe
Responder

Gostei + 0

25/06/2015

Paulo Andrade

Esse fórum já foi ativo. Nos últimos, difícil obter uma resposta.
Responder

Gostei + 0

25/06/2015

Dorivan Sousa

oi SiD tudo bem?


seguinte eu preencho uma treeview ver se ajuda


procedure PreencherTreeView(Qry: TIBQuery;
  Tv: TsTreeView; Pai: TTreeNode; Index: Integer);

  function NivelHierarquico( const s : ShortString ) : Byte;
  begin
    // Descobre o nivel hierarquico através do número de pontos do código
    Result := Length( s ) - Length( StringReplace( s, '.', '', [rfReplaceAll]));
  end;

  var NivelAtual, NovoNivel, i : Byte;
    Descricao : ShortString;
    NovoNo : TTreeNode;
begin
  NivelAtual := NivelHierarquico( (Qry.FieldByName('nivel').AsString) );
  repeat
    Descricao := Qry.FieldByName('descricao').AsString;
    NovoNivel := NivelHierarquico( (Qry.FieldByName('nivel').AsString) );

    if NovoNivel = NivelAtual then
    begin
      NovoNo := tv.Items.AddChild( Pai, Descricao );
    end else
    begin
      if ( NovoNivel < NivelAtual ) then
      begin
        for i := 1 to NivelAtual - NovoNivel do
          Pai := Pai.Parent
      end  else
      begin
        Pai := NovoNo;
      end;
      PreencherTreeView( qry, tv, Pai, 0);
    end;
    qry.Next;
    Application.ProcessMessages;
  until qry.EOF;
end;

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar