Fórum fluxo de caixa #369813
16/04/2009
0
Bom dia, galera.
Estou com problema ve se vcs pdem me ajudar. Tenho uma tabela onde guardo as contas ( PAGAR / RECEBER ) :
CODCONTASPAGARRECEBER INT PK
CODCLIENTE
CODFORNECEDOR
TIPOMOVIMENTO
DATA
HISTORICO
VALOR
Queria montar uma SQL ou SP da seguinte forma :
DATA |TIPOMOV |HISTORICO |VALOR |SALDO
XXXX E SALDO ANT 1000 1000
XXXX E NOTA 999 1000 2000
XXXX S DEB. XXX 300 1700
XXXX E SALDO FINAL 0 1700
Isto eu iria de terminar uma Data inicial e uma Final.
Estou utilizando D7 e Interbase 6.0.
Caso seja melhor fazer via SP como posso faze-la e como executar ela via D7.
Obrigado.
Estou com problema ve se vcs pdem me ajudar. Tenho uma tabela onde guardo as contas ( PAGAR / RECEBER ) :
CODCONTASPAGARRECEBER INT PK
CODCLIENTE
CODFORNECEDOR
TIPOMOVIMENTO
DATA
HISTORICO
VALOR
Queria montar uma SQL ou SP da seguinte forma :
DATA |TIPOMOV |HISTORICO |VALOR |SALDO
XXXX E SALDO ANT 1000 1000
XXXX E NOTA 999 1000 2000
XXXX S DEB. XXX 300 1700
XXXX E SALDO FINAL 0 1700
Isto eu iria de terminar uma Data inicial e uma Final.
Estou utilizando D7 e Interbase 6.0.
Caso seja melhor fazer via SP como posso faze-la e como executar ela via D7.
Obrigado.
Walter Faria
Curtir tópico
+ 0
Responder
Posts
27/04/2009
Emarcolongo
Walter boa tarde.
Existem algumas formas de vc fazer isto, poderia ser dentro do
Delphi no seu relatorio, poderia ser por SP ou então montar os
dados dentro do Delphi.
Fiz uma SP, que foi o que vc sugeriu, alem disto acredito adicionei
o saldo anterior a data de pesquisa, para isto criei uma segunda
tabela (tab_auxiliar) com a mesma estrutura que a de origem, mas
com o campo Saldo como adicional, em caso de duvidas fique a vontade.
para chamar dentro do delphi, vc precisa colocar um componente
SQLStoredProc, se vc tiver usando DBExpress, ou um comp.similar.
Fazer as configurações da propr. SqlConnection e StoredProcName
No codigo vc digita:
Mas como lhe falei tem várias formas de se fazer, poderiamos inclusive
fazer sem a necessidade talvez da segunda tab. (tab_auxiliar).
Estou a disposição
Existem algumas formas de vc fazer isto, poderia ser dentro do
Delphi no seu relatorio, poderia ser por SP ou então montar os
dados dentro do Delphi.
Fiz uma SP, que foi o que vc sugeriu, alem disto acredito adicionei
o saldo anterior a data de pesquisa, para isto criei uma segunda
tabela (tab_auxiliar) com a mesma estrutura que a de origem, mas
com o campo Saldo como adicional, em caso de duvidas fique a vontade.
SET TERM ^ ; CREATE PROCEDURE FLUXO_PRC ( DINICIO DATE, DFIM DATE) AS DECLARE VARIABLE DDATA DATE; DECLARE VARIABLE ITIPO CHAR(1); DECLARE VARIABLE DVALOR DECIMAL(15,2); DECLARE VARIABLE SHIST VARCHAR(10); DECLARE VARIABLE SALDO DECIMAL(15,2); begin saldo = 0; delete from tab_auxiliar; for select data, tipo, valor, historico from tab_financeiro where data < :dinicio into :ddata, :itipo, :dvalor, :shist do begin if (itipo = ´E´) then saldo = (saldo+dvalor); if (itipo = ´S´) then saldo = (saldo-dvalor); end insert into tab_auxiliar (data,tipo,valor,historico,saldo) values(:dinicio,´X´,:saldo,´Sdo.Ant´,:saldo); for select data, tipo, valor, historico from tab_financeiro where data >= :dinicio and data <= :dfim into :ddata, :itipo, :dvalor, :shist do begin if (itipo = ´E´) then saldo = (saldo+dvalor); if (itipo = ´S´) then saldo = (saldo-dvalor); insert into tab_auxiliar (data,tipo,valor,historico,saldo) values(:ddata,:itipo,:dvalor,:shist,:saldo); end suspend; end ^ SET TERM ; ^ GRANT SELECT,INSERT,DELETE ON TAB_AUXILIAR TO PROCEDURE FLUXO_PRC; GRANT SELECT ON TAB_FINANCEIRO TO PROCEDURE FLUXO_PRC; GRANT EXECUTE ON PROCEDURE FLUXO_PRC TO SYSDBA;
para chamar dentro do delphi, vc precisa colocar um componente
SQLStoredProc, se vc tiver usando DBExpress, ou um comp.similar.
Fazer as configurações da propr. SqlConnection e StoredProcName
No codigo vc digita:
SQLStoredProc1.Params.ParamByName(´dinicio´).value := strtodate(edit1.text); SQLStoredProc1.Params.ParamByName(´dfim´).value := strtodate(edit2.text); SQLStoredProc1.ExecProc;
Mas como lhe falei tem várias formas de se fazer, poderiamos inclusive
fazer sem a necessidade talvez da segunda tab. (tab_auxiliar).
Estou a disposição
Responder
Gostei + 0
29/04/2009
Walter Faria
Primeiramente , muito obrigado por ter me respondido com base na sua fiz a SP. ficou da seguinte forma nao criei tab auxiliar:
CREATE PROCEDURE FLUXO(
SALDOANTERIOR FLOAT,
DATAINICIAL DATE)
RETURNS(
R_CODIGO INTEGER,
R_HISTORICO VARCHAR(50) CHARACTER SET NONE,
R_TIPO VARCHAR(1) CHARACTER SET NONE,
R_VALOR DECIMAL(18, 2),
R_SALDO DECIMAL(18, 2))
AS
DECLARE VARIABLE DEBITO DOUBLE PRECISION;
DECLARE VARIABLE CREDITO DOUBLE PRECISION;
BEGIN
R_SALDO=0.00;
select Sum(CPR.ValorOriginal) from ContasPagarReceber CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
Where gc.TipoConta = 2 AND CPR.DataEmissao < :DATAINICIAL into :DEBITO;
select Sum(CPR.ValorOriginal) from ContasPagarReceber CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
Where gc.TipoConta = 1 AND CPR.DataEmissao < :DATAINICIAL into :CREDITO;
SALDOANTERIOR =CREDITO - DEBITO;
R_CODIGO =0;
R_TIPO = ´*´;
R_HISTORICO = ´SALDO ANTERIOR´;
R_VALOR = 0;
R_SALDO = SALDOANTERIOR;
suspend;
FOR
select
CPR.CODCONTASPAGARRECEBER,GC.TIPOCONTA,CPR.HISTORICO,CPR.VALORORIGINAL from
CONTASPAGARRECEBER CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
WHERE CPR.DATAEMISSAO >= :DATAINICIAL order by CPR.CODCONTASPAGARRECEBER INTO :R_CODIGO,:R_TIPO, :R_HISTORICO,:R_VALOR DO
BEGIN
if (R_TIPO = ´1´) then
BEGIN
R_SALDO = SALDOANTERIOR + :R_VALOR;
R_TIPO = ´C´;
END
if (R_TIPO = ´2´) then
BEGIN
R_SALDO = SALDOANTERIOR - :R_VALOR;
R_TIPO = ´D´;
END
SALDOANTERIOR = :R_SALDO;
suspend;
END
R_SALDO=0.00;
R_CODIGO =0;
R_TIPO = ´*´;
R_HISTORICO = ´SALDO ATUAL´;
R_VALOR = 0;
R_SALDO = SALDOANTERIOR;
suspend;
END
CREATE PROCEDURE FLUXO(
SALDOANTERIOR FLOAT,
DATAINICIAL DATE)
RETURNS(
R_CODIGO INTEGER,
R_HISTORICO VARCHAR(50) CHARACTER SET NONE,
R_TIPO VARCHAR(1) CHARACTER SET NONE,
R_VALOR DECIMAL(18, 2),
R_SALDO DECIMAL(18, 2))
AS
DECLARE VARIABLE DEBITO DOUBLE PRECISION;
DECLARE VARIABLE CREDITO DOUBLE PRECISION;
BEGIN
R_SALDO=0.00;
select Sum(CPR.ValorOriginal) from ContasPagarReceber CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
Where gc.TipoConta = 2 AND CPR.DataEmissao < :DATAINICIAL into :DEBITO;
select Sum(CPR.ValorOriginal) from ContasPagarReceber CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
Where gc.TipoConta = 1 AND CPR.DataEmissao < :DATAINICIAL into :CREDITO;
SALDOANTERIOR =CREDITO - DEBITO;
R_CODIGO =0;
R_TIPO = ´*´;
R_HISTORICO = ´SALDO ANTERIOR´;
R_VALOR = 0;
R_SALDO = SALDOANTERIOR;
suspend;
FOR
select
CPR.CODCONTASPAGARRECEBER,GC.TIPOCONTA,CPR.HISTORICO,CPR.VALORORIGINAL from
CONTASPAGARRECEBER CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
WHERE CPR.DATAEMISSAO >= :DATAINICIAL order by CPR.CODCONTASPAGARRECEBER INTO :R_CODIGO,:R_TIPO, :R_HISTORICO,:R_VALOR DO
BEGIN
if (R_TIPO = ´1´) then
BEGIN
R_SALDO = SALDOANTERIOR + :R_VALOR;
R_TIPO = ´C´;
END
if (R_TIPO = ´2´) then
BEGIN
R_SALDO = SALDOANTERIOR - :R_VALOR;
R_TIPO = ´D´;
END
SALDOANTERIOR = :R_SALDO;
suspend;
END
R_SALDO=0.00;
R_CODIGO =0;
R_TIPO = ´*´;
R_HISTORICO = ´SALDO ATUAL´;
R_VALOR = 0;
R_SALDO = SALDOANTERIOR;
suspend;
END
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)