Access inicio | | | | | |
Olá,
Seja Bem Vindo ao Blog.

Conecte-se ou registre-se e utilize gratuitamente este equipamento, temos exemplos referente a criação de banco de dados e desenvolvimento de softwares e programas utilizando o Microsoft Access.


Administração do Blog AccessDoProgramador.

Plano de Contas Contábil

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

13022014

Mensagem 

Plano de Contas Contábil






Bom dia

Tenho as seguintes tabelas:

tb_Classes:
Id_Classe                                                 Inteiro longo                               4
Grupo                                                     Texto Curto                               255
Descrição                                                 Texto Curto                               255
Classe                                                    Texto Curto                               255
CodIni1                                                   Duplo                                       8

reg_I050  (plano de contas):
Id_Registro                                               Inteiro longo                               4
Conta                                                     Texto Curto                               255
NomeAgrupador                                             Texto Curto                               255
Grau                                                      Texto Curto                               255
Item_Plano                                                Texto Curto                               255
Id_Classe                                                 Inteiro longo                               4
Conta_Plano                                               Texto Curto                               255
CodIni                                                    Texto Curto                               255


Tenho uma relação criada entre ambas as tabelas para a classe pois, na tabela classe através do campo CodIni1, tenho o número inicial para a geração daquele grupo de contas.


Estou usando o código abaixo para gerar as contas:

Código:
On Error GoTo TrataErro
Dim Rs As DAO.Recordset
Dim ContaItem As Double
Dim MontaContador As Double
Dim VarIni As Double

Set Rs = CurrentDb.OpenRecordset("SELECT reg_I050.Id_Registro, reg_I050.Conta, reg_I050.NomeAgrupador, reg_I050.Grau, reg_I050.Item_Plano, reg_I050.Id_Classe, reg_I050.Conta_Plano, reg_I050.CodIni FROM reg_I050 WHERE (((reg_I050.Grau)='2'));")

Do While Not Rs.EOF
    Rs.Edit
    
    'Rs(0) - Id_Registro
    'Rs(1) - Conta
    'Rs(2) - NomeAgrupador
    'Rs(3) - Grau
    'Rs(4) - Item_Plano
    'Rs(5) - Id_Classe
    'Rs(6) - Conta_Plano
    'Rs(7) - CodIni - Tabela Classes
    
    If Rs(3) = "2" Then
        VarIni = Rs(7)
        ContaItem = ContaItem + 1
        MontaContador = ContaItem
        Rs(6) = Format(MontaContador, "1000")
        Rs.Update
    Else
        ContaItem = 0
    End If
    
    Rs.MoveNext
Loop

Rs.Close

MsgBox "Contas Montadas com sucesso.", vbInformation, "Processo Completado OK."

Exit_TrataErro:
Exit Sub

TrataErro:
    Select Case Err.Number
        Case 94
            Resume Next
        Case Else
            MsgBox "Erro na Montagem!! " & vbCrLf & Err.Number & vbCrLf & Err.Description, vbCritical, "Aviso", _
            Err.HelpFile, Err.HelpContext
    End Select
    Resume TrataErro:




Minha dificuldade é que, preciso respeitar o código inicial informado na tabela classes para que comece a montagem da conta e não estou conseguindo fazer isto...., consigo apenas gerar um número sequencial.......


Alguém tem alguma dica de como possa fazê-lo

o link para download:

sendspace.com xjbm48

Att.
Vinicius


vinicius.anna

Brasil


Voltar ao Topo Ir em baixo

- Tópicos similares
Compartilhar este artigo em: BookmarksDiggRedditDel.icio.usGoogleLiveSlashdotNetscapeTechnoratiStumbleUponNewsvineFurlYahoo!Smarking

Plano de Contas Contábil :: Comentários

avatar

Mensagem em Qui 27 Fev 2014 - 21:10 por Dilson

Olá,

Vamos levar a formação desse raciocínio gradativamente.

Analisei as suas postagens e sinceramente ainda não ficou claro para mim o que pretende.

Acredito que ainda não consegui entender porque não defines bem os parâmetros na explicação. Por exemplo: Preciso saber quais campos precisam ser preenchidos na ação do loop.

- Grau;
- Id_Classe;
- Cod_Ini;
Ou
-CodExa

Aguardo para continuar as perguntas.

Voltar ao Topo Ir em baixo

Mensagem em Sex 28 Fev 2014 - 8:42 por vinicius.anna

Bom dia

Dílson,

Desculpe a falta de clareza...., vou tentar se mais claro:

A conta que preciso preencher no loop é a ContaExa:



sendspace.com m9ulxh - Após o loop;

sendspace.com oc70qp - Antes do loop;

Disponibilizo duas planilhas. Em uma delas tenho a tabela na forma original. Em outra, o ajuste que preciso fazer.


Funciona assim:

- o Id_Classe na tabela Reg_i050, contém a indicação da natureza da conta (ativo e suas subdivisões, passivo  e suas subdivisões, e resultado  e suas subdivisões).

