Archivo
SO10 – Crear texto estándar y usarlo
Caso: se desea utilizar la funcionalidad de textos para agregar un texto largo y usarlo en un smartform, paso a paso.
Solución:
1. Ingresamos a la transacción SO10, en donde definimos el nombre del texto a crear.
La ruta es: Herramientas / Imprimir formularios / SAPscript / SO10 – Textos estándar
Los textos creados aquí se deben transportar como más adelante veremos, es decir que una modificación en el texto debe realizarse desde el entorno de desarrollo y actualizar a los otros mandantes mediante transporte de órdenes.
Sin embargo, podrían modificarse en el ambiente de producción, si utilizamos funciones de texto para editarlos, un poco de eso explico en el post:
https://abapers.wordpress.com/2011/02/07/manejo-de-textos-en-sap/
Al crear el texto, ingresamos el texto necesario y si deseamos partes variables, lo indicamos. En mi caso era una carta al proveedor, en donde se le indica el resultado de su evaluación.
2. Incluimos el texto en una orden de transporte, con el programa RSTXTRAN por la transacción SE38.
La ruta es: Herramientas / Workbench ABAP / Desarrollo / SE38 – Editor ABAP
Allí indicamos el nombre del texto recién creado y ejecutamos.
Nos aparecerá/n el/los textos filtrados, en dicha pantalla debemos sólo presionar ENTER:
Aparece otra pantalla y allí ponemos «Pasar txt a correc.» y allí nos pedirá la orden de transporte (o crearemos una nueva)
Nota: también otra posibilidad es crear la orden de transporte manualmente o agregar el texto a una orden ya existente (ver nota 65253)
Nota: Si lo que se necesita es copiar textos dentro de un sistema de un mandante a otro mandante, se puede utilizar el programa RSTXTCPY.
Finalmente, agrego el texto en el smartform:
Links:
http://scn.sap.com/community/spanish/blog/2013/01/16/uso-de-textos-est%C3%A1ndar-en-programas-abap
http://www.blogdesap.com/2013/10/transporte-textos-estandar.html
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í:
- 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:
- 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.