SQL Server - Reporte Saldos

   
Vista:

Reporte Saldos

Publicado por Omar (1 intervención) el 13/12/2013 17:09:39
Buenas vibras a todos, tengo la siguiente consulta.
Requiero realizar un reporte con los siguientes datos:

Fecha - Todos los días del año (dd-mm-yyyy)
SInicial - Saldo Inicial
ComprasML - Compras en Moneda Local
IFinal - Saldo Final
CostoVentasML - Costo de Ventas en Moneda Local

SInicial: Viene a ser el saldo final del día anterior a la fecha indicada en la columna fecha de la misma fila. Esto sólo es para una determinada cuenta.

ComprasML: El total del movimiento de una determinada cuenta por día, cabe mencionar que el día es el que se encuentra en la columna fecha.

IFinal: Viene a ser el saldo final del día a la fecha indicada en la columna fecha de la misma fila. Esto sólo es para una determinada cuenta.

CostoVentasML: El total del movimiento de una determinada cuenta por día, cabe mencionar que el día es el que se encuentra en la columna fecha.

Esto es lo que utilizo para los datos de SInicial e IFinal

SELECT
LEFT(T2.FormatCode,2)
, SUM(Debit-Credit) AS [SInicial]
, null AS [IFinalML]
FROM JDT1 T0
INNER JOIN OJDT T1 ON T1.TransId=T0.TransId
INNER JOIN OACT T2 ON T2.AcctCode=T0.Account
WHERE
T1.RefDate<=@FInicial
AND LEFT(T2.FormatCode,2)=@SInicial
GROUP BY
LEFT(T2.FormatCode,2)

UNION ALL

SELECT
LEFT(T2.FormatCode,2)
, null AS [SInicial]
, SUM(Debit-Credit) AS [IFinalML]
FROM JDT1 T0
INNER JOIN OJDT T1 ON T1.TransId=T0.TransId
INNER JOIN OACT T2 ON T2.AcctCode=T0.Account
WHERE
T1.RefDate<=@FFinal
AND LEFT(T2.FormatCode,2)=@IFinalML
GROUP BY
LEFT(T2.FormatCode,2)

Esto es lo que utilizo para los movimientos de ComprasML y CostoVentasML

SELECT T1.RefDate [DocDate], CONVERT(DECIMAL(13,2),SUM(Debit)-SUM(Credit)) AS [ComprasML]
FROM JDT1 T0
INNER JOIN OJDT T1 ON T1.TransId=T0.TransId
INNER JOIN OACT T2 ON T2.AcctCode=T0.Account
WHERE YEAR(T1.RefDate)='2013' AND LEFT(T2.FormatCode,2)='60'
GROUP BY T1.RefDate
ORDER BY T1.RefDate

SELECT T1.RefDate [DocDate], CONVERT(DECIMAL(13,2),SUM(Debit)-SUM(Credit)) AS [CostoVentasML]
FROM JDT1 T0
INNER JOIN OJDT T1 ON T1.TransId=T0.TransId
INNER JOIN OACT T2 ON T2.AcctCode=T0.Account
WHERE YEAR(T1.RefDate)='2013' AND LEFT(T2.FormatCode,4) IN ('6911','6953')
GROUP BY T1.RefDate
ORDER BY T1.RefDate

Con respecto a los saldos iniciales y finales tengo que estar cambiando los valores por días, quisiera saber si en un solo proceso podría mandar para que se ejecute de acuerdo a los días estipulados en la columna 1.

En conclusión quisiera saber si se podría realizar todo en un solo query y no estar realizando varios pasos y luego mandarlo al Excel.

A la espera de su gran ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder