Mostrando entradas con la etiqueta pushbutton. Mostrar todas las entradas
Mostrando entradas con la etiqueta pushbutton. Mostrar todas las entradas

jueves, 5 de diciembre de 2013

GUIXT: Teclado numérico táctil para Sap

Este es uno de los ejemplos de Synactive para GuiXT que más me gusta y que demuestra lo que se puede llegar ha hacer en Sap con GuiXT. 

Es un teclado numérico para pantallas táctiles con el que el usuario puede introducir el código de material y acceder a la información del mismo en el maestro de materiales del sistema Sap.


Por un lado, tenemos el GuiXT scripts que modifica la pantalla y añade los botones del teclado numérico.

Por otro, el archivo Digit.txt contiene el inputscript que va concatenando las pulsaciones del usuario en el teclado numérico.

Empezemos por las imagenes que harán la función de botones del panel numérico y pantalla donde se mostrara el codigo introducido.D
Descargar las siguientes imágenes ( boton derecho -> Guardar imagen como... ) y guardarlas en el mismo directorio donde guardáis los scripts de GuiXT.


Pantalla y pulsador del teclado numérico

Para crear el GuiXT script:

  1.  Acceder a la transacción MM03 y cambiamos a la ventana de GuiXT.
  2.  Pulsar el boton SCRIPT en la barra de herramienta de la venta de GuiXT.
  3.  Copiamos el siguiente código y grabamos
  4. GuiXT Script Editor

if Q[Transaction=MM03] pos F[Material] (8,52) // Display numeric keypad Offset (1,1) Image (0,0) "numbutton.gif" Input="U[digit]:7;OK:process=digit.txt" -plain textstring="7" textheight=80 -textcenter Image (0,15) "numbutton.gif" Input="U[digit]:8;OK:process=digit.txt" -plain textstring="8" textheight=80 -textcenter Image (0,30) "numbutton.gif" Input="U[digit]:9;OK:process=digit.txt" -plain textstring="9" textheight=80 -textcenter Image (5,0) "numbutton.gif" Input="U[digit]:4;OK:process=digit.txt" -plain textstring="4" textheight=80 -textcenter Image (5,15) "numbutton.gif" Input="U[digit]:5;OK:process=digit.txt" -plain textstring="5" textheight=80 -textcenter Image (5,30) "numbutton.gif" Input="U[digit]:6;OK:process=digit.txt" -plain textstring="6" textheight=80 -textcenter Image (10,0) "numbutton.gif" Input="U[digit]:1;OK:process=digit.txt" -plain textstring="1" textheight=80 -textcenter Image (10,15) "numbutton.gif" Input="U[digit]:2;OK:process=digit.txt" -plain textstring="2" textheight=80 -textcenter Image (10,30) "numbutton.gif" Input="U[digit]:3;OK:process=digit.txt" -plain textstring="3" textheight=80 -textcenter Image (15,0) "numbutton.gif" Input="U[digit]:0;OK:process=digit.txt" -plain textstring="0" textheight=80 -textcenter Image (15,15) "numbutton.gif" Input="U[digit]:back;OK:process=digit.txt" -plain textstring="Back" textheight=40 -textcenter Image (15,30) "numbutton.gif" Input="U[digit]:clear;OK:process=digit.txt" -plain textstring="Clear" textheight=40 -textcenter // Display material number Image (1,50) (6,130) "whitebox.gif" -plain textstring="&F[Material]" textfont="Arial" textheight="100" endif


Lo mas importante son los parámetros Input="U[digit]:1;OK:process=digit.txt" y textstring="0".

En anteriores entradas se explico que el  parámetro Input permite volver interactiva la imagen y que al hacer clic sobre ella se ejecuten una serie de acciones. Estas acciones pueden ir desde guardar algún dato en una variable a ejecutar un inputscript o llamar a una transacción del sistemas Sap.

Cada acción que deseamos ejecutar va separada por ';' .
OK representa la acción de presionar la tecla Intro.

En este ejemplo estamos programando, que cuando el usuario haga clic sobre la imagen, se realicien las siguientes acciones:

  1. Asignar el dato '1' a la variable U[digit] .  U[digit]:1
  2. Intro                                                        OK
  3. Ejecutar el InputScript digit.txt                 process=digit.txt
El parámetro textstring pinta sobre la imagen un texto, puede ser un texto fijo como los números del teclado o estan contenido en una variable como textstring="&F[Material]" , en este caso F[Material] es una variable donde vamos concatenando los números que selecciona el usuario.

