AJUDA COM FLUXO DE CAIXA
Boa tarde galera.
Meu cliente pediu que eu desenvolvesse ao controle de despesas e receitas dele o fluxo de caixa.
Exemplo se nao estiver claro:
Tabela movimento
------------------------
Vencimento Tipo Valor Saldo
10/03/2014 E 10,00 10,00
11/03/2014 E 15,00 25,00
11/03/2014 S 5,00 20,00
Algo parecido com isso para ele estimar a quantia de dinheiro ele terá futuramente.
Mas estou em duvida em como executar isso.. Pois preciso saber o saldo atual dele. Pensei em criar um registro na tabela de movimentação com o saldo atual, e a partir dai gerar a coluna saldo com base no primeiro registro.
Porém já estou pensando em algumas possibilidades, como por exemplo o sistema gerar a tabela acima, e depois ele incluir outro registro entre uma data e outra. Assim o saldo vai ficar bagunçado.
Em outro sistema fiz a criação da coluna saldo toda vez que ele fosse abrir o relatório, porém neste cliente o fluxo de informação é maior e em pouco tempo ficará muito lento este processo.
Alguem me da alguma dica da melhor forma de desenvolver isso ?
Meu cliente pediu que eu desenvolvesse ao controle de despesas e receitas dele o fluxo de caixa.
Exemplo se nao estiver claro:
Tabela movimento
------------------------
Vencimento Tipo Valor Saldo
10/03/2014 E 10,00 10,00
11/03/2014 E 15,00 25,00
11/03/2014 S 5,00 20,00
Algo parecido com isso para ele estimar a quantia de dinheiro ele terá futuramente.
Mas estou em duvida em como executar isso.. Pois preciso saber o saldo atual dele. Pensei em criar um registro na tabela de movimentação com o saldo atual, e a partir dai gerar a coluna saldo com base no primeiro registro.
Porém já estou pensando em algumas possibilidades, como por exemplo o sistema gerar a tabela acima, e depois ele incluir outro registro entre uma data e outra. Assim o saldo vai ficar bagunçado.
Em outro sistema fiz a criação da coluna saldo toda vez que ele fosse abrir o relatório, porém neste cliente o fluxo de informação é maior e em pouco tempo ficará muito lento este processo.
Alguem me da alguma dica da melhor forma de desenvolver isso ?
Ninguem ?
você pode fazer de varias maneiras, você pode criar uma outra tabela com o saldo atualizado, exemplo:
TabelaSaldo
Campos
id = numeração automatica
datalancamento = data/hora
Valor = Currency
dai você faz uma verificação onde se a tabela estiver vazia um inputbox surge para o cliente lançar o saldo atual.
caso a tabela ja possua valores basta você lancar conforme data o saldo atual nesta tabela quando o=houver movimentação na tabela movimento, e pronto.
TabelaSaldo
Campos
id = numeração automatica
datalancamento = data/hora
Valor = Currency
dai você faz uma verificação onde se a tabela estiver vazia um inputbox surge para o cliente lançar o saldo atual.
caso a tabela ja possua valores basta você lancar conforme data o saldo atual nesta tabela quando o=houver movimentação na tabela movimento, e pronto.
Marcelo, é assim que pensei em fazer.
Porém o meu problema esta sendo para gerar a coluna saldo.
Eu teria mesmo que fazer um loop em todos os registros a partir do saldo pra atualizar meus registros financeiros.
Esta é minha preocupação
Porém o meu problema esta sendo para gerar a coluna saldo.
Eu teria mesmo que fazer um loop em todos os registros a partir do saldo pra atualizar meus registros financeiros.
Esta é minha preocupação
colega é o seguinte qual é o banco de dados que vc está utilizando?
MySql
Então vai uma dica legal, porém vc terá de pesquisar, o MySQL possui uma ferramenta legal que se chama TRIGGER, trigger é um gatilho que pode fazer o seguinte apos você incluir por exemplo uma entrada a trigger verifica realmente se é entrada e atualiza o saldo, algo assim:
na janela do mysql
pra você entender com a trigger acima ao você inserir um movimento o saldo do mesmo sera atualizado conforme o tipo.
exemplo
se você fizer
repare que nao coloquei o saldo acima, isso porque a trigger vai ver o insert , ler que é [ô]E[ô] entrada e fazer a atualização no saldo.
bom o código não é uma solução definitiva, porém o fiz baseado em uma tabela simples (movimento), mostro aqui o caminho das aguas o restante fica a seu critério, ou seja erros e acertos para corrigir algo na trigger.
qual a vantagem disto? todo processo ficara por conta do próprio banco de dados o que vai aumentar o desempenho consideravelmente.
ps: a trigger acima foi feita baseada apenas na tabela movimentos, eu não criei outra tabela, e nesta tabela movimente deverá ter também um campo id (autonum) para que a mesma funcione
na janela do mysql
mysql> DELIMITER $$
mysql> CREATE TRIGGER saldoAtual BEFORE INSERT ON movimento
-> FOR EACH ROW
-> BEGIN
-> DECLARE saldoAnterior DECIMAL(10,2);
-> SET saldoAnterior = (SELECT M.saldo FROM movimento M ORDER BY M.id DESC LIMIT 1);
-> IF (NEW.tipo= [ô]E[ô]) THEN
-> SET NEW.saldo = saldoAnterior + NEW.valor;
-> ELSE
-> SET NEW.saldo = saldoAnterior - NEW.valor;
-> END IF;
-> END $$
mysql> DELIMITER ;
pra você entender com a trigger acima ao você inserir um movimento o saldo do mesmo sera atualizado conforme o tipo.
exemplo
se você fizer
INSERT INTO movimento (Vencimento, Tipo, Valor) VALUES ([ô]2013-03-10[ô], [ô]E[ô], [ô]10,00[ô])
repare que nao coloquei o saldo acima, isso porque a trigger vai ver o insert , ler que é [ô]E[ô] entrada e fazer a atualização no saldo.
bom o código não é uma solução definitiva, porém o fiz baseado em uma tabela simples (movimento), mostro aqui o caminho das aguas o restante fica a seu critério, ou seja erros e acertos para corrigir algo na trigger.
qual a vantagem disto? todo processo ficara por conta do próprio banco de dados o que vai aumentar o desempenho consideravelmente.
ps: a trigger acima foi feita baseada apenas na tabela movimentos, eu não criei outra tabela, e nesta tabela movimente deverá ter também um campo id (autonum) para que a mesma funcione
bom colega voltei só pra dizer que fiz um teste criei uma tabela movimentos e inclui os seguintes campos
id - autoincremnt
vencimento -data
tipo - Char(1)
valor - double
saldo - double
criei a tigger no mysql, no meu caso criei usando o heidi sql mesmo, a tigger funcionou muito bem desta forma
SE VOCÊ USA O HEIDISQL AVISE QUE TE ENSINO A CRIAR A TIGGER NELE.
por fim bastou eu inserir os dados até o valor apenas que o saldo foi se atualizando, eu me surpreendi comigo mesmo, rs ainda num tinha usado uma tigger, rs
id - autoincremnt
vencimento -data
tipo - Char(1)
valor - double
saldo - double
criei a tigger no mysql, no meu caso criei usando o heidi sql mesmo, a tigger funcionou muito bem desta forma
CREATE TRIGGER movimentos_before_insert BEFORE INSERT ON movimento
-> FOR EACH ROW
-> BEGIN
-> DECLARE saldoAnterior DOUBLE;
-> SET saldoAnterior = (SELECT M.saldo FROM movimento M ORDER BY M.id DESC LIMIT 1);
-> IF (NEW.tipo= [ô]E[ô]) THEN
-> SET NEW.saldo = saldoAnterior + NEW.valor;
-> END IF;
-> IF (NEW.TIPO =[ô]S[ô]) THEN
-> SET NEW.saldo = saldoAnterior - NEW.valor;
-> END IF;
-> END $$
SE VOCÊ USA O HEIDISQL AVISE QUE TE ENSINO A CRIAR A TIGGER NELE.
por fim bastou eu inserir os dados até o valor apenas que o saldo foi se atualizando, eu me surpreendi comigo mesmo, rs ainda num tinha usado uma tigger, rs
Bom dia. Consegui finalmente me focar nisso novamente. Porem acho qu enao vai ter como, vou ter mesmo que fazer um laço.
Porque disso ?
Simples, o usuário tem os seguintes dados na tabela movimento:
10/03/2014 E 10,00 10,00
11/03/2014 E 15,00 25,00
11/03/2014 S 5,00 20,00
Ele pode no dia 12/03, ir la e lançar algo com assim:
10/03/2014 E 5,00 5,00
O que teria que deixar a tabela assim :
10/03/2014 E 5,00 5,00
10/03/2014 E 10,00 15,00
11/03/2014 E 15,00 30,00
11/03/2014 S 5,00 25,00
Acho que não encontrarei uma solução pra isso. E infelizmente temos que deixar uma opção para o cliente corrigir situações de esquecimento ou erro mesmo.
Por exemplo, ele pode ter lançado um lançamento e ter que apaga-lo, enfim.
[EDIT] Esqueci de dizer, seu exemplo funcionou aqui. Obrigado pela atenção![/edit]
Porque disso ?
Simples, o usuário tem os seguintes dados na tabela movimento:
10/03/2014 E 10,00 10,00
11/03/2014 E 15,00 25,00
11/03/2014 S 5,00 20,00
Ele pode no dia 12/03, ir la e lançar algo com assim:
10/03/2014 E 5,00 5,00
O que teria que deixar a tabela assim :
10/03/2014 E 5,00 5,00
10/03/2014 E 10,00 15,00
11/03/2014 E 15,00 30,00
11/03/2014 S 5,00 25,00
Acho que não encontrarei uma solução pra isso. E infelizmente temos que deixar uma opção para o cliente corrigir situações de esquecimento ou erro mesmo.
Por exemplo, ele pode ter lançado um lançamento e ter que apaga-lo, enfim.
[EDIT] Esqueci de dizer, seu exemplo funcionou aqui. Obrigado pela atenção![/edit]
Tópico encerrado , respostas não são mais permitidas