tengo una duda a la hora de consultar la información de centros de coste. Tengo una dimensión con normas de reparto directas e indirectas, donde evidentemente las indirectas son porcentajes de las directas.
El problema que tengo es que a la hora de consultar un informe de Pérdidas y Ganancias SAP me deja filtrar por norma de reparto, no por centro de coste, de forma que no puedo obtener este informe para un centro de coste específico que haya obtenido imputaciones tanto directas como indirectas.
¿Sabéis si existe alguna forma de obtener esta información, por favor? Cuenta de resultados por centro de coste y no por norma de reparto.
DECLARE @ANIO SMALLINT
SET @ANIO = (SELECT A.Year FROM dbo.OACP A WHERE A.Year=’[%0]’)
SELECT
P.[Cuenta],
P.[Nombre],
P.[CC],
P.[NombreCC],
[1] as [Ene],
[2] as [Feb],
[3] as [Mar],
[4] as [Abr],
[5] as [May],
[6] as [Jun],
[7] as [Jul],
[8] as [Ago],
[9] as [Sep],
[10] as [Oct],
[11] as [Nov],
[12] as [Dic]
FROM (
SELECT
T0.Account AS Cuenta,
T1.AcctName AS Nombre,
T2.PrcCode as CC,
T2.PrcName AS NombreCC,
MONTH(T0.RefDate)‘Month’,
SUM(T0.Credit-T0.Debit)‘CargoAbono’
FROM dbo.JDT1 T0
INNER JOIN dbo.OACT T1 ON T1.AcctCode=T0.Account
LEFT JOIN dbo.OPRC T2 ON T2.PrcCode=T0.ProfitCode
WHERE YEAR(T0.RefDate)=@ANIO AND T1.GroupMask BETWEEN 6 AND 8
GROUP BY T0.Account, T1.AcctName,T2.PrcCode, T2.PrcName,MONTH(T0.RefDate)
) P
PIVOT (
SUM(CargoAbono)
FOR [Month] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
) P
ORDER BY P.[Cuenta], P.[CC]
puedes encontrar mas en la siguente liga
h_tps://answers.sap.com/questions/11825699/reporte-de-perdidas-y-ganancias-por-query.html
Solo modifique el codigo que se expone y aumente el centro de costo.
Complementando… yo adecué el query anterior para desglosar por centro de costo, el saldo queda así:
Sum(Case T3.PrcAmount When 100 then (T0.[Debit] - T0.[Credit]) else (T0.[Debit] - T0.[Credit])*(T3.PrcAmount/100) end) as CargoAbono
Y también hay que agregar el siguiente Join:
INNER JOIN OOCR T2 ON T0.[ProfitCode] = T2.[OcrCode]
INNER JOIN OCR1 T3 ON T2.[OcrCode] = T3.[OcrCode] And T0.RefDate >= T3.ValidFrom And T0.RefDate <= IsNull(T3.ValidTo, GetDate())
en cuanto al Query solo cambiarian T2. a T3 y de T3 a T4 y si corre bien el query con la modificacion de @Gera_Mendez
que daria asi.
DECLARE @ANIO SMALLINT
SET @ANIO = (SELECT A.Year FROM OACP A WHERE A.Year= [%0])
SELECT
P.[Cuenta],
P.[Nombre],
P.[CC],
P.[NombreCC],
[1] as [Ene],
[2] as [Feb],
[3] as [Mar],
[4] as [Abr],
[5] as [May],
[6] as [Jun],
[7] as [Jul],
[8] as [Ago],
[9] as [Sep],
[10] as [Oct],
[11] as [Nov],
[12] as [Dic]
FROM (
SELECT
T0.Account AS Cuenta,
T1.AcctName AS Nombre,
T2.PrcCode as CC,
T2.PrcName AS NombreCC,
MONTH(T0.RefDate) "Month",
Sum(Case T4.PrcAmount When 100 then (T0.[Debit] - T0.[Credit]) else (T0.[Debit] - T0.[Credit])*(T4.PrcAmount/100) end) as CargoAbono
FROM JDT1 T0
INNER JOIN OACT T1 ON T1.AcctCode=T0.Account
LEFT JOIN OPRC T2 ON T2.PrcCode=T0.ProfitCode
INNER JOIN OOCR T3 ON T0.[ProfitCode] = T3.[OcrCode]
INNER JOIN OCR1 T4 ON T3.[OcrCode] = T4.[OcrCode] And T0.RefDate >= T4.ValidFrom And T0.RefDate <= IsNull(T4.ValidTo, GetDate())
WHERE YEAR(T0.RefDate)=@ANIO AND T1.GroupMask BETWEEN 6 AND 8
GROUP BY T0.Account, T1.AcctName,T2.PrcCode, T2.PrcName,MONTH(T0.RefDate)
) P
PIVOT (
SUM(CargoAbono)
FOR [Month] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
) P
ORDER BY P.[Cuenta], P.[CC]
Sí, tengo igual que tú, pero al seleccionar el centro de costo la pantalla que aparece es la de Normas de Reparto, por lo que en realidad no está filtrando por centros de costos sino por normas de reparto.