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 :

Fonction BAPI pour MB52 transaction


Sujet :

SAP

  1. #1
    Invité
    Invité(e)
    Par défaut Fonction BAPI pour MB52 transaction
    Bonjour,

    Je cherche à trouver une BAPI me permettant de récupérer les résultats de la transaction MB52 lorsque les champs "Division", "Magasin" et "Type d'article" sont remplis. J'ai fait quelque recherche mais je n'ai pas réussi à trouver quelque chose d'intéressant surtout que je débute en SAP et que l'utilisation d'une BAPI est floue pour moi. Je tiens aussi à préciser que le compte SAP que j'utilise est très limité en terme de droit, je n'ai pas accès à la transaction BAPI pour pouvoir les parcourir.

    Transaction MB52 :
    Nom : MB52.PNG
Affichages : 3203
Taille : 25,4 Ko

    Merci de votre aide.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 574
    Points : 764
    Points
    764
    Par défaut
    Tout n'est pas disponible en BAPI, loin de là.
    J'aurais tendance à penser que récupérer les stocks n'est pas en BAPI.

    La solution serait de faire toi-même un module fonction (transaction SE37, ça demande une clé développeur ABAP bien sûr) qui va lancer la MB52 et récupérer le contenu. Au lieu de lancer la MB52, tu lances le programme RM07MLBS; tu peux chercher sur SCN en anglais (scn.sap.com) si des gens ont trouvé une solution pour récupérer les résultats.

    PS: une BAPI, grossomodo c'est un module fonction qui peut être appelé à distance (attribut RFC coché), et qui suit certaines autres règles techniques qu'il serait trop long de discuter ici.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci de ta réponse.

    Malheureusement je n'ai pas accès à la transaction SE37 et je suis très loin d'avoir les capacités de développer en ABAP, étant actuellement en stage, le temps que je fasse une demande pour que quelqu'un réalise le module fonction approprié, je serais probablement déjà parti de mon entreprise.

    Merci pour ces informations en tout cas.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Consultant SAP (Abap)
    Inscrit en
    Février 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant SAP (Abap)
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2015
    Messages : 26
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Pour la MB52, il n'y a pas de BAPI pour ça. Pour compléter le message de sandraros, une BAPI fait référence à un objet métier (commande, facture, OF...) et permet sa création, modification et suppression.

    Maintenant pour la MB52 je n'ai pas connaissance d'une fonction (mais ça doit exister) car les données proviennent de la table MARD.

    MB52 Pour l'article MP.C0074.P
    Nom : MB52.jpg
Affichages : 2425
Taille : 51,7 Ko

    SE16N sur MARD pour cet article
    Nom : MARD.jpg