- Na tabela classes tenho o campo CodIni1 - que indica o número de início para a geração dos códigos no loop, exemplo:
o Id_Classe 1 da tabela classes indica que a numeração no loop inicia em 1000;
o Id_Classe 2 da tabela classes indica que a numeração no loop inicia em 1100;

O loop varre a tabela reg_i050 e identifica os ids das classes. Onde encontrar o id = 1, inicia a numeração da seguinte forma:
Para grau 1 - (exemplo, id_classe 1) = 1000
Para grau 2 - (exemplo, id_classe 1) = 1000
Para grau 3 - (exemplo, id_classe 1) = 1000
Para grau 4 - (exemplo, id_classe 1) = 1000
Para grau 4 - (exemplo, id_classe 1) = 1000
Para grau 2 - (exemplo, id_classe 1) = 1001

Obrigado

Att. Vinicius

Voltar ao Topo Ir em baixo

avatar

Mensagem em Sab 1 Mar 2014 - 20:15 por Dilson

OK Vinicius, agora entendi, bastando apenas esclarecer um ponto:

Veja este caso:

1500     1         6                           
1500     2          
1500     3
1500     4
1500     4
1501     2 
1501     3
1501     4
1501     4
1502     1         6                           
1502     2          
1502     3
1502     4

Por quê que o grau 2 que está de vermelho somou + 1 diferente do que está de verde que não somou ?

Voltar ao Topo Ir em baixo

Mensagem em Seg 3 Mar 2014 - 20:40 por vinicius.anna

Boa noite Dílson,

Para esta situação, como havia o grau 1, apenas manteve-se o valor do grau 1 para o 2.

att. Vinicius

Voltar ao Topo Ir em baixo

avatar

Mensagem em Qua 5 Mar 2014 - 0:46 por Dilson

Olá,

Precisei mudar o tipo de dado do campo grau para Número. Faça também da mesma forma ou use alguma função para converter em tempo de execução.

Escrevi esse código para fazer a função dos dois botões (1 e 2) da sua amostra. A função do 1° está fazendo na perfeição e a do 2° saberemos depois que você observar a ação.

Aperte no botão limpar e depois aplique este a partir de um botão:


On Error GoTo TratareiErro
Dim rSt As DAO.Recordset
Dim nGrau As Long
Dim buscaConta As Long
Dim contaBuscada As Long
Dim incConta As Long
Dim oldConta As Long
Set rSt = CurrentDb.OpenRecordset("reg_I050")
rSt.MoveLast
rSt.MoveFirst
incConta = 0
    Do While Not rSt.EOF
          nGrau = rSt("Grau")
          buscaConta = Nz(rSt("Id_Classe"))
          If nGrau = 1 Then
          contaBuscada = Nz(DLookup("CodIni1", "tb_Classes", _
                                    "Id_Classe =" & buscaConta))
          End If
          rSt.Edit
          If nGrau = 1 Then
              rSt("ContaExa") = contaBuscada
              rSt("CodIni") = contaBuscada
          ElseIf nGrau = 2 And oldConta > 0 Then
              rSt("ContaExa") = contaBuscada
              incConta = contaBuscada
              contaBuscada = contaBuscada + 1
          ElseIf nGrau = 2 And oldConta = 0 Then
              incConta = incConta + 1
              rSt("ContaExa") = incConta
          ElseIf nGrau > 2 And oldConta = 0 Then
              rSt("ContaExa") = incConta
          End If
          rSt.Update
          oldConta = buscaConta
          rSt.MoveNext
    Loop
rSt.Close
Exit_TratareiErro:
Exit Sub
TratareiErro:
MsgBox "Aconteceu falha neste processamento." _
       & vbCrLf & "Trata-se do erro n°: " & Err.Number _
       & vbCrLf & "Descrição: " _
       & Err.Description, vbInformation, "Erro inesperado"
Exit Sub

Voltar ao Topo Ir em baixo

Mensagem em Qua 5 Mar 2014 - 17:35 por vinicius.anna

Dílson,

Boa tarde,

Muito obrigado....., aqui está o backup já com a função:

sendspace.com h1h5k2

Tenho apenas mais dois detalhes:

o primeiro é o seguinte:

- O código que montou funciona perfeitamente, sem erros e gera quase 100% do que preciso, porém (no backup atualizado onde disponibilizei o link em anexo a este):

-- Na tabela Reg_I050, o registro de chave primária 12 é um registro de grau 3, o grau anterior é o grau 4, então tentei fazer com que acrescenta-se + 1 ao campo contaexa. Ficou 1001, porém, preciso que fique 1002......

--- O outro detalhe, não sei se é possível:

* Na tabela classes, tenho os códigos iniciais para a montagem das contas. Perfeito, está funcionando como deve. O que ocorre é que, por exemplo, a classe 1, pode ser usada em mais de uma conta de grau 1, e desta forma, precisaria manter a contagem para a montagem da conta.

Mais uma vez, muito obrigado pela ajuda e tempo já dispensados.

Att. Vinicius

Voltar ao Topo Ir em baixo

avatar

Mensagem em Qui 6 Mar 2014 - 12:38 por Dilson

Ok vamos gradativamente.

Para atender ao primeiro detalhe que citou, substitua o código por este:

