Cómo validar datos antes de guardar (verificar, evitar duplicados y errores)

Antes de guardar datos en una tabla de SAP (o en cualquier sistema), es obligatorio validar que la información sea correcta, completa y no duplicada. Hacerlo te evita errores en tiempo de ejecución, datos inconsistentes y quejas de los usuarios.

Este artículo te muestra cómo implementar tres validaciones típicas antes de un guardado masivo (desde un ALV editable o una pantalla):

  1. Verificar que un campo obligatorio no esté vacío.
  2. Comprobar que el valor exista en una tabla maestra (integridad referencial).
  3. Evitar duplicados dentro de la misma tabla de cambios.

Estructura típica de validación

El flujo lógico, antes de llamar a la rutina de guardado (PERFORM save_data), sigue este patrón:

DATA: lv_saved TYPE abap_bool.   " Flag que indica si todo es válido

lv_saved = abap_true. " Suponemos que sí
LOOP AT gt_changes ASSIGNING FIELD-SYMBOL(<fs_row>).

" ---------- Validación 1: campo obligatorio ----------
IF <fs_row>-campo IS INITIAL.
MESSAGE 'Campo obligatorio' TYPE 'E' DISPLAY LIKE 'I'.
lv_saved = abap_false.
EXIT.
ENDIF.

" ---------- Validación 2: existencia en tabla maestra ----------
READ TABLE gt_master WITH KEY clave = <fs_row>-campo TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
MESSAGE 'Valor no existe en maestro' TYPE 'E' DISPLAY LIKE 'I'.
lv_saved = abap_false.
EXIT.
ENDIF.

" ---------- Validación 3: registro duplicado ----------
READ TABLE gt_aux WITH KEY campo = <fs_row>-campo TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
MESSAGE 'Valor duplicado en los datos a guardar' TYPE 'E' DISPLAY LIKE 'I'.
lv_saved = abap_false.
EXIT.
ELSE.
APPEND <fs_row> TO gt_aux. " Acumulamos para detectar futuros duplicados
ENDIF.
ENDLOOP.

IF lv_saved = abap_true.
PERFORM save_data.
ENDIF.

Validar antes de guardar no es opcional. Con este patrón:

  1. Campo obligatorio → IS INITIAL.
  2. Existencia en maestro → READ TABLE ... TRANSPORTING NO FIELDS.
  3. Duplicados en la misma carga → tabla auxiliar.

Con estas tres reglas cubres la mayoría de los casos de negocio y evitas que datos incorrectos lleguen a la base de datos.