jueves, 10 de enero de 2013

Uso de textos estándar en programas ABAP

Uso de textos estándar en los desarrollos ABAP

Introducción

En varias ocasiones se requiere que un programa funcione para diferentes sociedades, para lo cual se deben usar técnicas que permitan usar determinada información que sea pertinente a la sociedad, en los formularios como cheques, facturas, entregas, entre otros, se requiere que cada uno muestre información específica a la sociedad, una forma de hacer esto es haciendo uso de los textos estándar.

Creación de un texto estándar

Para crear un texto estándar debe ingresar a la transacción SO10.



Se llenan los datos necesarios, lo usual en el campo ID del texto es colocar ST que corresponde a texto estándar y en el idioma el que trae por defecto, para el caso ES que corresponde a Español. Una vez ingresemos el nombre del Texto lo creamos dando clic en el botón correspondiente; llegamos a la siguiente pantalla en donde colocamos la información que va a suministrar nuestro texto estándar cuando lo usemos.


Uso del texto estándar

Una vez ya creado nuestro texto la idea es usarlo dentro de nuestros programas, para lo cual empleamos el módulo de función READ_TEXT. En el código que se muestra a continuación se observa la manera de hacer esto.

  DATA: lines TYPE TABLE OF tline.
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
*     CLIENT                        = SY-MANDT
      id                            = 'ST'
      language                      = sy-langu
      name                          = 'AVISO DE PAGO'
      object                        = 'TEXT'
*     ARCHIVE_HANDLE                = 0
*     LOCAL_CAT                     = ' '
*   IMPORTING
*     HEADER                        =
*     OLD_LINE_COUNTER              =
    TABLES
      lines                         = 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.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.



En la tabla interna LINES si el llamado del módulo de función es correcto nos queda almacenado el texto estándar.


Como observamos en la anterior imagen, nos queda la información en la tabla para que la usemos en nuestra aplicación. 

Transporte de los textos entre instancias y mandantes

Cuando creamos textos estándar estos no generan orden de transporte, por lo cual a continuación mostrare cuales son las alternativas que tenemos para pasar los textos.
  1. Manualmente: Consiste en ingresar en los mandantes e instancias en los que deseamos usar nuestros textos a través de la transacción SO10, sin embargo para esto requerimos tener acceso a todos los mandantes y sus instancias.
  2. Usando ordenes de transporte: Consiste en crear una orden de transporte y asociar el objeto texto, lo primero que debemos hacer es crear una orden de transporte ya sea de parametrización o de workbench, esta creación la hacemos por la SE10,  luego usamos una de las siguientes opciones:
    • Ejecutando el report RSTXTRAN: Ingresamos a la SE38 o a la SE80 y ejecutamos el report RSTXTRAN, posteriormente ingresamos la tarea, el objeto, el nombre, el id y el idioma del texto, así como se muestra en la imagen. Después de ejecutar los pasos correspondientes, si observamos la orden esta ya tiene el objeto texto que deseamos transportar. 
    • La otra opción es modificando la orden directamente, para lo cual por la SE10 seleccionamos la tarea y allí adicionamos el objeto, para esto en la edición de la orden en la pestaña objetos agregamos una entrada nueva, colocando en la columna ID programa R3TR, en Tipo Objeto TEXT y en objeto TEXT,AVISO DE PAGO,ST,S, como se muestra en la imagen. 

Conclusiones

El uso de textos estándar permite que no metamos literales dentro de nuestros programas, ayudando al mantenimiento del software, ya que no es necesario modificar nuestro programa cuando sea necesario cambiar un texto estándar; si al texto de ejemplo que creamos llamado 'AVISO DE PAGO' quisiéramos que se imprimiera diferente de acuerdo a la sociedad, lo podemos crear 'AVISO DE PAGO_<Sociedad>', donde <Sociedad> sería el código de la sociedad en SAP.