none
Opinião sobre Plano de Contas....

    Question

  • Pessoal, tô com uma dúvida cruel....

    Estou montando um sistema para um cliente amigo e cheguei no momento de criar uma tabela para cadastro de um plano de contas.

    Para quem não se lembra, um plano de contas é mais ou menos isto...

    1                      ATIVO

    1.1                   ATIVO CIRCULANTE

    1.1.01             Disponível

    1.1.01.01       Caixa

    1.1.01.01.01  Caixa Matriz

    1.1.01.01.02  Caixa Filial

    ...

    2                      PASSIVO

    2.1                   PASSIVO CIRCULANTE

    2.1.01             Instituições Financeiras

    2.1.01.01        Emprestimos e Financiamento

    2.1.01.01.01  Banco do Brasil S/A

    2.1.01.01.02  Banco Bradesco

    2.1.01.01.03  Banco Itaú

    ...

    Gostaria da opinião daqueles que já passaram por isto...

    Minha dúvida é : qual a melhor forma de estruturar este cadastro em um banco de dados, ou seja, crio apenas uma tabela com duas colunas, uma para o código e outra para a descrição, ou crio uma tabela para cada nível ? (São 5 níveis).

    Ou seja, crio uma tabela nível 1 onde teria:

    1   ATIVO

    2   PASSIVO

    ...

    e posteriormente as outras 4 tabelas, uma para cada nível, possuindo um FK do respectivo nível superior..

    Andei bisbilhotando em alguns programas contábeis demos e percebi que cada um trata o assunto de uma maneira.

    Na opinião de vocês, qual a maneira mais produtiva de lidar com isto ???

    Pensei em postar esta dúvida lá no grupo de automação comercial, mas acho que o pessoal daqui também poderia me ajudar.

    Sunday, February 04, 2007 10:39 PM

Answers

  • Rogério,

    bem, usei o termo busca recursiva para referir-me ao auto-relacionamento, e pode ser feita com CURSOR (via Stored Procedure), com SQL ou com código da linguagem.

    um exemplo de tabela seria:

    create table plano_contas_tb(
    no varchar(15),
    no_pai varchar(15))

    onde o 'no' sempre tem um 'no_pai', exceto o primeiro nó do grupo (1,2,3,4 e 5), que terá o valor do no_pai = null

    Desta forma vc pode achar os nó filhos ou pais em qualquer nível do plano de contas (grupo de contas).



    Monday, February 05, 2007 3:13 PM

