Post on 09-Feb-2016
Manejo de Textos en SAPPara poder tomar los textos de los documentos de compras/ventas, etc. hay que leer con funciones los datos de distintas tablas:
TTXID ID textos pendientesTTXIT Textos para id de textosTTXOB Objetos de texto permitidosTTXOT Textos breves para objetos de textosSTXH Cabecera de fichero de textosSTXL 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 DeudoresTDNAME Código
deudorTDIDTDSPRASTDTXTLINES
Líneas de texto
Campos de la tabla STXLCampo Contenid
oDescripción
RELID TX Versión de SAP R/3
TDOBJECT
KNA1 Deudores
TDNAME Código deudor
TDID 0002 Nota de Contabilidad
TDSPRAS S IdiomaSRTF2 x xCLUSTR x xCLUSTD 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.
VF02 (Modificar facture)
Hacer doble clic en el texto.
Los datos que se muestran serán los datos que se pasan a la función.
NAME: 0917726302000010 (10 pos. del documento + 6 pos. de la posición –No. de partida)
El texto en el iDoc (Trans. we19)