Fórum Gravar dados cfe.niveis das contas? #336843
27/01/2007
0
Bom a estrutura vai ser + ou - assim no banco
(para firebird)
sequencia Integer (autoincremento)
conta varchar (12) (cim index unique)
DescrConta varchar (60)
reduzido varchar (6)
GrupoConta varchar (35)
*************************************
Entao a gravaçao vai ser + ou - assim
seq.......conta...........descr..............................reduz....grupo conta
1...........1................ativo.................................1......................
2...........1.1.............ativo circulante...................2......ativo........
3...........1.1.01........disponibilidades..................3......ativo circulante
4..........1.1.01.01....disp.imediato......................4.....disponibilidades
5..........1.1.01.01.0001..caixa...........................6.....disp.imediato
ou seja sempre gravar cfe. o nivel da conta.
O que eu nao estou conseguindo fazer eh saber como vai achar a qual nivel da conta pertence para gravar, pois a parte [b:ddce6500b8]Grupo da Conta[/b:ddce6500b8] deve ser gravado automatico respeitando os grupos a que pertence.
Exemplo depois eu gravar bancos
6.......[color=red:ddce6500b8]1.1.01[/color:ddce6500b8].02 bancos c/movimento.....7...disponibilidades
7.......[color=red:ddce6500b8]1.1.01[/color:ddce6500b8][color=blue:ddce6500b8].02[/color:ddce6500b8].0001...Banco do brasil....8...banco c/movimento
Ou seja a minha dificudade eh jogar para o grupo de conta certo.
Agradeço a ajuda de todos
Adriano
Adriano_servitec
Curtir tópico
+ 0Posts
27/01/2007
Adriano_servitec
if application.messagebox(´Deseja gravar este Lançamento?´, ´Gravar Dados´, MB_ICONQUESTION
+ MB_YESNO) = IDYES then BEGIN
dm.TBPlano.Last;
ProxNum:=dm.TBPlano.FieldByName(´reduzido´).AsInteger +1;
dm.TBPlano.Append;
dm.TBPlano.Edit;
dm.TBPlano.FieldByName(´reduzido´).AsInteger:=ProxNum;
dm.TBPlano.FieldByName(´conta´).AsString:=e1.text;
dm.TBPlano.FieldByName(´grau_cta´).AsString:=e2.text;
dm.TBPlano.FieldByName(´descricao´).AsString:=e3.text;
dm.TbPlano.FieldByName(´cta_reduz´).AsString:=IntToStr(dm.TBPlanoreduzido.value);
if dm.tbplano.fieldbyname(´conta´).asString = ´11´ then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´ATIVO´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´1´;
end else
begin
if (dm.tbplano.fieldbyname(´conta´).asString >= ´1101´) and (dm.tbplano.fieldbyname(´conta´).asString <=´1199´) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´ATIVO CIRCULANTE´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´11´;
end else
begin
if (dm.tbplano.fieldbyname(´conta´).asString >= ´110101´) and (dm.tbplano.fieldbyname(´conta´).asString <= ´110199´) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´DISPONIBILIDADES´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´1101´;
end;
//begin
if (dm.tbplano.fieldbyname(´conta´).asString >= ´11010100001´) and (dm.tbplano.fieldbyname(´conta´).asString <=´11010199999´) then
//begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´DISPONIVEL IMEDIATO´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´110101´;
end;//final do if
//começo do try/except
try
dm.TBPlano.Post; {para gravar na tabela}
if not dm.thplano.InTransaction then dm.thplano.StartTransaction; // Reinicia o transaction
//dm.tLConta.Commit; //comitar o transaction
dm.thplano.CommitRetaining;
DM.tbplano.Close;
DM.tbplano.Open;
except
on E:Exception do
begin
dm.Thplano.RollBackRetaining; //Rollback no Trasaction
ShowMessage(´Falha na Inclusão dos Dados!´#1310´ Mensagem: ´+E.Message);
end;
end;//final do try/except
end;
end;
{Para abir a tabela e atualizar o dbgrid}
DM.Tbplano.Close;
DM.tbPlano.Open;
end;Nao to sabendo a maneira correta de jogar para o campo GRUPOCONTAS
Alguem pode me ajudar?
Adriano.
Gostei + 0
27/01/2007
Rinez
Você deve primeiro fazer todo plano de contas:
1 Ativo
1.1 Ativo Circulante
1.1.01 Ativo Circulante Disponibilidades
1.1.01.0001 Ativo Cirtulante Disponibilidades Caixa
. . .
. . .
2 Passivo
2.1 .....
2.1.01 ...
2.1.01.0001 ...
A gravação deve ser feita com o ponto, pois este é que definirá a posição do grupo da conta assim:
1. Ativo
1.1. Ativo Circulate
1.1.01. Ativo Circulante Disponibilidades
Com o cadastro de todas as contas o lançamento será feito buscando no cadastro a conta do lançamento.
Agora para listar os lançamentos você separa o grupo.
qualquer coisa estamos aí.
Prof. Zenir
Gostei + 0
27/01/2007
Adriano_servitec
Ai resolvi fazer um monte de ifs, mais acho que existe um modo mais pratico pois desta forma nao acho que esta correto, e outra duvida tambem o plano de conta deve ficar aberto para novos cadastros, principalmente de clientes/forencedores.
Estou tentando assim
Bom a estrutura vai ser + ou - assim no banco
*********************************************************
* codigo para gravar o plano de contas
**********************************************************
To achando muito complicado fazer esse monte de ifs
procedure TFPlano.BitBtn2Click(Sender: TObject);
var
ok: boolean;
SubGrupo: Integer;
Nodo, SubNodo, SubNodo2, SubNodo3, SubNodo4, SubNodo5: TTreeNode;
begin
if application.messagebox(´Deseja gravar este Lançamento?´, ´Gravar Dados´, MB_ICONQUESTION
+ MB_YESNO) = IDYES then BEGIN
dm.TBPlano.Edit;
dm.TBPlano.FieldByName(´conta´).AsString:=e1.text;
dm.TBPlano.FieldByName(´grau_cta´).AsString:=e2.text;
dm.TBPlano.FieldByName(´descricao´).AsString:=e3.text;
dm.TbPlano.FieldByName(´cta_reduz´).AsString:=IntToStr(dm.TBPlanoreduzido.value);
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´1´;
SubGrupo := StrToInt(SoNum(E1.Text));
{nivel 1}
if (( subgrupo >= 11 ) and ( subgrupo <=19 )) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´ATIVO´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´1´;
end else
{nivel 1}
if (( subgrupo >= 21 ) AND ( subgrupo <= 29 )) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´PASSIVO´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´2´;
end else
{nivel 1}
if (( subgrupo >= 31 ) AND ( subgrupo <= 39 )) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´CONTAS DE RESULTADO´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´3´;
end else
{nivel 2}
if (( subgrupo >= 1101 ) AND ( subgrupo <= 1199 )) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´ATIVO CIRCULANTE´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´11´;
end else
if (( subgrupo >= 1201 ) AND ( subgrupo <= 1299 )) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´ATIVO PERMANENTE´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´11´;
end else
{nivel 3}
if (( subgrupo >= 110101 ) AND ( subgrupo <= 110199 )) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´DISPONIBILIDADES´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´1101´;
end else
if (( subgrupo >= 110201 ) AND ( subgrupo <= 110299 )) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´CREDITOS A RECEBER´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´1101´;
end else
{nivel 4}
if (( subgrupo >= 1101010001 ) AND ( subgrupo <= 1101019999 )) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´DISPONIVEL IMEDIATO´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´110101´;
end else
if (( subgrupo >= 1101020001 ) AND ( subgrupo <= 1101029999 )) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´BANCO CONTA MOVIMENTO´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´110101´;
end else
if (( subgrupo >= 1102010001 ) AND ( subgrupo <= 1102029999 )) then
begin
dm.tbplano.fieldbyname(´GRUPOCONTA´).asString:=´CLIENTES´;
dm.TBPlano.FieldByName(´NUMconta´).AsString:=´110101´;
end;//final do if
//começo do try/except
try
dm.TBPlano.Post; {para gravar na tabela}
if not dm.thplano.InTransaction then dm.thplano.StartTransaction; // Reinicia o transaction
//dm.tLConta.Commit; //comitar o transaction
dm.thplano.CommitRetaining;
DM.tbplano.Close;
DM.tbplano.Open;
DM.Qtbplano.Close;
DM.Qtbplano.Open;
label2.caption:=inttostr(dm.TbPlano.fieldbyname(´reduzido´).asInteger);
except
on E:Exception do
begin
dm.Thplano.RollBackRetaining; //Rollback no Trasaction
ShowMessage(´Falha na Inclusão dos Dados!´#1310´ Mensagem: ´+E.Message);
end;
end;//final do try/except
end;
DM.tbplano.Close;
DM.tbplano.Open;
DM.Qtbplano.Close;
DM.Qtbplano.Open;
end;Serah que existe uma maneira mais pratica de eu gravar estes dados?
Sobre os [b:cda1647ac2]pontos[/b:cda1647ac2], pode me explicar melhor como seria? Usando o comando POS ou outro?
Obrigado
Adriano.
Gostei + 0
28/01/2007
Rinez
Coloque aqui seu plano de contas.
Eu particularmente não costumo gravar com append.
Eu uso Dbexpress e gravo meus dados a partir de edits abrindo a transação e uso
Insert tudo na unha mesmo.
Sabendo como é seu plano de contas, talvez eu poderia ajudar mas esse monte de ifs não precisa.
Prof. Zenir
Gostei + 0
28/01/2007
Adriano_servitec
1º Criei uma funçao para tratar os pontos
//*****funçao para tratar os pontos plano de contas********** function TrataPontoPlanoContas(const S: String; SubStr: String; Parte: Byte): String; var i: Byte; j: Word; Aux: String; begin Result := ´.´; Aux := S; for i := 1 to Parte-1 do begin j := Pos(SubStr,Aux); Aux := Copy(Aux,j+1,Length(Aux)-j); end; j := Pos(SubStr,Aux); if J > 0 then Result := Trim(Copy(Aux,1,J-1)) else Result := Trim(Aux); end; //***************final da funçao***********
Depois resolvi mostrar em alguns labels os resultados que estao num maskedit.
procedure TFPlano.BitBtn6Click(Sender: TObject); var S:String; // trataponto begin S := e1.text; label3.caption := TrataPontoPlanoContas(S,´.´,1); if TrataPontoPlanoContas(S,´.´,2) = ´´ then label4.Caption := ´´ else label4.caption := ( TrataPontoPlanoContas(S,´.´,1) + TrataPontoPlanoContas(S,´.´,2) ); if TrataPontoPlanoContas(S,´.´,3) = ´´ then label5.Caption := ´´ else label5.caption := ( TrataPontoPlanoContas(S,´.´,1) + TrataPontoPlanoContas(S,´.´,2) + TrataPontoPlanoContas(S,´.´,3) ); if TrataPontoPlanoContas(S,´.´,4) = ´´ then label6.Caption := ´´ else label6.caption := ( TrataPontoPlanoContas(S,´.´,1) + TrataPontoPlanoContas(S,´.´,2) + TrataPontoPlanoContas(S,´.´,3) + TrataPontoPlanoContas(S,´.´,4) ); if TrataPontoPlanoContas(S,´.´,5) = ´´ then label7.Caption := ´´ else label7.caption := ( TrataPontoPlanoContas(S,´.´,1) + TrataPontoPlanoContas(S,´.´,2) + TrataPontoPlanoContas(S,´.´,3) + TrataPontoPlanoContas(S,´.´,4) + TrataPontoPlanoContas(S,´.´,5) ); end;
Bom eu optei por fazer o plano de contas assim
1
1.1
1.1.01
1.1.01.01
1.1.01.01.0001
...
...
Ai se eu gravar a conta 1 no banco o campo nivel1 vai receber a mesma conta, agora se eu gravar 1.1.01.01.0001 vai gravar do nivel1 ateh o nivel5 separando cfe. os labels acima.
No caso devo somente tratar algum exeption para que nao grave conta de nivel 5 que nao contenha os niveis4,3 e 2.
Bom entao a pergunta, eh + ou - assim que cria um plano de contas contabil?
Grato pela atençao
Adriano.
Gostei + 0
28/01/2007
Rinez
Cadastre todas as contas e veja como vai fazer os lançamentos.
No modelo de plano de contas a seguir foi adotado o seguinte critério de graduação dos códigos:
1º grau 2ºgrau 3ºgrau 4ºgrau 5º grau
X. X. XX. XX. XXXX
> 1º grau (1 dígito que indica a estrutura)
> 2º grau (1 dígito que indica o grupo)
> 3º grau (2 dígitos que indica o sub-grupo)
> 4º grau (2 dígitos que indicam as divisões da
subcontas)
> 5º grau (4 dígitos que indicam a conta objeto de l Lançamento)
Gostei + 0
29/01/2007
Adriano_servitec
Valeu a ajuda ai amigo.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)