Clipper On Line • Ver Tópico - Tabelas para um sistema de contabilidade
Mudar para estilo Clássico
Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.
Postar uma resposta

Tabelas para um sistema de contabilidade

05 Set 2012 10:34

Bom dia amigos!

Estou começando a migrar um sistema de contabilidade em Clipper 5.2e + DBFNSX para xHarbour + Hwgui + (PostgreSQL/SQLRDD). Estou nos primeiros passos e por me sentir um estranho no ninho do PostgreSQL tenho alguma dúvidas que gostaria de compartilhar com os amigos, bem como saber a opnião de vocês sobre qual o caminho a ser seguido.
No sistema atual tenho a seguinte estrutura de banco de dados:
1) Um arquivo de plano de contas. Neste aquivo eu tenho os seguintes campos:
--- para controlar os saldos iniciais de cada mês: Saldo01, Saldo02, ....., Saldo12
--- para controlar os valores lançados durante o mês tenho os campos: cred01, cred02, ....., cred12; debi01, debi02, ...., debi12.

2) Todo mês eu gero um arquivo para receber os lançamentos.

O processo funciona da seguinte maneira. O usuário após fazer os lançamento, executa um rotina de processamento que irá transportar os dados das contas analíticas e sintéticas para o banco de dados de plano de contas, no respectivo campo do mês em processamento: Exemplo: Janeiro irá atualizar o registro cred01 e debi01.
No final do mês, após confirmar todos os dados é feito o fechamento mensal, que irá fazer um rotina simples de implantar o saldo inicial do mês seguinte. Exemplo: Terminei janeiro e quero começar a lançar fevereiro, executo o fechamento de janeiro, a rotina basicamente faz: Sald02 = (sald01+cred01-debi01). Levando em consideração a condição da conta.

Os problemas deste método de trabalho:

1 - Se você estiver em dezembro e detectar que houve um problema em janeiro e precisar fazer a correção, é necessário processar e fazer o fechameno mensal de todos os meses subsequentes. Este processo é complicado, pois se esqueçer de processar um mês o saldo ficará errado e pode gerar muito transtorno para encontrar o erro.
2 - Em dezembro é necessário fazer um fechamento anual e criar um novo plano de contas para o ano seguinte, salvando o anterior para consultas. Aqui tenho um grande problema, pois se for necessário fazer alguma correção de valor em uma contablidade já fechada, tenho que voltar cópia do banco de dados e isso eu não deixo o usuário executar, eu faço o processo manual.
3 - Quando preciso tirar um livro razão de um período maior que mensal, tenho que gerar um banco de dados, claro que isso posso realver com uma matriz hoje, mais enfim, com os dados a ser apresentado.

Existe uma outra maneira de fazer todo este processo de forma mais segura e eficaz?

Saudações,
Júlio.

Tabelas para um sistema de contabilidade

05 Set 2012 12:13

Olá !
.
.
.
Os problemas deste método de trabalho:
.
.
.
1 - Se você estiver em dezembro e detectar que houve um problema em janeiro e precisar fazer a correção, é necessário processar e fazer o fechameno mensal de todos os meses subsequentes. Este processo é complicado, pois se esqueçer de processar um mês o saldo ficará errado e pode gerar muito transtorno para encontrar o erro.

Reprocessamento anual... Seu programa pode fazer o fechamento mes a mes...
.
.
.
2 - Em dezembro é necessário fazer um fechamento anual e criar um novo plano de contas para o ano seguinte, salvando o anterior para consultas. Aqui tenho um grande problema, pois se for necessário fazer alguma correção de valor em uma contablidade já fechada, tenho que voltar cópia do banco de dados e isso eu não deixo o usuário executar, eu faço o processo manual.

Mantenha os saldos em arquivo separado... assim não existe obrigação em se fazer novo plano...
.
.
.
3 - Quando preciso tirar um livro razão de um período maior que mensal, tenho que gerar um banco de dados, claro que isso posso realver com uma matriz hoje, mais enfim, com os dados a ser apresentado.

Recomendo que estude os modelos adotados pelos lideres do segmento: Alterdata, FortesAC, etc...

Tabelas para um sistema de contabilidade

05 Set 2012 20:02

Amiguinho Ronaldo, obrigado pelas sugestões.

Quanto a fazer um reprocessamento anual quando o usuário é uma rotina que elimina a necessidade de processar mês a mês. Todavia, se a correção a ser feita for no mês se junho por exemplo, seria desnecessário processar os saldos dos meses anteriores. Processar a partir do mês referência seria a solução, podemos pensar. Acredito que neste contexto sim.
O que gostaria de discutir se este seria o caminho mais rápido, visto que o processamento gera muito tempo em uma contabilidade que tenha muitos lançamentos, como um cliente que tenho.
Como ele tem muitas empresas, percebo que isso acaba sendo um "gargalo" no dia-a-dia de trabalho.

Concordo com o amigo quanto a montar um banco de dados para controlar o saldo das contas e manter o cadastro do plano de contas separadamente. Sendo assim, posso sempre dar continuidade nos saldos mensalmente. Para tanto, posso ter a seguinte estrutura:

