Fórum TreeView com plano de contas ? #233405
20/05/2004
0
criei a tabela do Financeiro assim:
Nome campo tipo tamanho
Cod_conta + * codigo auto incremente
Desc_campo A 50 Descrição do campo
Tipo_conta A 1 Debito ou credito
Obs A 255 Observação
Cod_grupo I Codigo mestre ou codigo conta principal
Esta tabela e baseada no modelo mostrado aqui neste forum, a duvida e o seguinte como eu faço para quanto adicionar um grupo ou um sub grupo sequente no treeview jogar um sobre o outro. como faço a vinculação com o cod_grupo meste ?
peguei um exemplo do treeview aqui no clube delphi mas não estou conseguindo converter para o meu caso.
no campo debido credito uso um dbRadioGrup
Se alguem puder me ajudar agradeço !
Hugo Fabrício
Hugofab
Curtir tópico
+ 0Posts
21/05/2004
Motta
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, ComCtrls, Buttons, ImgList, Grids, DBGrids;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Query1: TQuery;
SpeedButton1: TSpeedButton;
ImageList1: TImageList;
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
procedure PreencherTreeView( qry : TDataset; tv : TTreeView; Pai :
TTreeNode );
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.PreencherTreeView( qry : TDataset; tv : TTreeView; Pai :
TTreeNode );
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.Fields[0].AsString );
repeat
Descricao := qry.Fields[0].AsString + ´ - ´ + qry.Fields[1].AsString;
NovoNivel := NivelHierarquico( qry.Fields[0].AsString );
if NovoNivel = NivelAtual then
begin
NovoNo := tv.Items.AddChild( Pai, Descricao );
NovoNo.ImageIndex := NivelAtual * 2;
NovoNo.SelectedIndex := NivelAtual * 2;
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 );
end;
qry.Next;
Application.ProcessMessages;
until qry.EOF;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
query1.open;
try
PreencherTreeView(query1,treeview1,nil);
except
end;
end;
end.
Gostei + 0
21/05/2004
Hugofab
Hugo Fabrício
hugo_fabricio@hotmail.com
Gostei + 0
11/10/2005
Edivaldo_ap
Edivaldo André Pereira
Gostei + 0
11/10/2005
Zumbi
001.001.001
001.001.002
....
assim por diante
Gostei + 0
30/10/2005
Edivaldo_ap
Minha dúvida agora é a seguinte, preciso excluir o registro no banco quando eu seleciona-lo na treeview e clicar no botão excluir, mas não to conseguindo ele está excluindo sempre o primeiro registro do banco e não aquele que eu seleciono na tree.
Edivaldo André Pereira.
Gostei + 0
28/01/2006
Edivaldo_ap
Como fazer para testar o que o usuário digitou antes de gravar... exemplo...
tenho a seguinte mascara no banco 9.9.9.99.9999
o usuário digita no dbedit o codigo 1.1.1.11.1111, o que eu preciso saber é como testar se as contas
1
1.1
1.1.1
1.1.1.11
tem que testar se elas já estão cadastradas pois se eu cadastrar a última direto o sistema da pau.
sabendo ainda que a mascara o usuario cria num form separado, ou seja, eu não sei que mascara o sistema terá é definida pelo usuario.
Edivaldo
Gostei + 0
30/01/2006
Smfnurrali
como no meu casa pode variar o n° de digitos nos grupos pra cada cliente´pode variar eu criei um vetor chamado grupo que recebe o n° de digitos de cada nivel qnd cria o form.
depois criei essa função...
//******************************************************************************
function TFormCadastroPlanoContas.VerificaConta(conta,gr,id:integer):boolean;
//******************************************************************************
var qryConta:TIBQuery;
aux:string;
digitos:integer;
begin
digitos := grupo[gr];
aux := copy(inttostr(conta),1,digitos);
qryConta := TIBQuery.Create(self);
qryConta.Database := dtmPrincipal.IBDatabase;
qryConta.SQL.Text := ´select * ´+
´from planocontas ´+
´where ´+
´id_empresa = ´+inttostr(id)+´ and ´+
´conta = ´+ aux;
qryConta.Open;
Result := qryConta.IsEmpty;
end;
que é chamada no on exit
//==============================================================================
procedure TFormCadastroPlanoContas.edtCodigoExit(Sender: TObject);
//==============================================================================
var ct:integer;
begin
inherited;
If dtsPrincipal.State in [dsedit,dsinsert] then
begin
For ct:=1 to 6 do
begin
If Length(edtCodigo.Text) = Grupo[ct] then
begin
If ct > 1 then
begin
If (VerificaConta(strtoint(edtCodigo.Text),ct-1,dtmPrincipal.tblEmpresasID_EMPRESA.AsInteger)) then
begin
dtmPrincipal.MostraMensagem(´CONTA NÃO POSSUI NIVEL SUPERIOR!´);
edtCodigo.SetFocus;
exit;
end;
end;
If not (VerificaConta(strtoint(edtCodigo.Text),ct,dtmPrincipal.tblEmpresasID_EMPRESA.AsInteger)) then
begin
dtmPrincipal.MostraMensagem(´CONTA JÁ CADASTRADA!´);
edtCodigo.SetFocus;
exit;
end;
dtmPrincipal.tblPlanoContasCOD_CONTA.AsInteger := strtoint(CalculaModulo11(edtCodigo.Text));
dtmPrincipal.tblPlanoContasGRUPO.AsInteger := ct;
Exit;
end;
end;
dtmPrincipal.MostraMensagem(´CONTA INVÁLIDA!´);
edtCodigo.SetFocus;
exit;
end;
end;
Talvez isso te dê uma luz...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)