A l'aide de nos propres éléments d'écran nous nous pouvons faire varier le déroulement de l'InputScript. |
En premier exemple nous offrons deux boutons-poussoir, qui vont invoquer les répertoires des articles pour deux division. Etant donné que nous voulons travailler avec un même InputScript, nous allons utiliser un paramètre Parameter DIV. A la suite de la ligne de commande pushbutton, ce paramètre va avoir une fois la valeur "2200" (division Paris) et une fois "1000" (division Hamburg). On peut utiliser la valeur du paramètre dans l'InputScript à l'aide de "&U[DIV]".
// Scripte GuiXT
Image
(1.6,1)
(5.3,15)
"materials.jpg"
Pushbutton
(2,16)
"Paris"
"/NSA38"
process="repertoirearticles.txt"
size=(2,10)
using DIV =
"2200"
Pushbutton
(4,16)
"Hamburg"
"/NSA38"
process="repertoirearticles.txt"
size=(2,10)
using DIV =
"1000"
// InputScript "repertoirearticles.txt
Parameter
DIV
// ABAP : exécution du programme
Screen
SAPMS38M.0101
Set
F[Programme] "RMMVRZ00" Enter "/8" // Exécuter
// Répertoire des articles
Screen
RMMVRZ00.1000
Set
F[Article]
"M-*"
Set
F[Division]
"&U[DIV]"
Enter
"/8"
//
Exécuter
|
Nous pouvons également offrir à la place de plusieurs boutons poussoir quelques boutons radio et un un seul bouton poussoir. Dans l'exemple suivant le bouton poussoir lancera la création commande (transaction VA01) avec une présélection du type de commande.
//scripte GuiXT
pos
X[IMAGE_CONTAINER]
X[IMAGE_CONTAINER]+(0,50)
Box
(0,0)
(8,34)
"Commande client"
Image
(0.7,0.3)
(7.2,14.6)
"controlling.jpg"
"-plain"
// Variable VA01_TypeCommande encore vide? Alors, proposer la valeur par
défaut "BV"
if
not
V[VA01_TypeCommande]
Set
V[VA01_TypeCommande]
"BV"
endif
// Sélection type de commande
RadioButton
(1,16)
"Vente au comptant" Name="VA01_TypeCommande"
value="BV"
RadioButton
(2,16)
"Cde client urgente"
Name="VA01_TypeCommande"
value="SO"
RadioButton
(3,16)
"Cde client standard"
Name="VA01_TypeCommande"
value="TA"
RadioButton
(4,16)
"Retour"
Name="VA01_TypeCommande"
value="RE"
Pushbutton
(6,16)
"Saisir commande"
"/NVA01"
Process="lancerva01.txt"
"size=2"
Screen
SAPMV45A.0101 // Remplir le champ "Type de commande"
avec le contenu de la variable "VA01_TypeCommande"
Set
F[Type commande client]
"&V[VA01_TypeCommande]"
Set
F[Organis. commerciale]
"1000"
Set
F[Canal distribution] "10"
Set
F[Secteur d'activité] "00"
Enter
A la place des paramètres nous avons utilisé ici des variables globales V[VA01_typecommande]. Si vous souhaitez invoquer la transaction VA01 dans le mode alternatif avec "/OVA01" au lieu de "/NVA01", ceci ne marche pas, car chaque session SAP possède son propre domaine de variables GuiXT. Dans ce cas vous pouvez transmettre la valeur sous forme de paramètre:
//scripte GuiXT
pos
X[IMAGE_CONTAINER]
X[IMAGE_CONTAINER]+(0,50)
Box (0,0) (8,34) "Commande client"
Image
(0.7,0.3)
(7.2,14.6)
"controlling.jpg"
"-plain"
// Variable VA01_TypeCommande encore vide? Alors, proposer
la valeur par défaut "BV"
if
not
V[VA01_TypeCommande]
Set
V[VA01_TypeCommande]
"BV"
endif
// Sélection type de commande
RadioButton
(1,16)
"Vente au comptant"
Name="VA01_TypeCommande"
value="BV"
RadioButton
(2,16)
"Cde client urgente"
Name="VA01_TypeCommande"
value="SO"
RadioButton
(3,16)
"Cde client standard"
Name="VA01_TypeCommande"
value="TA"
RadioButton
(4,16)
"Retour"
Name="VA01_TypeCommande"
value="RE"
Pushbutton
(6,16)
"Saisir commande"
"/NVA01"
Process="lancerva01.txt"
"size=2"
using TYPECOMMANDE =
[VA01_TypeCommande]
// InputScript "startva01.txt"
Parameter TYPECOMMANDE
Screen SAPMV45A.0101
// Remplir le champ "Type de commande" avec le contenu de
la variable "VA01_TypeCommande"
Set
F[Type commande client]
"&U[TYPECOMMANDE]"
Set
F[Organis. commerciale]
"1000"
Set
F[Canal distribution]
"10"
Set
F[Secteur d'activité]
"00"
Enter
|
De manière similaire aux boutons radios vous pouvez également travailler avec des champs de saisie standards. Chaque champ de saisie (commande "InputField") est associé exactement à une variable GuiXT, c'est à dire que le contenu est affiché dans le champ de saisie et les valeurs saisies sont stockées dans la variable. Dans l'exemple suivant, l'utilisateur peut vérifier en un clin d'œil la disponibilité d'un article dans 3 divisions différentes. Nous utilisons pour cela des SAP_BAPIs.
Saisie du numéro d'article. Vous pouvez également utiliser la recherche par le matchcode.
La quantité disponible est affichée pour les 3 divisions.
Un message d'erreur est affiché lors de la saisie d'un numéro d'article inexistant.
// scripte GuiXT
pos
X[IMAGE_CONTAINER]
X[IMAGE_CONTAINER]+(0,50)
Box
(0,0)
(8,36)
"Disponibilité"
// Afficher le champ de saisie correspondant à la variable
V[AV_Article]
// Lien avec le matchcode SAP à l'aide de techname="..."
InputField
(1,1)
"Article"
(1,16)
name="AV_Article"
size=18
techname="MARA-MATNR"
Text
(2,1)
"&V[AV_Textearticle](1-34)" -proportional
-intensified
Text
(3,4)
"Hamburg"
Text
(3,14)
"&V[AV_Qtearticle1]"
-border
size="8"
Text
(3,24)
"&V[AV_Unitearticle]"
Text
(4,4)
"
Text
(4,14)
"&V[AV_Qtearticle2]"
-border
size="8"
Text
(4,24)
"&V[AV_Unitearticle]"
Text
(5,4)
"Vienne"
Text
(5,14)
"&V[AV_Qtearticle3]"
-border
size="8"
Text
(5,24)
"&V[AV_Unitearticle]"
Pushbutton
(7,2)
"Afficher disponibilité"
Process="disponibilite.txt"
size=(1,32)
// InputScript "disponibilite.txt"
// initialiser variables
Set
V[AV_Textearticle]
Set
V[AV_Unitearticle]
Set
V[AV_Qtearticle*]
// Lire le texte court et l'unité de quantité
Call
"BAPI_MATERIAL_GET_DETAIL"
in.MATERIAL="&V[AV_Article]"
out.MATERIAL_GENERAL_DATA="AV_Doneearticle"
// adresser les champs par un offset, voir
Conseils&astuces N° 17
Set
V[AV_Textearticle]
"&V[AV_Doneearticle](1-41)"
Set
V[AV_Unitearticle]
"&V[AV_Doneearticle](156-158)"
// Article existant?
if
not
V[AV_Textearticle]
return
"E: L'article
&V[AV_Article] n'existe pas"
-statusline
endif
// Lire la disponibilité dans trois usines
Call
"BAPI_MATERIAL_AVAILABILITY"
in.MATERIAL="&V[AV_Article]"
in.PLANT="1000"
in.UNIT="&V[AV_Unitearticle]"
out.AV_QTY_PLT="AV_Qtearticle1"
Call
"BAPI_MATERIAL_AVAILABILITY"
in.MATERIAL="&V[AV_Article]"
in.PLANT="2000"
in.UNIT="&V[AV_Unitearticle]"
out.AV_QTY_PLT="AV_Qtearticle2"
Call
"BAPI_MATERIAL_AVAILABILITY"
in.MATERIAL="&V[AV_Article]"
in.PLANT="3000"
in.UNIT="&V[AV_Unitearticle]"
out.AV_QTY_PLT="AV_Qtearticle3"
// Tenir compte des 3 décimales pour les quantités
Set
V[AV_Qtearticle1]
&V[AV_Qtearticle1] / 1000
Set
V[AV_Qtearticle2]
&V[AV_Qtearticle2] / 1000
Set
V[AV_Qtearticle3]
&V[AV_Qtearticle3] / 1000
// Réafficher message et écran
Return
"S: Disponibilité déterminée"
-statusline |