cancel
Showing results for 
Search instead for 
Did you mean: 

Query de reporte de perdidas y ganancias con centro de costos

former_member211460
Participant
0 Kudos

Hola a todos

tenemos este query que amablemente me pasaron hace tiempo donde me trae los datos del reporte nativo de SAP de perdidas y ganancias, nos arroja a la derecha los meses y en columna los centros de costos, pero lo quisiéramos al revés que en las columnas a la derecha aparezcan los centros de costos y poder escoger el mes y año, alguien podría decirnos como seria, gracias por su ayuda, saludos

DECLARE @ANIO SMALLINT

SET @ANIO = (SELECT A.Year FROM dbo.OACP A WHERE A.Year='[%0]')

SELECT

    P.[Cuenta],

    P.[Nombre],

    P.[CCosto],

    [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

        T1.FormatCode AS Cuenta,

        T1.AcctName AS Nombre,

        T2.PrcName AS CCosto,

        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 1 AND 8

    GROUP BY T1.FormatCode, T1.AcctName, 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.[CCosto]

Accepted Solutions (1)

Accepted Solutions (1)

juancarlos_huerta
Contributor
0 Kudos

Víctor, intenta con esto:


declare @CentroCosto as varchar(max)

declare @Query as varchar(max)

DECLARE @ANIO nvarchar(4)

declare @Mes nvarchar(2)

SET @ANIO = (SELECT A.Year FROM dbo.OACP A WHERE A.Year='[%0]')

SET @Mes = (select top 1 B.SubNum from dbo.OFPR B WHERE B.SubNum='[%1]')


set @CentroCosto= STUFF((Select distinct '],['+ isnull(T2.PrcName,'@') 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 month(T0.RefDate) = 2 AND T1.GroupMask BETWEEN 1 AND 8

    GROUP BY T1.FormatCode, T1.AcctName, T2.PrcName FOR XML PATH('')),1,2,'') +']'

set @Query='select * from (

  select T1.FormatCode AS Cuenta, T1.AcctName AS Nombre, isnull(T2.PrcName,''@'') AS CCosto, 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 month(T0.RefDate) = ''' + @Mes + ''' AND T1.GroupMask BETWEEN 1 AND 8

  GROUP BY T1.FormatCode, T1.AcctName, T2.PrcName

  ) fg

Pivot (Sum(CargoAbono) for

CCosto in ('+@CentroCosto+')) AS pvtb'

EXECUTE (@Query)

Saludos,

JC.

former_member211460
Participant
0 Kudos

Juan Carlos

Gracias por tu aporte , revisandolo  hay una columna @ esos datos a que se refieren?

Saludos

juancarlos_huerta
Contributor
0 Kudos

Es cuando no se seleccionó un centro de costo... Puedes cambiar el @ por otro texto (Sin CC, Por definir, etc) , lo haces en la fila 7 del query que te puse.

former_member211460
Participant
0 Kudos

Gracias Juan Carlos

Funciono perfecto

Saludos

Answers (0)