Para crear el Inputscript:

  1. Pulsar el botón INPUTSCRIPT en la la barra de herramienta de la venta de GuiXT.
  2. Copia el siguiente código.
  3. Guarda el inputscript como digit.txt en el mismo directorio que el guixt script.

InputScript editor
Parameter digit Set V[matnr] "&F[Material]" if U[digit=clear] Set V[matnr] "" goto return endif if U[digit=back] Set V[k] "&V[matnr]" -stringlength if V[k>0] Set V[k] &V[k] - 1 Set V[matnr] "&V[matnr](1-&V[k])" endif goto return endif Set V[matnr] "&V[matnr]&U[digit]" Set V[matnr] "&V[matnr](1-8)" label return Set F[Material] "&V[matnr]" Return

Es como una subrutina. Recibe un parámetro digit, comprueba su valor y actua en consecuencia

Cuando llamamos al inputscripts, damos valor a parámetro digit  y creamos la variable matnr con el valor actual del campo de pantalla Material de la transacción MM03. Después actuamos dependiendo del valor que nos han pasado en el parámetro digit.  Si es un numero concatenamos el valor actual  y el nuevo número, limitamos a 8 digitos y devolvemos el dato al elemento de la pantalla.

La instrucción goto return rompe la ejecución des inputscript y salta a la etiqueta return.

Recordemos:
U[...]  es un parámetro.
V[...]  es una variable
F[.....] es un elemento de pantalla de sap


Ya solo queda acceder a la transacción MM03 y ver el resultado.
Recordar activar el modulo InputAssistant o no funcionara el inputscript.


Fuente:
Display a numeric keypad ( Ir a Tips&Trick -> nº 26 Display a numeric keypad ).

Entradas Anteriores:

miércoles, 4 de septiembre de 2013

GUIXT: El modulo InputAssistant

Un InputScript es un archivo de texto que contiene instrucciones para procesar datos y navegar a través de diferentes dynpros del sistema Sap. Un InputScript pueden inicializar variables, leer y guardar la información de los campos de una dynpro, procesarlos ( puede llamar a bapis del sistema Sap a través de RFC ) y utilizar esa información para procesar una transacción o dynpro en el sistema Sap.

Su funcionamiento es muy parecido a los batch input en Sap, pero un inputscript puede guardarse en archivos de texto para luego, ejecutarlo desde un  GuiXT script. 

InputAssistant es el modulo de GuiXT encargado de ejecutar los InputScripts. Aunque viene incluido en el software de GuiXT, requiere de una licencia valida para su uso. Si intentamos ejecutar un script que requiera el modulo de  InputAssistant, aparecerá un error de licencia no valida o inexistente en la ventana de GuiXT.

InputAssistant: licencia no valida o inexistente
El modulo InputAssistant se activa desde el perfil de GuiXT. Rellenando el siguiente formulario ( menú de la izquierda -> INSTALLATION -> TESTKEY ). Synactive nos enviara una licencia de uso valida por 1 mes.

Perfil de GuiXT: Activar los módulos de GuiXT
Es posible activar el modulo InputAssistant temporalmente, únicamente durante la sesión activa del sistema Sap. 

  1. Entrar al sistema Sap con nuestro usuario y contraseña.
  2. Sin salir del sistema, saltamos a la ventana de GuiXT y después al perfil de GuiXT.
  3. Marcar la casilla de InputAssistant.
  4. Introducimos una User Key cualquiera ( ej: 1234567890 ).
  5. Comprobar que el el ID del sistema SAP esta en la casilla "Enabled Systems", sino introducirlo.
  6. OK y volvemos al sistema Sap.

Volvemos a entrar en la transacción  y los mensajes de error de licencia habrán desaparecido. Si salimos del sistema Sap, al volver a entrar,  tendremos que repetir todo el proceso.

Perfil de GuiXT: activar temporalmente InputAssistant
Grabación de un InputScript con GuiXT

Activamos/Desactivamos la grabación de inputscripts desde el menú Options -> Input Recording.
Otra opción es desde la barra de herramientas de la ventana de GuiXT pulsando el botón "Record".


Cada vez que realizamos una grabación, se genera un archivo "InputScript.txt" automáticamente, donde quedan registrados todos los datos introducidos y las acciones realizadas.Este archivo, se reescribe con cada nueva grabación, se recomienda que,al finalizar la grabación de un inputscript, re-nombrarlo con otro nombre para poder editarlo posteriormente y evitar así su perdida.

Los archivos se guardan, por defecto,en la dirección especificada en el perfil de GuiXT.