Código -> código da conta
Mesano -> mês e ano dos saldos.
saldoi -> saldo inicial de abertura do mês.
credit -> total dos créditos do mês. (valores acumulados do processamento dos lançamentos)
debito -> total dos déditos do mês. (valores acumulados do processamento dos lançamentos)

Hoje, quando apresento um Livro Razão, tenho que buscar montar um banco de dados para a apresentação do mesmo, pois os saldos iniciais das contas estão em um arquivo e os valores dos lançamento estão em outro arquvo. Coisa que gostaria muito de evitar.

Saudações,
Júlio!

Tabelas para um sistema de contabilidade

05 Set 2012 22:54

Olá Jelias !
.
.
.
Por favor: evite usar "...inho", em minha cultura isso sõa pejorativo e/ou ofensivo...
.
.
.
Quanto a base de dados (DBF ou SGDB)...
A melhor forma de armazenamento é sempre em tempo real, no caso de sistema contabil ao gerar qquer lançamento já atualizar tambem o arquivo de saldos. Assim qualquer consulta estara livre de qualquer reprocessamento...
.
Usando SGDB fica ainda + facil com o uso de Stored Procedures e Gatilhos... e não faz diferença tamanho da base ou atualização mensal/anual, pois basta-se atualizar o arquivo de saldos...
.
.
.
Sucesso...

Tabelas para um sistema de contabilidade

10 Set 2012 18:36

Como o Jelias pediu sugestões, aí vai a minha:

- eu tenho um arquivo principal (plano de contas) onde estão as contas, com código, nome, código reduzido, saldo anterior e saldo atual;

- os arquivos de lançamentos são 3, a saber:
a) lançamentos anteriores = lançamentos antes do período (mes) atual ou em aberto
eles correspondem ao saldo anterior das contas
b) lançamentos do período = lançamentos do período (mes) atual ou em aberto
fornecem o saldo atual das contas em função do saldo anterior
c) lançamentos futuros = lançamentos depois do período (mes) atual ou em aberto
estão invisíveis na contabilidade até que se chegue à data deles

- assim, posso voltar ao mês que eu precisar, e sistema faz todas as transferências necessárias, tanto no avanço de data como
no retrocesso

- somente existe um mês em aberto, mas não tem nenhum fechado
- todos os relatórios e posições somente enxergam esse período em aberto
- as datas são controladas no arquivo da empresa
- existe um arquivo de históricos padronizados para suprir a parte inicial dos lançamentos, reduzindo a digitação

Esse sistema funciona há muito tempo, sem problemas, permitindo estar com a contabilidade em dia, e quando precisar voltar
a algum período para trás, basta informar qual é ele, e, após feitas as inclusões, exclusões e acertos, volta-se à data atual;

Simples, e funciona.

Tabelas para um sistema de contabilidade

06 Jan 2013 00:33

Amiguinhos,

A melhor técnica para este tipo de aplicativo é criar pastas para manter as tabelas de cada ano. Se o sistema for multi-empresa, uma pasta para cada empresa e sub-pastas para cada ano contábil lançado.

Ao entrar no sistema, com certeza voces já criticam a empresa e o ano base, então bastará pular para dentro das pastas e trabalhar normalmente.

Tabelas para um sistema de contabilidade

12 Mai 2013 17:40

Isso não tem a ver com banco de dados.

Sugestão: (do jeito que uso)
Cada mes apenas com o movimento do mes, e um saldo anterior.
Digitou/alterou/excluiu lançamento, já altera lá o saldo do mês.
Pra qualquer relatório, de qualquer mês, é só somar.
E pode ter uma variável com "atualiza sintética sim/não".
Sem pensar em velocidade, código enxuto, etc, apenas pra mostrar como é possível:

Código:
FUNCTION Debitos( nMes )
   DO CASE
   CASE nMes == 0
      RETURN  0
   CASE nMes == 1
    RETURN plano->Debitos01
   CASE nMes == 2
   RETURN plano->Debitos02
   ...
   ENDCASE
RETURN 0

FUNCTION Creditos( nMes )
Igual a Debitos(), mas ao invés de plano->Debitos01, use planos->Creditos01
RETURN 0

FUNCTION SaldoMes( nMes )
   LOCAL nValor
   nValor := plano->SaldoAnterior
   FOR nCont = 1 TO nMes
      nValor := nValor + Debitos( nMes ) - Creditos( nMes )
   NEXT
   RETURN nValor


Pronto. Com essas funções já faz um balancete de qualquer período.

Código:
@ 2, 10 SAY "QUAL MES" GET nMes
READ

SELECT plano
GOTO TOP
DO WHILE .NOT. Eof()
    ? "conta:", plano->Nome, Saldo( nMes - 1 ), Debitos( nMes ), Creditos( nMes ), Saldo( nMes )
   SKIP
ENDDO


Neste caso, se mexer em janeiro, basta atualizar os valores de janeiro, e todos os meses vão sair atualizados.

Mas ao pegar o jeito com um servidor de banco de dados, pode configurar essas atualizações no próprio servidor, diferente dos DBFs.
Postar uma resposta