En ABAP clásico, cuando necesitas asignar un valor según el contenido de una variable (como un código de país, un tipo de IVA o un estado), usas un CASE:
CASE lv_pais.
WHEN 'ES'.
lv_moneda = 'Euro'.
WHEN 'US'.
lv_moneda = 'Dólar'.
WHEN 'UK'.
lv_moneda = 'Libra'.
WHEN OTHERS.
lv_moneda = 'Desconocido'.
ENDCASE.
Son 8 líneas para algo muy sencillo. Con el operador SWITCH puedes escribir lo mismo en una sola línea.
¿Qué es SWITCH?
WITCH es un operador que te permite asignar un valor según el valor de una variable, evaluando múltiples opciones posibles. Es como un CASE de una línea.
| Sin SWITCH (clásico) | Con SWITCH (moderno) |
|---|---|
CASE ... WHEN ... WHEN ... WHEN ... ENDCASE. (múltiples líneas) | SWITCH #( var WHEN 'A' THEN 'X' WHEN 'B' THEN 'Y' ELSE 'Z' ) |
La sintaxis de SWITCH es:
DATA(resultado) = SWITCH tipo(
variable_a_comparar
WHEN valor1 THEN resultado1
WHEN valor2 THEN resultado2
WHEN valor3 THEN resultado3
ELSE resultado_por_defecto
).
| Pieza | ¿Qué significa? |
|---|---|
DATA(resultado) | Declara una variable para guardar el resultado |
SWITCH tipo | Operador SWITCH que devolverá un valor del tipo indicado |
variable | La variable cuyo valor vamos a comparar (ej. lv_pais) |
WHEN valor THEN resultado | Si variable vale valor, devuelve resultado |
ELSE resultado | Si variable no coincide con ningún WHEN, devuelve este valor |
Diferencia entre SWITCH y COND
Esta es la duda más común. Aquí tienes la diferencia:
| Operador | ¿Qué compara? | ¿Cuándo usarlo? | Ejemplo |
|---|---|---|---|
| COND | Compara condiciones booleanas (verdaderas/falsas) | lv_edad >= 18, lv_nota > 5 | COND #( WHEN lv_edad >= 18 THEN 'Adulto' ELSE 'Menor' ) |
| SWITCH | Compara el valor de una variable con múltiples opciones | lv_pais, lv_tipo_iva, lv_estado | SWITCH #( lv_pais WHEN 'ES' THEN 'Euro' WHEN 'US' THEN 'Dólar' ELSE '?' ) |
📌 Regla: Si tu condición usa >, <, >=, <=, <> → usa COND. Si tu condición usa = (igualdad) con una variable y varias opciones → usa SWITCH
Ejemplos prácticos
Sintaxis vieja:
CASE lv_pais.
WHEN 'ES'.
lv_moneda = 'Euro'.
WHEN 'US'.
lv_moneda = 'Dólar'.
WHEN 'UK'.
lv_moneda = 'Libra'.
WHEN OTHERS.
lv_moneda = 'Desconocido'.
ENDCASE.
Sintaxis nueva:
DATA(lv_moneda) = SWITCH string(
lv_pais
WHEN 'ES' THEN 'Euro'
WHEN 'US' THEN 'Dólar'
WHEN 'UK' THEN 'Libra'
ELSE 'Desconocido'
).
Otro ejemplo
DATA(lv_nombre_mes) = SWITCH string(
lv_mes
WHEN 1 THEN 'Enero'
WHEN 2 THEN 'Febrero'
WHEN 3 THEN 'Marzo'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Mayo'
WHEN 6 THEN 'Junio'
WHEN 7 THEN 'Julio'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Septiembre'
WHEN 10 THEN 'Octubre'
WHEN 11 THEN 'Noviembre'
WHEN 12 THEN 'Diciembre'
ELSE 'Mes inválido'
).
El operador SWITCH es perfecto para asignar un valor según el valor de una variable, comparándolo con múltiples opciones posibles.
| Operador | Úsalo para… |
|---|---|
| SWITCH | Comparar una variable con varios valores fijos (como un CASE de una línea) |
| COND | Comparar condiciones booleanas (como un IF de una línea) |
| CASE | Muchas opciones (>6) o cuando necesitas ejecutar acciones |