Affichages : 2420
Taille : 54,2 Ko

    La division et le magasin sont des champs disponibles dans MARD. Par contre le type d'article, non... c'est dans la table MARA que ça se passe.


    J'espère avoir pu t'aider

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Merci pour ces informations. Je ne pense pas avoir le temps de trouver la solution adéquate durant mon stage malheureusement, mais j'espère réussir à appliquer tout ceci un jour pour une autre mission.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Consultant SAP (Abap)
    Inscrit en
    Février 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant SAP (Abap)
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2015
    Messages : 26
    Points : 38
    Points
    38
    Par défaut
    Rah mais elle est pas loin cette solution !

    Je sais pas exactement ce que tu cherches à faire. Est-ce que tu codes un programme qui doit afficher les stocks ou bien tu cherches a appeler une BAPI ou fonction en dehors d'SAP ?

    Quoi qu'il en soit, je t'ai fait le bout de code ci-dessous qui doit répondre à ton besoin. Tu peux le réutiliser dans ton programme. Si toutefois tu cherchais une BAPI pour pouvoir l'appeler hors-SAP alors il suffit de mettre le code ci-dessous dans un module fonction RFC (même chose qu'une BAPI)

    Bon c'est codé à l'arrache mais ça fonctionne

    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
    27
    28
    29
    30
    31
    32
    33
    34
    REPORT ZTEST01.
    TABLES: mara, mard.
    
    SELECT-OPTIONS: s_matnr FOR mara-matnr,
                    s_mtart FOR mara-mtart,
                    s_werks FOR mard-werks,
                    s_lgort FOR mard-lgort.
    
    DATA: lt_mara TYPE TABLE OF mara,
          lt_mard TYPE TABLE OF mard.
    FIELD-SYMBOLS: <mard> TYPE mard.
    
    
    START-OF-SELECTION.
    * On récupèree les articles depuis MARA
      SELECT * FROM mara INTO TABLE lt_mara
              WHERE matnr IN s_matnr
                AND mtart IN s_mtart.
    
    * On récupère les infos de stock des articles depuis MARD
      SELECT * FROM mard INTO TABLE lt_mard
        FOR ALL ENTRIES IN lt_mara
        WHERE matnr = lt_mara-matnr
          AND werks IN s_werks
          AND lgort IN s_lgort.
    
    END-OF-SELECTION.
    
      LOOP AT lt_mard ASSIGNING <mard>.
        IF  <mard>-labst GT 0.
          WRITE: / <mard>-matnr, <mard>-werks, <mard>-lgort, <mard>-labst.
        ENDIF.
      ENDLOOP.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je code une macro vba qui permet de calculer le stock prévisionnel de chaque magasin de l'entrepôt (je me sers de la transaction MB52 pour sa). Pour l'instant cette macro marche très bien mais demande à l'utilisateur de faire une extraction de SAP avant de lancer la macro. Donc je me suis renseigné pour savoir si ma macro pouvait elle même récupérer l'extraction de la transaction MB52 et j'ai trouvé qu'on pouvait utiliser des BAPI pour sa.

    Le code que tu me proposes peut directement s'écrire dans une macro VBA ? Où est ce que je peux trouver une fonction module RFC ?

    Merci beaucoup de votre aide en tout cas.

  8. #8
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 313
    Points : 375
    Points
    375
    Par défaut
    Hello

    essayes la Bapi BAPI_MATERIAL_STOCK_REQ_LIST
    je ne sais pas trop si ca te convient mais ca peut être une piste

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Tu dis travailler en VBA (Excel ?).
    Est-ce nécessaire de passer par BAPI ? et est-ce qu'il n'y aurait pas une autre transaction pour trouver tes données ?

    Je dis ça parce que la transaction donne un tableau difficile à gérer avec Excel (mais pas impossible, je pense), du moins ici.
    Pour ce qui est d'automatiser la transaction: la démarrer, remplir les champs, la rouler, importer le résultat, ça peut se faire à partir d'Excel.
    Le seul hic, c'est le résultat qui est un peu barbare pour Excel...
    MPi²

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par parmi Voir le message
    Bonjour,

    Tu dis travailler en VBA (Excel ?).
    Est-ce nécessaire de passer par BAPI ? et est-ce qu'il n'y aurait pas une autre transaction pour trouver tes données ?
    Bonjour,

    Oui, je travaille en VBA Excel.
    Passer par une BAPI n'est pas une obligation, c'est juste pour éviter à l'utilisateur de devoir importer les données de SAP manuellement (et sa me permet aussi de découvrir de nouvelles choses ). Je n'ai pas trouvé de transaction qui me donnait le même résultat, c'est la seul qui permet de trier le stock en fonction du magasin de l'entreprise et du type de l'article.

    Citation Envoyé par parmi Voir le message
    Je dis ça parce que la transaction donne un tableau difficile à gérer avec Excel (mais pas impossible, je pense), du moins ici.
    Pour ce qui est d'automatiser la transaction: la démarrer, remplir les champs, la rouler, importer le résultat, ça peut se faire à partir d'Excel.
    Le seul hic, c'est le résultat qui est un peu barbare pour Excel...
    J'ai déjà programmé la macro me permettant de gérer ce tableau. L'automatisation de la transaction pourrait m'intéresser, peux-tu un peu me guider ?

    Encore merci !

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Il faudrait voir d'abord si tu peux utiliser l'enregistreur de scripts.

    Le principe est de créer ta requête en VBS et de la transposer dans Excel.
    Tu tapes Alt-F12 dans SAP et tu sélectionnes "Enregistrement et playback de script".
    Tu cliques le bouton "Plus>>" pour choisir le répertoire et donner un nom à ce script.

    Il te reste à cliquer le bouton rouge pour enregistrer les commandes que tu vas effectuer (Entrer des valeurs dans les textbox, cliquer des boutons/menus, Afficher une variante,...)
    Quand tu as terminé, tu cliques le bouton jaune et vas avoir une grande partie du code nécessaire.
    MPi²

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Malheureusement je ne peux pas utiliser l'enregistreur de scripts avec mon compte et je n'ai pas accès à la transaction qui permettrait d'activer l'enregistreur de scripts. :/

  13. #13
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Voici un exemple de code pour faire une extraction de MB52 selon ce que tu semblais vouloir remplir dans ton "print screen"
    Copie ce code dans un module d'Excel

    Je ne sais pas si ça va fonctionner pour toi selon les normes de sécurité (?)
    Tu devrais recevoir un message t'avertissant qu'un script veut démarrer. Accepte-le.

    Si tu as accès au menu Options (Alt-F12 / Options sur l'écran principal), va dans Accessibilité et Scripting / Support de script et décoche les 3 boîtes du bas à droite.
    Si tu peux le faire, tu n'auras plus le message d'alerte.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Sub MB_52()
        Dim SapGuiAuto As Object
        Dim AppliSAP As Object
        Dim Connection As Object
        Dim Session As Object
        Dim TmpSession As Object
        Dim Chemin As String, Fichier As String
        Dim Site, Entrepot, TypeArticle, MiseEnForme
        
        'Modifier les 6 valeurs suivantes selon les besoins
        Site = "Le numéro de site"
        Entrepot = "Le numéro de l'entrepôt"
        TypeArticle = "Le type d'article"
        MiseEnForme = "/Le nom de la MEF"
        
        Chemin = "C:\Temp"
        Fichier = "MB52-" & Format(Date, "ddmmyyyy") & ".xls"
        
        'Vérification si la fenêtre de connexion est ouverte
        On Error Resume Next
        Set SapGuiAuto = GetObject("SAPGUI")
        If Err.Number <> 0 Then
            MsgBox "Ouvrir une session SAP", vbExclamation, "Erreur de connexion"
            Exit Sub
        End If
        If Not IsObject(SapGuiAuto) Then
            Exit Sub
        End If
        On Error GoTo 0
        
        Set AppliSAP = SapGuiAuto.GetScriptingEngine()
        If Not IsObject(AppliSAP) Then
            Exit Sub
        End If
        
        'Choisir la Session PRD non utilisée, si ouverte
        For Each Connection In AppliSAP.Children
            If Not Connection.DisabledByServer And Left(Connection.Description, 3) = "PRD" Then
                For Each TmpSession In Connection.Children
                    If TmpSession.Busy = False Then
                        Set Session = TmpSession
                        GoTo FoundSession
                    End If
                Next
            End If
        Next
    
    FoundSession:
        If Session Is Nothing Then
            MsgBox "Ouvrir une session SAP-PRD et recommencer" & vbCrLf & _
                    "S'il y a une session ouverte, elle est probablement en cours d'exécution", vbExclamation, "Erreur de connexion"
            Exit Sub
        End If
        
        'Démarre la transaction
        Session.FindById("wnd[0]").maximize
        Session.FindById("wnd[0]/tbar[0]/okcd").Text = "/nMB52"
        Session.FindById("wnd[0]").SendVKey 0
        
        'Inscrit les champs
        Session.FindById("wnd[0]/usr/chkNOZERO").Selected = True
        Session.FindById("wnd[0]/usr/chkNOVALUES").Selected = True
        Session.FindById("wnd[0]/usr/chkNEGATIV").Selected = False
        Session.FindById("wnd[0]/usr/ctxtWERKS-LOW").Text = Site
        Session.FindById("wnd[0]/usr/ctxtLGORT-LOW").Text = Entrepot
        Session.FindById("wnd[0]/usr/ctxtMATART-LOW").Text = TypeArticle
        
        'Sélectionne les options
        Session.FindById("wnd[0]/usr/chkNEGATIV").SetFocus
        Session.FindById("wnd[0]").SendVKey 2
        Session.FindById("wnd[0]/usr/chkXMCHB").Selected = False
        Session.FindById("wnd[0]/usr/radPA_FLT").Select
        Session.FindById("wnd[0]/usr/ctxtP_VARI").Text = "/STOCK VALO"
        Session.FindById("wnd[0]/tbar[1]/btn[8]").Press
        
        'Enregistrement "Texte avec tableurs"
        Session.FindById("wnd[0]/tbar[1]/btn[45]").Press
        Session.FindById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").Select
        Session.FindById("wnd[1]/tbar[0]/btn[0]").Press
        
        Session.FindById("wnd[1]/usr/ctxtDY_PATH").Text = Chemin
        Session.FindById("wnd[1]/usr/ctxtDY_FILENAME").Text = Fichier               'inscrit le fichier
        If Dir(Chemin & "\" & Fichier) <> "" Then Kill Chemin & "\" & Fichier       'supprime s'il existe déjà
        Session.FindById("wnd[1]/tbar[0]/btn[0]").Press                             'sauvegarde
        
        MsgBox "Fichier sauvegardé", vbInformation, ""
    End Sub
    MPi²

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En essayant ton code j'obtiens le message "Ouvrir une session SAP-PRD et recommencer" & vbCrLf & _ "S'il y a une session ouverte, elle est probablement en cours d'exécution", vbExclamation, "Erreur de connexion". Et en effet, en exécutant le code pas à pas, je ne rentre jamais dans la boucle suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For Each Connection In AppliSAP.Children
            If Not Connection.DisabledByServer And Left(Connection.Description, 3) = "PRD" Then
                For Each TmpSession In Connection.Children
                    If TmpSession.Busy = False Then
                        Set Session = TmpSession
                        GoTo FoundSession
                    End If
                Next
            End If
        Next
    Pourtant, j'ai une session SAP qui est ouverte et qui n'a pas de transaction en cours d'exécution.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Rectification, je rentre dans la boucle mais je ne passe pas le if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If Not Connection.DisabledByServer And Left(Connection.Description, 3) = "PRD" Then
                For Each TmpSession In Connection.Children
                    If TmpSession.Busy = False Then
                        Set Session = TmpSession
                        GoTo FoundSession
                    End If
                Next
            End If
    J'ai regardé dans la fenêtre des variables et j'ai remarqué que le Connection.DisabledByServer était égal à Vrai. Dois-je comprendre que je n'ai pas les droits pour faire ceci ?
    Images attachées Images attachées  
    Dernière modification par Invité ; 09/06/2017 à 09h01.

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    As-tu ouvert une session SAP-PRD avant de démarrer la macro ?
    MPi²

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par parmi Voir le message
    As-tu ouvert une session SAP-PRD avant de démarrer la macro ?
    Oui j'ai une session d'ouvert, j'ai aussi essayé sans en avoir d'ouvert mais le résultat est le même.

  18. #18
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Il faut qu'une session soit ouverte, soit à la page de démarrage soit dans une transaction terminée.
    Le "/n" permet de démarrer la transaction peut importe où on se trouve à l'intérieur d'une session SAP-PRD.

    Par contre, quelle type de SAP utilises-tu ? version Web ou bureau ?
    MPi²

  19. #19
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Si tu ne peux utiliser l'enregistreur de macro ni ce code, tu n'as probablement pas les droits...
    Peut-être peux-tu demander l'accès ?
    MPi²

  20. #20
    Invité
    Invité(e)
    Par défaut
    J'utilise une version bureau de SAP.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. fonction c pour manipuler la structure date
    Par thomas_b dans le forum Windows
    Réponses: 4
    Dernier message: 28/07/2004, 16h28
  2. [winsock.h] Fonction recv() pour un socket en C
    Par Hikaru dans le forum Windows
    Réponses: 5
    Dernier message: 22/05/2004, 07h43
  3. Des fonctions OGL pour les images de format usuel ?
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 31/05/2003, 21h59
  4. Fonction/méthode pour obtenir l'IP de la machine
    Par sirex007 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 10/04/2003, 14h36
  5. Réponses: 3
    Dernier message: 02/09/2002, 18h49

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