Fórum Estrutura plano de contas e Treeview #452759
21/08/2013
0
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
Curtir tópico
+ 0Posts
24/08/2013
Paulo Andrade
Gostei + 0
18/05/2015
Paulo Andrade
Gostei + 0
14/06/2015
Paulo Andrade
Gostei + 0
25/06/2015
Paulo Andrade
Gostei + 0
25/06/2015
Dorivan Sousa
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;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)