Lo mejor es explicar el proceso con un ejemplo. 
Vamos a grabar un inputscript de la transacción ME2L:

   1.- Activamos la grabación desde la ventana de GuiXT. El botón "Record" cambiara a "ON".


   2.- Desde el sistema Sap, accedemos a la transacción ME2L.


   3.- Rellenamos la pantalla de selección ( Ej. centro 5000 )  y ejecutamos la transacción. 


   4.- Terminada la ejecución , detenemos la grabación en la ventana de GuiXT. El botón "ON" cambiara a "Record".


   5.- Click en el botón "RecScript" de la barra de herramientas de la ventan de GuiXT


   6.- File -> Save As..  Renombrar y grabar el script.

Ejecutar Un InputScripts

Se puede ejecutar un inputscript de diferentes formas, lo normal es ejecutarlo a través de una acción del usuario sobre un elemento de la pantalla ( pulsadores, Códigos de función, Menús, etc… ), desde un GuiXT script o desde otro inputscript.

Continuando con el ejemplo anterior, vamos a crear un botón en la transacción ME2L que cuando el usuario lo pulse, ejecute el inputscript que hemos creado anteriormente.

Primero creamos el script para modificar la dynpro y añadir el botón a la transacción ME2L

Pushbutton (toolbar) "@3B\QConsultar centro 5000@Centro 5000" process="centro5000.txt"


la opción process indica el archivo que contiene el inputscript que debe ejecutarse si el usuario pulsa el botón. El inputscript, al igual que el guixt script,  debe localizarse en uno de los 4 posibles directorios que se pueden especificar en el perfil de GuiXT.


Testear un InputScripts

Seamos sinceros, pocas veces en la programación un código funciona a la primera.  A base de prueba y error depuramos el código hasta que funciona como se había diseñado sobre el papel. GuiXT tiene dos opciones para comprobar el funcionamiento del script:
  • Una herramienta para Trazar la ejecución del script.
  • Ejecutar el script en modo visible y poder ver, en tiempo real, como se procesa cada dynpro.
Para ejecutar el inputscript en modo visible, antes de realizar el evento o acción que lanzara el inputscript, pulsar el botón "visible" de la barra de herramientas de la ventana de GuiXT. Se activara el modo visible y todos los inputscript que se ejecuten a partir de este momento,  mostrara todas las pantallas por la que pasen  deteniéndose en cada comando. Con la tecla “Enter” ejecutaremos el comando y saltara al siguiente comando.

Al activar el modo visible, el boton "Visible" cambiara a "ON"

Activar modo visible
GuiXT InputScript Debug

El debugger de GuiXT se lanza desde la barra de herramientas de la ventana de GuiXT.


En  el momento en que se ejecute un inputscript, se lanzara el modo debugger y aparecera en pantalla la ventana del debugger. Si cerramos esta ventana, interrumpiremos el proceso del debugger y continuara  la ejecución normal del inputscript.

Inputscript debugger

En la ventana del debugger podemos ver:
  • El contenido de cada variable.
  • Evaluar expresiones que contenga variables, parámetros o campos de entrada.
  • Procesar el inputscript paso a paso.
  • Colocar breakpoint.
Un script se ejecuta secuencialmente, linea a linea. En la ventana del debugger, la línea que va a ser procesada, aparece resaltada en amarillo. Para colocar un breakpoint bastara hacer doble click sobre la línea deseada, pasando esta a un color azul, un doble click sobre una línea en azul elimina el breakpoint. 

Cuando se alcanza un breakpoint, la línea aparece en verde. 
Cualquier error de sintaxis al ejecutar una línea se mostrara en un popup 

El Debugger solo se activa con Inputscript, no funcionara con GuiXT Scripts.

El contenido de las variables se muestra es la ventana de la izquierda

Inputscript Debug: contenido de las variables del script

Para detectar y solucionar errores de programación, también necesitamos poder trazar la ejecución de nuestro código, poder analizar como y cuando se ha ejecutado cada instrucción. En la barra de herramientas podemos activar el modo "TRACE". 

Activar TRACE
Cuando lo activemos, después de ejecutar cualquier inputscript, aparecerá un log con la traza de ejecución del inputscript.

Trace del inputscript startva01.txt


Un ejemplo de GuiXT script + InputScript


En este caso se va a desarrollar un menú de acceso rápido para la creación de pedidos de venta ( transacción VA01 ), el objetivo es que el usuario pueda crear los pedidos para las diferentes organizaciones de venta de una manera rápida y sencilla.

Desde la transacción VA01, saltamos a la ventana de guiXT. Pulsamos “SCRIPT” en barra de herramientas de la ventana de  GuiXT. Se despliega el editor de scripts que tengamos configurado en el perfil de GuiXT.


Escribir el siguiente código y guardar el script.

//Caja e imagen
box (2,70) (10,110) "Acceso rápido"
Image (2.7,70.3) (9.2,84.6) "tickets.jpg" "-plain"

// Orden por defecto
if not V[VA01_Ordertype]
    Set V[VA01_Ordertype] "CS"
endif

// RadioButton de seleción
RadioButton (3,86) "Ventas canal 1000" Name="VA01_Ordertype" value="CS"
RadioButton (4,86) "Ventas canal 2000" Name="VA01_Ordertype" value="RO"
RadioButton (5,86) "Ventas canal 3000" Name="VA01_Ordertype" value="IO"
RadioButton (6,86) "Menu principal " Name="VA01_Ordertype" value="RE"

Pushbutton (8,86) "Crear pedido de ventas" "/NVA01" Process="startva01.txt" "size=2"

Cuando el usuario pulse el botón "Crear pedido de ventas" se ejecutara el inputscript guardado en el archivo startva01.txt.
Para crear el inputscript, desde la ventana de GuiXT, pulsar "InputScript" en la barra de herramientas de la ventana GuiXT.  Se despliega el editor de scripts que tengamos configurado en el perfil de GuiXT.


Escribimos el siguiente código y guardamos como startva01.txt en el directorio correspondiente.

// InputScript "startva01.txt"
Screen SAPLSMTR_NAVIGATION.0100
Enter "/nva01"

// Crear pedido de cliente: Acceso
Screen SAPMV45A.0101

IF V[VA01_Ordertype=CS]
   Set F[Clase de pedido] "ZPED"
   Set F[Organización ventas] "1000"
   Set F[Canal distribución] "10"
   Set F[Sector] "10"

   Enter

ENDIF


IF V[VA01_Ordertype=RO]
   Set F[Clase de pedido] "ZPED"
   Set F[Organización ventas] "2000"
   Set F[Canal distribución] "10"
   Set F[Sector] "10"

   Enter

ENDIF


IF V[VA01_Ordertype=IO]
   Set F[Clase de pedido] "ZPED"
   Set F[Organización ventas] "9000"
   Set F[Canal distribución] "10"
   Set F[Sector] "10"

   Enter

ENDIF


IF V[VA01_Ordertype=RE]
   Set F[Clase de pedido] ""
   Set F[Organización ventas] ""
   Set F[Canal distribución] ""
   Set F[Sector] ""
ENDIF

Volvemos a entrar en la transacción VA01 para ver el resultado.

VA01: acceso rápido

lunes, 17 de junio de 2013

GUIXT: Añadir y Modificar campos de texto, pulsadores y radiobuttons

En esta nueva entrada sobre GuiXT añadiremos o modificaremos elementos de la pantalla como los pulsadores, radiobuttons, campos de texto y textos de ayuda.


Ejemplo: Añadir 3 botones en la barra de herramientas de la transacción  VA01 (Crear pedido)

El objetivo es que estos pulsadores,  permitan navegar desde la transacción VA01 a las transacciones:
  • VA15: Lista de consultas 
  • VA25: Lista de ofertas 
  • VA05: Lista de pedidos

Desde la transacción VA01, clic en el pulsador "SCRIPT" en la ventana de GuiXT.

pushbutton (toolbar) "@3B\QLista de consultas@Consultas"   "/OVA15" 
pushbutton (toolbar) "@3B\QLista de ofertas@Ofertas"       "/OVA25" 
pushbutton (toolbar) "@3B\QLista de pedidos@Pedidos"       "/OVA05"



Grabamos el archivo y volvemos a entrar en la transacción VA01

Nuevos pulsadores en la barra de herramientas de la transacción VA01

No solo podemos añadir los pulsadores en la barra de herramientas, también en cualquier posición de la pantalla.

box (11,0) (15,49)"Listas"
pushbutton (12,1) "@3b\QLista de consultas@Consultas" "/OVA15"  Size=(3,14)
pushbutton (12,17) "@3B\QLista de ofertas@Ofertas"    "/OVA25"  Size=(3,14)
pushbutton (12,34) "@3B\QLista de pedidos@Pedidos"    "/OVA05"  Size=(3,14)

Al grabar y volver a entrar en la transacción VA01.

Nuevos pulsadores en la transacción VA01

