IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAP Discussion :

Message d'erreur : Objet requis : 'Wscript' -


Sujet :

SAP

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Message d'erreur : Objet requis : 'Wscript' -
    Bonjour à toutes et à tous,

    Je travaille sur un projet en entreprise qui consiste à automatiser les opérations de saisie de transactions sur SAP.

    Cela permettra aux opérateurs de production (non formés à utiliser SAP) d'utiliser SAP facilement.

    Mon script vbs marche plutôt bien mais dés que j'ajoute la commande tempo : Wscript.sleep 1000 un message d'erreur s'affiche.

    La commande va me permettre de gérer la vitesse d’exécution du programme VBS.

    Voila le message d'erreur que je reçois : Object Requis: 'WScript'-


    Je vous met également à la suite le script VBS en question : voir ligne 22

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    If Not IsObject(application) Then
       Set SapGuiAuto  = GetObject("SAPGUI")
       Set application = SapGuiAuto.GetScriptingEngine
    End If
    If Not IsObject(connection) Then
       Set connection = application.Children(0)
    End If
    If Not IsObject(session) Then
       Set session    = connection.Children(0)
    End If
    If IsObject(WScript) Then
       WScript.ConnectObject session,     "on"
       WScript.ConnectObject application, "on"
    End If
    
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/tbar[0]/okcd").text = "QF01"
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]/usr/ctxtQALS-PRUEFLOS").text = "30000020135"
    session.findById("wnd[0]/usr/ctxtQALS-PRUEFLOS").caretPosition = 11
    
    Wscript.Sleep 1000
    
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]/usr/ssubSUB_ITEM_OVERVIEW:SAPLQFFE:4100/tblSAPLQFFEITEM_OVERVIEW_SER/ctxtQFAAI-FEGRP[1,2]").setFocus
    session.findById("wnd[0]/usr/ssubSUB_ITEM_OVERVIEW:SAPLQFFE:4100/tblSAPLQFFEITEM_OVERVIEW_SER/ctxtQFAAI-FEGRP[1,2]").caretPosition = 0

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 171
    Points
    17 171
    Par défaut
    Salut haneulines, bienvenue sur DVP

    As tu essayé simplement Sleep 1000 car si tu lances le programme sous certain éditeur il ne faut pas préciser WScript.

    Autrement il existe un forum dédié Forum SAP ou tu pourrais avoir une réponse plus rapide et surtout plus éclairé.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    Salut haneulines, bienvenue sur DVP

    As tu essayé simplement Sleep 1000 car si tu lances le programme sous certain éditeur il ne faut pas préciser WScript

    Je viens d'essayer et je reçois un autre type de message d'erreur : Type incompatible: 'Sleep' -


  4. #4
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour,

    à tester (pour W7 et sup)
    l'utilitaire timeout ne gère que les secondes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sec = InputBox("Entrez le nombre de secondes : ")
    CreateObject ("WScript.Shell").Run "TIMEOUT.EXE /T " & sec,0,True
    MsgBox "Sleep Done"
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  5. #5
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par omen999 Voir le message
    bonjour,

    à tester (pour W7 et sup)
    l'utilitaire timeout ne gère que les secondes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sec = InputBox("Entrez le nombre de secondes : ")
    CreateObject ("WScript.Shell").Run "TIMEOUT.EXE /T " & sec,0,True
    MsgBox "Sleep Done"
    Oh!
    Ça marche, merci beaucoup !
    Actuellement j'essaye d'ajouter une tempo de sorte à ce que l'opérateur ait le temps d'entrer un numéro de série de 11 chiffres.
    J'essaye d'automatiser ça et pour cela il faudrait que j'ajoute :

    Si la taille de la chaine de caractère est égale à 11 Alors
    Passer à l'étape suivante
    Sinon
    Tempo maintenu jusqu’à ce que l'opérateur entre une numéro de série de taille 11


    Exemple de numéro de série : "30000020136"


    Pour faire ça je souhaite d'abord essayer cette commande pour déterminer la taille d'une chaine de caractère donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NS="30000020136"
    Wscript.Echo Len(NS)
    Sauf que, encore une fois le message d'erreur est le même : Objet requis: 'Wscript'
    Il faudrait que j'utilise une commande CreateObject comme pour la tempo.


    La commande CreateObject comment l'as tu trouver ? Il y a t-il un site l'expliquant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sec = InputBox("Entrez le nombre de secondes : ")
    CreateObject ("WScript.Shell").Run "TIMEOUT.EXE /T " & sec,0,True

    Merci à toi

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    Sauf que, encore une fois le message d'erreur est le même : Objet requis: 'Wscript'
    Il faudrait que j'utilise une commande CreateObject comme pour la tempo.
    non, un simple MsgBox devrait suffire :
    La commande CreateObject comment l'as tu trouver ? Il y a t-il un site l'expliquant ?
    comme MsgBox, c'est une fonction native du VBScript et comme pour tous les langages la lecture de sa documentation serait une bonne idée

    ton script (tiré d'un exemple dispo sur le net) a été écrit pour fonctionner selon deux modes
    1. soit le script est appelé directement depuis SAP et dans ce cas le contexte d'exécution du script est l'application elle-même et l'objet WScript ne sera pas disponible
    (c'est la raison du test des lignes 11-14)

    2. soit le fichier script est appelé de façon autonome de "l'extérieur" de SAP et alors le script tournera dans le contexte d'exécution fourni par Windows Script Host qui exposera l'objet root WScript
    qui sera alors disponible
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  7. #7
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par omen999 Voir le message
    non, un simple MsgBox devrait suffire :
    comme MsgBox, c'est une fonction native du VBScript et comme pour tous les langages la lecture de sa documentation serait une bonne idée

    ton script (tiré d'un exemple dispo sur le net) a été écrit pour fonctionner selon deux modes
    1. soit le script est appelé directement depuis SAP et dans ce cas le contexte d'exécution du script est l'application elle-même et l'objet WScript ne sera pas disponible
    (c'est la raison du test des lignes 11-14)

    2. soit le fichier script est appelé de façon autonome de "l'extérieur" de SAP et alors le script tournera dans le contexte d'exécution fourni par Windows Script Host qui exposera l'objet root WScript
    qui sera alors disponible
    Je comprends mieux ! Merci

    J'ai utilisé len(st) et ça marche très bien !

    J'aurai une dernière petite question à ce sujet si ça ne te dérange pas...

    J'ai utilisé len(st) pour mesurer la longueur d'une chaine de caratère et poser cette condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     st = session.findById("wnd[0]/usr/ctxtQALS-PRUEFLOS").text     <== st correspond au texte entrée dans une cellule de la page
    If Len(st) = 11 Then
    
             session.findById("wnd[0]").sendVKey 0    <== Si cette condition est satisfaite on passe à la page suivante
    End If

    Or lorsque Len(st) < 11 le programme s’arrête.. Je n'ai pas le temps d'entrer dans la cellule un numéro de 11 chiffre.
    Je voudrais que le programme se mette en pause (que l'on reste sur la page) jusqu'à ce que l'utilisateur entre un numéro d'une longueur égale à 11.

    J'ai ajouté une tempo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     st = session.findById("wnd[0]/usr/ctxtQALS-PRUEFLOS").text    
    If Len(st) = 11 Then
             session.findById("wnd[0]").sendVKey 0   
    End If
    
    If Len(st) < 11 Then
        sec=100000
        CreateObject ("WScript.Shell").Run "TIMEOUT.EXE /T " & sec,0,True       
    End If
    Au début il n'y a rien d'inscrit dans la cellule donc len(st) est automatiquement < 11 ce qui active la tempo directement.
    Pendant la tempo, j'entre un numéro de taille 11 (ex= "359473781343) mais rien ne se passe...


    Quelle commande dois-je utiliser pour que SAP détecte la saisie d'un numéro d'une longueur donnée dans la cellule ?

  8. #8
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    désolé mais je ne connais pas (ou très peu) les spécificités du GUI SAP Scripting
    mais ta démarche ne me parait pas très orthodoxe
    il serait a priori plus simple de définir une limte de taille à ta cellule si c'est possible
    quel est le type de ton contrôle ? GuiTable, GuiGridView ou autre chose ?
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  9. #9
    Membre à l'essai
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    A ma connaissance, quand tu lances un script VBS dans SAP, tu n'es plus en mode interactif (dans cette fenêtre au moins) jusqu'à la fin du script. Donc impossible je pense de laisser l'utilisateur écrire dans un champ, même avec une tempo.

    Par contre, tu peux utiliser une inputbox pour demander à l'utilisateur de taper sa valeur.

    Du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    If Len(st) < 11 Then
    
      newst = inputbox("valeur du champ XXXX:")
    
      If Len(newst) = 11 Then
    
      session.findById("wnd[0]/usr/ctxtQALS-PRUEFLOS").text  = newst   
    
      end if
    
    End If
    Cdt,

    Bruno-

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/01/2019, 19h32
  2. VBS dans HTA : erreur : "objet requis "WScript"
    Par cerkyr dans le forum VBScript
    Réponses: 2
    Dernier message: 30/09/2016, 16h23
  3. VBA message d'erreur, objet requis
    Par yann26 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/08/2014, 19h00
  4. Erreur Objet requis : 'this' --> Comprend pas!!
    Par Grozeil dans le forum ASP
    Réponses: 3
    Dernier message: 30/03/2005, 09h46
  5. Erreur "Objet requis"
    Par cindaille dans le forum Access
    Réponses: 5
    Dernier message: 26/10/2004, 00h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo