Las funciones SAVE_TEXT y READ_TEXT

martes, 30 de septiembre de 2014

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.

Objeto de texto


-Un ID define cada clase de texto y asocia el texto a guardar.

ID


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

* 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

Función CATSXT_SIMPLE_TEXT_EDITOR


4 comentarios:

  1. 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.
    ¿Sabes como podría hacerlo?


    ResponderEliminar
    Respuestas
    1. Yo tambien necesito esto.. alguien sabe como? de casualidad ya lo lograste agustin?

      Eliminar
  2. PERO SI EL TEXTO ES MAS DE UNA LINEA COMO PUEDO HACER
    EN 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

    ResponderEliminar