Cómo obtener textos en el idioma del usuario y usar fallback a inglés si no existen

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:

  1. Intentar obtener el texto en el idioma del usuario (SY-LANGU).
  2. 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.