Calculo con campos de línea de diferentes tablas

Hola a todos!
Quiero crear una búsqueda formateada de línea donde traiga el calculo de varios campos de diferentes tablas. El problema que tengo es que el calculo lo debe realizar cuando se cumplan 2 condiciones.

Para poneros en situación, he creado un objeto de usuario compuesto por un total de 11 tablas, una como cabecera y otras 10 de línea. El propósito es realizar la evaluación de proveedores, cada tabla de línea es una categoría con sus propios asepctos a evaluar.

Cada línea será la valoración de cada año:

No he tenido problema cuando sólo tenía la información de un año (2020), pero ahora al hacer la valoración de mitad de año, la búsqueda formateada que tenía no me funciona.

Copio y pego la query:

SELECT
((($[$0_U_G.C_0_3.NUMBER]+$[$1_U_G.C_1_6.NUMBER]+$[$2_U_G.C_2_9.NUMBER]+$[$3_U_G.C_3_6.NUMBER]+$[$4_U_G.C_4_5.NUMBER]+$[$5_U_G.C_5_7.NUMBER])/($[$0_U_G.C_0_4.NUMBER]+$[$1_U_G.C_1_7.NUMBER]+$[$2_U_G.C_2_10.NUMBER]+$[$3_U_G.C_3_7.NUMBER]+$[$4_U_G.C_4_6.NUMBER]+$[$5_U_G.C_5_8.NUMBER])*100)-$[$6_U_G.C_6_6.NUMBER]-$[$7_U_G.C_7_5.NUMBER])
FROM “@GES_EP” T0
INNER JOIN “@GES_EP1” T1 ON T0.“U_GES_DocEntry” = T1.“U_GES_DocEntry”
INNER JOIN “@GES_EP2” T2 ON T0.“U_GES_DocEntry” = T2.“U_GES_DocEntry”
INNER JOIN “@GES_EP3” T3 ON T0.“U_GES_DocEntry” = T3.“U_GES_DocEntry”
INNER JOIN “@GES_EP4” T4 ON T0.“U_GES_DocEntry” = T4.“U_GES_DocEntry”
INNER JOIN “@GES_EP5” T5 ON T0.“U_GES_DocEntry” = T5.“U_GES_DocEntry”
INNER JOIN “@GES_EP6” T6 ON T0.“U_GES_DocEntry” = T6.“U_GES_DocEntry”
INNER JOIN “@GES_EP7” T7 ON T0.“U_GES_DocEntry” = T7.“U_GES_DocEntry”
INNER JOIN “@GES_EP8” T8 ON T0.“U_GES_DocEntry” = T8.“U_GES_DocEntry”
INNER JOIN “@GES_EP10” T9 ON T0.“U_GES_DocEntry” = T9.“U_GES_DocEntry”
WHERE T1.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T2.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T3.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T4.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T5.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T6.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T7.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T8.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T9.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T1.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T2.“U_GES_DocEntry”= $[$8_U_G.C_8_5.0] AND T3.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T4.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T5.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T6.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T7.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T9.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T0.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0]

Al añadir la información en todas las pestañas de la valroación del 2021-1S, la BF me devuelve el mismo valor que para la valoración del 2020.

Me pueden ayudar? he intentad buscar por todos lados alguna forma de realizar el cálculo pero no lo he encontrado.

Las dos condiciones que debe cumplir es que sea del mismo año y que agarre los datos de los mismos DocEntry.

Muchas gracias por cualquier rayo de luz que alguien pueda arrojar. ^^

Hola

¿cómo tienes definida la numeración de este objeto? Si eliges el año 2021 ¿te devuelve también el año 2020?

Un saludo

Hola Amarcos!
soy un poco novata con el sap y no entiendo a qué te refieres cuando preguntas sobre “la definición de la numeración de este objeto”.

A la segunda pregunta, sí, si estoy en la fila de la evaluación 2021-1S me trae el mismo valor que la del 2020, y la puntuación debería ser menor porque ha bajado en algunos aspectos.
Da en las dos evaluaciones 97,14 pero la del año 2021-1S debería ser 91,02
imagen

Muchas gracias!

Hola

en la captura no aparece el valor de docentry ¿podrías comprobar qué valor tiene?

Lo de la numeración, es el cálculo de los números de los documentos, como facturas de ventas.

Un saludo

Hola,
El valor del DocEntry es el mismo en las dos filas:

imagen

Y la numeración…la tabla de la cabecera es tipo “Datos Maestros” no de “Documento”…no sé si es esto a lo que te refieres

Saludos,
Marta

Hola

upps, lo que quieres es realizar el seguimiento de los diferentes años. Ahora entiendo un poco el formulario.

¿podrías comprobar cuántos registros tienes en las tablas @GES_EPX con el docentry 44? Si hay más de uno, es decir, uno por ejercicio, habría que modificar la consulta SQL para que considere también el año

Un saludo

Hola,
En cada tabla de línea hay dos registros con el DocEntry 44:

Intenté añadir el año en el WHERE pero hay algo que no hago bien porque no funciona…

Saludos,

Hola

sin ver la consulta, creo que cada tabla debe tener también el campo AÑO y deberías añadirlo a la consulta.

Un saludo

Hola Amarcos,
Correcto, cada tabla tiene su campo del año TX.“U_GES_A” y ya he intentado añadirlo en el WHERE pero no consigo que funcione.

Copio y pego la query a ver si me puedes ayudar:

SELECT
((($[$0_U_G.C_0_3.NUMBER]+$[$1_U_G.C_1_6.NUMBER]+$[$2_U_G.C_2_9.NUMBER]+$[$3_U_G.C_3_6.NUMBER]+$[$4_U_G.C_4_5.NUMBER]+$[$5_U_G.C_5_7.NUMBER])/($[$0_U_G.C_0_4.NUMBER]+$[$1_U_G.C_1_7.NUMBER]+$[$2_U_G.C_2_10.NUMBER]+$[$3_U_G.C_3_7.NUMBER]+$[$4_U_G.C_4_6.NUMBER]+$[$5_U_G.C_5_8.NUMBER])*100)-$[$6_U_G.C_6_6.NUMBER]-$[$7_U_G.C_7_5.NUMBER])
FROM “@GES_EP” T0
INNER JOIN “@GES_EP1” T1 ON T0.“U_GES_DocEntry” = T1.“U_GES_DocEntry”
INNER JOIN “@GES_EP2” T2 ON T0.“U_GES_DocEntry” = T2.“U_GES_DocEntry”
INNER JOIN “@GES_EP3” T3 ON T0.“U_GES_DocEntry” = T3.“U_GES_DocEntry”
INNER JOIN “@GES_EP4” T4 ON T0.“U_GES_DocEntry” = T4.“U_GES_DocEntry”
INNER JOIN “@GES_EP5” T5 ON T0.“U_GES_DocEntry” = T5.“U_GES_DocEntry”
INNER JOIN “@GES_EP6” T6 ON T0.“U_GES_DocEntry” = T6.“U_GES_DocEntry”
INNER JOIN “@GES_EP7” T7 ON T0.“U_GES_DocEntry” = T7.“U_GES_DocEntry”
INNER JOIN “@GES_EP8” T8 ON T0.“U_GES_DocEntry” = T8.“U_GES_DocEntry”
INNER JOIN “@GES_EP10” T9 ON T0.“U_GES_DocEntry” = T9.“U_GES_DocEntry”
WHERE T1.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T2.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T3.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T4.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T5.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T6.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T7.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T8.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T9.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T1.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T2.“U_GES_DocEntry”= $[$8_U_G.C_8_5.0] AND T3.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T4.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T5.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T6.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T7.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T9.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] AND T0.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0]

Muchas gracias,
Marta

Hola

yo comenzaría quitando del where las condiciones del docentry: ya las tienes en el inner join.

Yo haría lo siguiente:

  • comentaría los inner join de la tabla EP4 a la EP10 para depurar el error.
  • en los primeros inner join añadiría la condición del año T0.UGES_A = T1.U_GES_A a la condición existente.
  • en el where dejaría T0."U_GES_A "= $[$8_U_G.C_8_1.0] and T0.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0]

Si devuelve resultados, descomentamos las líneas y probamos hasta que no salga error.

Un saludo