All replies

  • Rogério,

    no ERP que utilizamos, é tudo na mesma tabela e há uma busca recursiva, ou seja, um nó tem sempre a referencia de seu nó pai.

    mas, independente de que tipo de modelagem que vc adote, lembro que plano de contas tem data efetiva e status, ou seja, inicia em determinada data e termina na data que outro inicia.

    Aqui na empresa por conta da legislação, já passamos por uns 5 ou 6 planos de contas. Inicialmente as contas eram de 8 digitos e agora de 13 dígitos (área de seguro saúde). Se vc utilizar data efetiva, poderá manter o histórico dos planos de contas passados.

    Qual o complicador disto? Em suas querys vai ter sempre que levar em conta a data efetiva e status, exemplo:

    select no_plano
    from plano_contas_tb
    where status = 'A' and dt_efetiva = (select max(dt_efetiva) from plano_contas_tb where status = 'A' and dt_efetiva <= GetDate())


    Monday, February 05, 2007 10:09 AM
  • Bom dia Gesiel....

    Pois é.....

    O Plano de Contas me parece algo bem melindroso...

    De qualquer forma, estou percebendo que a maioria dos programadores estão usando em uma tabela só.

    De qualquer forma agradeço por sua ajuda...

    Monday, February 05, 2007 10:53 AM
  • Te aconselho a usar uma tabela somente, pois entre outras, o plano de contas pode aumentar a quantidade de nível dependendo do contador, logo, se vc criar mais uma tabela vc terá mais trabalho.
    Monday, February 05, 2007 12:23 PM
  • Alguém de vocês teriam algum exemplo de busca recursiva no SQL Server 2005 express ? pois este tema para mim ainda é novo.
    Monday, February 05, 2007 2:37 PM
  • Rogério,

    bem, usei o termo busca recursiva para referir-me ao auto-relacionamento, e pode ser feita com CURSOR (via Stored Procedure), com SQL ou com código da linguagem.

    um exemplo de tabela seria:

    create table plano_contas_tb(
    no varchar(15),
    no_pai varchar(15))

    onde o 'no' sempre tem um 'no_pai', exceto o primeiro nó do grupo (1,2,3,4 e 5), que terá o valor do no_pai = null

    Desta forma vc pode achar os nó filhos ou pais em qualquer nível do plano de contas (grupo de contas).



    Monday, February 05, 2007 3:13 PM
  • Obrigado pela sua ajuda Gesiel, acho que deu uma clareada....
    Monday, February 05, 2007 3:26 PM
  • EU acabo de criar uma tabela de plano de contas onde tenho dois camos: número da conta e nome da conta, além do código chave automático. A listagem das contas se dão da forma descrita logo lá em cima, na pergunta deste tópico. Eu aprendi a fazer varios formularios e tabelas, porém ainda prciso aprender a fazer por exeplo os lançamentos nessas respectivas contas para que depois eu gere relatorios como um balanço patrimonial. Alguém conhece algum videocast ou exemplo pratico de como trabalhar estes processos para ciração de um software contabil? obrigado
    Saturday, April 19, 2008 7:49 PM
  •  

    Olá Ronaldo....

    Infelizmente  não conheço nenhum videocast ou mesmo um tutorial que mostrasse o caminho das pedras em relação à criação de um plano de contas, mas durante minha caminhada te adianto o seguinte:

    A tabela PlanoContas criada por mim tem os seguintes campos:

     

    Codigo              Descricao                                           CodigoPai              CodigoDescritivo              Redutora

    1                       Ativo                                                 0                            1                                    0

    11                     Ativo Circulante                                  1                           1.1                                  0

    111                   Disponivel                                          11                          1.1.1                               0

    11101               Bradesco c/c 76377                            111                        1.1.1.01                           0

    ...

     

    O Campo Redutora serve para designar se a conta em questão é uma conta redutora ou seja, se o valor credito ou debitado será negativo, ex:

     

    1110101           Saldo Atual Bradesco c/c 76377          11101                    1.1.1.01.01                      0

    1110102           Cheques a compensar Bradesco 76377 11101                    1.1.1.01.02                     1

     

    Quando eu for checar o saldo desta ultima conta, por exemplo 10.000,00 e sendo ela uma conta redutora, eu multiplico por -1, assim o saldo será -10.000,00. Desta forma o saldo final da conta 1.1.1.01 - Bradesco c/c 76377 será a soma de suas duas contas filhas   1.1.1.01.01 e 1.1.1.01.02

     

    Outro detalhe é que criei uma tabela chamada de ContaCorrente, nesta tabela estão todos os lançamentos efetuados Ex.:

     

    IDConta      Data                        Credito            Debito           CodigoDescritivo

    1                19/04/2008                       0            234,55           1.1.1.01.01

    2                19/04/2008               234,55                    0           2.1.2.01.01

     

    Neste exemplo acima Eu creditei um fornecedor e debitei meu Caixa.

     

    Sugiro que procure alguem que conheça contabilidade, de preferência um contador e peça algumas informações a respeito.

    Um outro detalhe que ia me esquecendo é que, pode ser que haja em algum momento em que um determinada despesa, por exemplo despesa com energia elétrica de R$10.000,00 , você tenha que creditar o seu fornecedor (Empresa de energia) e debitar duas ou mais contas. Neste exemplo de energia elétrica em uma indústria, vc poderia creditar o fornecedor em 10.000,00 e debitar 95% do valor para a conta DESPESA DE ENERGIA ELETRICA INDUSTRIA  e 5% para DESPESA DE ENERGIA ELETRICA ADMINISTRAÇÃO.

     

    Espero ter dado um clareada nas coisas para vc.

     

    Qquer coisa posta algo ai...

     

    Grande abraço.

    Sunday, April 20, 2008 1:33 AM
  • Olá caro amigo..obrigado pela orientação. Eu vou verificar se realmente compreendi e tentar aplicar da melhor forma possivel. Meu problema é justamente com a programação. Eu sou Contador e no papel eu determino direitinho o que deverá ser executado pelo pelo prgrama devido ao dominio nas técnicas contabeis. Porém me enrolo na hora de programar pois sou completamente amador. Estou desenvolvendo meu primeiro sistema e acredito que peguei logo algo bem complicado. Caso queira, agente pode trocar informaçoes neste tópico. Volto já já com mais dúvidas..abraços.

    Monday, April 21, 2008 1:25 AM
  • Vamos lá...

     

    eu havia interpretado a seguinte situação:

     

    Criei uma tabela da seguinte forma:

     

    Código                             Número da Conta                         Nome da Conta

    (chave/automatico)

     

    1                                             1                                        ATIVO

    2                                             1.1                                     ATIVO CIRCULANTE

    3                                             1.1.1                                  ATIVO DISPONIVEL

    4                                             1.1.1.01                             BANCO CONTA MOVIMENTO

    5                                             1.1.1.01.001                       BANCO BRADESCO S/A

     

    A TABELA É CHAMADA DE PLANO DE CONTAS

     

     

    DEPOIS CRIEI UM FORMULARIO COM ESTES CAMPOS A SEREM PREENCHIDOS ONDE O CÓDIGO É AUTOMATICO, O NÚMERO DA CONTA É DO TIPO MASKEDTEXTBOX, E O NOME DA CONTA É UM TEXTBOX. LOGO ABAIXO EU INSERI UM DATA GRIDVIEW ONDE DÁ PRA LISTAR O PLANO DE CONTAS E VISUALIZAR NA MEDIDA QUE VAI SENDO INCLUIDO AS CONTAS. ATRAVES DE UM BINDINGNAVIGATOR EU INCLUO E EXCLUO REGISTROS. APARENTEMENTE ESTÁ TUDO MUITO BONITINHO, MAS REALMENTE TENHO DÚVIDAS SOBRE COMO FAZER O FORMULARIO DE LANÇAMENTOS E DEPOIS COMO IREI GERAR OS RELATORIOS COMO O BALANÇO PATRIMONIAL QUE NO CASO CONTERÁ SALDOS DAS CONTAS ANALÍTICAS(QUE RECEBEM OS LANÇAMENTOS) E OS VALORES DAS CONTAS SINTETICAS(QUE SOMAM VALORES DAS CONTAS ABAIXO). SERIA MUITO BOM PRA MIM OBTER ORIENTAÇÕES PRA QUE EU NÃO COMPLIQUE TUDO REALMENTE..ABRAÇOS.

    Monday, April 21, 2008 1:53 AM
  •  

    Bom dia Ronaldo...

    No meu entendimento, a sua tabela plano de contas precisa de mais dois campos: CodigoPai e Redutor.

    O número do codigo Pai é necessário para a apresentação da estrutura do plano de contas, pois sem ele seria muito dificil vc colocar, por exemplo, inserir o ATIVO CIRCULANTE em baixo do ATIVO.

    Como vc vai lidar com as contas redutoras ?

     

    Um outro detalhe que fiz diferente foi que não coloquei o campo código como auto numeração, fiz o seguinte:

     

    Codigo           Descricao                                                 CodigoDescritivo             CodigoPai              Redutor              

    1                   Ativo                                                         1                                     0                          0

    11                Ativo Circulante                                           1.1                                  1                          0

    111              Disponivel                                                    1.1.1                               11

     

    No campo CodigoPai vai o codigo no nivel superior do plano de contas.

     

    Com relação aos lançamentos em si, crie uma tabela para o livro diario, pois nele é que serão movimentadas as contas.

    Não se esqueça também que vc tem que criar uma tabela para o saldo inicial das contas.

     

    Tuesday, April 22, 2008 12:14 PM
  • Se quiser, posso enviar no seu e-mail alguma codificaçao que fiz, pois diferentemente de vc, não usei um datagridview e sim um Treeview. Acho que para visualizar os dados ficaria melhor.

    Tuesday, April 22, 2008 12:19 PM
  • Bom dia,

     

    achei este tópico muito interessante, pois estou me formando este ano em ciencias contábeis, mas sou iniciante na programação. Sempre tive vontade de criar um sistema capaz de realizar operações contabeis, lançamentos, encerramentos de exercício com balanço, dre, etc. ... porém acredito que meu nivel de conhecimento nao me permite isto ainda. Atualmente estou desenvolvendo um aplicativo de livro caixa, e bem mais simples que contabil, porem o plano de contas eu acredito que deveria ter uma estrutura bem semelhante ao discutido aqui. No meu caso tenho as contas de receitas e despesas, no qual há uma tabela contas com tres colunas, codigo, descricao, natureza e permissao. A primeira, alem de ser a coluna chave tambem serve de classificador das contas, a segunda o nome da conta, a terceira se e receita ou despesas e a ultima e do tipo boolean para permitir ou nao que se faça lançamentos na conta, deve ser usado nao quando se tratar de ser um grupo e nao uma conta. Exemplo: a conta 2.01.001.000 se chama despesas trabalhistas... na verdade se trata de um grupo, entao nao permite lançamentos, porém a conta 2.01.001.001 se chama salarios e ordenado, que é realmente uma conta e permite lançamentos. no formulario de lançamentos de receitas e despesas tenho uma combobox que filtra apenas as contas que permitem lançamentos.

     

    Pelo que li neste tópico estou vendo que terei problemas em realizar o somatorio de um grupo ne... por exemplo somar todas as contas dentro do grupo despesas trabalhistas e passar o saldo da soma para o grupo. Outra questão... qual seria a necessidade de se criar uma tabela com o saldo inicial das contas?

     

    Desde ja.. agradeço.

    Wednesday, April 23, 2008 11:52 AM
  • Olá amigo...

     

    Como dizia Jack o Estripador: Vamos por partes...

    Uma coisa que me chamou a atenção é a nomenclatura que vc está usando: Receitas e Despesas. Sugiro que troque por Credito e Débito, pois futuramente a nomenclatura que vc está usando poderá trazer algum problema, quer um exemplo ?  Como vc registraria as depreciações ? Receita ou Despesa  ?

    Muito embora seu aplicativo seja para o lançamento de livro caixa, entendi que vc está fazendo lançamentos em contas contábeis e que futuramente deseja imprimir balancetes, DREs e tudo mais..

    Em relação ao campo booleano, ele nada mais é do que a informação da conta se ela é sintética ou analítica, via de regra as analíticas é que recebem lançamentos...

    Em relação ao somatório dos grupos, vc terá que acrescentar um campo "codigopai" para poder descobrir qual o nivel superior em que esta conta esta subordinada.

    O detalhe da tabela de saldo inicial é a seguinte: imagine que vc irá iniciar os lançamentos a partir de primeiro de janeiro de 2008. Obrigatoriamente vc terá que lançar o saldo de sua conta bancária de 31/12/2007, senão, ao imprimir um balancete, o saldo da conta não vai "bater", pois vc terá somente os lançamentos efetuados no mês de janeiro. Entendeu ?

    Neste momento gostaria de deixar algo claro: Não sou contador e assim alguma opinião minha pode não ser 100% aceita por algum contador, sou formado em Administração com pós em Gestão estratégica. Mas o que estou te falando é com base em experiência de programação. Atualmente tenho um aplicativo que controla a parte financeira bem como faz contabilidade gerencial.

    Espero ter te ajudado.

    Grande abraço

    Wednesday, April 23, 2008 4:06 PM
  • Olá Rogerio,

     

    Primeiramente gostaria de agradecer pela ajuda, voce me esclareceu algumas coisas importantes... realmente entendi a necessidade de se acrescentar a tabela contas essa coluna "codigopai" para se obter a correta somatoria dos grupos, e também a utilidade da coluna saldo inicial, porém so não concordei quanto à possibilidade da nomenclatura me trazer problemas futuros... Bom... deixo de lado meu pequeno conhecimento em programação agora pra falar como contador: na verdade a escrituração de um livro caixa não permite bem a elaboração de Balanço Patrimonial, DRE, etc. de forma contábil... esses relatórios teriam de ser apurados extracontabilmente se a empresa não utiliza a escritura contábil, mas apenas por livro caixa. No caso da depreciação, bom... a depreciação é uma "despesa" no qual não existe a saída de disponibildades e nem gera nenhum tipo de obrigação a pagar (passivo), sendo registrada em contra-partida com uma conta depreciação que é redutora do ativo permanente, portanto, se não há saida do caixa, banco e nem gera uma conta a pagar, não se deve efetuar os lançamentos de depreciação em livro caixa.

     

    Mais uma vez, obrigado pela ajuda, é sempre bom trocar conhecimentos com profissionais dedicados, como voce e grande maioria dos participantes desse forum.

     

    Um abraço

    Até mais.

    Wednesday, April 23, 2008 4:53 PM
  • Olá...

     

    podemos definir que o conceito de despesa e receita assim como de débito e crédito são essenciais na contabilidade e não devem ser confundidos. Débito e crédito se referem à emtrada ou saida de valores em uma determinada conta! Receita e Despesa se referem à natureza das contas de resultado. Assim, você pode debitar ou creditar valores em uma conta de despesa ou receita.

    Mas isso é uam questão de conceitos contabeis e creio que não devemos nos aprofundar neste mecanismo aqui!

    Falando sobre a programação, eu também tive dúvidas sobre dois aspéctos! Um: sobre a questão do código pai e sua elaboração. Há alguma maneira deste código ser inserido automaticamente, ou deve ser mediante o formulario mesmo? tipo em textbox. Outra seria na elaboração do formulario de lançamento! por exemplo, uma única operação pode ter diversas ou apenas uma conta créditada e diversas ou apenas uma conta debitada. omo elaborar um formulario que preveja esta situação? tipo, onde você pode definir o numero de contas a serem creditadas e debitadas previamente!

     

    Obrigado amigos!

    Thursday, May 01, 2008 1:27 AM
  • Bom dia Ronaldo...

     

    Em relação as suas dúvidas, eu resolvi da seguinte maneira:

    - Código Pai e sua elaboração: Eu inseri um maskbox com a mascara "9.9.9.99.99",  para saber o código pai, eu faço a contagem (length) dos dados no maskbox. Dê uma olhada no codigo abaixo.

     

    ' validação para codigo pai

     

    'Neste laço pego todos os numeros digitados pelo usuario e armazenado na variavel Str

    'Um jeito mais facil que este é limpar a mascara e pegar os numeros diretamente, sem usar o FOR

    For I = 0 To TxTMascara.Text.Length - 1                     

         If IsNumeric(TxTMascara.Text.Substring(I, 1)) Then

              Str += TxTMascara.Text.Substring(I, 1)

         End If

    Next

     

    Select Case str.Length

         Case Is = 7   ' se o tamano do campo for de 7 digitos....

              TxTMascara.Mask = ""  ' removo a mascara

              CodPai = str.Substring(0, 5)  ' pego os 5 primeiros digitos que serão o codigo pai

              TxTMascara.Text = str

              str = TxTMascara.Text

              TxTMascara.Mask = "0,0,0,00,00"

              CDescr = TxTMascara.Text

    Case Is = 6

              TxTMascara.Mask = ""

              CodPai = str.Substring(0, 5)

              TxTMascara.Text = CodPai & "0" & str.Substring(5, 1)

              str = TxTMascara.Text

              TxTMascara.Mask = "0,0,0,00,00"

              CDescr = TxTMascara.Text

    Case Is = 5

              TxTMascara.Mask = "0,0,0,00"

              CodPai = str.Substring(0, 3)

              CDescr = TxTMascara.Text

    Case Is = 4

              TxTMascara.Mask = ""

              CodPai = str.Substring(0, 3)

              TxTMascara.Text = CodPai & "0" & str.Substring(3, 1)

              str = TxTMascara.Text

              TxTMascara.Mask = "0,0,0,00"

              CDescr = TxTMascara.Text

    Case Is = 3

              CodPai = str.Substring(0, 2)

              TxTMascara.Text = str.Substring(0, 3)

              CDescr = TxTMascara.Text.Substring(0, 5)

    Case Is = 2

              CodPai = str.Substring(0, 1)

              TxTMascara.Text = str.Substring(0, 2)

             CDescr = TxTMascara.Text.Substring(0, 3)

    Case Is = 1

             CodPai = 0 ' Se o tiver apenas um digito, então o codigo pai será zero.

             TxTMascara.Text = str.Substring(0, 1)

             CDescr = TxTMascara.Text.Substring(0, 1)

    End Select

     

    Dê uma olhada no formulario de cadastro do meu plano de contas: http://www.rmartins.adm.br/plano.jpg

     

    Em relação aos lançamentos, tenho um formulário de Cadastro de contas a pagar e/ou Receber. http://www.rmartins.adm.br/pagar.jpg

     

    Este formulario funciona da seguinte forma: Se clicar no Radiobutton "Título a Pagar", será carregado o combo com os fornecedores, senão, com os clientes.

    Como, por exemplo eu sei que é uma conta a pagar, logicamente terei que creditar o meu fornecedor, se fosse uma contas a receber, teria de debitar o cliente em questão, portanto o usuario não precisaria realizar este lançamento pois o "sistema" já sabe o que vai fazer.

    Veja no grid que posso digitar quantas contas eu quiser. Veja o caso de energia eletrica por exemplo, debito uma parte para a industria e uma outra parte para a administração. Isto tudo é somente em relação ao cadastro do título. Agora vc pode me perguntar: E na hora do pagamento ?  Eu simplesmente não coloco o usuário para fazer o lançamento, pois o "sistema" já sabe que ele terá que debitar o fornecedor e creditar o caixa. http://www.rmartins.adm.br/caixa.jpg

    Acho que isto...

    Espero ter sanado um pouco das suas dúvidas.

    Grande abraço

     

    Thursday, May 01, 2008 12:44 PM

  • Rogério Martins,

    Primeiramente meus parabéns pelo conteúdo das respostas.
    Sou programador e estou atualmente atuando como DBA, estou iniciando uma modelage de dados para um ERP de grande porte. A empresa onde trabalho possui um ERP feito em Cobol a uns 15 anos, tem integração com sistemas contábil como Mastermaq, Prosoft e outros.
    Decidimos que nesse novo ERP teremos o plano de contas e os lançamentos das contas. Entendi tudo o que você já postou e foi muito esclarecedor. Agora gostaria de saber algo mais sobre lançamentos de notas fiscais entrada e saída e vendas ECF.

    Bom vamos lá.


    Existe alguma amarração que possa ser feito, tipo Fornecedor -> Conta, Cliente -> Conta, assim ficaria fácil, todo lançamento que utilizar um fornecedor ou cliente, já saberia a conta de crédito e debito, só faltaria a contra partida?

    Como seria a tabela de lançamentos?
    Código sequêncial
    Código plano de conta
    Máscara do plano de conta - 1.1.1.001.001
    Data do lançamento
    Valor de crédito
    Valor de debito


    Em relação aos lançamentos de notas fiscais e vendas ecf, entra no lançamento, ou só os movimentos de contas a pagar e receber que entram?
    Monday, May 05, 2008 12:25 PM
  • Bom dia Glauber...

    Novamente, vamos por partes...

     

    O que você precisa ter no seu sistema são parâmetros, ou seja, ter um formulário onde o usuário possa cadastrar algumas contas que serão creditadas ou debitadas automaticamente, por exemplo:

     

    FORNECEDORES            2.1.1.003.001

    CLIENTES                       1.1.1.003.001

     

    e assim por diante...

    Desta forma, quando  gravar um lançamentos de contas a pagar por exemplo, já saberá de imediato que terá que creditar a conta 2.1.1.003.001 e debitar as contas inseridas no grid pelo usuário. Quando efetuar o pagamento, o usuário não precisará fazer nenhum lançamento contábil, pois o teu sistema saberá qual conta creditar e  debitar, pois se vc está pagando um fornecedor, obrigatoriamente vai debitar a conta 2.1.1.003.001 e creditar o teu caixa/banco. Na tabela onde vc grava as contas bancárias, inclua também a conta contábil do banco/caixa da empresa. -> http://www.rmartins.adm.br/banco.jpg

    Falando ainda dos parâmetros, não se esqueça que neles devem constar os juros ( ativos e passivos), descontos e/ou qualquer outra conta que for trabalhada de forma automática pelo seu sistema, pois quando vc rodar o balancete ele irá automaticamente trabalhar com os juros e o descontos....

     

    A tabela de lançamentos, bem esta é um caso à parte.

    Tenho uma tabela chamada MOVTO, neste tabela eu cadastro todos os dados do documento que está sendo lançado, inclusive data do pagamento e valor pago, pois às vezes o pagamento pode ter sido parcial, ou seja, o valor do título era R$1.000,00 mas foi pago somente R$800,00. ->  http://www.rmartins.adm.br/movto.jpg

    Tenho uma outra tabela chamada CONTACORRENTE é nela onde gravo os lançamentos contábeis propriamente ditos.

    http://www.rmartins.adm.br/contacorrente.jpg

     

    Com relação as vendas com nota e ecf, estas também devem entrar no lançamento, são lançadas na conta , por exemplo, 4.1.1.01.001   Venda Mercado Interno .

    Só que tem um detalhe muito importante no qual você deve estar atento durante as vendas: As Bonificações e Doações.

    Eu particularmente não lanço as bonificações e doações na tabela CONTACORRENTE, sendo que posteriormente o sistema deverá rodar uma rotina para procurar estas bonificações e doações e em seguida achar o valor de custo do produto, pois se vc lançar o valor da bonificação com o mesmo valor de venda do produto, estará errado.

     

    Olha Glauber, espero que de alguma forma eu tenha sanado algumas de suas dúvidas.

    Grande abraço.

    Monday, May 05, 2008 2:04 PM


  • Rogerio Martins,

    Mais uma vez, obrigado.

    Agora sim, ficou bem claro toda a movimentação sobre um plano de contas.
    Vou incluir também no meu caso configuração por CFOP, vou deixar disponível para o usuário criar as vinculações entre plano contas e CFOP, assim será possível definir por exemplo:
    para o CFOP 1102 a conta estoque é X, conta de crédito ICMS é Y e crédito fornecedor é Z ...

    Para os contadores que são mais detalhista e cria uma conta para cada cliente e fornecedor, vou disponibilizar no cadastro de cliente e fornecedor a opção de escolher a conta, caso não queira dessa forma ele utilizará a configuração geral por filial, definindo a conta fornecedor e cliente.

    Bom assim que acabar posso enviar a modelagem, quem quiser favor postar o email.

    Abraços.


    Monday, May 05, 2008 5:12 PM
  •  

    Boa tarde Rogério

     

        Achei muito interessante e bem elaborado o seu aplicativo pelas fotos que postou, principalmente o cadastro do plano de contas, percebi que ao inves de usar um datagridview voce utilizou um treeview. No meu projeto estou utilizando um datagridview, porém fiz algumas modificações visuais, como por exemplo colori as linhas das contas de receita (só lembrando que meu plano de contas e para livro caixa, e nao para contabilidade) de azul e despesas de vermelho (tons bens claros pra nao ficar feio tambem) e os grupos utilizei fonte em negrito, deu um visual legal. Mais tarde posto uma foto de como ficou. Tentei utilizar uma função para alinhar a propriedade padding de acordo com o nivel da conta, mas não consegui montar tal função ainda.

       Andei mexendo de curioso nesse componente treeview ontem, pois nunca usei ele antes. Não entendi como relacionar os dados da tabela contas ao componente, muito menos sei como alinhar os nós (é esse o termo?) de acordo com o nível da conta, gostaria de lhe dar os parabens, ficou muito legal!! Vou dar uma pesquisada sobre este componente, se não for incômodo, gostaria de uma ajuda sua, ficarei grato!

     

    Até mais.

     

     

     

    Tuesday, May 06, 2008 4:23 PM
  • Olá amigo...

    O esquema com o treeview é o seguinte...

     

    Private Sub CarregaTRV()

    TrV.Hide()

    Dim DTR2 As SqlDataReader 'filho 1

    Dim DTR3 As SqlDataReader 'filho 2

    Dim DTR4 As SqlDataReader 'filho 3

    Dim DTR5 As SqlDataReader 'filho 4

    Dim Plano As New PlanoContas

    Dim Nop, Nof2, Nof3, Nof4, Nof5 As New TreeNode

    Try

         TrV.ShowRootLines = True

         TrV.ShowPlusMinus = True

         TrV.BeginUpdate()

         TrV.Nodes.Clear()

         DTR = Plano.RetornaRaiz()

         While DTR.Read ' primeira instancia codigopai = 0

              Nop = New TreeNode

              With Nop

                    .ImageIndex = 0

                    .Tag = DTR.Item("CodigoDescritivo")

                     If DTR.Item("Sinal") = "0" Then

                           .Text = DTR.Item("CodigoDescritivo") & " - " & DTR.Item("Descricao")

                    Else

                           .Text = "(-) " & DTR.Item("Descricao")

                    End If

              End With

              TrV.Nodes.Add(Nop)

              DTR2 = Plano.RetornaFilhos(DTR.Item("Codigo"))

              While DTR2.Read ' segunda instancia codigopai com 1 numero

                   Nof2 = New TreeNode

                   With Nof2

                         .ImageIndex = 1

                         .Tag = DTR2.Item("CodigoDescritivo")

                         If DTR2.Item("Sinal") = "0" Then

                                  .Text = DTR2.Item("CodigoDescritivo") & " - " & DTR2.Item("Descricao")

                         Else

                                  .Text = DTR2.Item("CodigoDescritivo") & " - " & "(-) " & DTR2.Item("Descricao")

                         End If

                   End With

                   Nop.Nodes.Add(Nof2)

                   DTR3 = Plano.RetornaFilhos(DTR2.Item("Codigo"))

                  While DTR3.Read ' terceira instancia codigopai com 2 numero

                                Nof3 = New TreeNode

                                With Nof3

                                              .ImageIndex = 1

                                              .Tag = DTR3.Item("CodigoDescritivo")

                                              If DTR3.Item("Sinal") = "0" Then

                                                           .Text = DTR3.Item("CodigoDescritivo") & " - " & DTR3.Item("Descricao")

                                              Else

                                                           .Text = DTR3.Item("CodigoDescritivo") & " - " & "(-) " & DTR3.Item("Descricao")

                                              End If

                                 End With

                                Nof2.Nodes.Add(Nof3)

                                DTR4 = Plano.RetornaFilhos(DTR3.Item("Codigo"))

                                While DTR4.Read ' terceira instancia codigopai com 3 numero

                                              Nof4 = New TreeNode

                                             With Nof4

                                                          .ImageIndex = 1

                                                          .Tag = DTR4.Item("CodigoDescritivo")

                                                          If DTR4.Item("Sinal") = "0" Then

                                                                       .Text = DTR4.Item("CodigoDescritivo") & " - " & DTR4.Item("Descricao")

                                                          Else

                                                                       .Text = DTR4.Item("CodigoDescritivo") & " - " & "(-) " & DTR4.Item("Descricao")

                                                          End If

                                             End With

                                            Nof3.Nodes.Add(Nof4)

     

                                           DTR5 = Plano.RetornaFilhos(DTR4.Item("Codigo"))

                                           While DTR5.Read

                                                       Nof5 = New TreeNode

                                                       With Nof5

                                                                   .ImageIndex = 1

                                                                   .Tag = DTR5.Item("CodigoDescritivo")

                                                                   If DTR5.Item("Sinal") = "0" Then

                                                                              .Text = DTR5.Item("CodigoDescritivo") & " - " & DTR5.Item("Descricao")

                                                                   Else

                                                                              .Text = DTR5.Item("CodigoDescritivo") & " - " & "(-) " & DTR5.Item("Descricao")

                                                                   End If

                                                        End With

                                                       Nof4.Nodes.Add(Nof5)

                                           End While

                                           DTR5.Close()

                                  End While

                                  DTR4.Close()

                       End While

                      DTR3.Close()

             End While

           DTR2.Close()

    End While

    TrV.EndUpdate()

    Catch ex As Exception

             MsgBox(ex.Message, MsgBoxStyle.Critical, ex.Source)

    End Try

    TrV.ExpandAll()

    DTR.Close()

    TrV.Show()

    End Sub

     

     

    A codificação é esta, espero que consiga entender.

    Com relação ao visual do programa, sempre achei necessário um programa ser bonito visualmente, mas ainda o que está me matando são os botões: são ridículos, mas infelizmente ainda não são minha prioridade.

    GRANDE abraço.

    Tuesday, May 06, 2008 7:10 PM
  • Ola amigo

     

    Muito obrigado pela ajuda... vou quebrar a minha cabeça e ver se consigo aprender. Quanto ao visual do programa concordo plenamente, um ótimo programa (completo com todas as necessidades do usuário final) com um visual fraco por incrível que pareça nao chama a atenção do usuário. Já usei as versões trial de alguns pacotes de componentes que possuem o ribbon control com a aparência do office 2007, todos excelente, porém todos são (muito, mas muito mesmo) caros para adquirir suas licensas, então estou me virando nos 30 com os componentes windows forms mesmo, utilizei por exemplo um tab control no formulário principal do projeto, dei um print screen na tela do word (hehehe) e fiz uns ajustes em um programa de ediçao de imagens, retirando as imagens e botões, deixando apenas o fundo, aplicando como BackgroundImage no tab control. Com os botões pretendo fazer o mesmo (hehehe... ). Claro que não vai ficar idêntico, mas nem quero isso também, mas se ficar um visual agradável pra mim já está ótimo! Os botões do windows forms são ridículos mesmo, com exceção do windows vista, que são até "bonitinhos", é engraçado, os botões aparecem de acordo com o padrão do windows que a maquina utiliza, eu desenvolvo na minha casa com windows vista, quando trago para testar no meu serviço, a aparencia muda um pouco.. hehehhe... mas ta bom, devagar a gente vai driblando essas limitaçoes.

     

    Um abraço

     

    Henrique Clausing

    Tuesday, May 06, 2008 7:21 PM
  • Olá Rogério! Não sei se seria conveniente te pedir isto, mas é que sou meio leigo mesmo! eu tentei fazer aqui e não deu certo! Seria demais eu pedir que você me enviasse por e-mail o formulario e a tabela correspondente no seu banco de dados para que eu possa estudar seu modelo? ou daptá-lo? me refiro ao cadastro de plano de contas!

    se puder fazer algo do tipo...agradeceria!
    Wednesday, May 07, 2008 9:22 PM
  • Qual formulário  e qual tabela ?

    Tenho 54 formulários no meu sistema (que ainda não está totalmente terminado) e  52 tabelas, mais algumas dezenas de classes e procedures.

    Acho que o mais fácil é o seguinte, vai me perguntando à medida que vai construindo o seu sistema que eu vou te auxiliando, naquilo que puder.

    Me adiciona no MSN: rodrigaer@msn.com e a gente vai trocando idéias, pois geralmente fico on-line o tempo todo.

    Grande abraço.

    Wednesday, May 07, 2008 9:34 PM
  • Ok..adicionei! è que se eu tiver em mãos o formularios de cadastro junto com sua respectiva tabela...isso se o formulario cadastrar em apenas uma tabela...eu posso analizar e copnseguir fazer aqui no meu projrto! somente a de casdastros das contas no planlo.

    no mais...vou continuar postando as duvidas e respostas aqui..acho importante deixar o conhecimento rolar no chat para que as pessoas tenham acesso...valeu mesmo cara!
    Wednesday, May 07, 2008 10:06 PM
  • Bom dia Ronaldo...

    O problema é o seguinte, a programação de meu projeto está em camadas..

    Eu separo em acesso a dados, regras de negócios e  apresentação. Portanto se eu enviar somente o formulário, não vai adiantar muito, pois teria que te enviar as classes que criei do plano de contas, bem como as classes de acesso a dados.

    Sugiro que poste aqui os erros que estão aparecendo ou as dúvidas que está tendo.

    Desta forma vc conseguiria, passo-a-passo, progredindo com o seu projeto.

    Grande abraço

    Monday, May 12, 2008 12:30 PM
  • Boa tarde,

     

    Andei estudando o código que o Rogério postou aqui para carregar o plano de contas no treeview, até consegui um bom começo, pois nunca utilizei o treeview antes, gostaria de agradecê-lo mais uma vez pela ajuda. Utilizando o datagridview consegui alcançar meu último objetivo no form do plano de contas para o livro caixa, que era ajustar o padding da coluna noma da conta de acordo com o nivel da conta/grupo. Anteriormente já utilizava as cores azul e vermelho para receitas e despesas e fontes em negrito para os grupos de contas.

     

    Coloquei uma imagem do form pra quem estiver interessado em ver como ficou:

     

    Até mais.

    Tuesday, May 13, 2008 6:01 PM
  • Olá pessoal...tenho que agradecer a ajuda...mas realmente eu fiquei meio perdido e meus codigos não deram certo. O meu projeto é com objetivo academico e visa trabalhar alguns conceitos de Contabilidade. Eu tinha elaborado meu plano de contas de forma que ao cadastrar cada conta o usuario daria qualificações conceituais às contas. Além do código no formato 1.1.1.11.111   eu havia colocado por exemplo a escolhas: Sintética ou Analítica, conta Patrimonial ou de Resultado, natureza Devedora ou Credora. Tudo isso pra cadastrar cada conta. para visualizaçào eu havia colocado em Datagridview. ficou até certo. o que me pega agora é saber se não há outra forma de trabalhar os resultatos apenas com os cóigos descritos na mascara, e se por exemplo, o fato de classificar as contas como Sintética ou Analítica já não dá pra definir se aceita lançamento ou não!  Eu sei que cadastrar as contas é moleza..agora poder utilizá-las com valores de entrada e saida que deve ser o dificio, além dos totais. Como eu não sou programador eu me prendo em exemplos práticos que ensinam os caminhos como no site www.macoratti.net   alguém sabe algu=o do gênero para ensinar a trabalhar com contas?

     

    Abraço...Conto com vcs...

    Saturday, May 17, 2008 5:24 AM
  • Olá Ronaldo...

    Não sei se entendi direito a sua dúvida, mas em relação a saber se a conta é analítica ou sintética e por conta disto permitir o lançamento de dados ou não, bem, para saber sem muito sacrifício se uma conta é analítica o sintética, basta vc "pegar" o tamanho da string do código da conta, ou seja:

     

    IF Codigo_Da_Conta.ToString.Length >9 Then

    Msgbox "Esta é uma conta analítica

    else

    msgbox "É uma Conta Sintética"

    End If

     

    Entendeu?

     

    Espero ter ajudado !

     

    Grande abraço.

    Thursday, July 24, 2008 11:37 PM
  • Olá..tenho tentado algumas coisas mas acaba dando erro! Eu sou Contador e Administrador, não tenho tanto conhecimento de programação! Eu tenho alguns projetos de sistemas integrados de aplicativos empresariais onde o modulo de contabilidade é um deles. Podemos, se alguém tiver afim, trocar có digos prontos e trabalhar em parceira para desenvolvimento do nosso trabalho. Deixo os arquivos dos meus projetos livres e gratuitos para os programadores aperfeiçoarem seus projetos. O que acham de trocarmos algumas figuirinhas? Tenho conhecimentos solidos na area empresarial e basicos de programação! Vamos fazer uma parceria que beneficiem todas as partes? podemos desenvolver e postar nossas soluções em conjunto para a galera copiar e aperfeiçoar!

    Monday, December 08, 2008 3:52 PM
  • Olá Ronaldo....

    É uma boa idéia....

    A propósito, o que me anda tirando o sono é o Sped Fiscal....

    Já começou a mexer com ele ?

     

    Tuesday, December 09, 2008 10:03 AM
  • Olá Ronaldo precisando de um help e só fala, se quiser manda e-mail !

    juliooriebir@hotmail.com

    Tuesday, December 09, 2008 1:48 PM
  •  

    Pois bem pessoal, é importante arranjarmos uma forma de trocar iformações práticas uma vez que nem sempre explicações são bem direcionadas, creio que a troca de alguns códigos pode facilitar porque nada melhor que algo pronto para se analisar de forma mais concreta. Eu havia postado um tópico falando sobre códigos livres aqui mas creio que me expressei mau e algumas pessoas não gostaram. Não acho que seja interessante postar um programa pronto de graça para que os usuarios finais possam pegar na net, mas nós aqui podemos disponibilizar códigos prontos para quem programa e frequenta o forum. Podemos criar um tópico estecífico pra isso.

     

    Sobre a perte fiscal mencionada aqui, na minha visão profissional da area empresarial eu acho um erro misturar questões fiscais que mudam sempre com outras funcionalidades que sempre serão a mesma. Acho que deve ser criado no programa um módulo fiscal com parâmetros configuráveis para ser alterado por quem entende. por exemplo, eu tenho desenvolvido o projeto de uma suite empresarial onde cada atividades é feita por modulos separados: venda de balcão, produção, gestão de estoque, controle financeiro, contabilidade, questões fiscais, etc. tudo separado.

     

    O que acontrece é que me perco em algumas questões de programação, como por exemplo as minhas combobox que são alimentadas por tabelas diferentes e dão erro na hora de preencher a tabela a qual o formulario se direciona, mas é isso...aos poucos vamos chegar lá, se alguém quizer tirar dúvidas sobre a metodologia de organização de um sopftware de gestão é só perguntar...valeu!

    Friday, December 19, 2008 10:36 PM
  • Caro Glauber,

    estava olhando a discussão e gostaria de receber a modelagem para avaliar.

    É possível?

    Grato,

    naugustijr@gmail.com

    Thursday, September 12, 2013 2:50 PM