Reporte de Balance SAP

¡Hola comunidad de SAP!

Un cordial saludo a todos ustedes. Estoy buscando consejos para embarcarme en un camino que me emociona. Creo que este es un buen desafío profesional para mí: quiero crear una consulta que me dé el balance financiero, considerando todos los niveles.

Tengo mi primera consulta:

SELECT 
    SUM(CASE WHEN T0."Account" LIKE '1%' THEN T0."Debit" - T0."Credit" ELSE 0 END) AS "Activos $",
    SUM(CASE WHEN T0."Account" LIKE '2%' THEN T0."Credit" - T0."Debit" ELSE 0 END) AS "Pasivos $",
    (SUM(CASE WHEN T0."Account" LIKE '1%' THEN T0."Debit" - T0."Credit" ELSE 0 END) -
    SUM(CASE WHEN T0."Account" LIKE '2%' THEN T0."Credit" - T0."Debit" ELSE 0 END)) AS "Patrimonio $",
    SUM(CASE WHEN T0."Account" LIKE '1%' THEN T0."SYSDeb" - T0."SYSCred" ELSE 0 END) AS "Activos en Moneda del Sistema",
    SUM(CASE WHEN T0."Account" LIKE '2%' THEN T0."SYSCred" - T0."SYSDeb" ELSE 0 END) AS "Pasivos en Moneda del Sistema",
    (SUM(CASE WHEN T0."Account" LIKE '1%' THEN T0."SYSDeb" - T0."SYSCred" ELSE 0 END) -
    SUM(CASE WHEN T0."Account" LIKE '2%' THEN T0."SYSCred" - T0."SYSDeb" ELSE 0 END)) AS "Patrimonio en Moneda del Sistema"
FROM "JDT1" T0
WHERE T0."RefDate" BETWEEN '2020-01-01' AND '2020-12-31'

Esta consulta trae el balance del primer nivel. Quiero hacer específicamente el de nivel 7, y a partir de ahí, replicar el mismo para combinar otras empresas en un informe de Power BI. ¿Qué consejos tienen? ¿Me he explicado bien? Cualquier recomendación o curso específico que mencionen, lo consideraré.

Adicionalmente, tengo otra pregunta: ¿Cuál es la mejor manera de crear este informe de balance? ¿Debería crear una vista o un procedimiento almacenado? Mi objetivo es que el balance incluya todas las empresas solicitadas.

Estimado @jkovas buen dia. Inicialmente te doy la bienvenida a esta comunidad, te invito a que conozcas el resto de las secciones del foro, hay lugares muy interesantes y con informacion muy importante, asi tambien puedes pasar por el area de presentaciones y te presentes para que podamos conocerte un poco mas. Acerca de tu duda, te comento: SAP B1 ya incluye varios informes financieros, te aconsejaria que revises los que SAP ya incluye y verifiques si lo que necesitas esta alli, o realmente necesitas hacer el reporte financiero desde CERO. En el area de Menu Principal → Finanzas → Informes financieros, puedes chequear que reportes ya incluye SAP…Si te ayuda en algo la informacion dale un Like, y si te resolvio tu duda, favor de darle resuelto a la duda. *Te esperamos por el area de presentaciones y de nuevo bienvenido a la comunidad. Saludos Cordiales.

1 me gusta

Hola estimado @saufondez.

Gracias por tomarse el tiempo de responder mi consulta.

Si, los Informes Finacieros que usted me indica son los que estoy tomando como referencia para hacer mi dashboard. En mi opinión, este informe (Balance) es completamente adecuado, ya que proviene directamente de SAP, garantizando su fiabilidad y precisión, el requerimiento lo hace alguien que desea ver un “reporte mas bonito” (No sé si eso tenga sentido) y pues, ante la necesidad de querer ver un informe mas personalizado también veo la oportunidad de entender mas a fondo como SAP genera ese de reporte y porqué no, otros más.

Saludos!