Hola,
Ok leyendo tu último mensaje me he dado cuenta que la tabla T0 que tenía indicada era la tabla “cabecera”. Qué tabla debería poner? la que contiene el campo donde estamos haciendo la BF u otra? (para hacer la prueba he puesto la que contiene el campo (“@GES_EP8”) , pero díme si no es así.

Por otro lado, ya he quitado del where las condiciones del DocEntry, he añadido en los inner join la condición del año y en el where he dejado la del año y la del docentry. Lo único que no entiendo es lo de “comentar los inner join de la tabla EP4 a la EP10 para depurar el error”…no sé qué quiere decir comentar ^^

copio y pego la consulta con los cambios realizados (obtengo el mismo resultado que antes, en las dos filas el mismo valor 97,14), parece que no termina de hacer caso con el año:

SELECT
((($[$0_U_G.C_0_3.NUMBER]+$[$1_U_G.C_1_6.NUMBER]+$[$2_U_G.C_2_9.NUMBER]+$[$3_U_G.C_3_6.NUMBER]+$[$4_U_G.C_4_5.NUMBER]+$[$5_U_G.C_5_7.NUMBER])/($[$0_U_G.C_0_4.NUMBER]+$[$1_U_G.C_1_7.NUMBER]+$[$2_U_G.C_2_10.NUMBER]+$[$3_U_G.C_3_7.NUMBER]+$[$4_U_G.C_4_6.NUMBER]+$[$5_U_G.C_5_8.NUMBER])*100)-$[$6_U_G.C_6_6.NUMBER]-$[$7_U_G.C_7_5.NUMBER])
FROM “@GES_EP8” T0
INNER JOIN “@GES_EP1” T1 ON T0.“U_GES_DocEntry” = T1.“U_GES_DocEntry” AND T0.“U_GES_A” = T1.“U_GES_A”
INNER JOIN “@GES_EP2” T2 ON T0.“U_GES_DocEntry” = T2.“U_GES_DocEntry” AND T0.“U_GES_A” = T2.“U_GES_A”
INNER JOIN “@GES_EP3” T3 ON T0.“U_GES_DocEntry” = T3.“U_GES_DocEntry” AND T0.“U_GES_A” = T3.“U_GES_A”
INNER JOIN “@GES_EP4” T4 ON T0.“U_GES_DocEntry” = T4.“U_GES_DocEntry” AND T0.“U_GES_A” = T4.“U_GES_A”
INNER JOIN “@GES_EP5” T5 ON T0.“U_GES_DocEntry” = T5.“U_GES_DocEntry” AND T0.“U_GES_A” = T5.“U_GES_A”
INNER JOIN “@GES_EP6” T6 ON T0.“U_GES_DocEntry” = T6.“U_GES_DocEntry” AND T0.“U_GES_A” = T6.“U_GES_A”
INNER JOIN “@GES_EP7” T7 ON T0.“U_GES_DocEntry” = T7.“U_GES_DocEntry” AND T0.“U_GES_A” = T7.“U_GES_A”
INNER JOIN “@GES_EP10” T8 ON T0.“U_GES_DocEntry” = T8.“U_GES_DocEntry” AND T0.“U_GES_A” = T8.“U_GES_A”
WHERE T0.“U_GES_A” = $[$8_U_G.C_8_1.0] AND T0.“U_GES_DocEntry” =$[$8_U_G.C_8_5.0]

Hola @MartaG

habría que comprobar que el año tiene el valor correcto en la búsqueda formateada. Deberías intentar montar una consulta que busque sólo este valor y ver qué ocurre al cambiarlo. Es lo más sencillo de hacer y comprobar.

La otra opción sería cambiar la select de la consulta por los campos de la base de datos en lugar de los campos del formulario.

Un saludo

Hola @Amarcos,
De la primera comprobación he llegado a hacer la consulta que comentas pero no sé a qué te refieres con “ver qué ocurre al cambiarlo”.

De la segunda opción, he cambiado todos los campos de la select por campos de la base de datos y al ejecutar la búsqueda formateada me ha salido un mensaje: “atribute value is not a number”.

Por lo que seguimos igual…

Si se te ocurre cualquier otra cosa te lo agradeceré!
Saludos

Hola

te recomiendo probar que la consulta te devuelve un valor, e ir añadiendo nuevos campos y condiciones hasta completarla.

Un saludo

Hola @Amarcos,
Vale, creo que ya sé donde está el “problema”. He hecho lo que me aconsejaste, ir campo a campo y comprobar el resultado.

Consigo que traiga el primer campo de la fórmula, respetando el filtro de año y DocEntry. Pero ahora cuando voy a hacer la suma de dos campos, me aparece un error de “invalid number”. He intentado convertir la expresión en número con el CAST( expression AS <data_type> ), pero me ha seguido saliendo el mismo error. Lo he probado con VARCHAR, SMALLINT, SMALLDECIMAL pero nada.

He mirado en campos definidos por el usuario y he visto que los creé como tipo Alfanumérico.

Hay alguna syntax que me pueda ayudar a convertir los campos en número?

Muchas gracias por todo.

Hola @MartaG

prueba select cast (campo1 as float) + cast(campo2 as float) +…

Espero que lo resuelvas
Un saludo

Hola @Amarcos,
Buenas noticias, he podido realizar el calculo utilizando (REPLACE(campo1, ‘,’, ‘.’) + REPLACE(campo2, ‘,’, ‘.’)). De esta forma reemplaza la “coma” del valor alfanumérico por el “punto” y lo convierte en número para poder realizar la suma!

Dejo el código por si a alguien le sirve:
SELECT TOP 1 (((REPLACE(T1.“U_GES_P”, ‘,’, ‘.’) + REPLACE(T2.“U_GES_P”, ‘,’, ‘.’)+ REPLACE(T3.“U_GES_P”, ‘,’, ‘.’)+ REPLACE(T4.“U_GES_P”, ‘,’, ‘.’) + REPLACE(T5.“U_GES_P”, ‘,’, ‘.’)+ REPLACE(T6.“U_GES_P”, ‘,’, ‘.’))/(REPLACE(T1.“U_GES_PP”, ‘,’, ‘.’) + REPLACE(T2.“U_GES_PP”, ‘,’, ‘.’)+ REPLACE(T3.“U_GES_PP”, ‘,’, ‘.’)+ REPLACE(T4.“U_GES_PP”, ‘,’, ‘.’) + REPLACE(T5.“U_GES_PP”, ‘,’, ‘.’)+ REPLACE(T6.“U_GES_PP”, ‘,’, ‘.’))*100)- IFNULL(REPLACE(T7.“U_GES_Pu”, ‘,’, ‘.’),0) - IFNULL(REPLACE(T8.“U_GES_P”, ‘,’, ‘.’),0))
FROM “@GES_EP8” T0
INNER JOIN “@GES_EP1” T1 ON T0.“U_GES_DocEntry” = T1.“U_GES_DocEntry”
INNER JOIN “@GES_EP2” T2 ON T0.“U_GES_DocEntry” = T2.“U_GES_DocEntry”
INNER JOIN “@GES_EP3” T3 ON T0.“U_GES_DocEntry” = T3.“U_GES_DocEntry”
INNER JOIN “@GES_EP4” T4 ON T0.“U_GES_DocEntry” = T4.“U_GES_DocEntry”
INNER JOIN “@GES_EP5” T5 ON T0.“U_GES_DocEntry” = T5.“U_GES_DocEntry”
INNER JOIN “@GES_EP6” T6 ON T0.“U_GES_DocEntry” = T6.“U_GES_DocEntry”
INNER JOIN “@GES_EP7” T7 ON T0.“U_GES_DocEntry” = T7.“U_GES_DocEntry”
INNER JOIN “@GES_EP10” T8 ON T0.“U_GES_DocEntry” = T8.“U_GES_DocEntry”
WHERE T1.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] and T1.“U_GES_A”= $[$8_U_G.C_8_1.0] and T2.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] and T2.“U_GES_A”= $[$8_U_G.C_8_1.0] and T3.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] and T3.“U_GES_A”= $[$8_U_G.C_8_1.0] and T4.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] and T4 .“U_GES_A”= $[$8_U_G.C_8_1.0] and T5.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] and T5.“U_GES_A”= $[$8_U_G.C_8_1.0] and T6.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] and T6.“U_GES_A”= $[$8_U_G.C_8_1.0] and T7.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] and T7.“U_GES_A”= $[$8_U_G.C_8_1.0] and T8.“U_GES_DocEntry” = $[$8_U_G.C_8_5.0] and T8.“U_GES_A”= $[$8_U_G.C_8_1.0]

Muchas gracias por haberme ayudado!

1 me gusta

Hola @MartaG

me alegro de que lo hayas solucionado

Un saludo

1 me gusta

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