SAP Netweaver / ABAP                  Notas técnicas / Tips / Tutorials

Como utilizar un Texto Standard para ingresar datos dinámicamente a un Sapscript

Aprenda una manera de ingresar datos dinámicamente (una cantidad variable de registros) a un Sapscript, mediante el uso del objeto Texto Standard de SAP.

Al utilizar Sapscripts para crear y mantener formularios impresos, dependiendo de los requerimientos del negocio podría ser necesario modificarlos, por ejemplo para obtener datos adicionales "dinámicamente".

Si el programa impresor asociado al Sapscript es uno standard (es decir, que no lo vamos a modificar), requerirá la creación de subrutinas, ya sea en un INCLUDE o en un programa aparte, que contenga la lógica necesaria para obtener estos datos adicionales.

Si lo que se requiere es agregar al formulario una cantidad variable de registros, pueden usarse subrutinas conjuntamente con el objeto Texto Standard de SAP, que opera en este caso como contenedor de datos dinámicos.

El presente tip detallará mediante un ejemplo una manera de implementar el uso de un objeto Texto Standard para agregar datos "dinámicos" a un formulario Sapscript.

 

El caso a implementar mostrará las reservas de vuelos disponibles de la tabla SBOOK en el momento de ejecutar el formulario, donde se usarán los siguientes objetos creados específicamente para el ejemplo:

Objeto Texto Standard:: Z_SBOOK_TABLE

Programa Subrutinas: ZSAPSCRIPT_SUB

Formulario: ZTEK_FORM_TEST

Pasos a seguir para la implementación ejemplo:

1 – Crear el objeto Texto Standard Z_BOOK_TABLE que se va a utilizar para pasar los datos de la subrutina (creada en el siguiente paso), al formulario. Este texto no tendrá contenido inicialmente (se deja en blanco intencionalmente). Para ello, ingresar a la transacción SE10:

ABAP-Cambiar-texto-standard-01

2 – Crear el programa Program_Z_SAPSCRIPT_SUB que contiene la subrutina SBOOK_DATA, encargada de la obtención de datos que se grabarán en el Texto Standard.

ABAP-crear-programa-subrutina-2

Código del programa "Program_Z_SAPSCRIPT_SUB":

El siguiente código contiene la lógica de la subrutina SBOOK_DATA, que como mencionamos anteriormente, obtendrá los datos de la reserva de vuelos en el momento de la impresión del formulario. Observar dentro del código la utilización de la función SAVE_TEXT,  encargada de guardar los datos obtenidos, que luego serán leídos por el formulario.

 

FORM sbook_data TABLES in_tab STRUCTURE itcsy

out_tab STRUCTURE itcsy.

*----------------------------------------------------------------------*

* Declaracion de variables *

*----------------------------------------------------------------------*

* Tablas internas

DATA: ti_sbook TYPE STANDARD TABLE OF sbook.

DATA: ti_text TYPE STANDARD TABLE OF tline.

* Estructuras

DATA: wa_sbook TYPE sbook.

DATA: wa_header LIKE thead.

DATA: wa_text TYPE tline.

 

* Variables

CONSTANTS: v_tab TYPE char2 VALUE ', ,'. "Tabulador en el Formulario

DATA: v_luggweight(12) TYPE c.

DATA: v_forcuram(17) TYPE c.

*----------------------------------------------------------------------*

* Seleccion de Datos *

*----------------------------------------------------------------------*

* Obtener datos SBOOK

SELECT carrid fldate bookid luggweight

wunit forcuram forcurkey

FROM sbook

UP TO 10 ROWS

INTO CORRESPONDING FIELDS OF TABLE ti_sbook.

IF sy-subrc = 0.

 

* Recorremos los registros de la tabla que contiene los datos

LOOP AT ti_sbook INTO wa_sbook.

* Asignamos un Formato de Parrafo para la impresion de los registros

* en el formulario.

wa_text-tdformat = ' * '.

 

* Pasamos valores numéricos a caracter.

MOVE wa_sbook-luggweight TO v_luggweight.

MOVE wa_sbook-forcuram TO v_forcuram.

 

* Concatenamos los datos del registro en un String y separamos

