[ABAP] Duda con inner join

Buenas a todos,

Soy novato en SAP y estoy comenzando con ABAP por lo que disculpar si digo alguna tontería.

Necesito cruzar dos tablas, una del estándar (LIKP) y una Z. Para el cruce utilizo el campo VBELN contenido en las dos tablas.

El problema lo tengo en que los campos, aun siendo del mismo tipo (VBELN CHAR 10), el de la tabla LIKP lo devuelve relleno de ceros 0012345678 y el de la tabla Z sin ellos 12345678 es por esto que al cruzarlos y ser dos campos de texto, no hay coincidencias.

He probado con InfoSet Query, con Quick Viewer, con un programa ABAP y el resultado siempre es el mismo.

Si lanzo la consulta SQL, casteando los campos, me arroja la información correctamente.

SELECT T1.VBELN, T2.VBELN
FROM ZTABLA T1
INNER JOIN LIKP T2 ON CAST(T2.VBELN AS INTEGER) = CAST(T1.VBELN AS INTEGER)

Como posible solución se me ocurre lanzar la consulta listeralmente desde un programa ABAP, pero no sé si esto es posible. Otra opción es escribir el select en abap, pero no soy capaz de que funcione ya que ABAP no me permita tastear los campos y no sé como tratar correctamente los datos.

SELECT t1~vbeln t2~vbeln 
FROM likp AS t1
INNER JOIN ztabla AS t2 ON t2~vbeln = t1~vbeln
INTO CORRESPONDING FIELDS OF TABLE it_listado.

¿Podéis ayudarme?

Muchas gracias de antemano.
Un saludo.

1 me gusta

Tengo varias preguntas:

¿En la tabla Z, qué elemento de dato tiene el campo VBELN? Debería ser como el elemento de dato que tiene VBELN en la tabla LIKP. Checa eso.

En ABAP, se puede hacer lo siguiente, extrae la información de la tabla Z, y llena con ceros el campo VBELN, usa la función CONVERSION_EXIT_ALPHA_INPUT. Despues haces un SELECT con FOR ALL ENTRIES IN, usando la tabla con la información de la tabla Z.

Espero haber explicado de manera clara.

Saludos!!

3 Me gusta

Estimado,
me sumo al comentario anterior (nickel_seifer) es posible regularizar ? posiblemente estén ocupando elementos de datos diferentes o estén poblando mal el campo en la tabla z debido a que no consideran la rutina de conversión.
Otra forma que se me ocurre pero menos eficiente (comparando con el join con la tabla regularizada ) es consultar primero alguna de las tablas( la z o likp idealmente la con menos registros ) y llenar un Rango con tipo vbeln para consultar la tabla faltante y obtendrás el mismo resultado.
Saludos

1 me gusta

Por lo que veo, el elemento de datos de la tabla Z es diferente al de la tabla LIKP

Tabla Z

  • Elemento de datos VBELN
  • Paquete BV
  • ID parámetro AUN (Número del pedido de cliente)

Tabla LIKP

  • Elemento de datos VBEL_VL
  • Paquete BS_FND_COMMON
  • ID parámetro VL (Delivery note)

La tabla Z almacena datos de la entrega por lo que entiendo que el elemento de datos VBELN debería ser igual. Entiendo también, que como indicáis, este es el motivo por el que no hace el cruce.

¿Cómo procedo en este caso? ¿Se puede cambiar el elemento de datos sin consecuencias?

Gracias por las respuestas!

No hace el cruce por lo siguiente:

LIKP-VBELN = ‘0000012345’
Z-VBELN = ‘12345’

Como puedes ver, son diferentes valores.

2 Me gusta

Intentaré cruzar los campos como indica @nickel_seifer ya que para esta creo que es la mejor solución para este caso.

Gracias!

Estimado, lo que menciona @nickel_seifer es correcto. Puede ser que al guardar los registros en la tabla Z no se le ha aplicado la rutina de conversión input a los datos con el número de documento de entrega. Si se registra con un programa que es lo más probable debes modificar el mismo. O bien si es una vista de actualización, revisar el elemento de datos que puede ser que no tiene asignada la rutina de conversión ALPHA.

1 me gusta

Finalmente, como mejor solución:

  • Se ha reemplazado el elemento de datos de la tabla por el correcto.
  • Se ha modificado el programa para que almacene los nuevos registros con los ceros a la izquierda.
  • Se ha creado un programa para actualizar los registros que ya se encontraban en la tabla.

Con esto, es funcionamiento es estándar y por lo tanto el cruce entre las tablas lo hace siempre bien.

Gracias a todos por la ayuda.
Un saludo.

2 Me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.