Mientas no entiendas y sepas como es todo el procedimiento contable de cierres de ejercicio, como muestra los saldos y los balances y pérdidas y ganancias el sistema … lo tienes prácticamente imposible.
Aún así, cuando lo entiendas y sepas, lo vas a tener complicadísimo (ojo… no imposible)
Sería interesante que pasarás además por Presentaciones

2 Me gusta

Lo logré hacer, tengo 8 sociedades en una vista que me da el balance.

Gracias por su comentario.

1 me gusta

Buenas tardes,

En primer lugar, quiero extender mis felicitaciones por tu reciente logro. Es admirable y ciertamente digno de reconocimiento.

En segundo término, quisiera saber si sería posible compartir dicho logro con nosotros. Tu colaboración sería de gran ayuda, especialmente para aquellos de nosotros que requerimos realizar ajustes esenciales en el balance para adaptarlo a las necesidades específicas de nuestras empresas.

Agradezco tu atención a esta solicitud y quedo a la espera de tu amable respuesta.

1 me gusta

¡¡Excelente y Felicitaciones!!

¿Es como un cubo OLAP? ¿Lo hiciste en Power BI? ¿Consolida?

SAB B1 no hace algo como eso de manera nativa, lo que sí puede servir es el módulo de Consolidación (EC-CS) que está diseñado para eso.

1 me gusta

Esto fue lo que hice para obtener todos los movimientos del Balance de las Sociedades que Necesitaba, primero una vista y despues un query que consuma esa vista.

Mi Vista:

