Error SAP COMPUTE_EXP_ON_ILLEGAL_VALUE: Causas y Solución

Destacados del análisis del error COMPUTE_EXP_ON_ILLEGAL_VALUE:

  • Qué es – Un short dump que se produce al evaluar una expresión aritmética con un valor no permitido (división por cero, overflow, o valor inválido)
  • Más común – División por cero: result = X / 0 o result = X / Y donde Y vale 0 en tiempo de ejecución
  • No es un bug del sistema – Es un error del programa, pero puede tumbarlo completo
  • Solución – Validar los valores antes de la operación aritmética con un simple IF

El error COMPUTE_EXP_ON_ILLEGAL_VALUE es uno de los más fáciles de diagnosticar y, paradójicamente, uno de los más frecuentes. Cualquier programa ABAP que haga cálculos sin validar los datos de entrada puede caer en este error. La buena noticia es que la solución suele ser trivial.

¿Qué es COMPUTE_EXP_ON_ILLEGAL_VALUE?

ABAP evalúa las expresiones aritméticas en tiempo de ejecución. Si durante esa evaluación encuentra un valor que no es válido para la operación (dividir entre cero, raíz cuadrada de un número negativo, overflow aritmético), el runtime ABAP aborta la ejecución y genera el short dump COMPUTE_EXP_ON_ILLEGAL_VALUE. El término «illegal value» se refiere a que el valor es aritméticamente ilegal, no a un problema de permisos.

Síntomas típicos

  • El dump aparece al ejecutar un cálculo: COMPUTE precio_unitario = total / cantidad
  • Suele ocurrir con datos maestros incompletos: una cantidad que es cero, un precio que está vacío
  • Aparece en procesos de cierre de mes, informes financieros o cálculos de nómina
  • El ST22 muestra la línea exacta del programa con la expresión fallida
  • La variable implicada suele tener valor inicial o cero en el momento del error

Causas principales

  • División por cero – La causa más común (95% de los casos). precio_medio = total / cero
  • Raíz cuadrada de número negativo – SQRT() con un argumento negativo
  • Aritmética de fecha/hora inválida – Operaciones con fechas que producen resultados no representables
  • Overflow de tipo de datos – Asignar un valor demasiado grande a una variable de tipo I (integer), P (packed) o F (float)
  • Mezcla de tipos incompatibles – Operaciones entre tipos de datos que ABAP no puede convertir implícitamente

Solución paso a paso

  1. Analiza el dump en ST22 – Mira el campo «What happened?» donde aparece la expresión exacta y los valores de las variables en el momento del error. Apunta la línea del programa y los valores.
  2. Accede al debugger – En ST22, haz clic en el botón «Debug» o selecciona «Display» > «Debug». Te llevará directamente a la línea conflictiva del código ABAP.
  3. Identifica la variable problemática – Normalmente será un divisor que es cero o un argumento de SQRT() negativo. También puede ser un overflow: un INT2/INT4 que supera su rango.
  4. Corrige el código – La solución canónica:
    IF cantidad > 0.
      precio_unitario = total / cantidad.
    ELSE.
      precio_unitario = 0. " o manejo de error
    ENDIF.
  5. Para datos maestros – Si el problema está en datos de entrada (campos que vienen vacíos de la base de datos), corrige los datos maestros afectados o añade valores por defecto en el programa.
  6. Para overflows – Cambia la declaración de la variable a un tipo más grande (de I a P16 o a F). Si es un estándar SAP, revisa si hay una nota SAP que lo corrija.

Notas SAP relacionadas

  • SAP Note #50861 – COMPUTE_EXP_ON_ILLEGAL_VALUE runtime error
  • SAP Note #127044 – Division by zero: how to avoid
  • SAP Note #850197 – Illegal arithmetic operations in ABAP

¿Te ayudamos?

Contamos con una base de consultores certificados por SAP que brindan un excelente servicio de Administración SAP así como el análisis de vulnerabilidades SAP y remediación de las mismas.

Puedes contactarnos a través del formulario de contacto o a través de nuestra dirección de correo electrónico contacto@aurit.es

En AURIT estaremos encantados de poder ayudarte.