Calculo delphi
30/08/2013
0
Possuo 5 tabelas com os seguintes campos :
Fluxocaixa - campo valor
Contas a receber - campo valor
contas a pagar - campo valor
cheques a receber - campo valor
conta corrente - campo valor
Preciso pegar um periodo exemplo (01/08/2013 a 31/08/2013) e somar todos os valores de cada tabela, dentro de seu dia e mostrar em um unico Dbgrid. ficando assim
Data Valor caixa Receber Pagar Cheques Conta Corrente
01/08/2013 100,00 1.240,00 800,00 0,00 10.000,00
02/08/2013 90,00 300,00 120,00 480,00 10.000,00
resumindo cada dia deste periodo preciso ter o resultado da soma da movimentacao referente ao dia.
Alguem ja fez algo assim ?
Andre Ucella
Post mais votado
31/08/2013
No seu caso, para qualquer movimento, existe um caixa, certo?
Vou fazer um exemplo, pensando no fluxocaixa como principal, se não for, só vc adequar!
(select sum(cr.campovalor) from contasreceber cr where cr.data = fc.data) as valor_cr,
(select sum(cp.campovalor) from contaspagar cp where cp.data = fc.data) as valor_cp,
(select sum(chr.campovalor) from chequereceber chr where chr.data = fc.data) as valor_chr,
(select sum(cc.campovalor) from contacorrente cc where cc.data = fc.data) as valor_cc
from fluxoxaixa fc
where data between :dataini and :datafim
Não sei se a performance será boa
Espero te ajudado!
Gustavo Bretas
Mais Posts
31/08/2013
Emerson Nascimento
creio que isso seja bem mais prático numa Stored Procedure.
31/08/2013
Andre Ucella
31/08/2013
Emerson Nascimento
CREATE OR ALTER PROCEDURE MOVIMENTO ( dataini date, datafim date) returns ( data date, nfluxo numeric(15,2), ncontasreceber numeric(15,2), ncontaspagar numeric(15,2), ncheque numeric(15,2), ncontacorrente numeric(15,2)) as begin data = dataini; while (:data < :datafim) do begin select coalesce(sum(valor),0) from fluxo where data = :data into :nfluxo; select coalesce(sum(valor),0) from contasreceber where baixa = :data into :ncontasreceber; select coalesce(sum(valor),0) from contaspagar where baixa = :data into :ncontaspagar; select coalesce(sum(valor),0) from cheques where baixa = :data into :ncheque; select coalesce(sum(valor * (case when tipo = 'D' then -1 else 1 end)),0) from contacorrente where data = :data into :ncontacorrente; suspend; data = data + 1; end end
02/09/2013
Andre Ucella
Obrigadão em ...
04/09/2013
Andre Ucella
CREATE PROCEDURE SP_MOVIMENTO (
DATAINI DATE,
DATAFIM DATE,
COD_CAIXA INTEGER,
COD_CONTA INTEGER)
RETURNS (
DATA DATE,
CAIXA INTEGER,
CONTA INTEGER,
NFLUXO NUMERIC(15,2),
NCONTASRECEBER NUMERIC(15,2),
NCONTASPAGAR NUMERIC(15,2),
NCHEQUE NUMERIC(15,2),
NCARTAO NUMERIC(15,2),
NCONTACORRENTE NUMERIC(15,2))
AS
begin
data = dataini;
caixa = cod_caixa;
conta = cod_conta;
while (:data < :datafim) do
begin
select coalesce(sum(tab1.valorfechamento),0) from fluxo tab1 where tab1.cod_caixa = :caixa and tab1.datafechamento = :data into :nfluxo;
select coalesce(sum(tab2.valor_ctr),0) from contas_receber tab2 where tab2.vencto_ctr = :data into :ncontasreceber;
select coalesce(sum(tab3.valor_ctp),0) from contas_pagar tab3 where tab3.dtvencto_ctp = :data into :ncontaspagar;
select coalesce(sum(tab4.valor_che),0) from cheque tab4 where tab4.vencto_che = :data into :ncheque;
select coalesce(sum((tab5.valor - (tab5.valor * tab5.taxa)/100)),0) from contas_receber_adm_cartao tab5 where tab5.vencimento = :data into :ncartao;
select coalesce(sum(tab6.valor_lan * (case when tab6.dc_lan = '0' then -1 else 1 end)),0) from lancamentos_contas_corrente tab6 where tab6.cod_conta =:conta and tab6.dataemi_lan = :data into :ncontacorrente;
suspend;
data = data + 1;
end
end
Ta funcionando perfeitamente, porem teria algum jeito de mostrar o saldo da conta corrente ao invés do valor lançado no dia ?, so na conta corrente o restante ta td certinho...
04/09/2013
Emerson Nascimento
CREATE PROCEDURE SP_MOVIMENTO ( DATAINI DATE, DATAFIM DATE, COD_CAIXA INTEGER, COD_CONTA INTEGER) RETURNS ( DATA DATE, CAIXA INTEGER, CONTA INTEGER, NFLUXO NUMERIC(15,2), NCONTASRECEBER NUMERIC(15,2), NCONTASPAGAR NUMERIC(15,2), NCHEQUE NUMERIC(15,2), NCARTAO NUMERIC(15,2), NSALDOCONTACORRENTE NUMERIC(15,2)) AS declare variable nsaldoinicial numeric(15,2); declare variable nsaldo numeric(15,2); begin data = dataini; caixa = cod_caixa; conta = cod_conta; -- é preciso saber se você tem algum totalizador para a conta corrente ou se o saldo é calculado em tempo-real. -- assumindo a segunda opção (tempo-real), será preciso calcular o saldo inicial do período. -- o cálculo poderia ter sido feito 'diariamente' naquela instrução da conta corrente, mas creio que assim, separado, -- tenha melhor performance. com isso, preciso obter o saldo inicial do período. -- obtém o saldo inicial do período, ou seja, o saldo até o dia imediatamente anterior ao início período select coalesce(sum(tab6.valor_lan * (case when tab6.dc_lan = '0' then -1 else 1 end)),0) from lancamentos_contas_corrente tab6 where tab6.cod_conta = :conta and tab6.dataemi_lan < :data into :nsaldoinicial; -- efetua o cálculo diário dos movimentos while (:data <= :datafim) do -- Aqui troquei o operador para 'menor ou igual' begin select coalesce(sum(tab1.valorfechamento),0) from fluxo tab1 where tab1.cod_caixa = :caixa and tab1.datafechamento = :data into :nfluxo; select coalesce(sum(tab2.valor_ctr),0) from contas_receber tab2 where tab2.vencto_ctr = :data into :ncontasreceber; select coalesce(sum(tab3.valor_ctp),0) from contas_pagar tab3 where tab3.dtvencto_ctp = :data into :ncontaspagar; select coalesce(sum(tab4.valor_che),0) from cheque tab4 where tab4.vencto_che = :data into :ncheque; select coalesce(sum((tab5.valor - (tab5.valor * tab5.taxa)/100)),0) from contas_receber_adm_cartao tab5 where tab5.vencimento = :data into :ncartao; select coalesce(sum(tab6.valor_lan * (case when tab6.dc_lan = '0' then -1 else 1 end)),0) from lancamentos_contas_corrente tab6 where tab6.cod_conta = :conta and tab6.dataemi_lan between :data_ini and :data into :nsaldo; nsaldocontacorrente = nsaldoinicial + nsaldo; -- saldo da conta corrente no dia suspend; data = data + 1; end end
04/09/2013
Andre Ucella
Clique aqui para fazer login e interagir na Comunidade :)