Añadir un pulsador a la barra de herramientas de la pantalla .

   Pushbutton (Toolbar) "Pushbutton text" "FCode"

Añadir un pulsador en las coordenadas especificadas de la pantalla.

   Pushbutton (row,column) "Pushbutton text" "FCode" Process="..."

La instrucción Pushbutton, añade un pulsador en las coordenadas especificadas (row,column) con el texto "Pushbutton text" que al presionar ejecutara el código interno "FCode". El código interno puede ser un código del menú como SCMP, una transacción “/NVA3” , “/NMM01” … ó una combinación de teclas como F1, F2, … Shilt+F1, Shilt+...

El parámetro Process="..." se relaciona con un fichero InputScript.

Se puede omitir el parámetro "FCode", si solo es necesario un “Intro” para continuar con la transacción


Ejemplo: Simplificar la pantalla de selección de la transacción MD01

Con GuiXT también  es posible sustituir los campos de entrada de datos por selecciones de radiobuttos,  asignar valores por defecto o reducir la longitud de los campos de entrada en la pantalla de selección. 

El objetivo de estas modificaciones puede ser:
  • Simplificar al usuario la selección de datos al usuario 
  • Reducir el tiempo el tiempo de aprendizaje para el usuario 
  • Reducir el tiempo que necesita el usuario para ejecutar la transacción 
Como ejemplo, vamos a simplificar la pantalla de selección de la transacción MD01 



Algunos campos de entrada podrían ser sustituidos por radiobuttons de selección con los posibles valores de entrada, simplipicaría al usuario la ejecución, solo tendría que seleccionar uno de los valores que se muestran. 

Si en la empresa, solo existen 3 centros; simplificamos la pantalla de selección eliminado este campo de la pantalla y sustituyéndolo por 3 radiobuttons con valores existentes. 

También, en el area de “Parámetros de control planificación” liberaremos al usuario de aprender y recordar los valores de cada campo de entrada, sustituiremos los campos de entrada por grupos de radiobuttons y marcaremos valores por defecto para los mismos. 

El código del GuiXT script seria:

// ----------------------------------------------------
// Centro 
// ---------------------------------------------------- 

offset (0,1) 
box (0,0) (5,60)  "Ejecutar MRP para el Centro " 
box (6,0) (21,60) "Parámetros para la ejecución del MRP" 
radiobutton (2,2) "1000 Barcelona" F[Centro] "1000" 
radiobutton (3,2) "2000 Madrid"    F[Centro] "2000" 
radiobutton (4,2) "9000 Zaragoza"  F[Centro] "9000" 
Default F[Centro] "1000" 

// ---------------------------------------------------- 
// Programación de la ejecución
// ---------------------------------------------------- 

offset (8,3) 
box (0,0) (3,45)  "Programacion" 
radiobutton (1,1) "Datos Basicos"            F[Programación] "1" 
radiobutton (2,1) "Planif. de capacidades"   F[Programación] "2" 

// ---------------------------------------------------- 
// Schedule lines 
// --------------------------------------------------- 

offset (12,3) 
box (0,0) (3,45)  "Repartos plan de entrega" 
radiobutton (1,1) "Si" F[Repartos plan de entregas] "3" 
radiobutton (2,1) "No" F[Repartos plan de entregas] "1" 

// ---------------------------------------------------- 
// Modo Planificación
// ---------------------------------------------------- 

offset (16,3) 
box (0,0) (4,45)  "Modo planificación" 
radiobutton (1,1) "Adaptar datos de planificación" F[Modo planificación] "1" 
radiobutton (2,1) "Borrar y crear los datos" F[Modo planificación] "3" 
radiobutton (3,1) "Explosión nva.lst.materiales y hoja ruta" F[Modo planificación] "2" 

// ---------------------------------------------------- 
// Pulsador "Ejecutar selección" 
// ---------------------------------------------------- 

offset (22,1) 
pushbutton (0,0) "Ejecutar selección" "/0" size=3 

// ---------------------------------------------------- 
// Valores por defecto 
// ---------------------------------------------------- 

set C[Visualizar lista materias] "X" 
set F[Clave de tratamiento] "NETCH" 
set F[Crear lista MRP] "1" 
set F[Modo planificación] "1" 
set F[Alcance planific.] "Todo" 

// ---------------------------------------------------- 
// Eliminar los campos que son necesarios 
// ---------------------------------------------------- 

del F[Centro] "-triple" 
del F[Alcance planific.] "-triple" 
del G[Parámetros de control planificación] 
del G[Parámetros de control proceso] 
del G[Exit usuario: selección materiales para planificación]