CONVT_NO_NUMBERConversiones y cálculos CATCH CX_SY_CONVERSION_NO_NUMBER
Se ha intentado convertir a número un texto que no es un número.
Causas habituales Asignar a un campo de tipo I, P o N un texto con letras, espacios intermedios o símbolos. Leer un fichero con importes en formato «1.250,50» y moverlos directamente a un campo numérico. Un campo de la pantalla de selección o de un IDoc trae un valor inesperado. Cómo se soluciona Valida el texto antes de convertirlo, por ejemplo con CO '0123456789' o una expresión regular. Para importes con formato de usuario, quita los separadores de miles y cambia la coma decimal por punto antes de convertir. Rodea la conversión con TRY … CATCH cx_sy_conversion_no_number y muestra un mensaje claro. Provoca el dump Copiar 1
2
DATA lv_importe TYPE p LENGTH 15 DECIMALS 2 .
lv_importe = lv_texto. " '12,5 EUR' → dump Corregido Copiar 1
2
3
4
5
TRY .
DATA (lv_importe) = CONV decfloat34( replace( val = lv_texto sub = ',' with = '.' ) ).
CATCH cx_sy_conversion_no_number INTO DATA (lx_error).
MESSAGE |Importe no válido: { lv_texto }| TYPE 'E' .
ENDTRY .Enlace a este dump
CONVT_OVERFLOWConversiones y cálculos CATCH CX_SY_CONVERSION_OVERFLOW
El valor no cabe en el campo de destino al convertirlo.
Causas habituales Mover un número grande a un campo de tipo I (máximo 2.147.483.647) o a un P con pocas posiciones. Convertir un texto largo de dígitos a un campo numérico corto. Cómo se soluciona Usa un tipo con más capacidad: int8, p LENGTH 16 o decfloat34. Comprueba el rango antes de asignar o captura cx_sy_conversion_overflow. Enlace a este dump
BCD_ZERODIVIDEConversiones y cálculos CATCH CX_SY_ZERODIVIDE
División por cero con números de tipo P (empaquetados).
Causas habituales Calcular un porcentaje o un precio unitario cuando el divisor (cantidad, total) es cero. Cómo se soluciona Comprueba el divisor antes de dividir. Captura cx_sy_zerodivide si el cero es un caso posible. Provoca el dump Copiar 1
lv_unitario = lv_importe / lv_cantidad.Corregido Copiar 1
lv_unitario = COND #( WHEN lv_cantidad <> 0 THEN lv_importe / lv_cantidad ELSE 0 ).Enlace a este dump
COMPUTE_INT_ZERODIVIDEConversiones y cálculos CATCH CX_SY_ZERODIVIDE
División por cero con números enteros (tipo I).
Causas habituales Dividir entre un contador o un número de líneas que vale cero, por ejemplo lines( itab ) de una tabla vacía. Cómo se soluciona Comprueba que el divisor no es cero, o que la tabla no está vacía, antes de dividir. Enlace a este dump
BCD_OVERFLOWConversiones y cálculos CATCH CX_SY_ARITHMETIC_OVERFLOW
El resultado de un cálculo con números de tipo P no cabe en el campo.
Causas habituales Sumar importes en un campo con pocas posiciones. Multiplicar cantidades por precios con muchos decimales. Cómo se soluciona Declara el campo del resultado con más longitud (p LENGTH 16) o usa decfloat34. Captura cx_sy_arithmetic_overflow si el valor puede ser muy grande. Enlace a este dump
STRING_OFFSET_TOO_LARGEConversiones y cálculos CATCH CX_SY_RANGE_OUT_OF_BOUNDS
Se accede a una parte de un texto (offset y longitud) que está fuera de su longitud.
Causas habituales Usar lv_texto+10(5) sobre un texto más corto. Calcular el offset a partir de datos de un fichero sin comprobar la longitud de la línea. Cómo se soluciona Comprueba strlen( ) antes de cortar. Usa funciones de texto como substring( ) o segment( ) dentro de un TRY. Enlace a este dump
ITAB_LINE_NOT_FOUNDTablas internas CATCH CX_SY_ITAB_LINE_NOT_FOUND
Una expresión de tabla itab[ … ] no ha encontrado la línea.
Causas habituales Leer con lt_tabla[ clave = valor ] una línea que no existe. A diferencia de READ TABLE, la expresión no pone sy-subrc: lanza una excepción. Cómo se soluciona Añade OPTIONAL o DEFAULT dentro de un VALUE #( ). Comprueba antes con line_exists( ). O captura cx_sy_itab_line_not_found. Provoca el dump Copiar 1
DATA (lv_nombre) = lt_clientes[ kunnr = lv_kunnr ]-name1.Corregido Copiar 1
DATA (lv_nombre) = VALUE #( lt_clientes[ kunnr = lv_kunnr ]-name1 OPTIONAL ).Enlace a este dump
ITAB_DUPLICATE_KEYTablas internas CATCH CX_SY_ITAB_DUPLICATE_KEY
Se ha insertado en una tabla interna con clave única una línea con una clave que ya existe.
Causas habituales INSERT o VALUE #( ) sobre una tabla SORTED o HASHED con UNIQUE KEY y datos repetidos.Llenar una tabla HASHED desde un SELECT que devuelve duplicados. Cómo se soluciona Elimina los duplicados antes (SELECT DISTINCT, SORT + DELETE ADJACENT DUPLICATES). Si los duplicados son posibles, usa NON-UNIQUE KEY o INSERT con comprobación de sy-subrc (la sentencia INSERT … INTO TABLE no da dump: devuelve 4). Enlace a este dump
TABLE_INVALID_INDEXTablas internas No se puede capturar
Se ha usado un índice de tabla interna que no es válido (cero, negativo o mayor que el número de líneas más uno).
Causas habituales INSERT … INDEX o MODIFY … INDEX con un índice calculado mal.Usar sy-tabix después de haber cambiado de tabla o fuera del bucle. Cómo se soluciona Comprueba el índice contra lines( itab ) antes de usarlo. Guarda el índice en una variable propia en lugar de confiar en sy-tabix. Enlace a este dump
GETWA_NOT_ASSIGNEDReferencias y field-symbols No se puede capturar
Se ha usado un field-symbol que no apunta a nada.
Causas habituales Un READ TABLE … ASSIGNING que no encontró la línea y el código siguió usando el field-symbol. ASSIGN COMPONENT con un nombre de campo que no existe.Cómo se soluciona Comprueba sy-subrc o IS ASSIGNED antes de usarlo. Con expresiones de tabla, usa ASSIGN lt_tabla[ … ] TO FIELD-SYMBOL(<fs>) y comprueba sy-subrc: el ASSIGN no lanza excepción. Provoca el dump Copiar 1
2
3
READ TABLE lt_pedidos ASSIGNING <ls_pedido>
WITH KEY vbeln = lv_vbeln.
<ls_pedido>-netwr = 0 . " dump si no existe Corregido Copiar 1
2
3
4
ASSIGN lt_pedidos[ vbeln = lv_vbeln ] TO FIELD-SYMBOL (<ls_pedido>).
IF sy-subrc = 0 .
<ls_pedido>-netwr = 0 .
ENDIF .Enlace a este dump
OBJECTS_OBJREF_NOT_ASSIGNEDReferencias y field-symbols CATCH CX_SY_REF_IS_INITIAL
Se ha llamado a un método o atributo de una referencia a objeto vacía.
Causas habituales Usar un objeto que no se ha creado con NEW o CREATE OBJECT. Un método que devuelve una referencia y no ha encontrado nada (por ejemplo, un ALV no creado por un error anterior). Cómo se soluciona Comprueba IS BOUND antes de usar la referencia. Revisa el código que crea el objeto: suele haber una excepción anterior que se ha ignorado. Enlace a este dump
MOVE_CAST_ERRORReferencias y field-symbols CATCH CX_SY_MOVE_CAST_ERROR
Un cast (CAST o ?=) a una clase o interfaz que el objeto no implementa.
Causas habituales Convertir una referencia genérica (por ejemplo, de RTTS o de una excepción) a un tipo concreto equivocado. Cómo se soluciona Comprueba el tipo antes con IS INSTANCE OF o usa CASE TYPE OF. Captura cx_sy_move_cast_error. Enlace a este dump
SAPSQL_ARRAY_INSERT_DUPRECBase de datos CATCH CX_SY_OPEN_SQL_DB
Un INSERT … FROM TABLE ha intentado grabar en la base de datos una clave que ya existe.
Causas habituales La tabla interna tiene registros con la misma clave que otros ya grabados, o repetidos entre sí. Se ejecuta dos veces la misma carga. Cómo se soluciona Añade ACCEPTING DUPLICATE KEYS si los duplicados se pueden ignorar (sy-subrc vale 4). Usa MODIFY en lugar de INSERT si quieres crear o actualizar. Elimina los duplicados de la tabla interna antes de grabar. Provoca el dump Copiar 1
INSERT zventas FROM TABLE lt_ventas.Corregido Copiar 1
2
3
4
INSERT zventas FROM TABLE @lt_ventas ACCEPTING DUPLICATE KEYS.
IF sy-subrc = 4 .
" algunos registros ya existían
ENDIF .Enlace a este dump
DBSQL_DUPLICATE_KEY_ERRORBase de datos CATCH CX_SY_OPEN_SQL_DB
La base de datos ha rechazado una grabación por clave duplicada (o por un índice único).
Causas habituales Grabar en una tabla con un índice único un valor que ya existe. Rangos de números que se solapan entre procesos en paralelo. Cómo se soluciona Comprueba si el registro existe antes de insertarlo, o usa MODIFY. Revisa los índices únicos de la tabla en la SE11 y el rango de números (SNRO). Enlace a este dump
DBSQL_SQL_ERRORBase de datos CATCH CX_SY_OPEN_SQL_DB
La base de datos ha devuelto un error al ejecutar una sentencia SQL.
Causas habituales Una consulta con demasiadas condiciones (un rango o un FOR ALL ENTRIES enorme). Una tabla o un campo que no existe en la base de datos (tabla no activada o mal ajustada en la SE14). Problemas de espacio o bloqueos en la propia base de datos. Cómo se soluciona Lee el texto del error de base de datos en el dump: indica la causa exacta. Divide los rangos muy grandes en paquetes. Si la tabla no está ajustada, actívala y ajústala con la SE14. Enlace a este dump
DBIF_RSQL_INVALID_RSQLBase de datos CATCH CX_SY_OPEN_SQL_DB
La interfaz de base de datos no ha podido generar la sentencia SQL.
Causas habituales Un SELECT-OPTIONS o un rango con miles de valores en el WHERE … IN. Un FOR ALL ENTRIES con una tabla de entrada enorme o mal formada. Cómo se soluciona Divide el rango en paquetes o carga los valores en una tabla y únela con un JOIN. Reduce la tabla de entrada del FOR ALL ENTRIES con SORT y DELETE ADJACENT DUPLICATES. Enlace a este dump
SAPSQL_INVALID_FIELDNAMEBase de datos CATCH CX_SY_DYNAMIC_OSQL_SEMANTICS
En una consulta con partes dinámicas aparece un nombre de campo que no existe.
Causas habituales Montar la lista de campos o el WHERE en una variable con un nombre mal escrito o de otra tabla. Cómo se soluciona Valida los nombres con cl_abap_dyn_prg=>check_column_name( ). Captura cx_sy_dynamic_osql_semantics y muestra qué campo falla. Enlace a este dump
TSV_TNEW_PAGE_ALLOC_FAILEDMemoria y tiempo No se puede capturar
El programa se ha quedado sin memoria: una tabla interna ha crecido demasiado.
Causas habituales Un SELECT sin filtro sobre una tabla grande (BSEG, MSEG, VBFA…) que carga millones de filas. Un bucle que añade líneas sin control o tablas internas que no se liberan. Un FOR ALL ENTRIES con la tabla de entrada vacía, que lee la tabla entera. Cómo se soluciona Filtra en la base de datos y pide solo los campos necesarios. Procesa por paquetes con SELECT … PACKAGE SIZE o con un cursor. Libera las tablas que ya no uses con FREE. Comprueba que la tabla de un FOR ALL ENTRIES no está vacía. Provoca el dump Copiar 1
SELECT * FROM mseg INTO TABLE lt_mseg.Corregido Copiar 1
2
3
4
5
6
7
8
SELECT mblnr, mjahr, zeile, matnr, menge
FROM mseg
WHERE werks = @p_werks
AND budat_mkpf IN @s_budat
INTO TABLE @DATA(lt_mseg)
PACKAGE SIZE 50000 .
" procesar el paquete
ENDSELECT .Enlace a este dump
TSV_TNEW_BLOCKS_NO_ROLL_MEMORYMemoria y tiempo No se puede capturar
No hay memoria suficiente para seguir ampliando una tabla interna.
Causas habituales Las mismas que TSV_TNEW_PAGE_ALLOC_FAILED: demasiados datos en memoria a la vez. Cómo se soluciona Reduce los datos que se cargan (filtros, campos, paquetes). Si el volumen es legítimo, el equipo de Basis puede revisar los parámetros de memoria del sistema. Enlace a este dump
SYSTEM_NO_ROLLMemoria y tiempo No se puede capturar
El proceso de trabajo no tiene memoria de roll disponible.
Causas habituales Programas que consumen mucha memoria en diálogo, o muchos usuarios a la vez ejecutando procesos pesados. Cómo se soluciona Reduce el consumo de memoria del programa. Ejecuta los procesos pesados en fondo. Si ocurre a menudo, consúltalo con Basis. Enlace a este dump
TIME_OUTMemoria y tiempo No se puede capturar
El programa ha superado el tiempo máximo de ejecución en diálogo (normalmente unos minutos, parámetro rdisp/max_wprun_time).
Causas habituales Consultas lentas sin índice, SELECT dentro de bucles, o procesos muy grandes lanzados en diálogo. Cómo se soluciona Mide con la ST05 y la SAT dónde se va el tiempo. Saca los SELECT de los bucles (JOIN o FOR ALL ENTRIES). Lanza los procesos largos en fondo (SM36 ): en un job no se aplica este límite. Enlace a este dump
CALL_FUNCTION_NOT_FOUNDLlamadas a funciones y programas CATCH CX_SY_DYN_CALL_ILLEGAL_FUNC
Se ha llamado a un módulo de función que no existe en el sistema.
Causas habituales Nombre mal escrito en una llamada dinámica (con el nombre en una variable). La función existe en desarrollo pero no se ha transportado, o está en un componente no instalado (por ejemplo, de IS-H o HR). Cómo se soluciona Comprueba el nombre en la SE37 del sistema donde falla. Revisa que la orden de transporte que la contiene se ha importado. Enlace a este dump
CALL_FUNCTION_PARM_MISSINGLlamadas a funciones y programas CATCH CX_SY_DYN_CALL_PARAM_MISSING
Falta un parámetro obligatorio en la llamada a un módulo de función.
Causas habituales La función tiene un parámetro obligatorio que la llamada no pasa (frecuente en llamadas dinámicas o después de cambiar la función). Cómo se soluciona Compara la llamada con la firma de la función en la SE37. Usa el patrón de llamada del editor (Modelo / Pattern ) para no olvidar parámetros. Enlace a este dump
CALL_FUNCTION_CONFLICT_TYPELlamadas a funciones y programas CATCH CX_SY_DYN_CALL_ILLEGAL_TYPE
Un parámetro de la llamada no tiene el tipo que espera la función.
Causas habituales Pasar una variable de tipo distinto al del parámetro (por ejemplo, un texto donde se espera una estructura), sobre todo en parámetros tipados de forma estricta. Cómo se soluciona Declara la variable con el mismo tipo que el parámetro: DATA lv_x TYPE <tipo del parámetro>. Para RFC, revisa que los tipos coinciden en los dos sistemas. Enlace a este dump
CALL_FUNCTION_PARM_UNKNOWNLlamadas a funciones y programas CATCH CX_SY_DYN_CALL_PARAM_NOT_FOUND
La llamada pasa un parámetro que la función no tiene.
Causas habituales Un nombre de parámetro mal escrito, o una función que ha cambiado su firma. Cómo se soluciona Revisa los nombres de los parámetros en la SE37. Enlace a este dump
CALL_FUNCTION_REMOTE_ERRORLlamadas a funciones y programas No se puede capturar
Ha fallado una llamada remota (RFC) en el sistema de destino.
Causas habituales La función remota ha dado un error o un dump en el otro sistema. Problemas de autorización o de usuario en el destino RFC. Cómo se soluciona Añade siempre system_failure y communication_failure (con MESSAGE) a las llamadas RFC para tratar el error. Revisa la ST22 del sistema de destino y prueba el destino en la SM59 . Provoca el dump Copiar 1
2
CALL FUNCTION 'Z_LEER_DATOS' DESTINATION lv_destino
EXPORTING iv_clave = lv_clave.Corregido Copiar 1
2
3
4
5
6
7
8
9
10
DATA lv_mensaje TYPE c LENGTH 200 .
CALL FUNCTION 'Z_LEER_DATOS' DESTINATION lv_destino
EXPORTING iv_clave = lv_clave
EXCEPTIONS
system_failure = 1 MESSAGE lv_mensaje
communication_failure = 2 MESSAGE lv_mensaje
OTHERS = 3 .
IF sy-subrc <> 0 .
MESSAGE |Error RFC: { lv_mensaje }| TYPE 'E' .
ENDIF .Enlace a este dump
PERFORM_NOT_FOUNDLlamadas a funciones y programas CATCH CX_SY_DYN_CALL_ILLEGAL_FORM
Se ha llamado a una subrutina (FORM) que no existe en el programa indicado.
Causas habituales Un PERFORM … IN PROGRAM o un PERFORM (variable) con un nombre equivocado. Rutinas de formularios o de mensajes (NACE) que apuntan a un FORM que no existe. Cómo se soluciona Revisa el nombre del FORM y del programa. Con PERFORM … IF FOUND la llamada no da error si la rutina no existe. Enlace a este dump
LOAD_PROGRAM_NOT_FOUNDLlamadas a funciones y programas CATCH CX_SY_PROGRAM_NOT_FOUND
No existe el programa que se intenta cargar (con SUBMIT, PERFORM IN PROGRAM o una transacción).
Causas habituales Un programa no transportado, borrado o con el nombre mal escrito. Una transacción (SE93) que apunta a un programa que no existe. Cómo se soluciona Comprueba el programa en la SE38 y la transacción en la SE93 del sistema donde falla. Enlace a este dump
SYNTAX_ERRORLlamadas a funciones y programas No se puede capturar
El programa (o un include o clase que usa) tiene errores de sintaxis.
Causas habituales Se ha transportado un objeto sin otro del que depende (una estructura, un include, una clase). Un cambio en un objeto del diccionario rompe programas que lo usan. Cómo se soluciona El dump indica el include y la línea: ábrelo y verifica con Ctrl+F2 . Transporta los objetos que faltan y revisa con el «Where-used» quién usa el objeto cambiado. Enlace a este dump
OPEN_DATASET_NO_AUTHORITYFicheros CATCH CX_SY_FILE_AUTHORITY
El usuario no tiene autorización para abrir el fichero del servidor.
Causas habituales Falta el objeto S_DATASET para esa ruta o ese programa. La ruta no está permitida en la tabla SPTH. Cómo se soluciona Pide la autorización a seguridad (la SU53 muestra qué falta). Captura cx_sy_file_authority para dar un mensaje claro. Enlace a este dump
DATASET_NOT_OPENFicheros CATCH CX_SY_FILE_OPEN_MODE
Se ha leído o escrito en un fichero del servidor que no está abierto.
Causas habituales El OPEN DATASET falló (ruta incorrecta, permisos del sistema operativo) y el programa siguió sin comprobar sy-subrc. Cómo se soluciona Comprueba siempre sy-subrc después de OPEN DATASET y usa MESSAGE para ver el error del sistema operativo. Provoca el dump Copiar 1
2
OPEN DATASET lv_fichero FOR INPUT IN TEXT MODE ENCODING DEFAULT .
READ DATASET lv_fichero INTO lv_linea.Corregido Copiar 1
2
3
4
5
6
7
DATA lv_msg TYPE string.
OPEN DATASET lv_fichero FOR INPUT IN TEXT MODE ENCODING UTF-8
MESSAGE lv_msg.
IF sy-subrc <> 0 .
MESSAGE |No se puede abrir { lv_fichero }: { lv_msg }| TYPE 'E' .
ENDIF .
READ DATASET lv_fichero INTO lv_linea.Enlace a este dump
CONVT_CODEPAGEFicheros CATCH CX_SY_CONVERSION_CODEPAGE
Un carácter del fichero no se puede convertir a la página de códigos del sistema.
Causas habituales Leer con ENCODING DEFAULT (UTF-8) un fichero que viene en ANSI o Latin-1, o al revés. Cómo se soluciona Indica la codificación real del fichero: ENCODING NON-UNICODE o CODE PAGE '1100'. Añade IGNORING CONVERSION ERRORS si los caracteres raros se pueden ignorar. Enlace a este dump
DYNPRO_SEND_IN_BACKGROUNDPantallas y fondo No se puede capturar
Un programa ejecutado en fondo ha intentado mostrar una pantalla.
Causas habituales Un job que llama a una ventana emergente (POPUP_TO_CONFIRM…), a un CALL SCREEN o a una transacción con pantallas. Un batch input en modo que muestra pantallas, lanzado en fondo. Cómo se soluciona Comprueba sy-batch y evita las pantallas cuando sea abap_true. En CALL TRANSACTION … USING, usa el modo 'N'. Enlace a este dump
DYNPRO_FIELD_CONVERSIONPantallas y fondo No se puede capturar
Un campo de pantalla no se puede convertir al tipo del campo del programa (o al revés).
Causas habituales El campo del dynpro y la variable del programa tienen tipos distintos (por ejemplo, después de cambiar el tipo en el programa sin actualizar la pantalla). Cómo se soluciona Revisa en la SE51 que el campo de pantalla tiene el mismo tipo y longitud que la variable, o que hace referencia al diccionario. Enlace a este dump
MESSAGE_TYPE_XExcepciones y mensajes No se puede capturar
Un programa ha emitido un mensaje de tipo X: una cancelación deliberada porque se ha detectado una situación imposible.
Causas habituales En programas estándar suele indicar datos incoherentes o un uso no previsto de una función. En código propio, un MESSAGE … TYPE 'X' usado como control de errores. Cómo se soluciona Lee en el dump la clase y el número del mensaje y búscalos en las notas de SAP: muchas veces hay una corrección. En código propio, sustitúyelo por una excepción o un mensaje de error tratable. Enlace a este dump
RAISE_EXCEPTIONExcepciones y mensajes No se puede capturar
Un módulo de función ha lanzado una excepción clásica que la llamada no trata.
Causas habituales La llamada no tiene bloque EXCEPTIONS (o le falta esa excepción y OTHERS). Cómo se soluciona Añade siempre EXCEPTIONS … OTHERS = n y comprueba sy-subrc después de la llamada. Provoca el dump Copiar 1
2
3
CALL FUNCTION 'DATE_GET_WEEK'
EXPORTING date = lv_fecha
IMPORTING week = lv_semana.Corregido Copiar 1
2
3
4
5
6
7
8
9
10
11
CALL FUNCTION 'DATE_GET_WEEK'
EXPORTING
date = lv_fecha
IMPORTING
week = lv_semana
EXCEPTIONS
date_invalid = 1
OTHERS = 2 .
IF sy-subrc <> 0 .
MESSAGE 'Fecha no válida' TYPE 'E' .
ENDIF .Enlace a este dump
UNCAUGHT_EXCEPTIONExcepciones y mensajes No se puede capturar
Se ha lanzado una excepción de clase y nadie la ha capturado.
Causas habituales Falta un TRY … CATCH alrededor de la llamada que la lanza. El dump indica qué clase de excepción era (por ejemplo, CX_SY_ITAB_LINE_NOT_FOUND). Cómo se soluciona Captura la excepción concreta o su superclase (CX_STATIC_CHECK, CX_DYNAMIC_CHECK, CX_ROOT). Muestra el texto con lx_error->get_text( ). Enlace a este dump
ASSERTION_FAILEDExcepciones y mensajes No se puede capturar
Ha fallado una sentencia ASSERT: una condición que el programador consideraba siempre cierta no lo es.
Causas habituales Datos inesperados que rompen una suposición del código (estándar o propio). Cómo se soluciona Revisa la condición del ASSERT en la línea del dump y por qué los datos no la cumplen. En código propio, si la situación es posible, trátala con una excepción en lugar de ASSERT. Enlace a este dump
POSTING_ILLEGAL_STATEMENTExcepciones y mensajes No se puede capturar
Se ha ejecutado una sentencia no permitida dentro de una tarea de actualización (update task).
Causas habituales Un COMMIT WORK, ROLLBACK WORK, SUBMIT o una pantalla dentro de una función llamada IN UPDATE TASK o de un BAdI que se ejecuta en la actualización. Cómo se soluciona Quita el COMMIT WORK: en la tarea de actualización lo gestiona SAP. Mueve la lógica que necesita esas sentencias fuera de la actualización. Enlace a este dump
MOVE_TO_LIT_NOTALLOWED_NODATAReferencias y field-symbols No se puede capturar
Se ha intentado modificar una constante, un literal o un parámetro de solo lectura.
Causas habituales Pasar un literal ('X', 10) a un parámetro CHANGING o TABLES que la función modifica. Un field-symbol que apunta a una constante y se usa para escribir. Cómo se soluciona Pasa una variable en lugar del literal en los parámetros que se modifican. No modifiques parámetros IMPORTING dentro de un método. Enlace a este dump
No hay dumps con ese texto. Prueba con parte del nombre, por ejemplo «CONVT» o «ITAB».