CALCULAR SALDO FINAL

F001E 18/10/2012 11:57:27
#412256
Bom dia a Todos....
Seguinte...tenho essa SQL com a View V_SALDOANTERIOR para trazer os Saldos Anteriores das contas e esse Função DBO.FC_CONTA_SALDOFINAL para Calcular o Saldo Final....Segue a SQL

SELECT A.EMPRESA,A.DATA,A.LOTE,A.SEQUENCIA,A.DEVEDORA,A.CENTROCUSTODEV,
A.CREDORA,A.CENTROCUSTOCRED,A.DOCUMENTO,A.ORDEM,
A.COMPLEMENTO,A.VALOR,B.SALDOANTERIOR,
DBO.FC_CONTA_SALDOFINAL(B.SALDOANTERIOR,A.VALOR) AS SALDOFINAL
FROM CONTA_DIGITACAO A
INNER JOIN V_SALDOANTERIOR B
ON B.CONTA = A.DEVEDORA
AND B.EMPRESA = A.EMPRESA
AND B.DATAABERTURA = [ô]2010/12/31[ô]
WHERE A.EMPRESA = [ô]0001[ô]
AND A.DEVEDORA BETWEEN [ô]1[ô] AND [ô]4.11.01.01.01.01[ô]
AND A.DEVEDORA <> [ô][ô]
AND A.DATA BETWEEN [ô]2011/01/01[ô]
AND [ô]2011/12/31[ô]
ORDER BY A.DATA,A.ORDEM,A.SEQUENCIA

O Problema é que para Calcular o Saldo Final eu tenho q pegar o Saldo Final do mes Anterior para que seja o Saldo Inicial do mes corrente e nessa SQL nao consigo fazer isso pois a View vai me trazer o Saldo Final de 31/12/2010 para todos os Registros..

Para ficar mais claro segue o anexo..

No primeiro Registro tem saldo anterior 0,00 valor de 21,70 e saldo final 21,70...blz..isso esta certo...
Mas no segundo registro teria q fazer saldo anterior 21,70 + valor de 43,40 e saldo final de 65,10
e o terceiro registro igual o segundo registro assim sucessivamente...

mas o que esta fazendo é sempre pegando saldo anterior do campo saldo anterior + valor para dar o saldo final....

alguem se habilita....
VELDRAME 18/10/2012 12:14:46
#412261
Use a Função UNION
Lembrando que ambos os Select devem conter a mesma quantidade de campos
SELECT * FROM tbl_FaturaImp Where [dtData] between [ô]2008-08-23[ô] and [ô]2008-08-23[ô]
union
SELECT null,null,null,null,null,null,null,null,null,SUM(vlrBruto) as [ô]Total[ô] FROM tbl_FaturaImp Where dtData = [ô]2008-08-01[ô]
[ô]AQUI -> Como tenho muitos registro, usei a Func SUM para ficar tudo em um campo só
ADHEL 18/10/2012 12:18:59
#412263
Também preciso disso aí
A situação atual(POG)que estou utilizando é...
Quando o sistema abre pela primeira vez no dia ele grava os valores do saldo atual do dia anterior e passa a ser o Inicial do dia de trabalho.
O meu Grid é assim
INICIAL , ENTRADA, SAÍDA, OUTROS, ATUAL
Sempre a coluna inicial tem o mesmo valor do atual do dia anterior.
Vou acompanhar de perto.
Pois com certeza há um jeito melhor.
F001E 20/11/2012 08:46:50
#414484
Reativando o Tópico...essa SQL ficaria assim.....

SELECT A.EMPRESA,A.CONTA,B.DESCRICAO,
CASE WHEN C.SALDOANTERIOR IS NULL THEN [ô]0.00[ô] ELSE C.SALDOANTERIOR END AS SALDOANTERIOR,
SUM(A.DEBITO) AS DEBITO,SUM(A.CREDITO) AS CREDITO,
CASE WHEN (SUM(A.CREDITO) = 0 AND SUM(A.DEBITO) = 0) THEN D.SALDO ELSE
(CASE WHEN C.SALDOANTERIOR <= 0 THEN C.SALDOANTERIOR - SUM(A.DEBITO) + SUM(A.CREDITO) ELSE
(CASE WHEN C.SALDOANTERIOR IS NULL THEN
(SUM(A.CREDITO) - SUM(A.DEBITO)) ELSE
C.SALDOANTERIOR - SUM(A.DEBITO) + SUM(A.CREDITO) END) END) END AS SALDO,
B.CODIGOREDUZIDO
FROM CONTA_SALDO A
INNER JOIN CONTA_PLANODECONTAS B
ON A.CONTA = B.CONTA
AND A.TIPO = B.TIPO
AND A.EMPRESA = B.EMPRESA
LEFT JOIN V_SALDOANTERIOR C
ON C.CONTA = A.CONTA
AND C.EMPRESA = A.EMPRESA
AND C.DATAABERTURA = [ô]2000/12/31[ô]
LEFT JOIN V_SALDOATUAL D
ON D.CONTA = A.CONTA
AND D.EMPRESA = A.EMPRESA
AND D.DATA = 200112
WHERE A.EMPRESA = [ô]0001[ô]
AND A.DATA BETWEEN 200101
AND 200112
AND A.CONTA >= [ô]1[ô]
AND A.CONTA <= [ô]4.11.01.01.01.01[ô]
AND A.TIPO = 6
GROUP BY A.EMPRESA,A.CONTA,B.DESCRICAO,C.SALDOANTERIOR,B.CODIGOREDUZIDO,D.SALDO
ORDER BY A.CONTA
Tópico encerrado , respostas não são mais permitidas