CREATE "COMBINEDBALANCESAP" ( "Account",
	 "Mes",
	 "Ano",
	 "SaldoApertura",
	 "Debito",
	 "Credito",
	 "Saldo",
	 "Sociedad",
	 "BaseDatos" ) AS ((((((SELECT
	 T1."Account",
	 MONTH(T0."RefDate") AS "Mes",
	 YEAR(T0."RefDate") AS "Ano",
	 IFNULL(( SELECT
	 SUM(T3."Debit" - T3."Credit") 
								FROM "BD1"."OJDT" T2 
								LEFT JOIN "BD1"."JDT1" T3 ON T2."TransId" = T3."TransId" 
								WHERE T3."Account" LIKE T1."Account" 
								GROUP BY T3."Account" ),
	 0) AS "SaldoApertura",
	 SUM(T1."Debit") AS "Debito",
	 SUM(T1."Credit") AS "Credito",
	 SUM(CASE WHEN 
							LEFT(T1."Account",
	 1) = '2' 
							THEN T1."Credit" - T1."Debit" 
							ELSE T1."Debit" - T1."Credit" 
							END) AS "Saldo",
	 'Sociedad I' AS "Sociedad",
	 'BD1' AS "BaseDatos" 
						FROM "BD1"."OJDT" T0 
						LEFT JOIN "BD1"."JDT1" T1 ON T0."TransId" = T1."TransId" 
						GROUP BY T1."Account",
	 MONTH(T0."RefDate"),
	 YEAR(T0."RefDate") HAVING SUM(T1."Debit" - T1."Credit") != 0) 
					UNION ALL (SELECT
	 T1."Account",
	 MONTH(T0."RefDate") AS "Mes",
	 YEAR(T0."RefDate") AS "Ano",
	 IFNULL(( SELECT
	 SUM(T3."SYSDeb" - T3."SYSCred") 
								FROM "BD2"."OJDT" T2 
								LEFT JOIN "BD2"."JDT1" T3 ON T2."TransId" = T3."TransId" 
								WHERE T3."Account" LIKE T1."Account" 
								GROUP BY T3."Account" ),
	 0) AS "SaldoApertura",
	 SUM(T1."SYSDeb") AS "Debito",
	 SUM(T1."SYSCred") AS "Credito",
	 SUM(CASE WHEN 
							LEFT(T1."Account",
	 1) = '2' 
							THEN T1."SYSCred" - T1."SYSDeb" 
							ELSE T1."SYSDeb" - T1."SYSCred" 
							END) AS "Saldo",
	 'Sociedad II' AS "Sociedad",
	 'BD2' AS "BaseDatos" 
						FROM "BD2"."OJDT" T0 
						LEFT JOIN "BD2"."JDT1" T1 ON T0."TransId" = T1."TransId" 
						GROUP BY T1."Account",
	 MONTH(T0."RefDate"),
	 YEAR(T0."RefDate") HAVING SUM(T1."SYSDeb" - T1."SYSCred") != 0)) 
				UNION ALL (SELECT
	 T1."Account",
	 MONTH(T0."RefDate") AS "Mes",
	 YEAR(T0."RefDate") AS "Ano",
	 IFNULL(( SELECT
	 SUM(T3."Debit" - T3."Credit") 
							FROM "BD3"."OJDT" T2 
							LEFT JOIN "BD3"."JDT1" T3 ON T2."TransId" = T3."TransId" 
							WHERE T3."Account" LIKE T1."Account" 
							GROUP BY T3."Account" ),
	 0) AS "SaldoApertura",
	 SUM(T1."Debit") AS "Debito",
	 SUM(T1."Credit") AS "Credito",
	 SUM(CASE WHEN 
						LEFT(T1."Account",
	 1) = '2' 
						THEN T1."Credit" - T1."Debit" 
						ELSE T1."Debit" - T1."Credit" 
						END) AS "Saldo",
	 'Sociedad III' AS "Sociedad",
	 'BD3' AS "BaseDatos" 
					FROM "BD3"."OJDT" T0 
					LEFT JOIN "BD3"."JDT1" T1 ON T0."TransId" = T1."TransId" 
					GROUP BY T1."Account",
	 MONTH(T0."RefDate"),
	 YEAR(T0."RefDate") HAVING SUM(T1."Debit" - T1."Credit") != 0)) 
			UNION ALL (SELECT
	 T1."Account",
	 MONTH(T0."RefDate") AS "Mes",
	 YEAR(T0."RefDate") AS "Ano",
	 IFNULL(( SELECT
	 SUM(T3."Debit" - T3."Credit") 
						FROM "BD4"."OJDT" T2 
						LEFT JOIN "BD4"."JDT1" T3 ON T2."TransId" = T3."TransId" 
						WHERE T3."Account" LIKE T1."Account" 
						GROUP BY T3."Account" ),
	 0) AS "SaldoApertura",
	 SUM(T1."Debit") AS "Debito",
	 SUM(T1."Credit") AS "Credito",
	 SUM(CASE WHEN 
					LEFT(T1."Account",
	 1) = '2' 
					THEN T1."Credit" - T1."Debit" 
					ELSE T1."Debit" - T1."Credit" 
					END) AS "Saldo",
	 'Sociedad IV' AS "Sociedad",
	 'BD4' AS "BaseDatos" 
				FROM "BD4"."OJDT" T0 
				LEFT JOIN "BD4"."JDT1" T1 ON T0."TransId" = T1."TransId" 
				GROUP BY T1."Account",
	 MONTH(T0."RefDate"),
	 YEAR(T0."RefDate") HAVING SUM(T1."Debit" - T1."Credit") != 0)) 
		UNION ALL (SELECT
	 T1."Account",
	 MONTH(T0."RefDate") AS "Mes",
	 YEAR(T0."RefDate") AS "Ano",
	 IFNULL(( SELECT
	 SUM(T3."Debit" - T3."Credit") 
					FROM "BD5"."OJDT" T2 
					LEFT JOIN "BD5"."JDT1" T3 ON T2."TransId" = T3."TransId" 
					WHERE T3."Account" LIKE T1."Account" 
					GROUP BY T3."Account" ),
	 0) AS "SaldoApertura",
	 SUM(T1."Debit") AS "Debito",
	 SUM(T1."Credit") AS "Credito",
	 SUM(CASE WHEN 
				LEFT(T1."Account",
	 1) = '2' 
				THEN T1."Credit" - T1."Debit" 
				ELSE T1."Debit" - T1."Credit" 
				END) AS "Saldo",
	 'Sociedad V' AS "Sociedad",
	 'BD5' AS "BaseDatos" 
			FROM "BD5"."OJDT" T0 
			LEFT JOIN "BD5"."JDT1" T1 ON T0."TransId" = T1."TransId" 
			GROUP BY T1."Account",
	 MONTH(T0."RefDate"),
	 YEAR(T0."RefDate") HAVING SUM(T1."Debit" - T1."Credit") != 0)) 
	UNION ALL (SELECT
	 T1."Account",
	 MONTH(T0."RefDate") AS "Mes",
	 YEAR(T0."RefDate") AS "Ano",
	 IFNULL(( SELECT
	 SUM(T3."SYSDeb" - T3."SYSCred") 
				FROM "B6"."OJDT" T2 
				LEFT JOIN "B6"."JDT1" T3 ON T2."TransId" = T3."TransId" 
				WHERE T3."Account" LIKE T1."Account" 
				GROUP BY T3."Account" ),
	 0) AS "SaldoApertura",
	 SUM(T1."SYSDeb") AS "Debito",
	 SUM(T1."SYSCred") AS "Credito",
	 SUM(CASE WHEN 
			LEFT(T1."Account",
	 1) = '2' 
			THEN T1."SYSCred" - T1."SYSDeb" 
			ELSE T1."SYSDeb" - T1."SYSCred" 
			END) AS "Saldo",
	 'Sociedad VI' AS "Sociedad",
	 'B6' AS "BaseDatos" 
		FROM "B6"."OJDT" T0 
		LEFT JOIN "B6"."JDT1" T1 ON T0."TransId" = T1."TransId" 
		GROUP BY T1."Account",
	 MONTH(T0."RefDate"),
	 YEAR(T0."RefDate") HAVING SUM(T1."SYSDeb" - T1."SYSCred") != 0)) WITH READ ONLY

