El Modo /H: Tu Primera Herramienta de Debug
El modo debug se activa con /H en la barra de comandos. Permite ejecutar el programa paso a paso, inspeccionar variables en tiempo real y modificar valores para probar escenarios sin cambiar el código fuente.
💡 Tip del día · /H
Activa /H antes de ejecutar una transacción. Para debug en RFC o programas batch usa el breakpoint externo en SE80 con 'Activar breakpoint externo' marcando tu usuario para que solo detenga en tu sesión.
🔍 Dato curioso
El ABAP Debugger moderno en S/4HANA permite depurar múltiples sesiones en paralelo y tiene integración con el ABAP Test Cockpit para analizar calidad del código mientras depuras simultáneamente.
Watchpoints: Detecta Cuándo Cambia una Variable
Los watchpoints detienen la ejecución automáticamente cuando una variable cambia de valor. Son la herramienta más eficiente para rastrear modificaciones inesperadas en campos clave como totales o indicadores.
💡 Tip del día · SE80
En el debugger ve a la pestaña 'Watchpoints' y añade el campo. Puedes añadir una condición (parar solo si el valor > 1000) para evitar paradas innecesarias en variables que cambian muchas veces en un loop.
🔍 Dato curioso
Los watchpoints son temporales por sesión. Para debugging persistente usa breakpoints externos en SE80 marcados como 'usuario', que se mantienen hasta que los eliminas manualmente entre sesiones.
SAT: Análisis de Performance Línea a Línea
SAT registra el tiempo de ejecución de cada instrucción y llamada a función, identificando exactamente qué parte del código consume más tiempo. Es el punto de partida de cualquier tarea de optimización.
💡 Tip del día · SAT
Ejecuta SAT y lanza la transacción objetivo. Ordena el resultado por 'Tiempo bruto' descendente. Los SELECT sin índice y los loops sobre tablas grandes suelen ser los principales culpables del rendimiento pobre.
🔍 Dato curioso
SAT puede trazar llamadas RFC remotas y accesos a BD. En S/4HANA combínalo con el HANA Cockpit para ver el plan de ejecución SQL y detectar full table scans que penalizan el rendimiento en tablas grandes.
ST22: Leer un Short Dump como un Experto
ST22 contiene todo para resolver un error: tipo de excepción, línea exacta, call stack completo y valores de las variables en el momento del fallo. Es el punto de partida de cualquier análisis de error de programa.
💡 Tip del día · ST22
En ST22 busca 'Source code extract' para ver la línea exacta. Revisa 'Active calls' para el call stack. El campo 'System environment' muestra usuario y mandante para reproducir el error en desarrollo.
🔍 Dato curioso
Los dumps se guardan solo 14 días por defecto. Para conservar un dump crítico usa ST22 > 'Guardar dump'. En S/4HANA puedes exportarlo a Application Logging (SLG1) para retención permanente.
Field Symbols: Debug de Asignaciones Dinámicas
Los field symbols son punteros ABAP que apuntan a cualquier variable en tiempo de ejecución. Saber leerlos en el debugger es fundamental cuando se trabaja con tablas genéricas o estructuras dinámicas.
💡 Tip del día · ST22
En el debugger escribe el nombre completo con ángulos: . Si aparece 'No asignado' el ASSIGN falló. Activa 'Mostrar field symbols' en la vista de variables para verlos todos de un vistazo.
🔍 Dato curioso
Un field symbol no asignado que se intenta leer genera el dump GETWA_NOT_ASSIGNED. El debugger lo detecta antes del dump si tienes un watchpoint sobre ese field symbol o ejecutas paso a paso con F5.
ST05: SQL Trace para Optimizar Accesos a BD
SQL Trace registra todas las sentencias SQL ejecutadas por un programa, mostrando el tiempo de respuesta de la base de datos, el número de registros leídos y si se usó un índice en cada SELECT.
💡 Tip del día · ST05
Activa ST05, ejecuta el proceso a analizar y desactiva el trace. Filtra por tiempo de ejecución descendente. Un SELECT que lee miles de registros para devolver uno es candidato a optimización urgente.
🔍 Dato curioso
En S/4HANA con HANA como BD, ST05 muestra el plan de ejecución de cada SQL. Un 'Full Table Scan' en una tabla pequeña puede ser aceptable en HANA in-memory, pero en tablas grandes sigue siendo un problema.
Debugger Scripts: Automatizar el Debug
Los ABAP Debugger Scripts permiten escribir código ABAP que se ejecuta dentro del debugger, automatizando tareas repetitivas como registrar valores de variables en cada iteración de un loop o modificar datos.
💡 Tip del día · SE80
En el debugger accede a la pestaña 'Script'. Escribe código ABAP usando las clases CL_TPDA_SCRIPT_DATA_DESCR para leer variables. Los scripts se pueden guardar y reutilizar en sesiones futuras.
🔍 Dato curioso
Los Debugger Scripts pueden exportar datos a ficheros locales durante la ejecución, capturando el estado del sistema en miles de iteraciones sin necesidad de parar manualmente en cada una de ellas.
Remote Debugging: Depurar en Producción con Cuidado
El debugging remoto permite depurar programas que se ejecutan en producción desde el IDE de desarrollo. Se usa con extrema precaución para resolver errores irreproduzibles en otros entornos de sistema.
💡 Tip del día · STAD
Activa el debugging remoto mediante un breakpoint externo de usuario. Nunca hagas remote debugging en producción sin autorización expresa. Un stop involuntario puede bloquear a otros usuarios del sistema.
🔍 Dato curioso
SAP recomienda no usar remote debugging en producción salvo emergencias. Alternativas más seguras son el logging extensivo con SLG1 o el uso de variantes de trace no intrusivas como STAD o SM50.
Memory Inspector: Detectar Fugas de Memoria
El Memory Inspector en el ABAP Debugger permite analizar el consumo de memoria de variables y objetos en tiempo real, identificando qué tablas internas o strings consumen más memoria en el proceso.
💡 Tip del día · ST22
Accede al Memory Inspector desde el debugger (pestaña 'Memory'). Toma snapshots antes y después de una operación pesada para ver qué variables crecieron. Las tablas internas sin CLEAR suelen ser las causas.
🔍 Dato curioso
El dump SYSTEM_NO_ROLL en SAP indica que un programa está consumiendo más memoria de la permitida. El Memory Inspector ayuda a identificar la tabla interna o el objeto causante del problema de memoria.
Debugging de BAdIs y Enhancement Spots
Depurar implementaciones de BAdI requiere activar el debugger en el momento en que se llama al enhancement spot. Sin conocer el flujo del estándar, encontrar el punto de entrada exacto puede ser complejo.
💡 Tip del día · SE18
En SE18 encuentra el nombre del método del BAdI. Pon un breakpoint externo en la implementación del método (SE19). El debugger parará cuando el estándar invoque el BAdI durante la ejecución normal del proceso.
🔍 Dato curioso
Los Enhancement Spots son más seguros que las modificaciones directas del estándar porque no se ven afectados por los upgrades de sistema. El debugger los muestra en el call stack como 'ENHANCEMENT'.
Debugging ABAP OO: Clases y Métodos
Depurar código ABAP orientado a objetos requiere familiaridad con el call stack de métodos y la navegación entre instancias de objetos. El debugger de S/4HANA tiene soporte nativo para visualizar objetos.
💡 Tip del día · SE24
En el debugger, usa F6 (Step Over) para ejecutar llamadas a métodos como una sola instrucción o F5 (Step Into) para entrar en el método. Usa la pestaña 'Objects' para ver atributos de la instancia actual.
🔍 Dato curioso
En ABAP OO, el puntero 'me' en el debugger representa la instancia actual del objeto. Expandiéndolo en la vista de variables puedes ver todos los atributos de instancia y sus valores actuales.
Checkpoint Groups: Logging Selectivo en Producción
Los Checkpoint Groups permiten activar assertions y breakpoints de forma selectiva en producción sin modificar el código fuente. Son la alternativa segura al debugging directo en entornos productivos.
💡 Tip del día · SAAB
Define Checkpoint Groups en SAAB. En el código usa la sentencia ASSERT con la condición. Activa el grupo en producción para un usuario específico y período limitado. El sistema loguea los fallos en SLG1.
🔍 Dato curioso
Los Checkpoint Groups son especialmente útiles para validar precondiciones en código crítico. Las assertions tienen impacto de rendimiento casi nulo cuando están desactivadas, haciéndolas seguras para producción.
IDocs: Seguir el Flujo de Mensajes Fallidos
Los IDocs son el mecanismo estándar de intercambio de datos en SAP. Cuando un IDoc falla es necesario depurar el proceso de entrada o salida para identificar si el error está en validación, posting o conversión.
💡 Tip del día · WE02
En WE02 visualiza el IDoc fallido y su status. Usa WE19 para retroceder el procesamiento del IDoc y activar el debugger en el momento del error. La función module IDOC_INPUT_* es donde suele estar el problema.
🔍 Dato curioso
Los IDocs en estado 51 (Error de aplicación) tienen un mensaje de error claro en el log. Los de estado 56 (Error de sintaxis) requieren analizar la estructura del IDoc con BD87 para encontrar el campo mal formado.
ABAP Unit Testing: El Debug Preventivo
Los ABAP Unit Tests permiten probar clases y métodos de forma aislada antes de la ejecución real. Escribir tests reduce la necesidad de debug reactivo porque los errores se detectan durante el desarrollo.
💡 Tip del día · SAUNIT
Crea test classes con la anotación FOR TESTING en SE24 o SE80. Usa CL_AUNIT_ASSERT para verificar resultados esperados. Ejecuta los unit tests del paquete con SAUNIT_CLIENT_SETUP para regresión automática.
🔍 Dato curioso
SAP recomienda TDD (Test-Driven Development) para nuevo desarrollo ABAP. En S/4HANA, el ABAP Test Cockpit integra la ejecución automática de unit tests con verificaciones de calidad y seguridad del código.
STAD: Análisis de Transacciones en Producción
STAD muestra estadísticas de ejecución de transacciones: tiempo de CPU, tiempo de BD, número de accesos a tablas y consumo de memoria, sin necesidad de un trace intrusivo que impacte el rendimiento.
💡 Tip del día · STAD
Accede a STAD y filtra por usuario, transacción o período. Compara el tiempo de CPU con el tiempo total para identificar si el cuello de botella está en la lógica de programa o en los accesos a base de datos.
🔍 Dato curioso
STAD en S/4HANA integra estadísticas del Application Server ABAP con métricas de HANA, ofreciendo una visión end-to-end del rendimiento que incluye el tiempo de procesamiento SQL en la base de datos.
Debugging de Formularios: SmartForms y Adobe Forms
Los formularios SAP tienen su propio debugger. Depurar un formulario requiere identificar si el error está en la función de impresión, en el formulario mismo o en los datos que recibe para generar el documento.
💡 Tip del día · SMARTFORMS
Activa el debug en la función de impresión del formulario con /H antes de llamarla. Entra en la llamada al formulario con F5. El SmartForms debugger tiene su propia interfaz dentro del debugger ABAP.
🔍 Dato curioso
Los formularios Adobe usan el Adobe Document Services (ADS) como motor de renderizado. Si falla al generar el PDF, el error suele estar en el ADS y se diagnostica con SXDA o revisando los logs del ADS Server.
SM21 y Logs de Sistema: Errores de Aplicación
Además de ST22, SAP ofrece herramientas complementarias: el Application Log (SLG1) para errores controlados, el System Log (SM21) para errores de sistema y DUMPANALYSIS para análisis profundo de dumps.
💡 Tip del día · SM21
En SM21 filtra por tipo de mensaje 'AB' (ABAP) para ver errores de programa. El System Log captura información que ST22 puede no registrar, como errores en actualizaciones asíncronas que fallan silenciosamente.
🔍 Dato curioso
El dump ABAP_MEMORY_EXCEEDED indica que el programa superó el límite de memoria del servidor de aplicaciones. El parámetro abap/heap_area_total del perfil del servidor controla este límite configurable.
Breakpoints en Update Task: Debug Asíncrono
Los procesos de actualización asíncrona en SAP se ejecutan en un proceso separado. Depurarlos requiere activar el debug de update task antes de ejecutar la transacción que lo dispara en el sistema.
💡 Tip del día · SM13
Activa el debug de update task en el menú del debugger. SAP cambiará el update task a modo síncrono solo para tu sesión, permitiendo entrar con el debugger cuando se ejecuta la actualización.
🔍 Dato curioso
Los errores en update task generan documentos de actualización cancelados visibles en SM13. Si la actualización falla, los datos quedan en estado inconsistente entre la pantalla (actualizada) y la BD (no actualizada).
Optimización SELECT: Joins, Índices y FOR ALL ENTRIES
Los SELECT ineficientes son la causa más frecuente de rendimiento pobre en ABAP. Conocer cuándo usar JOIN, FOR ALL ENTRIES o subselects, y cómo crear índices secundarios, es fundamental para cualquier desarrollador.
💡 Tip del día · SE11
Usa FOR ALL ENTRIES solo cuando la tabla interna tiene datos (verifica IS NOT INITIAL antes). Un FOR ALL ENTRIES con tabla vacía devuelve TODOS los registros. Prefiere JOINs cuando los criterios son fijos.
🔍 Dato curioso
En S/4HANA con HANA, el compilador ABAP puede transformar automáticamente algunos FOR ALL ENTRIES en JOINs de HANA para mejorar el rendimiento. El Code Inspector detecta los candidatos a esta optimización.
Code Inspector y ATC: Calidad de Código Automatizada
El Code Inspector y el ABAP Test Cockpit analizan automáticamente el código en busca de problemas de rendimiento, seguridad, sintaxis obsoleta y violaciones de las guías de desarrollo SAP del estándar.
💡 Tip del día · SCI
Ejecuta ATC en SE80 sobre tu desarrollo antes de transportarlo. Las comprobaciones más críticas son: SQL injections en queries dinámicos, authority checks faltantes y uso de funciones obsoletas en S/4HANA.
🔍 Dato curioso
SAP requiere que todo el código custom supere las verificaciones ATC antes de transportar a sistemas de calidad o producción en implantaciones S/4HANA certificadas. ATC es obligatorio en proyectos de Clean Core.
CDS Views: Debugging en la Capa de Datos
Las ABAP CDS Views (Core Data Services) son la nueva forma de modelar datos en S/4HANA. Depurarlas requiere entender cómo se traducen a SQL de HANA y cómo los datos fluyen a través de las asociaciones.
💡 Tip del día · SE11
Usa la Data Preview en SE11 o Eclipse (ADT) para ver los datos de una CDS View directamente. Para depurar el ABAP que consume la CDS, activa el debugger en el OPEN DATASET o SELECT FROM la vista CDS.
🔍 Dato curioso
Las CDS Views con anotaciones @Analytics.dataCategory: #CUBE generan proveedores de datos para SAP Analytics Cloud automáticamente, sin necesidad de desarrollo adicional de extractores BW o queries BEx.
OData Services: Debugging de APIs en Gateway
Los servicios OData de SAP Gateway son la base de las apps Fiori. Depurar un servicio OData requiere analizar las peticiones HTTP, los métodos del data provider class y la capa de persistencia subyacente.
💡 Tip del día · /IWFND/ERROR_LOG
Usa /IWFND/ERROR_LOG para ver los errores de Gateway en el servidor central. Para depurar el data provider, activa el debugger en la clase de implementación del servicio (sufijo _DPC_EXT) con un breakpoint externo.
🔍 Dato curioso
SAP Gateway Debugger (/IWFND/GW_CLIENT) permite simular peticiones OData directamente en el servidor, incluyendo GET, POST, PUT y DELETE, sin necesidad de una app Fiori para probar el servicio.
RAP Framework: Debugging de ABAP RESTful
El ABAP RESTful Application Programming (RAP) model es el estándar de desarrollo en S/4HANA Cloud. Depurarlo requiere entender la arquitectura de behavior definitions, implementations y projections.
💡 Tip del día · SE80
En ADT (Eclipse), activa el debugger ABAP y establece breakpoints en los métodos del behavior implementation (handler class). Usa el SAP ABAP Development Tools para navegación y debugging de objetos RAP.
🔍 Dato curioso
En RAP, los métodos de acción (actions), validaciones (validations) y determinaciones (determinations) se ejecutan en momentos específicos del ciclo de vida del objeto. Conocer ese ciclo es clave para debuggear.
ABAP en la Nube: Restricciones y Herramientas
ABAP en SAP BTP (ABAP Cloud) tiene un conjunto reducido de sentencias y clases disponibles (el 'clean core ABAP'). Las técnicas de debugging difieren de las del ABAP on-premise clásico que conocemos.
💡 Tip del día · ADT
En ABAP Cloud usa ABAP Development Tools (Eclipse ADT) como único IDE. El debugger web integrado en ADT permite debugging remoto de objetos en el tenant BTP sin necesidad de SAP GUI instalado en el equipo.
🔍 Dato curioso
En ABAP Cloud no existe acceso directo a tablas de diccionario de SAP. Todo el acceso a datos debe hacerse a través de APIs publicadas o CDS Views con autorización explícita, siguiendo el principio de Clean Core.
Table Buffering: Cuándo el Caché Juega en Contra
El buffering de tablas en SAP acelera las lecturas almacenando los datos en la memoria del servidor de aplicaciones. Sin embargo, puede causar lecturas de datos obsoletos si los datos de la tabla cambian frecuentemente.
💡 Tip del día · SE11
En SE11 consulta la configuración de buffering de una tabla. Usa BYPASSING BUFFER en el SELECT para forzar la lectura desde la base de datos cuando sospechas que el buffer tiene datos desactualizados.
🔍 Dato curioso
El dump TABLE_INVALID_BUFFER puede aparecer cuando el buffer de una tabla se corrompe. La solución es ejecutar RSRSBUFF para limpiar el buffer o reiniciar el servidor de aplicaciones en casos extremos.
Análisis de Bloqueos: SM12 y Debugging
Los bloqueos en SAP (Enqueue) evitan que dos usuarios modifiquen el mismo registro simultáneamente. Cuando hay bloqueos colgados o errores de bloqueo, SM12 es la herramienta de diagnóstico principal.
💡 Tip del día · SM12
En SM12 visualiza todos los bloqueos activos del sistema. Puedes eliminar bloqueos individuales si están huérfanos (el programa que los creó ya terminó). Usa STAD para correlacionar bloqueos con sesiones de usuario.
🔍 Dato curioso
Los bloqueos en SAP se almacenan en la memoria del servidor de mensajes (Enqueue Server), no en la base de datos. Un reinicio del Enqueue Server elimina todos los bloqueos, lo cual puede causar inconsistencias.
Debugging de Jobs en Background: SM37 y SM50
Los jobs en background no pueden debuggearse de forma convencional. Existen técnicas especiales para depurar programas que se ejecutan en modo batch sin pantalla de usuario disponible.
💡 Tip del día · SM37
Para debuggear un job background, añade la sentencia BREAK en el código o configura el job para que ejecute en modo síncrono en mandante de desarrollo. Usa SM37 para ver el spool del job con el log.
🔍 Dato curioso
Los jobs en background en SAP tienen un límite de tiempo de ejecución configurable (rdisp/max_wprun_time). Si el job supera este límite, se cancela automáticamente con el dump TIME_OUT en el log del sistema.
Debugging de ALV: Problemas con Grids y Listas
Los problemas en ALV (ABAP List Viewer) como datos incorrectos, columnas que no muestran datos o errores al ordenar suelen tener su origen en el fieldcatalog o en la estructura de la tabla interna de datos.
💡 Tip del día · SE38
Para debuggear un ALV, pon el breakpoint antes de la llamada a REUSE_ALV_GRID_DISPLAY o cl_gui_alv_grid. Inspecciona el fieldcatalog (it_fieldcat) para verificar que los nombres de campo coinciden con la tabla interna.
🔍 Dato curioso
Un error frecuente en ALVs es definir el fieldcatalog con el nombre de campo en minúsculas cuando la estructura interna lo tiene en mayúsculas. SAP es sensible a las mayúsculas en los nombres de campo del fieldcatalog.
Debugging de Transacciones Dialog: CMOD y SAP Exits
Los SAP exits y customer exits (CMOD) permiten añadir lógica propia en puntos de exit del estándar sin modificarlo. Debuggearlos requiere activar el debugger en la función exit correspondiente.
💡 Tip del día · CMOD
En CMOD localiza el exit activo para la transacción que quieres depurar. Activa un breakpoint externo en el módulo de función EXIT_* correspondiente. El debugger parará cuando el estándar llame al exit.
🔍 Dato curioso
Los SAP exits son función modules en grupos de funciones del espacio de nombres del cliente (Z o Y). A diferencia de los BAdIs, los exits solo permiten una implementación activa por exit en el sistema.
Debugging de Batch Input: Programas de Carga
El Batch Input (BI) y Call Transaction son técnicas de carga de datos en SAP. Cuando fallan es necesario analizar el log de sesión para identificar en qué pantalla y campo se produce el error de validación.
💡 Tip del día · SM35
En SM35 visualiza las sesiones de Batch Input fallidas. Puedes reproducir la sesión en modo foreground para ver exactamente qué pantalla falla. Usa el modo de debugging de SM35 para activar /H en la sesión.
🔍 Dato curioso
El Batch Input es más lento que las BAPIs porque simula la entrada de usuario pantalla a pantalla. Para cargas masivas en S/4HANA, las APIs directas (BAPIs, IDocs o APIs REST) son siempre la opción preferida.
Regular Expressions en ABAP: Debug de Patrones
Las expresiones regulares en ABAP (FIND REGEX, REPLACE REGEX) permiten búsquedas y sustituciones de texto complejas. Depurar un regex que no funciona como se espera requiere herramientas específicas.
💡 Tip del día · SE38
Usa la clase CL_ABAP_REGEX en el debugger para analizar el resultado de un match. La herramienta online regex101.com (con flavor PCRE) es compatible con el motor de regex de ABAP y ayuda a probar patrones.
🔍 Dato curioso
ABAP soporta expresiones regulares PCRE (Perl Compatible Regular Expressions) desde NetWeaver 7.0. Esto incluye grupos de captura, lookahead, lookbehind y referencias hacia atrás en los patrones de búsqueda.
Test Seams: Testing de Código Legado en ABAP
Los Test Seams (costuras de test) permiten insertar código de prueba en programas ABAP existentes sin modificar su estructura, facilitando el testing unitario de código legado que no fue diseñado para ser testeable.
💡 Tip del día · SE38
Usa la sentencia TEST-SEAM y TEST-INJECTION para aislar partes del código durante los unit tests. El código de inyección solo se ejecuta cuando se corre el programa en modo de test, no en ejecución normal.
🔍 Dato curioso
Los Test Seams son especialmente útiles para mockear llamadas a funciones externas, lecturas de base de datos o llamadas RFC en unit tests, permitiendo probar la lógica de negocio de forma aislada.
ABAP2XLSX: Debugging de Exportaciones a Excel
La librería ABAP2XLSX permite generar ficheros Excel complejos directamente desde ABAP. Cuando la exportación falla o el formato no es correcto, el debugging requiere conocer la estructura de la librería.
💡 Tip del día · SE38
Instala ABAP2XLSX desde GitHub en tu sistema de desarrollo. Para debuggear, activa /H antes de la instanciación de ZCL_EXCEL. Los errores más frecuentes son tipos de dato incompatibles en las celdas del Excel.
🔍 Dato curioso
ABAP2XLSX puede generar Excel con fórmulas, gráficos, tablas dinámicas y formato condicional directamente desde ABAP. Es la alternativa más potente a las exportaciones CSV o ALV planas para usuarios finales.
Debugging de Performance: Hash Tables vs Sorted Tables
La elección del tipo de tabla interna (STANDARD, SORTED, HASHED) tiene un impacto enorme en el rendimiento cuando la tabla tiene muchos registros. El SAT y ST05 ayudan a identificar el tipo óptimo para cada uso.
💡 Tip del día · SAT
Usa tablas HASHED cuando solo accedes por clave única (READ con clave completa). Usa SORTED cuando necesitas acceso por clave y lectura secuencial. Usa STANDARD solo cuando el orden de inserción importa.
🔍 Dato curioso
Una tabla STANDARD con 100.000 registros donde haces READ TABLE con clave completa tiene un rendimiento O(n) (lineal). La misma operación en una tabla HASHED es O(1) (constante), independiente del número de registros.
Dump TIME_OUT: Análisis y Soluciones
El dump TIME_OUT en SAP indica que un programa superó el tiempo máximo de ejecución configurado. Es uno de los dumps más frecuentes en programas con SELECT ineficientes o loops sobre grandes volúmenes.
💡 Tip del día · ST22
Analiza el dump en ST22 para identificar la línea que estaba ejecutando cuando se produjo el timeout. Usa SAT para medir el tiempo de cada sección del programa. El parámetro rdisp/max_wprun_time controla el límite.
🔍 Dato curioso
SAP no permite modificar el timeout para programas dialog (solo para background). Para procesar grandes volúmenes sin timeout, la solución es dividir el procesamiento en jobs de background con paquetes manejables.
Autorización ABAP: AUTHORITY-CHECK y SU53
La sentencia AUTHORITY-CHECK verifica que el usuario tiene los permisos necesarios antes de ejecutar una operación sensible. La transacción SU53 muestra el último authority-check fallido de cualquier usuario.
💡 Tip del día · SU53
Siempre incluye AUTHORITY-CHECK para acciones críticas como crear, modificar o borrar datos. SU53 es la primera herramienta que debe consultar un usuario cuando recibe un error de autorización en SAP.
🔍 Dato curioso
El objeto de autorización S_TCODE controla el acceso a las transacciones. Un usuario con acceso a la transacción pero sin los objetos de autorización adicionales (como F_BKPF_BUK para FI) verá errores al intentar usarla.
New ABAP Syntax: Expresiones Inline y Value
El nuevo ABAP (7.40+) incluye expresiones inline, el operador VALUE para inicializar tablas y estructuras, el operador CORRESPONDING para copiar campos y el operador REDUCE para agregaciones funcionales.
💡 Tip del día · SE38
Usa DATA(ls_variable) para declarar variables inline donde se usan. Usa VALUE #( ) para inicializar tablas internas con datos directamente. Esto hace el código más legible y reduce errores de declaración manual.
🔍 Dato curioso
El nuevo ABAP reduce hasta un 50% el número de líneas de código en operaciones comunes de manejo de tablas internas. El Code Inspector puede detectar código legacy que puede modernizarse con la nueva sintaxis.
HANA Procedures: Debugging de Lógica en Base de Datos
Los HANA Stored Procedures (SQLScript) permiten ejecutar lógica de negocio directamente en la base de datos. Depurarlos requiere herramientas específicas de HANA Studio o SAP HANA Cockpit.
💡 Tip del día · HANA
Usa SAP HANA Cockpit o HANA Studio para depurar SQLScript. El editor de HANA permite poner breakpoints en los procedures y ver el estado de las variables en cada paso de ejecución, similar al debugger ABAP.
🔍 Dato curioso
Los cálculos complejos en HANA Procedures pueden ser hasta 10.000 veces más rápidos que el equivalente en ABAP si se diseñan correctamente aprovechando el procesamiento columnar in-memory de HANA.
Dynamic Programming: GENERATE SUBROUTINE y RTTI
El programming dinámico en ABAP (GENERATE SUBROUTINE POOL, creación dinámica de objetos con CREATE OBJECT) permite generar y ejecutar código en tiempo de ejecución, pero requiere especial cuidado en seguridad.
💡 Tip del día · SE38
Para depurar código generado dinámicamente, el debugger ABAP puede entrar en el pool generado usando F5 (Step Into). Usa RTTI (cl_abap_typedescr) para inspeccionar tipos dinámicos en el debugger.
🔍 Dato curioso
El código generado dinámicamente en ABAP (GENERATE SUBROUTINE POOL) no puede comprobarse con el Code Inspector o ATC en tiempo de desarrollo, lo que lo convierte en un riesgo de seguridad si no se validan los inputs.
SLG1 Application Log: Auditoría de Procesos
El Application Log (SLG1) es el mecanismo estándar de SAP para registrar mensajes de proceso de forma estructurada. A diferencia de los dumps de ST22, el log de aplicación captura información planificada.
💡 Tip del día · SLG1
Escribe logs en SLG1 usando las funciones BAL_LOG_CREATE, BAL_LOG_MSG_ADD y BAL_DB_SAVE. Define el objeto de log (OBJECT) y subobjeto (SUBOBJECT) para filtrar logs en SLG1 por proceso de negocio.
🔍 Dato curioso
SLG1 puede retener logs durante períodos configurables. En auditorías de datos maestros o procesos de pago, los logs de SLG1 proporcionan evidencia de qué se ejecutó, cuándo y con qué resultado.
SM50 y SM66: Monitorización de Procesos Activos
SM50 muestra los procesos de trabajo activos en el servidor de aplicaciones actual. SM66 hace lo mismo para todos los servidores del sistema, permitiendo identificar procesos bloqueados o con alto consumo.
💡 Tip del día · SM50
En SM50 identifica procesos con estado 'STOPPED' que llevan mucho tiempo parados: pueden ser bloqueos de BD o esperas de recursos. El botón 'Cancelar con dump' permite terminar un proceso problemático.
🔍 Dato curioso
Un proceso de trabajo en estado 'Priv' (memoria privada extendida) en SM50 indica que ha superado el límite de memoria roll area y ha solicitado memoria adicional del sistema, señal de uso ineficiente de memoria.
Análisis de Buffer: Caché y Rendimiento
El análisis de buffers en SAP permite entender si las tablas principales están bien cacheadas en memoria o si se accede frecuentemente a la base de datos para cada lectura, impactando en el rendimiento general.
💡 Tip del día · ST10
Usa ST10 para analizar el uso de buffers de tabla. Un hit ratio bajo en ST10 para una tabla pequeña y muy consultada sugiere que debería estar bufferizada. Verifica la configuración de buffering en SE11.
🔍 Dato curioso
Las tablas de customizing de SAP (como T001, T006, MARC) están típicamente bufferizadas en memoria. En HANA, el buffering es menos crítico porque el acceso in-memory ya es muy rápido incluso sin buffer ABAP.
Debugging FIORI: Inspeccionar Apps en el Browser
Las apps Fiori son aplicaciones web (SAPUI5). Depurarlas requiere herramientas del browser (Chrome DevTools) más que el debugger ABAP. Los errores pueden estar en el frontend o en el backend Gateway.
💡 Tip del día · /IWFND/ERROR_LOG
En Chrome, abre DevTools (F12) y filtra por XHR/Fetch para ver las llamadas OData. Usa el panel Network para inspeccionar requests/responses. Para errores backend, consulta /IWFND/ERROR_LOG en SAP.
🔍 Dato curioso
El parámetro sap-ui-debug=true en la URL de una app Fiori activa el modo debug de SAPUI5, permitiendo ver los controles detallados en el browser y facilitando el análisis de errores de renderizado en el frontend.
Dump ABAP_MEMORY_EXCEEDED: Análisis y Solución
El dump ABAP_MEMORY_EXCEEDED indica que el programa ha superado el límite de memoria configurado. Es frecuente en programas que cargan grandes volúmenes de datos en tablas internas sin paginación.
💡 Tip del día · ST22
Analiza el dump en ST22 para identificar la tabla interna que crece excesivamente. Usa SELECT con paquetes (PACKAGE SIZE) para procesar grandes volúmenes en chunks. Verifica si es posible usar datos de HANA directamente.
🔍 Dato curioso
El límite de memoria ABAP se controla con el parámetro abap/heap_area_total. Aumentarlo sin resolver el problema de fondo solo pospone el dump. La solución real siempre es optimizar el consumo de memoria del programa.
Trace de Autorización: SU53 y SUIM
Cuando un usuario recibe un error de autorización, SU53 muestra el ÚLTIMO authority-check fallido. SUIM (User Information System) permite analizar qué usuarios tienen qué roles y objetos de autorización.
💡 Tip del día · SU53
Después de un error de autorización, el usuario debe ir a SU53 inmediatamente sin ejecutar ninguna otra transacción (sobrescribiría el registro). El consultor puede verlo también desde SU53 introduciendo el usuario afectado.
🔍 Dato curioso
SUIM > 'Usuarios con objeto de autorización' permite identificar todos los usuarios que tienen acceso a una transacción específica, fundamental para revisiones de segregación de funciones (SoD) en auditorías.
Debugging de Interfaces: SM58 y Transacciones Fallidas
SM58 muestra las transacciones RFC tRFC y qRFC que han fallado y están pendientes de reintento. Es fundamental para diagnosticar fallos en interfaces asíncronas entre sistemas SAP o con sistemas externos.
💡 Tip del día · SM58
En SM58 visualiza las transacciones fallidas. Puedes reintentar manualmente con 'Ejecutar LUW' o borrar las fallidas si ya no tienen relevancia. El log muestra el mensaje de error exacto del sistema remoto.
🔍 Dato curioso
Las transacciones en SM58 son unidades lógicas de trabajo (LUW) que SAP reintenta automáticamente según el schedule configurado. Un fallo persistente en SM58 suele indicar un problema de conectividad o de datos.
Clean Core ABAP: Extensiones sin Modificar el Estándar
Clean Core en SAP es la filosofía de no modificar el estándar SAP usando BAdIs, RAP, CDS y APIs públicas. Mantener el Clean Core garantiza actualizaciones sin regresiones y cumplimiento con SAP Cloud.
💡 Tip del día · SCI
Evalúa cada desarrollo custom con ATC (ABAP Test Cockpit) usando el perfil 'SAP Cloud Readiness'. Los errores 'Not Allowed' indican uso de objetos prohibidos en Cloud que romperían el Clean Core del sistema.
🔍 Dato curioso
SAP S/4HANA Cloud requiere Clean Core obligatoriamente: ningún programa puede acceder a tablas de SAP directamente sin pasar por APIs autorizadas. On-premise este nivel de pureza es opcional pero recomendado.