GARANTIR DESCONTO

Fórum Gravar dados cfe.niveis das contas? #336843

27/01/2007

0

Pessoal bom dia, gostaria de saber como fazer uma gravaçao assim

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

Adriano_servitec

Responder

Posts

27/01/2007

Adriano_servitec

Acho que to fazendo tudo errado, nao funciona assim
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.


Responder

Gostei + 0

27/01/2007

Rinez

Prezado Adriano:
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


Responder

Gostei + 0

27/01/2007

Adriano_servitec

Prezado Adriano: 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
Olah Prof.Zenir, obrigado por responder, bom a minha duvida seria como cadastrar o plano de contas, pois a minha ideia seria na hora do lançamento ir gravando os dados ao grupo que pertençe para depois eu gerar o balançete que fara a soma total pelo grupo.

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
CREATE TABLE PLANOCONTAS ( CONTA VARCHAR(15) NOT NULL, DESCRICAO VARCHAR(60), CTA_REDUZ VARCHAR(10), GRAU_CTA VARCHAR(1), TIPO_CTA CHAR(1), ZERA_PER SMALLINT, ZERA_ANO SMALLINT, TIPO_MF CHAR(1), C_CUSTO VARCHAR(10), ATIVO SMALLINT, DATA_CRIA DATE, HORA_CRIA TIME, OBS BLOB SUB_TYPE 1 SEGMENT SIZE 80, REDUZIDO INTEGER, NUMCONTA VARCHAR(15), GRUPOCONTA VARCHAR(35) );


*********************************************************
* 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.


Responder

Gostei + 0

28/01/2007

Rinez

Prezado Adriano
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


Responder

Gostei + 0

28/01/2007

Adriano_servitec

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
Olah Professor Zenir, analizando e pensando sobre a tua resposta sobre utilizar pontos para separar os niveis acho que cheguei a conclusao de que deveria separar assim:
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;
Ai minha ideia eh criar 5 campos de niveis tipo nivel1, nivel2, nivel3, nivel4, nivel5, assim todas as contas que vou gravando no form Plano de Contas vao ser gravado juntos os resultados das labels que foi gerado os niveis da conta. Eh isso?

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.


Responder

Gostei + 0

28/01/2007

Rinez

Adriano acredito que esta no caminho certo.
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)


Responder

Gostei + 0

29/01/2007

Adriano_servitec

Adriano acredito que esta no caminho certo. 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)
Obrigado Zenir, acho que agora esta como eu preciso. :D

Valeu a ajuda ai amigo.


Responder

Gostei + 0

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

Aceitar