Y este es mi query en power bi:

WITH OACT_UNION AS (
    SELECT "AcctCode", "AcctName", "FatherNum", "Levels","FormatCode",'Sociedad I' AS "BaseDatos" FROM "B1"."OACT"
    UNION ALL
    SELECT "AcctCode", "AcctName", "FatherNum", "Levels","FormatCode",'Sociedad II' AS "BaseDatos" FROM "B2"."OACT"
    UNION ALL
    SELECT "AcctCode", "AcctName", "FatherNum", "Levels","FormatCode",'Sociedad III' AS "BaseDatos" FROM "B3"."OACT"
    UNION ALL
    SELECT "AcctCode", "AcctName", "FatherNum", "Levels", "FormatCode" ,'Sociedad IIII' AS "BaseDatos" FROM "B4"."OACT"
    UNION ALL
    SELECT "AcctCode", "AcctName", "FatherNum", "Levels","FormatCode" ,'Sociedad IV' AS "BaseDatos" FROM "B5"."OACT"
    UNION ALL
    SELECT "AcctCode", "AcctName", "FatherNum", "Levels", "FormatCode",'Sociedad V' AS "BaseDatos" FROM "B6"."OACT"
)
SELECT 
    balance."Sociedad",
    CASE
    	WHEN OA."Levels" = 4 THEN  UPPER(T5."AcctName") 
        WHEN OA."Levels" = 7 THEN  UPPER(T8."AcctName") 
        WHEN OA."Levels" = 6 THEN  UPPER(T7."AcctName") 
        ELSE UPPER(T6."AcctName")
    END AS "Nivel 1",
    CASE 
    	 WHEN OA."Levels" = 4 THEN LEFT(T4."FormatCode", 2) || ' - ' || T4."AcctName"
    	 WHEN OA."Levels" = 7 THEN LEFT(T7."FormatCode", 2) || ' - ' || T7."AcctName"
    	 WHEN OA."Levels" = 6 THEN LEFT(T6."FormatCode", 2) || ' - ' || T6."AcctName"
    ELSE
 LEFT(T5."FormatCode", 2) || ' - ' || T5."AcctName"
    END AS "Nivel 2",
    
    CASE 
    	 WHEN OA."Levels" = 4 THEN LEFT(T3."FormatCode", 3) || ' - ' || T3."AcctName"
    	 WHEN OA."Levels" = 7 THEN LEFT(T6."FormatCode", 3) || ' - ' || T6."AcctName"
    	 WHEN OA."Levels" = 6 THEN LEFT(T5."FormatCode", 3) || ' - ' || T5."AcctName"
    ELSE
   LEFT(T4."FormatCode", 3) || ' - ' || T4."AcctName"
    END AS "Nivel 3",
     CASE 
       	 WHEN OA."Levels" = 4 THEN LEFT(T3."FormatCode", 5) || ' - ' || T3."AcctName"
    	 WHEN OA."Levels" = 7 THEN LEFT(T5."FormatCode", 5) || ' - ' || T5."AcctName"
    	 WHEN OA."Levels" = 6 THEN LEFT(T4."FormatCode", 5) || ' - ' || T4."AcctName"
    ELSE
    LEFT(T3."FormatCode", 5) || ' - ' || T3."AcctName" 
    END
    AS "Nivel 4",
    CASE 
     	 WHEN OA."Levels" = 4 THEN   OA."FormatCode" || ' - ' || OA."AcctName" 
    	 WHEN OA."Levels" = 7 THEN   T4."FormatCode" || ' - ' || T4."AcctName" 
    	 WHEN OA."Levels" = 6 THEN   T3."FormatCode" || ' - ' || T3."AcctName" 
    ELSE
    OA."FormatCode" || ' - ' || OA."AcctName" 
    END
    AS "Nivel 5",
    
        CASE 
    	 WHEN OA."Levels" = 7 THEN   T3."FormatCode" || ' - ' || T3."AcctName" 
    	 WHEN OA."Levels" = 6 THEN   OA."FormatCode" || ' - ' || OA."AcctName" 
    ELSE
    	'N/A'
    END
    AS "Nivel 6",
    CASE 
    	 WHEN OA."Levels" = 7 THEN   OA."FormatCode" || ' - ' || OA."AcctName" 
    ELSE
    	'N/A'	 
    END
    AS "Nivel 7",
    balance."Account" as "Cuenta",
    balance."SaldoApertura" as "SaldoApertura",
    balance."Debito" as "Debito Ac",
    balance."Credito" as "Credito Ac",
    balance."Saldo" as "Saldo Ac",
    balance."Mes" AS "MM",
    balance."Ano" AS "YYYY",
    OA."Levels"
