Página 1 de 1
controle financeiro
Enviado: 09 Nov 2011 12:44
por MARCELOG
Olá pessoal,
estou concluindo um controle financeiro pessoal.
Ele utiliza contas/ categorias de origem e destino para apurar valores e saldos.
Entretanto, a cada lançamento (ou pesquisa) vai ser necessário percorrer toda a base de dados para estabelecer novos valores e saldos.
Gostaria de minimizar o custo do processamento.
Alguém tem alguma dica de como fazê-lo?
Desde já obrigado!
MarceloG
controle financeiro
Enviado: 10 Nov 2011 11:41
por HASA

)
Olá Marcelo, eu faço assim e tem funcionado BEM, caso melhore a função da um toque ai, ok :)Pos
Código: Selecionar todos
FUNCTION LANCA_BANCO( VER, CONTA, XTP , XPLAKA )
// ver = dedito ou credito
// CONTA = conta corrente
// XTP = historico
// XPLAKA = uma referencia
*****
DBSELECTAREA("LANCTOS")
*****
DBAppend()
LANCTOS->DT := CAIXA->DTBAIXA
LANCTOS->OPERACAO := VER
LANCTOS->TP := XTP
LANCTOS->VALOR := CAIXA->VRPAGO
LANCTOS->HISTORICO := CAIXA->CODIGO +" "+ SUBS( CAIXA->SACADO, 1, 28 )
LANCTOS->PLAKA := XPLAKA
LANCTOS->CONTACORR := CONTA
DBCOMMIT()
DBUnlock()
*****
DBSELECTAREA("LANCTOS")
*****
DBSETORDER( 1 )
SET FILTER TO LANCTOS->CONTACORR = PADR( CONTA, 13 )
DBGOTOP()
DBSEEK( PADR( CONTA , 13 ) + DTOS( CAIXA->DTBAIXA ) )
M->I_REG = RECNO()
*
* PEGO O SALDO ANTERIOR *
DBSKIP( -1 )
IF BOF()
SAL_DO := 0
ELSE
SAL_DO := LANCTOS->SALDO
ENDIF
* VOLTO PARA PUXAR O SALDO ATUAL *
*
GOTO M->I_REG
SAL_DO = IIF( LANCTOS->OPERACAO = 'C',( SAL_DO + LANCTOS->VALOR ), ( SAL_DO - LANCTOS->VALOR ) )
L=1
DO WHILE .NOT. EOF()
*
IF L=2
SAL_DO = IIF( LANCTOS->OPERACAO = 'C',( SAL_DO + LANCTOS->VALOR ), ( SAL_DO - LANCTOS->VALOR ) )
ENDIF
*** Bloqueia registro na rede
If BloqueiaRegistroNaRede( "LANCTOS" )
REPLACE SALDO WITH SAL_DO
ELSE
LOOP
ENDIF
DBUnlock()
L=2
DBSKIP()
ENDDO
DBCOMMITALL()
SET FILTER TO
RETURN NIL
controle financeiro
Enviado: 11 Nov 2011 10:05
por rochinha
Amiguinhos,
No meu caso houve uma necessidade de ter outro controle sobre os lançamentos e portanto criei o arquivo de saldos o qual contem todas as informações de cada conta como tipo(conta bancaria, conta de clientes, etc), dados de agencia, blablabla e saldos(real e conciliado)
Logico que existe a necessidade de percorrer os dados para um recalculo, mas ao filtrar os dados de uma certa conta voce já estará reduzindo o limite de registros.
Ainda no meu caso é efetuado uma abertura de caixa e fechamento diário, assim os recalculos trabalham sobre um leque menor.
A cada abertura, transporto o ultimo saldo e este tipo de registro fica como sendo de auditoria e não Débito ou Crédito.
Então dinamize a criação do indice, CONTA+DATA e faça uso intenso de filtragens com escopo.
Ao tocar no assunto me lembrei que esqueci de agregar ao meu indice a HORA na ordenação ficando, CONTA+DATA+HORA em cada lancamento.
controle financeiro
Enviado: 03 Dez 2011 11:22
por Stanis Luksys
Olá,
É por conta disso que muita empresas usam o conceito de saldos consolidados, fechamento diário, mensal, essas cosias.
Acho que uma boa idéia é ter uma outra tabela com todos os consolidados, por exemplo, você tem um campo de valor acumulado para tal conta, quando faz alguma operação nela, além de tudo que você faz hoje, neste campo você só incrementa o resultado desta operação, entendeu?
Você fica com um campo só que te da o saldo atual. Qualquer consulta rápida é nele que você busca. Se o sistema nao ficar caindo ou com bugs, vai ficar sempre atualizado. De tempo em tempo, por segurança, você executa uma rotina de recálculo, que reprocessa todos os itens e joga lá o valor. Cria um log com a diferença etc e tal.
Abraços.