Dim rSt As DAO.Recordset
Dim nGrau As Long
Dim buscaConta As Long
Dim contaBuscada As Long
Dim incConta As Long
Dim oldConta As Long
Dim oldGrau As Long
Set rSt = CurrentDb.OpenRecordset("reg_I050")
rSt.MoveLast
rSt.MoveFirst
incConta = 0
    Do While Not rSt.EOF
          nGrau = rSt("Grau")
          buscaConta = Nz(rSt("Id_Classe"))
          If nGrau = 1 Then
          contaBuscada = Nz(DLookup("CodIni1", "tb_Classes", _
                                    "Id_Classe =" & buscaConta))
          End If
          rSt.Edit
          If nGrau = 1 Then
              rSt("ContaExa") = contaBuscada
              rSt("CodIni") = contaBuscada
          ElseIf nGrau = 2 And oldConta > 0 Then
              rSt("ContaExa") = contaBuscada
              incConta = contaBuscada
              contaBuscada = contaBuscada + 1
          ElseIf nGrau = 2 And oldConta = 0 Then
              incConta = incConta + 1
              rSt("ContaExa") = incConta
          ElseIf nGrau > 3 And oldConta = 0 Then
              rSt("ContaExa") = incConta
          ElseIf nGrau = 3 And oldConta = 0 And oldGrau = 2 Then
              rSt("ContaExa") = incConta
          ElseIf nGrau = 3 And oldConta = 0 And oldGrau = 4 Then
              incConta = incConta + 1
              rSt("ContaExa") = incConta
          End If
          rSt.Update
          oldConta = buscaConta
          oldGrau = nGrau
          rSt.MoveNext
    Loop
rSt.Close


Retorne para tratarmos ou avançarmos ao segundo detalhe.

Voltar ao Topo Ir em baixo

Mensagem em Qui 6 Mar 2014 - 14:05 por vinicius.anna

Boa tarde

Dilson,

Obrigado

Com esta função, funcionou perfeitamente, restando apenas a questão da classe poder ser usada mais de uma vez.

Mais uma vez, muito obrigado.

Att.
Vinicius

Voltar ao Topo Ir em baixo

avatar

Mensagem em Qui 6 Mar 2014 - 23:44 por Dilson

Ok, agora experimente substitua o código por este abaixo que implementei para também atender ao segundo detalhe:

Dim rSt As DAO.Recordset
Dim nGrau As Long
Dim buscaConta As Long
Dim contaBuscada As Long
Dim incConta As Long
Dim oldConta As Long
Dim oldGrau As Long
Dim oldClasse As Long
Dim incClasse As Long
Set rSt = CurrentDb.OpenRecordset("reg_I050")
rSt.MoveLast
rSt.MoveFirst
incConta = 0
incClasse = 0
    Do While Not rSt.EOF
          nGrau = rSt("Grau")
          buscaConta = Nz(rSt("Id_Classe"))
          If nGrau = 1 Then
          contaBuscada = Nz(DLookup("CodIni1", "tb_Classes", _
                                    "Id_Classe =" & buscaConta))
          End If
          rSt.Edit
          
          If nGrau = 1 Then
              rSt("ContaExa") = contaBuscada
              rSt("CodIni") = contaBuscada
                            
          ElseIf nGrau = 2 And oldConta > 0 Then
              rSt("ContaExa") = contaBuscada
              incConta = contaBuscada
              contaBuscada = contaBuscada + 1
          ElseIf nGrau = 2 And oldConta = 0 Then
              incConta = incConta + 1
              rSt("ContaExa") = incConta
          ElseIf nGrau > 3 And oldConta = 0 Then
              rSt("ContaExa") = incConta
          ElseIf nGrau = 3 And oldConta = 0 And oldGrau = 2 Then
              rSt("ContaExa") = incConta
          ElseIf nGrau = 3 And oldConta = 0 And oldGrau = 4 Then
              incConta = incConta + 1
              rSt("ContaExa") = incConta
          End If
          If oldClasse = buscaConta Then
               If incClasse = 0 Then
                        incClasse = incConta + 1
                        contaBuscada = incClasse
                        rSt("ContaExa") = contaBuscada
                        incClasse = contaBuscada
                   Else
                        incClasse = incConta + 1
                        contaBuscada = incClasse
                        rSt("ContaExa") = contaBuscada
                        incClasse = contaBuscada
               End If
          End If
          rSt.Update
          oldConta = buscaConta
          oldGrau = nGrau
          If nGrau = 1 Then
          oldClasse = buscaConta
          End If
          rSt.MoveNext
    Loop
rSt.Close



Retorne para tratarmos ou informar o resolvido.

Voltar ao Topo Ir em baixo

Mensagem em Qui 13 Mar 2014 - 13:28 por vinicius.anna

Dilson,

Boa tarde

Desculpe a demora em retornar mas estava viajando. Fiz os devidos testes e o processo ficou funcionando de forma correta. Agradeç_lhe imensamente pela atenção e ajuda.

Att. Vinicius

Voltar ao Topo Ir em baixo

Mensagem  por Conteúdo patrocinado

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum