Kpi de cuenta de perdida y ganancias

Buen día, estoy generando un query en SAP B1 v 10.00 for SAP HANA 10.00.210 para generar unos kpi de cuenta de perdida y ganancias, pero me marca error:
Could not execute ‘SELECT CONCAT(’[%StartDate%]', ’ - ‘, ‘[%EndDate%]’) AS “Periodo”, ‘Ingresos Totales’ AS …’
SAP DBTech JDBC: [316]: wrong number of arguments in function invocation: line 2 col 5 (at pos 14)
El query es el siguiente:

SELECT
	CONCAT('[%StartDate%]', ' - ', '[%EndDate%]') AS "Periodo",
	'Ingresos Totales' AS "Descripción",
	SUM(
		CASE
			WHEN T0."AcctCode" LIKE '4%' THEN T1."Credit" - T1."Debit"
			ELSE 0
		END
	) AS "Monto"
FROM
	OACT T0
	INNER JOIN JDT1 T1 ON T0."AcctCode" = T1."Account"
WHERE
	T1."RefDate" BETWEEN '2024-01-01'
	AND '2024-12-31'
UNION ALL
SELECT
	CONCAT('[%StartDate%]', ' - ', '[%EndDate%]') AS "Periodo",
	'Gastos Totales' AS "Descripción",
	SUM(
		CASE
			WHEN T0."AcctCode" LIKE '5%' THEN T1."Debit" - T1."Credit"
			ELSE 0
		END
	) AS "Monto"
FROM
	OACT T0
	INNER JOIN JDT1 T1 ON T0."AcctCode" = T1."Account"
WHERE
	T1."RefDate" BETWEEN '2024-01-01'
	AND '2024-12-31'
UNION ALL
SELECT
	CONCAT('[%StartDate%]', ' - ', '[%EndDate%]') AS "Periodo",
	'Resultado Neto' AS "Descripción",
	SUM(
		CASE
			WHEN T0."AcctCode" LIKE '4%' THEN T1."Credit" - T1."Debit"
			ELSE 0
		END
	) - SUM(
		CASE
			WHEN T0."AcctCode" LIKE '5%' THEN T1."Debit" - T1."Credit"
			ELSE 0
		END
	) AS "Monto"
FROM
	OACT T0
	INNER JOIN JDT1 T1 ON T0."AcctCode" = T1."Account"
WHERE
	T1."RefDate" BETWEEN '2024-01-01'
	AND '2024-12-31'

Me ayudan a revisar y ver como debe quedar?

A ver @Ahmed te estás convirtiendo en habitual pero…

Por favor…

1.- No tienes presentación en Presentaciones
2.- Al postear código sql hazlo correctamente con la edición
3.- Cuando se van solucionando tus temas, contesta con la respuesta y marca el post que te lo ha solucionado.

:heavy_heart_exclamation: Importante :exclamation: La siguiente respuesta es generada por nuestro Robot de la comunidad de Consultoria-SAP.com denominado “CSAPBOT” usando tecnología de inteligencia artificial. Por lo tanto, puede haber datos incorrectos. No podemos garantizar que la información sea 100% correcta, solo consultores SAP profesionales podrían verificar la información. Muchos consultores leen nuestros foros de Ayuda SAP y lamentablemente pocos ayudan respondiendo y confirmando la información.

Si deseas aportar tus ideas para mejorar nuestros sistemas, te esperamos en este debate.


El error que estás obteniendo ocurre porque la función CONCAT en SAP HANA requiere que los argumentos sean columnas o literales directamente concatenables. Los valores entre comillas simples, como '%StartDate%', no se interpretan correctamente como literales para concatenar.

Vamos a corregir el query para que funcione correctamente con la versión de SAP HANA 10.00 y los valores de parámetros. También simplificaremos un poco el código para que sea más legible y funcional.

Query corregido:

SELECT
    CONCAT(:StartDate, ' - ', :EndDate) AS "Periodo",
    'Ingresos Totales' AS "Descripción",
    SUM(
        CASE
            WHEN T0."AcctCode" LIKE '4%' THEN T1."Credit" - T1."Debit"
            ELSE 0
        END
    ) AS "Monto"
FROM
    OACT T0
INNER JOIN JDT1 T1 ON T0."AcctCode" = T1."Account"
WHERE
    T1."RefDate" BETWEEN :StartDate AND :EndDate
UNION ALL
SELECT
    CONCAT(:StartDate, ' - ', :EndDate) AS "Periodo",
    'Gastos Totales' AS "Descripción",
    SUM(
        CASE
            WHEN T0."AcctCode" LIKE '5%' THEN T1."Debit" - T1."Credit"
            ELSE 0
        END
    ) AS "Monto"
FROM
    OACT T0
INNER JOIN JDT1 T1 ON T0."AcctCode" = T1."Account"
WHERE
    T1."RefDate" BETWEEN :StartDate AND :EndDate
UNION ALL
SELECT
    CONCAT(:StartDate, ' - ', :EndDate) AS "Periodo",
    'Resultado Neto' AS "Descripción",
    SUM(
        CASE
            WHEN T0."AcctCode" LIKE '4%' THEN T1."Credit" - T1."Debit"
            ELSE 0
        END
    ) - SUM(
        CASE
            WHEN T0."AcctCode" LIKE '5%' THEN T1."Debit" - T1."Credit"
            ELSE 0
        END
    ) AS "Monto"
FROM
    OACT T0
INNER JOIN JDT1 T1 ON T0."AcctCode" = T1."Account"
WHERE
    T1."RefDate" BETWEEN :StartDate AND :EndDate;

Cambios realizados:

  1. Uso de parámetros:

    • Reemplacé '[%StartDate%]' y '[%EndDate%]' por los parámetros :StartDate y :EndDate, que son la forma adecuada para manejar parámetros en SAP HANA. Debes asignarles valores antes de ejecutar el query.
  2. Concatenación correcta:

    • La función CONCAT ahora usa directamente los parámetros (:StartDate y :EndDate) como entradas, junto con el texto adicional ' - '.
  3. Fechas dinámicas:

    • Asegúrate de que las variables :StartDate y :EndDate sean asignadas como fechas válidas (YYYY-MM-DD) en el entorno donde ejecutes este query.
  4. Estructura optimizada:

    • El query mantiene la estructura funcional con validaciones CASE, pero ahora cumple con las reglas de sintaxis de HANA.

Resultado esperado

El query generará un reporte con tres filas para el rango de fechas especificado:

  • Ingresos Totales: Suma de las cuentas de ingresos (cuentas que inician con “4”).
  • Gastos Totales: Suma de las cuentas de gastos (cuentas que inician con “5”).
  • Resultado Neto: Diferencia entre los ingresos y los gastos totales.

Resumen Consultoria-SAP

Con esta corrección, el query debería ejecutarse correctamente en SAP B1 HANA 10.00. Verifica los valores de entrada para los parámetros :StartDate y :EndDate en el entorno para asegurarte de que se aplican como fechas válidas. Este ajuste te permitirá generar tus KPIs de pérdidas y ganancias sin errores de sintaxis.

¡Estamos aquí para ayudarte!

1 me gusta