Inicio > ABAP/4 > Manejo de Textos en SAP

Manejo de Textos en SAP

Para poder tomar los textos de los documentos de compras/ventas, etc. hay que leer con funciones los datos de distintas tablas:

TTXID ID textos pendientes
TTXIT Textos para id de textos
TTXOB Objetos de texto permitidos
TTXOT Textos breves para objetos de textos
STXH Cabecera de fichero de textos
STXL Líneas de fichero de texto

Los dos más importantes son STXH y STXL, que es donde se guardan físicamente los textos:

Campos de la tabla STXH

Campo Contenido Descripción
TDOBJECT KNA1 Deudores
TDNAME Código deudor
TDID
TDSPRAS
TDTXTLINES Líneas de texto

Campos de la tabla STXL

Campo Contenido Descripción
RELID TX Versión de SAP R/3
TDOBJECT KNA1 Deudores
TDNAME Código deudor
TDID 0002 Nota de Contabilidad
TDSPRAS S Idioma
SRTF2 x x
CLUSTR x x
CLUSTD x Long Binary

¿Cómo sé que parámetros usar para un texto determinado?

Se necesitan 4 parámetros para poder leer/escribir textos por código, lo pueden chequear así:

  1. Ir al campo del texto y hacerle doble click al rectángulo blanco donde se ingresa el texto. Se verá una pantalla similar a esta:

  1. Ir al menú “Pasar a-Cabecera” . Vemos los 4 primeros campos que son los necesarios para llamar a las funciones y recuperar/escribir en el texto correcto.

  • Nombre de texto (lc_name): en caso de ser un texto de cabecera es el número de documento, sino es la unión entre el número de documento y la posición.
  • Idioma (sy-langu): yo uso el sy-langu
  • ID Texto (lc_id): es el identificador del texto en cuestión (para el caso es F04)
  • Objeto Texto (lc_object): es el indicador del tipo de documento u objeto al cual pertenece este texto.

¿Qué funciones se usa para grabar o leer un texto?

Yo uso estas funciones:

1. Para leer un texto guardado, por ejemplo del pedido de compras recien mostrado:


DATA: lc_tabix TYPE sy-tabix,

lc_id TYPE thead-tdid,

lc_object TYPE thead-tdobject,

lc_name TYPE thead-tdname,

lt_lines TYPE TABLE OF tline WITH HEADER LINE.

* Busco el texto de destinatario

REFRESH lt_lines.

lc_id = 'F04'. " Texto donde está el STRING buscado

lc_object = 'EKPO'. " Tabla de textos

lc_name = ‘450003235800010’. “ Respetar ceros a la izquierda (si hubiere) y entre el Pedido y la Posición

CALL FUNCTION 'READ_TEXT'

EXPORTING

id = lc_id

language = sy-langu

name = lc_name

object = lc_object

TABLES

lines = lt_lines

EXCEPTIONS

id = 1

language = 2

name = 3

not_found = 4

object = 5

reference_check = 6

wrong_access_to_archive = 7

OTHERS = 8.

* El resultado es devuelto en la tabla lt_lines que tiene dos campos:

* TDFORMAT (CHAR 2)

* TDLINE (CHAR132)

IF sy-subrc EQ 0.

READ TABLE lt_lines INDEX 1.

wa_salida-texto_recuperado = lt_lines-tdline.

ENDIF.

1. Para grabar un texto guardado, se usan las mismas variables, llenando la tabla lt_lines:


Refresh lt_lines.

lt_lines-tdformat = '*'.

lt_lines-tdline = ‘Ejemplo de texto!!!’.

APPEND lt_lines. CLEAR lt_lines.

CALL FUNCTION 'CREATE_TEXT'

EXPORTING

fid = lc_id

flanguage = sy-langu

fname = lc_name

fobject = lc_object

save_direct = 'X'

TABLES

flines = lt_lines

EXCEPTIONS

no_init = 1

no_save = 2

OTHERS = 3.

IF sy-subrc EQ 0.

MESSAGE s001(00) WITH 'Permiso Modificado OK'.

ENDIF.

Existen otras funciones para ver si el texto está creado, etc. Recomiendo ver por la SE80 el grupo de funciones STXD que contiene todo. Sin embargo el CREATE_TEXT mostrado acá aparece en SD, en el grupo de funciones V75T.

Categorías:ABAP/4 Etiquetas: , , , , ,
  1. Felipe
    17/05/2011 a las 14:36

    Genial. Por fin un ejemplo claro y concreto de lo que estaba buscando.
    Buena explicación y de gran utilidad.

  2. Germán
    30/05/2011 a las 08:33

    Hola,

    muy buena explicación.

    A mi tambien me sirvió.

    Saludos,

  3. Francisco Rica
    18/10/2011 a las 16:03

    HOla Eduardo:

    Una pregunta? Esos pantallazos a qué tcode pertenecen? Es que estamos intentando modificar un texto largo no standard y por la SO10 no podemos. Escríbeme si no te importa a frica0@gmail.com. Gracias.

  4. Alexander Gonzales
    26/10/2012 a las 03:29

    Hola Eduardo,
    Estoy tratando de obtener el texto de una posicion de detalle (texto pedido de material) que la visualizo mediante la trasaccion me22n, con el ID F03 y el objeto EKPO, como muestras en el ejemplo, pero no lo realiza. Verifique en la tabla de textos STXL y no existe el ID F03 para dicho pedido, solo para el “texto posicion” con ID=01.

    La diferencia que encontre es que para “texto pedido de material” en la parte inferior hay un icono de “tomar texto” y para “texto posicion” muestra el icono “borrar texto” solo este ultimo se encuentran en la tabla STXL.

    Como puedo obtener el “texto pedido de material”? en que tabla lo guarda?

    Gracias.

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: