DESARROLLO DE UN SMARTFORM
Programa impresor.
Cómo crear el programa impresor para la ejecución de un Smartform en SAP
Aprenda paso a paso a crear el programa impresor para ejecutar un Smartform en SAP.
La herramienta Smartforms provista por SAP está enfocada en el desarrollo de formularios, por ejemplo el de
una factura, que posteriormente será impresa de algún modo. Como medio de salida, los Smartforms soportan
una impresora, un fax, e-mail o Internet (usando la salida XML).
Existen otras herramientas de SAP que posibilitan lo mismo, como Sapscript y Adobe Forms.
Para poder desarrollar un Smartform, es necesario previamente conocer algunos conceptos importantes:
El desarrollo de un Smartform consta de dos fases:
el diseño del formulario (layout)
y su invocación desde un programa ABAP. A este programa se lo denomina Programa
Impresor o Programa de control. Es necesario tener creado este programa antes de poder utilizar el
Smartform. Si bien la lógica implementada en este programa podría estar incorporada en el propio diseño del
smartform, es habitual en la mayoría de las implementaciones de Smartforms, contar con un programa
impresor específico que contenga esa lógica, "separada" del diseño específico del formulario.
El programa impresor o programa de control puede ser: desarrollado desde “cero” o adaptado de alguno
existente.
Este programa, además de encargarse de realizar la llamada al Smartform, puede contener la lógica
necesaria para la obtención de la información que el Smartform va a utilizar (por ejemplo, puede realizar
consultas a la base de datos para extraer los datos a mostrarse en el Smartform). Los datos extraídos por el
programa impresor se almacenarán en estructuras de datos (tabla interna, variables, etc.), y será enviada al
Smartform para que éste pueda usar esa información.
Sin embargo, como se mencionó en párrafos anteriores, el mismo diseño del Smartform podría contener esa
lógica para la obtención de información que él mismo va a utilizar.
En el presente tip se desarrollará paso a paso la creación de un programa impresor, explicando las principales
sentencias de su código, ejemplificando la obtención de los datos a través de un programa impresor (no en el
propio Smartform), que será generado desde cero.
Proximamente, en otro tip se detallarán los pasos necesarios para la definición del diseño propiamente dicho del
formulario smartform.
Consideraciones para el Ejemplo a desarrollar:
Se trabaja con la tabla SBOOK del entorno de pruebas y se requiere que el diseño del formulario smartform a
desarrollar respete el siguiente “layout”, y deberá recuperar los datos necesarios para listar las reservas
correspondientes a los vuelos con los siguientes datos:
Compañía (campo carrid): Lufthansa (LH)
Connection Id (campo carrid): 0400
Fecha (campo fldate): 28 de Febrero de 1995.
Pasos para la creación del programa Impresor:
1) Acceder a la transacción SE80 para crear un programa, denominado, por ejemplo, ZIMPRESOR, que será
el programa Impresor del Smartform.
2) En este paso, una vez creado el programa impresor, será necesario en él realizar lo siguiente::
a) Definir las estructuras de datos, donde almacenar los datos obtenidos.
b) Obtener los datos (con consultas a la base de datos).
c) Especificar las funciones que llaman al Smartform
A continuación se detalla para a), b) y c) el código para realizar la acción correspondiente:
a) Definir las estructuras de datos:
Se detallan las siguientes sentencias dentro del programa impresor:
Donde se puede observar:
la creación de 3 variables (date1, carrier1 y connection1) para almacenar los datos únicos que se van
a mostrar en el formulario. En la imagen del layout de salida mostrada anteriormente, se corresponde con los
campos: Field 1, Field 2 y Field 3. El Field 7, también mostrado, no va a contener ningún dato en particular,
pero es donde el desarrollador puede escribir su nombre o algún texto que sea de su interés. Este campo se
incluye únicamente debido a que contribuirá luego, cuando se defina la estructura del Smartform, a detallar
una de sus partes (por ejemplo, el “footer”).
La creación de una variable llamada l_funcion cuyo tipo es rs38l_fnam, contendrá el nombre del
módulo de función que ejecuta al Smartform.
La definición de un tipo de datos que coincide con la estructura de la tabla SBOOK (se usa de esta
manera para simplificar el ejemplo).
Se declara una tabla interna del tipo definido en el código ejemplo.
b) Obtención de los datos:
En el código anterior se puede observar:
Se asigna a cada una de las variables creadas en el paso a) los valores que se solicitaron en el
requerimiento ejemplo.
date1 se corresponde con la fecha, currier1 se corresponde con Compañia y connection1 se
corresponde con Connection ID
La sentencia SELECT obtiene los datos que se almacenarán en la tabla interna.
c) Especificar las funciones que llaman al Smartform
La sentencia PERFORM imprimir_formulario es la que invoca a las funciones: 1)
SSF_FUNCTION_MODULE_NAME (standard de SAP) y 2) l_funcion (definición propia), que son necesarias
para la invocación de cualquier Smartform. (Tener en cuenta que l_funcion puede llevar otro nombre).
Se detalla esta acción en el código siguiente:
Donde:
Para la función 1) SSF_FUNCTION_MODULE_NAME, se definen los parámetros necesarios:
el nombre del formulario (formname) – se introduce el nombre que se le dará al Smartform una vez
que se lo cree.
el parámetro fm_name, que en este ejemplo en particular se definirá como l_funcion, como fue
declarada anteriormente de tipo s38l_fnam.
Por último se declara el manejo de excepciones para la función.:
Como se visualiza en el código anterior:
Inmediatamente debajo del llamado a la función, será necesario chequear que no haya habido
errores (sy-subrc = 0) y en ese caso se hará un call function a l_funcion (se corresponde con el “IMPORTING”
de la función anterior).
En EXPORTING se detallan los campos que se desean enviar al Smartform.
En TABLES la tabla interna anteriormente definida, y como es habitual, el manejo de las excepciones
correspondientes.
De esta manera el programa impresor está listo para ser utilizado para ejecutar un smartform.
Pasos para crear un Smartform
a) Pasos para configurar la lógica del Smartform
1) Acceder a la transacción: SMARTFORMS, escribir el nombre del formulario (Ej. ZPRUEBA) que se va a
crear, y luego presionar el botón Create para empezar a definir las características del Smartform.
2) Se llega a la pantalla principal de la transacción SMARTFORMS. Se observa que la pantalla está dividida
en dos “paneles”: sobre la izquierda se presenta una estructura de árbol y sobre la derecha se posibilita
realizar modificaciones y visualizar opciones según lo seleccionado sobre el panel izquierdo. Es conveniente
en este punto Guardar el formulario para asignarlo a un Paquete y asociarlo ya a una Orden de Transporte:
3) En este paso se definirán los datos de entrada. Para ello seleccionar sobre el panel de la izquierda, Form
Interface y se observará (sobre el panel derecho) que está compuesto por las solapas: Import,
Export, Tables y Exceptions.
4) Sólo se utilizarán las solapas 1 y 3. En el apartado Import (1) se detallarán aquellos parámetros de entrada
que tendrá el formulario, a excepción de las tablas que irán en Tables (3).
Los parámetros de entrada se corresponderán con los parámetros de salida definidos en el programa
impresor: FLDATE (DATE1), CARRIER(CARRIER1) y CONNECTION (CONNECTION1) con su
correspondiente tipo de dato.
En Export (2) y en Exceptions (4) no será necesario hacer modificaciones.
5) En Tables (3) habrá que definir como parámetro de entrada una tabla interna que se corresponde con la
estructura definida como parámetro de salida en el programa impresor (GS_SBOOK), como se muestra en la
figura siguiente:
6) Seleccionar sobre la izquierda el item Global Definitions que permitirá especificar cuáles serán
las estructuras que utilizará el Smartform para almacenar la información que será pasada como parámetro.
Para este ejemplo en particular, sólo será necesario añadir bajo la solapa Global Data una “Work Area” del
tipo de datos de la tabla interna pasada como parámetro, para luego poder recorrerla:
7) Sobre el panel de la izquierda seleccionar Pages and Windows, que definirá el aspecto visual del Smartform y
cómo se muestran los datos en él. %PAGE1 New Page corresponde al nombre de la página del
formulario (este nombre aparece por defecto, pero puede ser cambiado). Este ejemplo tendrá solo una página
(la cantidad va a depender del comportamiento de cada página):
b) Pasos para definir el diseño del Smartform
En los pasos anteriores se definió la lógica que maneja el Smartform, los próximos pasos servirán
para entender y definir el diseño del Smartform. Para ello será necesario crear diferentes elementos que
conformarán el diseño Ventanas (Windows), textos (Texts) y Plantillas (Templates).
Tener en cuenta que el Layout a definir se corresponderá con el ya especificado y utilizado en el programa
impresor definido en el tip anterior "Cómo crear el programa impresor para la ejecución de un Smartform en
SAP, representado como sigue:
NOTA: Considerar que una Window o Ventana está relacionada con cada recuadro en color amarillo definido
dentro del layout.
Será necesario en este paso para empezar a definir el diseño, lograr una estructura jerárquica sobre el panel
de la izquierda, similar a la que se muestra a continuación donde se utilizan los nombres de esos elementos
asignados por default. (Considerar la posibilidad de cambiarlos por nombres más representantivos en cada
caso):
Para lograr obtener los elementos que conforman la estructura del diseño del Smartform, como se muestra en la
imagen anterior, será necesario:
1) Para Crear una Window hacer click derecho sobre la página (por defecto %PAGE1 New Page),
luego Create y finalmente seleccionar Window.
2) Aparecerá la siguiente pantalla, donde se definirán los atributos de esa Window:
NOTA: tener en cuenta el uso de la herramienta Form Painter para asistir al diseño del “Layout” de las
ventanas:
3) Luego para Crear un Texto dentro de la Window (que será un título o datos de un campo), hacer click
derecho sobre la Window corriente (por defecto %WINDOW1 New Window1) y luego seleccionar Text.
Así se verá un texto recién creado siguiendo el paso anterior, donde el nombre fue cambiado a %TEXT7 New
Text 7:
4) En este punto será necesario indicarle al Smartform qué contenido tendrá cada texto definido:
Como ejemplo, se asignará el título Flights al texto %TEXT7 New Text7.
Se hará de la siguiente manera:
5) Seleccionar sobre el panel izquierdo, %TEXT7 New Text7 (el texto creado anteriormente) y sobre la
pantalla que aparece en el panel de la derecha, hacer click en sobre el ícono remarcado en rojo:
6) Al presionar el ícono anterior indicado, aparece la pantalla para ingresar el contenido del texto, en este caso
para el título Flights, se escribe como se muestra en la siguiente imagen:
Una vez escrito el texto, habrá que volver hacia atrás
Tener en cuenta que si el contenido del texto es un titulo, se necesita ingresar sólo el texto que se desee
(como en el caso de Flights), en cambio si el contenido del texto es un campo (es una variable, estructura de
datos, work area, tabla interna, etc), se lo deberá ingresar entre signos ampersand (&).
Volviendo a referenciar el layout del ejemplo, para definir la segunda ventana:
es necesario ingresar más de un campo, por lo tanto es conveniente introducir el concepto de “Template” que
básicamente permite ingresar campos o títulos en filas y/o columnas dentro de una misma ventana (en forma
de matriz o grilla).
7) Por lo tanto, se deberá crear un Template . Para ello, hacer click derecho sobre la ventana (%WINDOW2
New Window2), luego sobre Create y finalmente seleccionar Template:
Como resultado aparecerá la pantalla con el Template creado:
Con todos los pasos anteriormente especificados, se debería obtener una estructura jerárquica similar a la
siguiente (algunos nombres pueden variar):
Recordar siempre guardar los cambios y activar el Smartform
Se ejemplificará sólo cómo configurar el Template de la ventana que contiene Carrier y Connection Id y sus
respectivos campos, es decir cuatro textos en total, dos corresponden a los titulos y los otros dos a los
campos.
NOTA: El Template contenido en la ventana 3 del layout (Date como título y Field 3 como campo), NO será
ejemplificado en este caso.
Es importante destacar que el template o cualquier otro elemento definido en el smartform, no
podrá ser más grande que la ventana que los contiene (ni en alto ni en ancho), por eso en el
paso siguiente se configurarán las dimensiones y ubicación de la ventana ya definida en pasos
anteriores, con el objetivo de vincular la ventana con el template contenido en la misma de
acuerdo a lo esperado y así evitar errores.
8) La ventana que contendrá al template ejemplificado se configurará de la siguiente manera:
Hacer doble click sobre la Ventana a modificar, y luego seleccionar “Output Options”
9) Considerar los siguientes datos, para el tamaño y la ubicación de la ventana:
10) Para configurar el template, hacer doble click sobre el template a modificar y seleccionar el icono (lápiz)
para dibujar dos lineas (una vertical y una horizontal), como se muestra en la siguiente figura:
Luego se hará click en en el botón details: y aparecerá la pantalla siguiente, y
luego completar de acuerdo a los valores presentados en la siguiente pantalla:
11) En este paso deberá crearse un texto por cada título o campo que deba ser ingresado al template (de
acuerdo con la jerarquía definida en la figura), de la misma manera que fue creado para una Window, además
de ingresar el título o el mapeo para el campo correspondiente.
Se hará click en cada uno de los textos que se desprenden del template:
Y a cada uno de ellos se le asignará una fila y una columna según corresponda:
En el ejemplo, este texto va en la Fila 2 (Line 2) y en la Columna 1(Column 1).
Para las ventanas restantes que contengan templates, el proceso será el mismo que el detallado en
los pasos anteriores.
12) Finalmente, se detallará cómo trabajar con un tipo de ventana especial llamada MAIN (definida en el
layout de color gris), que contendrá a la tabla interna pasada como parámetro. Una vez definidos los pasos
que se detallarán a continuación , la estructura jerárquica de la ventana MAIN deberá quedar de la siguiente
manera:
Definición de la ventana MAIN
Para lograr el diseño de esa estructura de MAIN, será necesario seguir los siguientes pasos:
1) MAIN siempre aparece por defecto en la estructura al crear el Smartform, y se visualizará de la siguiente
manera:
2) Dentro de la ventana MAIN será necesario crear una tabla. Para ello: Botón derecho sobre MAIN,
luego Create y finalmente seleccionar Table:
3) Luego, aparecerá la pantalla siguiente en donde, para el ejemplo, se deberá cambiar el nombre de la tabla
(campo Tabla), a GS_BOOK y presionar Enter.:
4) Posteriormente, seleccionar la solapa “Data”:
5) En Data se deberán colocar: la tabla interna recibida como parámetro (GS_BOOK) y luego de INTO,
escribir la “Work Area” que fue definida en Global Definitions (AUX_GS_SBOOK) como se muestra en la
siguiente imagen:
6) Luego, al seleccionar la solapa TABLE, aparecerá en la parte inferior de la pantalla un recuadro, que por
defecto contiene %LTYPE1. Hacer click sobre el rectángulo (pasará a color negro) y luego presionar el botón
"Details":
7) Cambiar %LTYPE por LINEA que indica el ancho de la fila (siempre recordar en cada paso es
necesario grabar y activar para comprobar que no hay errores)
8) Luego click derecho sobre Header bajo GS_BOOK, en la estructura jerárquica de la izquierda,
seleccionar Create y finalmente Table Line:
9) Posteriormente, al desplegar Header aparecerá la “Table Line” recientemente creada. Cambiar el nombre
por HEADER y en Line Type seleccionar LINEA:
Se deberán repetir los pasos detallados anteriormente tanto para Main Area como para Footer, también
visualizados sobre la estructura jerárquica (sólo variará el nombre de cada uno)
Se desplegarán tanto Header, Main Area como Footer y de cada uno de ellos se desprenderán sus celdas
(llamadas Cell) que son creadas automáticamente:
10) Dentro de cada “CELL” se colocarán los textos correspondientes (realizar el mismo procedimiento ya
explicado anteriormente para las Ventanas). A modo de ejemplo, en la CELL correspondiente al Header, se
colocará un texto llamado %TEXT 9 New Text 9 (Botón derecho → Create → Text )
11) En este caso, el texto agregado llamado %TEXT 9 New Text 9, llevará los títulos de la tabla que se
mostraron anteriormente en el layout. La forma de ingresar información dentro del texto es igual a la detallada
anteriormente, salvo que en este caso si fuese necesario dejar espacios entre campos y textos, se hará
utilizando doble comas ( ,, ). Tener en cuenta que dos comas corresponden a un tabulador:
La imagen siguiente muestra la estructura con los textos que fueron agregados a cada componente (Header,
Main Area, Footer)
12) En la estructura jerárquica, Main Area contendrá los campos que se corresponden con los campos de
la tabla en el layout. Tener en cuenta que como son campos tiene que ir entre signos "&" (ampersand).
13) Finalmente, la sección de Footer (Field 7 en el Layout representado), se ingresará unicamente un nombre
o un texto a elección, de la misma manera que se ingresa cualquier elemento de texto.
Probando el funcionamiento del Smartform
Luego de haber creado el Smartform (siguiendo todos los pasos detallados en el presente tip), y contando con
el programa impresor (ya creado en el tip anterior: Cómo crear el programa impresor para la ejecución de un
Smartform en SAP), es posible finalmente testear su funcionamiento, ejecutándolo.
1) Para ello, será necesario acceder a la transacción SE80, selecionar el programa impresor ya creado en el
tip anterior que se lo denominó en el ejemplo ZIMPRESOR.
2) Al presionar F8 (Ejecutar) aparecerá la imagen siguiente, mostrando las opciones de impresión para imprimir
el Smartform creado:
3) Sobre la imagen anterior, al Hacer click en “Print Preview”, se desplegará la imagen siguiente, que refleja
la salida de la ejecución del smartform. Considerar que la disposición de las ventanas en la salida aquí
obtenida puede variar, en consecuencia de lo que no se definió detalladamente en el tip presente, y dependerá
en ese caso de lo que el desarrollador haya especificado para completar la definición del Smartform.
Para tener en cuenta ….
Es importante considerar la utilización de la herramienta Form Painter que ayuda a defnir la ubicación
y el tamaño de las ventanas. Se recomienda utilizarlo con criterio, porque un mal uso del mismo puede llevar a
errores en el funcionamiento de Smartforms. Debido a esto en el presente tip se colocaron específicamente
las medidas de una de las ventanas.
Una buena práctica es utilizar un mismo patrón de medida para definir todos los elemento del
smartform.
Cómo modificar comandos de edición en formularios Sapscripts y Smartforms
Aprenda a modificar comandos de edición utilizados en formularios Sapscripts y Smartforms, para
alterar la manera de mostrar los datos en el mismo.
Al momento de realizar un formulario en ABAP, especialmente en un formulario Sapscript (aunque también es
útil en Smartforms), existe la posibilidad de aplicar una serie de comandos de control en la edición de los
mismos, que con algunas modificaciones sobre el formato original, ayudarán fácilmente a desplegar de manera
diferente la información que se ha tomado previamente de tablas, estructuras, etc., y cuyos datos se desean
mostrar en el formulario que se está diseñando.
Estos comandos son aplicables tanto a formularios Sapscripts, desde el editor standard, como también en
Smartforms desde el editor de texto distinguido por el ícono
La siguiente imágen muestra un ejemplo de uso de uno de los comandos a aplicar en la edición de
formularios:
Como ejemplo, el comando especificado en la imagen anterior, comprime el dato de BSEG-BELNR.
En la tabla siguiente se detallan los comandos que corresponden a la acción que se desea realizar junto con
el resultado luego de su aplicación:
Acción a realizar Comando Resultado
Justificar a la derecha:
Original &Variable& Smart
Modificación &Variable(15R)& Smart
Compresión de texto (espacio entre caracteres):
Original &Variable& 10 0 0 0 0 0
Modificación &Variable(C)& 1000000
Mostrar decimales:
Ej: 1000 Length 10
Original &Variable(.2)& 1,000.00
Modificación &Variable(.4)& 1,000.0000
No mostrar valores nulos:
Original &Variable& 0.00
Modificación &Variable(I)&
No mostrar ceros a la izquierda:
Original &Variable& 001
Modificación &Variable(Z)& 1
No mostrar signo:
Original &Variable& 100.00-
Modificación &Variable(S)& 100.00
No mostrar separador:
Original &Variable& 1,000.00
Modificación &Variable(T)& 1000.00
Llenar con caracteres:
Original &Variable(F*)& **100.00
Modificación &Variable(F0)& 00100.00
Números flotantes:
Ej: 123456.78 TYPE fltp
Original &Variable& +1.23456780000000E+05
Modificación 1 &Variable(E6)& +123456.780000000
Modificación 2 &Variable(E)& +0.12345678000000E+06
Para tener en cuenta ...
La tabla anterior incluye en la lista de comandos de edición, los más utilizados dentro de los
formularios Sapscripts.
Sin embargo, si se utilizan estos comandos en formularios Smartforms, ofrecerán un buen
complemento a los Smartstyles.