FROM CombinedBalanceSAP balance
INNER JOIN OACT_UNION OA ON OA."AcctCode" = balance."Account" AND OA."BaseDatos" = balance."BaseDatos"
INNER JOIN OACT_UNION T3 ON OA."FatherNum" = T3."AcctCode" AND T3."BaseDatos" = balance."BaseDatos"
INNER JOIN OACT_UNION T4 ON T3."FatherNum" = T4."AcctCode" AND T4."BaseDatos" = balance."BaseDatos"
INNER JOIN OACT_UNION T5 ON T4."FatherNum" = T5."AcctCode" AND T5."BaseDatos" = balance."BaseDatos"
LEFT JOIN OACT_UNION T6 ON T5."FatherNum" = T6."AcctCode" AND T6."BaseDatos" = balance."BaseDatos"
LEFT JOIN OACT_UNION T7 ON T6."FatherNum" = T7."AcctCode" AND T7."BaseDatos" = balance."BaseDatos"
LEFT JOIN OACT_UNION T8 ON T7."FatherNum" = T8."AcctCode" AND T8."BaseDatos" = balance."BaseDatos"
LEFT JOIN OACT_UNION T9 ON T8."FatherNum" = T9."AcctCode" AND T9."BaseDatos" = balance."BaseDatos"
WHERE balance."Account" LIKE '1%' OR balance."Account" LIKE '2%'
ORDER BY T6."AcctCode", T5."AcctCode", T4."AcctCode", T3."AcctCode" 

Y en Power Bi estoy usando una objeto visual llamado Financial Reporting Matrix de Profitbase donde en los Rows agrego todos mis niveles y el Unico Value es Saldo Ac.

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.