* con los tabuladores (V_TAB)

CONCATENATE wa_sbook-carrid

wa_sbook-fldate

wa_sbook-bookid

v_luggweight

wa_sbook-wunit

v_forcuram

wa_sbook-forcurkey

INTO wa_text-tdline

SEPARATED BY v_tab.

 

* Agregamos registro a TI_TEXT

APPEND wa_text TO ti_text.

ENDLOOP.

 

CHECK sy-subrc = 0.

 

* Pasamos los atributos del Texto Estandar

wa_header-tdname = 'Z_SBOOK_TABLE'.

wa_header-tdobject = 'TEXT'.

wa_header-tdid = 'ST'.

wa_header-tdspras = 'E'. "sy_langu'.

 

* Guardamos los datos de la tabla interna en el Objeto de Texto Standard

CALL FUNCTION 'SAVE_TEXT'

EXPORTING

header = wa_header

insert = 'X'

savemode_direct = 'X'

TABLES

lines = ti_text

EXCEPTIONS

id = 1

language = 2

name = 3

object = 4.

 

IF sy-subrc NE 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDIF.

ENDFORM. " sbook_data

 

 

3 - Modificar el formulario ZTEK_FORM_TEST, accediendo a la transacción SE71. En este caso se utilizará la ventana MAIN.

ABAP-Sapscript-modificacion-3

4 - En la ventana MAIN,  que contiene el elemento de texto SBOOK, se invoca a la subrutina SBOOK_DATA (Sentencia PERFORM .... IN PROGRAM) para obtener los datos adicionales,  y se muestra el Texto Standard mediante la sentencia INCLUDE:

ABAP-Sapscript-Windows-Main-4-a

  • Para generar la sentencia INCLUDE mostrada arriba: En la ventana MAIN ir al menú INSERT → TEXT → STANDARD), o presionar las teclas CTRL+ SHIFT+ F5. Estos pasos desplegarán una ventana que solicitará el nombre del texto standard y otros datos, como lo muestra la siguiente imagen:

ABAP-Sapscript-Insert-Text-5

5- Guardar y Activar el formulario.

Como resultado, al ejecutar el programa impresor, el formulario invocará a la subrutina Z_SAPSCRIPT_SUB, obtendrá los datos de la tabla SBOOK, y los imprimirá como se muestra en la imagen siguiente:

 

ABAP-Sapscript-Print-Preview-6

 

Consideraciones:

  • Después de imprimir el formulario, se puede notar que los registros de las reservas fueron guardados adecuadamente, accediendo a la transaccion SO10 para visualizar el Texto Standard (que en principio estaba vacío):

ABAP-Sapscript-Display-Text-7

Es importante tener en cuenta que el Texto Standard mantiene el contenido de la última impresión del formulario. Sin embargo, con cada impresión, se renueva el contenido, debido a la ejecución de la función SAVE_TEXT, dentro de la subrutina.


n_Carlos-Aparicio - Especialista ABAP

 


Copyright 2013 - Teknoda S.A.

IMPORTANTE:
“Notas técnicas de SAP ABAP" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes SAP. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos.
Si desea suscribir otra dirección de e-mail para que comience a recibir las Notas Técnicas SAP, envíe un mensaje desde esa direcciónsapping@teknoda.com, aclarando nombre, empresa, cargo y país del suscriptor.

SAP, Netweaver, R/3, Fiori,S4/HANA y ABAP son marcas registradas de SAP AG. SAP no es el editor de esta publicación y no es responsable de la misma en ningún aspecto. La información contenida en esta publicación ha sido generada por nuestros especialistas a partir de fuentes consideradas confiables y del ejercicio profesional cotidiano. No obstante, por la posibilidad de error humano, mecánico, cambio de versión u otro, Teknoda no garantiza la exactitud o completud de la misma.
COPYRIGHT TEKNODA S.A. PROHIBIDA SU REPRODUCCION TOTAL O PARCIAL SIN CONSENTIMIENTO DE TEKNODA

 


 

Copyright © 2024 Teknoda Tech Portal & Training. Todos los derechos reservados.
Joomla! es software libre, liberado bajo la GNU General Public License.