En SAP, las tablas de textos (como MAKT, T002, etc.) almacenan descripciones por idioma. El problema es que no todos los materiales o clientes tienen texto en el idioma del usuario.
Y entonces el campo aparece vacío, el usuario no entiende nada o acabas duplicando lógica innecesaria.
La solución correcta es leer el texto en el idioma del usuario y, si no existe, buscar una alternativa (fallback). Es decir:
- Intentar obtener el texto en el idioma del usuario (
SY-LANGU). - Si no existe, usar otro idioma por defecto (normalmente inglés
'E').
Opción recomendada en Open SQL
La forma más limpia y eficiente es con LEFT JOIN y COALESCE.
SELECT
mara~matnr,
COALESCE( txt_lang~maktx,
txt_en~maktx ) AS maktx
FROM mara
LEFT JOIN makt AS txt_lang
ON txt_lang~matnr = mara~matnr
AND txt_lang~spras = @sy-langu
LEFT JOIN makt AS txt_en
ON txt_en~matnr = mara~matnr
AND txt_en~spras = 'E'
AND txt_lang~maktx IS NULL
INTO TABLE @DATA(lt_result).
COALESCE devuelve el primer valor no vacío. Primero intenta con txt_lang~maktx (idioma del usuario). Si es nulo, usa txt_en~maktx (inglés).
Un consejo que aprendí con el tiempo es no dar por hecho que un texto va a existir en el idioma del usuario. Puede que no. Por eso siempre está bien tener un plan B. El inglés suele ser el más universal.




