Las funciones SAVE_TEXT y READ_TEXT son dos módulos de función utilizados en la grabación y lectura de textos de observaciones de muchas transacciones estándar. Mediante ellas las observaciones de pedidos de ventas, órdenes de trabajo, entregas de salida, etc. se graban en la "memoria" de SAP y se pueden recuperar para su posterior lectura. Pero también se pueden utilizar en transacciones de cliente para guardar y recuperar textos largos. Hay que recordar que los campos en SAP tienen una longitud máxima de 256 caracteres. Por lo tanto, estas funciones son muy importantes cuando se necesitan introducir párrafos muy largos.
Objetos de texto e IDs
Todas las observaciones se graban asociándolas a un objeto de texto y un ID:
-Un objeto de texto es un agrupador de IDs que definirá características de los textos como el tamaño máximo de caracteres que puede contener cada línea o el tipo de texto.
Se pueden crear nuevos objetos de texto y nuevas IDs en la siguiente transacción:
Herramientas / Imprimir formularios / Gestión / SE75 - Opciones
La función SAVE_TEXT
La función SAVE_TEXT se encarga de grabar los textos de un objeto de texto y de un ID en la memoria de SAP. Son parámetros imprescindibles a esta función los valores HEADER y SAVEMODE_DIRECT.
HEADER es una variable de tipo estructura y en ella se deberán informar obligatoriamente tres campos
- Objeto de texto (TDOBJECT).
- ID (TDID).
- Idioma (SPRAS).
Además, es necesario el parámetro identificador de texto (TDNAME).
Ejemplo de código ABAP función SAVE_TEXT:
* EJEMPLO DE FUNCIÓN SAVE TEXT
DATA:
t_lines like tline occurs 0 WITH HEADER LINE,
wa_header LIKE thead.
* Clave de texto
wa_header-tdobject = 'ZC'.
wa_header-tdid = 'ZT'.
wa_header-tdspras = 'S'.
* Identificador de texto
CONCATENATE sy-mandt 'MITEXTO' INTO wa_header-tdname.
* Guardar texto
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
header = wa_header
savemode_direct = 'X'
TABLES
lines = t_lines
EXCEPTIONS
id = 1
language = 2
name = 3
object = 4
OTHERS = 5.
IF sy-subrc <> 0.
ENDIF.
La función READ_TEXT
La función READ_TEXT se encarga de recuperar de SAP los textos que previamente se han grabado mediante la función SAVE_TEXT. Los parámetros imprescindibles en este caso son...
- ID (ID).
- Idioma (LANGUAGE).
- Identificador del texto (NAME).
- Objeto de texto (OBJECT).
Ejemplo de código ABAP función READ_TEXT:
* EJEMPLO DE FUNCIÓN READ_TEXT
DATA:
t_lines like tline occurs 0 WITH HEADER LINE,
g_name TYPE tdobname.
* Identificador de texto
CONCATENATE sy-mandt 'MITEXTO' INTO g_name.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'ZT'
language = sy-langu
name = g_name
object = 'ZC'
TABLES
lines = t_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 0.
ENDIF.
Edición del texto
Para poder escribir el texto y que pueda grabarse mediante la función SAVE_TEXT hay que habilitar un editor de texto en la pantalla de nuestra programa. También para poder leer el texto recuperado mediante la función READ_TEXT es necesario un editor de texto. Para ello podemos utilizar la función CATSXT_SIMPLE_TEXT_EDITOR. Esta función nos proporciona un sencillo editor de texto para nuestros programas ABAP.
Ejemplo de código ABAP de la función CATSXT_SIMPLE_TEXT_EDITOR
Y así se vería
* EJEMPLO DE EDITOR DE TEXTO
DATA:
t_lines like tline occurs 0 WITH HEADER LINE,
t_text TYPE catsxt_longtext_itab,
wa_text LIKE LINE OF t_text.
LOOP AT t_lines.
MOVE t_lines-tdline TO wa_text. APPEND wa_text TO t_text.
ENDLOOP.
CALL FUNCTION 'CATSXT_SIMPLE_TEXT_EDITOR'
EXPORTING
im_title = 'Observaciones'
CHANGING
ch_text = t_text.
REFRESH t_lines. CLEAR t_lines.
LOOP AT t_text INTO wa_text.
MOVE '*' TO t_lines-tdformat.
MOVE wa_text TO t_lines-tdline.
APPEND t_lines. CLEAR t_lines.
ENDLOOP.
Y así se vería
Hola Oscar, gracias por el aporte, me he enfrentado a una necesidad relacionada a este tema, necesito llevar el contenido de un campo de texto a un sistema externo. por ejemplo a una tabla de sql.
ResponderEliminar¿Sabes como podría hacerlo?
Yo tambien necesito esto.. alguien sabe como? de casualidad ya lo lograste agustin?
EliminarPERO SI EL TEXTO ES MAS DE UNA LINEA COMO PUEDO HACER
ResponderEliminarEN MI CASO LE HICE UN
LOOP AT TEXTO
Imprimio por pantalla en partes
código texto
0000111 la canción de de jorge es b
0000111 onita.
cuando el resultado deberia ser:
0000111 la canción de de jorge es bonita
todo en uno solo
Puedes utilizar la función FORMAT_TEXTLINES
Eliminar