Archivo
Agregar nueva fuente TrueType para Sapscript/Smartforms
Caso: Se desea agregar una nueva fuente Truetype a SAP para utilizarlo en Sapscripts o Smartforms.
Solución: Por la SE73 ingresamos a la opción “Instalar font TrueType”
En la pantalla siguiente, definimos un nombre para la fuente (tomaremos de ejemplo el caso de la fuente Arial)
Las fuentes podemos rescatarlas de C:WindowsFonts o de Internet y en Arial por ejemplo existen 4 formas:
· arial.ttf (normal),
· arialbd.ttf (negrita o bold),
· ariali.ttf (cursiva o italic)
· arialbi.ttf (negrita cursiva o italic).
Esto quiere decir que tendremos que subir cada uno de los archivos cambiando los tildes de los atributos de la pantalla en cada caso.
Agregando la fuente normal, nos abre un popup donde indicamos el fichero Font si no lo indicamos
Nos va a pedir una OT de Workbench:
Y luego un texto
Finalmente nos da un informe:
Hacemos lo mismo con las otras variantes de la fuente Arial, por ejemplo para negrita o bold:
Nos preguntará si instalamos el nuevo Font y le ponemos que si:
Y así con el resto de las variantes de la fuente Arial. Luego en el smartstyles vemos como seleccionar la nueva fuente:
DEBUG de Smartforms
Caso: se desea debugguear un smartforms.
Solución: una forma práctica es la siguiente:
1. Ingresar a la transacción SMARTFORMS, indicar el nombre del formulario y presionar el botón “Verificar”
2. Aparecerá el módulo de funciones, presionamos “Visualizar”:
3. Buscamos el texto “PERFORM %GLOBAL_INIT.” Y hacemos doble click en el form
- image003
- image004
4. Finalmente allí buscar la sección de código donde queremos poner el break point.
SMARTFORMS – Imagen o LOGO dinámico en formulario
Caso: se crear una imagen dinámica, de tal forma que el nombre de la misma sea obtenida desde una variable o un campo de la base de datos. Por ejemplo el logo de la sociedad en la impresión del formulario de orden de compra o pedido.
Solución:
1. Vamos a tomar el ejemplo del logo de la sociedad. Este dato se encuentra en la cabecera de la orden de compra (EKKO-BUKRS).
Definimos una carpeta, una sección de líneas de programa (a ejecutarse antes del logo) y debajo una imagen o gráfico.
2. Vamos a Definiciones globales y declaramos la variable GV_LOGO_OTRAS_SOC debe estar creada en las definiciones globales
3. Vamos al gráfico y definimos lo siguiente:
- image003
- image0041
De esta forma el valor que tomará el LOGO depende del contenido de la variable creada GV_LOGO_OTRAS_SOC y sólo se visualizará si tiene valor.
4. Ahora vamos al código fuente creado. Allí debemos indicar lo siguiente:
En nuestro caso, definimos que los logos se guardan como “LOGO_PED_ZZZZ”, siendo ZZZZ la sociedad, en color y tipo BMAP (BITMAP).
5. Recordar que previamente por la SE78 debemos tener creados los LOGOS con el formato definido.
SE39 – Comparar SMARTFORMS y otros objetos
Caso: se desean comparar dos smartforms.
Solución: los smartforms, al grabarse, guardan sólo la última versión del mismo. A veces podemos tener dos como para comparar diferencias, es lo que veremos aquí:
1. Ingresamos a la transacción SMARTFORMS para traernos el nombre del módulo de funciones:
- image001
- image002
- image003
Hacemos lo mismo con el segundo SMARTFORM.
2. Ingresamos a la transacción SE39, en donde indicamos los objetos a comparar:
Si deseamos comparar entre sistemas, podemos indicarlo y abajo aparece el cuadro para indicar el sistema:
3. En la siguiente pantalla, presionamos el botón de comparar y con las flechas podemos desplazarnos a la siguiente/anterior diferencia:
Smartforms: No existe el mensaje 042 del área de trabajo SSFCOMPOSER
Caso: Se previsualiza un formulario smartforms y genera error C!002 “No existe el mensaje 042 del área de trabajo SSFCOMPOSER”.
Solución: El error puede surgir por:
1. El contenido no se ajusta a la ventana: un objeto es más largo que lo esperado en la ventana, o sea un texto, un logo es más grande que la ventana que la contiene
2. Tabla inconsistente: Hay columnas o filas que faltan en alguna tabla o éstas generan un texto muy largo o con caracteres especiales.
3. Hay una imagen que no existe en el mandante donde se está ejecutando el formulario (en la SE78) o se configuró mal dicha imagen.
Se debe revisar los puntos anteriores. Asimismo se puede crear el mensaje SSFCOMPOSER 042 por la SE91 para aclarar mejor el error.
En mi caso se generaba dinámicamente un logo de una firma, pero cuando se generaba un logo123.jpg y esta imagen no estaba subida en el sistema por la SE78, se generaba este error.
Bajar Smartforms y SmartStyles en forma masiva
Caso: se requiere desplazar hacer un download masivo de los smartforms y smartstyles, sin tener que ingresar uno por uno.
Solución: Hice un programa rudimentario para hacer la descarga utilizando wildcards (por ejemplo Z*). Lo único que como llama a la función estándar de bajada de formularios y estilos, hay que hacer un ENTER por cada uno, ya que solicita siempre mediante un popup el directorio y archivo destino.
*---------------------------------------------------------------------*
* Report ZDOWN_SMARTFORMS
*---------------------------------------------------------------------*
* Download de una lista de smartforms uno a uno
*---------------------------------------------------------------------*
REPORT zdown_smartforms.
TABLES: stxfadm,
stxshead.
CONSTANTS: asterix TYPE string VALUE '*'.
DATA: lt_stxfadm TYPE TABLE OF stxfadm,
lw_stxfadm TYPE stxfadm,
lt_stxshead TYPE TABLE OF stxshead,
lw_stxshead TYPE stxshead.
SELECTION-SCREEN BEGIN OF BLOCK a001 WITH FRAME TITLE text-000.
SELECT-OPTIONS: s_form FOR stxfadm-formname, " Formulario
s_sname FOR stxshead-stylename. " Estilo
PARAMETERS: rform RADIOBUTTON GROUP r1, " Download Formularios
rstyle RADIOBUTTON GROUP r1. " Download Estilos
SELECTION-SCREEN END OF BLOCK a001.
REFRESH: lt_stxfadm[],
lt_stxshead[].
IF rform EQ 'X'.
IF s_form-low CS asterix.
REPLACE ALL OCCURRENCES OF asterix IN s_form-low WITH '%'.
SELECT *
FROM stxfadm
INTO TABLE lt_stxfadm
WHERE formname LIKE s_form-low.
ELSE.
SELECT *
FROM stxfadm
INTO TABLE lt_stxfadm
WHERE formname IN s_form.
ENDIF.
IF lt_stxfadm[] IS NOT INITIAL.
LOOP AT lt_stxfadm INTO lw_stxfadm
WHERE masterlang = sy-langu.
CALL FUNCTION 'FB_DOWNLOAD_FORM'
EXPORTING
i_formname = lw_stxfadm-formname
i_formtype = ' '
i_with_dialog = space
* IMPORTING
* o_formname = space
EXCEPTIONS
no_name = 1
no_form = 2
no_access_permission = 3
illegal_language = 4
illegal_formtype = 5
OTHERS = 6.
ENDLOOP.
ELSE.
MESSAGE i001(00) WITH 'No se encontraron formularios.' 'Realice otra selección'.
ENDIF.
ENDIF.
IF rstyle = 'X'.
IF s_sname-low CS asterix.
REPLACE ALL OCCURRENCES OF asterix IN s_sname-low WITH '%'.
SELECT *
FROM stxshead
INTO TABLE lt_stxshead
WHERE stylename LIKE s_sname-low.
ELSE.
SELECT *
FROM stxshead
INTO TABLE lt_stxshead
WHERE stylename IN s_sname.
ENDIF.
IF lt_stxshead[] IS NOT INITIAL.
LOOP AT lt_stxshead[] INTO lw_stxshead
WHERE active = 'A'
AND vari EQ space.
CALL FUNCTION 'SSF_DOWNLOAD_STYLE'
EXPORTING
i_stylename = lw_stxshead-stylename
i_with_dialog = space
i_builder = ''
* IMPORTING
* O_STYLENAME =
EXCEPTIONS
no_name = 1
no_style = 2
cancelled = 3
no_access_permission = 4
illegal_language = 5
OTHERS = 6.
ENDLOOP.
ELSE.
MESSAGE i001(00) WITH 'No se encontraron estilos.' 'Realice otra selección'.
ENDIF.
ENDIF.
Agregar imágenes a SAP – LOGOS
Caso: se busca agregar a SAP una imagen para luego utilizarla en un formulario Sapscript o un Smartform, por ejemplo puede ser el logo de la compañía.
Para ello:
- Se debe tener una imagen TIFF o BMP. Con formato TIF (con una sola F) puede dar un error al querer subir la imagen. Pueden probar abrirlo y guardarlo con el PhotoShop o directamente convertirlo a BMP para no tener problemas. Vean la nota 205837 para mayor referencia.
- Ingresar a la transacción SE78 y hacer doble click en la opción “BMAP imágenes gráfico en tramas”
- Ahora en el menú “Gráfico”, seleccionar la opción “Import”
- Allí, seleccionar la imagen de nuestra PC, indicar un nombre (preferentemente que comience con Z) y definir las propiedades de la misma. Importar la imagen.
- Listo. Al importar la imagen aparecerá la misma con la siguiente información:
Ejemplo simple de Smartform
*&---------------------------------------------------------------------* *& Report Z_SMARTFORMS *&---------------------------------------------------------------------* REPORT z_smartforms. * Nombre del modulo de funciones del formulario. DATA: v_nombre_form TYPE rs38l_fnam. * Tabla interna para los datos. DATA: ti_facturas TYPE TABLE OF vbrk, * ---------------------------------------------------------------------* start-of-selection. * ---------------------------------------------------------------------* * Seleccionamos los datos de la tabla de usuarios PERFORM cargar_datos. * Llamada al formulario Smartform PERFORM llamar_smartform. *&---------------------------------------------------------------------* *& Form CARGAR_DATOS *&---------------------------------------------------------------------* FORM cargar_datos . CLEAR ti_facturas. REFRESH ti_facturas. SELECT * FROM vbrk INTO TABLE ti_facturas. ENDFORM. " CARGAR_DATOS *&---------------------------------------------------------------------* *& Form INVOCAR_SMARTFORM *&---------------------------------------------------------------------* FORM llamar_smartform . IF NOT ti_facturas[] IS INITIAL. * Inicializar el formulario. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = 'ZFORMULARIO_PRUEBA' IMPORTING fm_name = v_nombre_form EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. 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. * Enviar datos al formulario e imprimirlo CALL FUNCTION v_nombre_form TABLES ti_facturas = ti_facturas EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 OTHERS = 5. 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. " LLAMAR_SMARTFORM