Buenas tardes a todos.
Espero conseguir ayuda y a la vez quien sabe con esto pueda ayudar a alguien mas.
Tengo en query un reporte de estado por funcion (que antes se llamaba de ganancias y perdidas si no me equivoco), me funciona bastante bien hasta el momento en que quiero seleccionar las Unidades de negocio (profitcode) y sus saldos correspondientes.
Dejo el query espero me puedan apoyar.
DECLARE @PERI NVARCHAR(7)
DECLARE @RUC NVARCHAR(32)
DECLARE @RAZONSOCIAL NVARCHAR(100)
declare @UniNeg nvarchar(max)
declare @TotUni int
DECLARE @YEAR INT
SELECT @PERI = (SELECT TOP 1 T0.Code FROM [dbo].[OFPR] T0 WHERE T0.Code = '2014-01')--'[%0]')
SELECT @RAZONSOCIAL = (select TOP 1 CompnyName from OADM)
SELECT @RUC = (select TOP 1 TaxIdNum from OADM)
SELECT @YEAR = (select DATEPART(YEAR,F_RefDate) from [dbo].[OFPR] Where Code= @PERI)
select @UniNeg = (select TOP 1 T0.ProfitCode from JDT1 T0, OACT T1, [@CLASCTASFIN] T2
where T1.u_biz_clasctasfin = T2.code group by T0.ProfitCode)
select @TotUni = (select profitcode, Debit, Credit 'Total por Unidad' from JDT1 where RefDate = @YEAR
and ProfitCode <> ''
group by ProfitCode,Debit,Credit)
DECLARE @TOTAL_INGRESOS_BRUTOS INT
SET @TOTAL_INGRESOS_BRUTOS=
(
SELECT ISNULL(SUM(T0.Debit-T0.Credit),0) FROM [dbo].[OJDT] T1
INNER JOIN [dbo].[JDT1] T0 ON T1.TransId = T0.TransId
INNER JOIN [dbo].[OFPR] T2 ON T2.AbsEntry = T1.FinncPriod
INNER JOIN [dbo].[OACT] T3 ON T3.AcctCode = T0.Account
INNER JOIN [dbo].[@CLASCTASFIN] T4 ON T3.U_BIZ_CLASCTASFIN = T4.CODE
WHERE
1=1
AND (DATEPART(YEAR,T2.F_RefDate) = '2014')--@YEAR)
AND T4.U_BIZ_OPER='A'
AND T4.U_BIZ_CALC='N'
AND NOT T1.TransType IN (-3,-2)
--and T0.ProfitCode <> ''
)
DECLARE @UTILIDAD_BRUTA INT
SET @UTILIDAD_BRUTA=
(
@TOTAL_INGRESOS_BRUTOS
+
(
SELECT ISNULL(SUM(T0.Debit-T0.Credit),0) FROM [dbo].[OJDT] T1
INNER JOIN [dbo].[JDT1] T0 ON T1.TransId = T0.TransId
INNER JOIN [dbo].[OFPR] T2 ON T2.AbsEntry = T1.FinncPriod
INNER JOIN [dbo].[OACT] T3 ON T3.AcctCode = T0.Account
INNER JOIN [dbo].[@CLASCTASFIN] T4 ON T3.U_BIZ_CLASCTASFIN=T4.CODE
WHERE
1=1
AND (DATEPART(YEAR,T2.F_RefDate) = '2014')--@YEAR)
AND T4.U_BIZ_OPER='C'
AND T4.U_BIZ_CALC='N'
AND NOT T1.TransType IN (-3,-2)
--and T0.ProfitCode <> ''
)
)
DECLARE @UTILIDAD_OPERATIVA INT
SET @UTILIDAD_OPERATIVA=
(
@UTILIDAD_BRUTA
+
(
SELECT ISNULL(SUM(T0.Debit-T0.Credit),0) FROM [dbo].[OJDT] T1
INNER JOIN [dbo].[JDT1] T0 ON T1.TransId = T0.TransId
INNER JOIN [dbo].[OFPR] T2 ON T2.AbsEntry = T1.FinncPriod
INNER JOIN [dbo].[OACT] T3 ON T3.AcctCode = T0.Account
INNER JOIN [dbo].[@CLASCTASFIN] T4 ON T3.U_BIZ_CLASCTASFIN = T4.CODE
WHERE
1=1
AND (DATEPART(YEAR,T2.F_RefDate) ='2014') --@YEAR)
AND T4.U_BIZ_OPER='D'
AND T4.U_BIZ_CALC='N'
AND NOT T1.TransType IN (-3,-2)
--and T0.ProfitCode <> ''
)
)
DECLARE @RESULTADOS_PARTICIPACIONES INT
SET @RESULTADOS_PARTICIPACIONES=
(
@UTILIDAD_OPERATIVA
+
(
SELECT ISNULL(SUM(T0.Debit-T0.Credit),0) FROM [dbo].[OJDT] T1
INNER JOIN [dbo].[JDT1] T0 ON T1.TransId = T0.TransId
INNER JOIN [dbo].[OFPR] T2 ON T2.AbsEntry = T1.FinncPriod
INNER JOIN [dbo].[OACT] T3 ON T3.AcctCode = T0.Account
INNER JOIN [dbo].[@CLASCTASFIN] T4 ON T3.U_BIZ_CLASCTASFIN=T4.CODE
WHERE
1=1
AND (DATEPART(YEAR,T2.F_RefDate) = '2014')--@YEAR)
AND T4.U_BIZ_OPER='E'
AND NOT T1.TransType IN (-3,-2)
AND T4.U_BIZ_CALC='N'
--and T0.ProfitCode <> ''
)
)
DECLARE @RESULTADOS_ANTESPART_EXTRAORDINARIAS INT
SET @RESULTADOS_ANTESPART_EXTRAORDINARIAS=
(
@RESULTADOS_PARTICIPACIONES
+
(
SELECT ISNULL(SUM(T0.Debit-T0.Credit),0) FROM [dbo].[OJDT] T1
INNER JOIN [dbo].[JDT1] T0 ON T1.TransId = T0.TransId
INNER JOIN [dbo].[OFPR] T2 ON T2.AbsEntry = T1.FinncPriod
INNER JOIN [dbo].[OACT] T3 ON T3.AcctCode = T0.Account
INNER JOIN [dbo].[@CLASCTASFIN] T4 ON T3.U_BIZ_CLASCTASFIN=T4.CODE
WHERE
1=1
AND (DATEPART(YEAR,T2.F_RefDate) = '2014') --@YEAR)
AND T4.U_BIZ_OPER='G'
AND T4.U_BIZ_CALC='N'
AND NOT T1.TransType IN (-3,-2)
--and T0.ProfitCode <> ''
)
)
Select
[Periodo],
[RUC],
[Razon Social],
[CONSUMO EN LA PRODUCCIÓN],
[Ejercicio o periodo] as [Ejercicio o periodo],
[Unidad de Negocio]
[Total por Unidad]
FROM
(
SELECT
@PERI AS 'Periodo' ,
@RUC AS 'RUC',
@RAZONSOCIAL AS 'Razon Social',
T10.U_BIZ_NOM AS 'CONSUMO EN LA PRODUCCIÓN',
@UniNeg AS 'Unidad de Negocio',
@TotUni AS 'Total por Unidad',
'Ejercicio o periodo' =
CASE
WHEN T10.U_BIZ_CALC='N' THEN
(
SELECT ISNULL(SUM(T0.Debit-T0.Credit),0) FROM [dbo].[OJDT] T1
INNER JOIN [dbo].[JDT1] T0 ON T1.TransId = T0.TransId
INNER JOIN [dbo].[OFPR] T2 ON T2.AbsEntry = T1.FinncPriod
INNER JOIN [dbo].[OACT] T3 ON T3.AcctCode = T0.Account
WHERE
(DATEPART(YEAR,T2.F_RefDate) = @YEAR) AND T3.U_BIZ_CLASCTASFIN = T10.CODE
AND NOT T1.TransType IN (-3,-2)
--and T0.ProfitCode(SUM(T0.Debit-T0.Credit)) <> ''
)
ELSE
CASE
WHEN T10.U_BIZ_OPER='A' THEN ISNULL(@TOTAL_INGRESOS_BRUTOS,0)
WHEN T10.U_BIZ_OPER='B' THEN ISNULL(@UTILIDAD_BRUTA,0)
WHEN T10.U_BIZ_OPER='D' THEN ISNULL(@UTILIDAD_OPERATIVA,0)
WHEN T10.U_BIZ_OPER='E' THEN ISNULL(@RESULTADOS_PARTICIPACIONES,0)
WHEN T10.U_BIZ_OPER='G' THEN ISNULL(@RESULTADOS_ANTESPART_EXTRAORDINARIAS,0)
WHEN T10.U_BIZ_OPER='H' THEN
ISNULL
(
@RESULTADOS_ANTESPART_EXTRAORDINARIAS +
(
SELECT ISNULL(SUM(T0.Debit-T0.Credit),0) FROM [dbo].[OJDT] T1
INNER JOIN [dbo].[JDT1] T0 ON T1.TransId = T0.TransId
INNER JOIN [dbo].[OFPR] T2 ON T2.AbsEntry = T1.FinncPriod
INNER JOIN [dbo].[OACT] T3 ON T3.AcctCode = T0.Account
INNER JOIN [dbo].[@CLASCTASFIN] T4 ON T3.U_BIZ_CLASCTASFIN=T4.CODE
WHERE
1=1
AND (DATEPART(YEAR,T2.F_RefDate) = @YEAR)
AND T4.U_BIZ_OPER='H'
AND T4.U_BIZ_CALC='N'
AND NOT T1.TransType IN (-3,-2)
--and T0.ProfitCode<> ''
)
,
0
)
ELSE
NULL
END
END,
U_BIZ_ORDEN
FROM [dbo].[@CLASCTASFIN] T10 , JDT1 T0
WHERE U_BIZ_OPER<>'1'
group by T10.u_biz_nom,T0.ProfitCode,T10.code, T10.U_biz_calc, T10.U_biz_OPer,T10.U_biz_orden
)
AAA
Order by U_BIZ_ORDEN
Gracias
Angel