Jak automatizovat propojení Excel a SAP

Když mě teď potkal fenomén zvaný práce z domova, rozhodl jsem se věnovat trochu času zjednodušování denní rutiny. Řekl jsem si, že si zautomatizuji veškeré nudné a opakující se činnosti v SAPu. První činnost, kterou jsem potřeboval automatizovat, bylo neustálé přepínání a kopírování dat mezi Excelem a SAPem.

Pro případné začátečníky v Excelu uvádím, že karta vývojář není ve výchozím nastavení vidět a musíte si jí zapnout. Stejně tak Microsoft Visual Basic for Applications spustíte stisknutím alt+F11.

VBA Skript pro ovládání SAP

Jdeme na to. Otevřeme Excel, VBA editor a kopírujeme. První část kódu naleznete kdekoliv na netu. Tímto kódem se Excel připojí k již přihlášenému SAPu. Automatické přihlášení je také možné, ale já ho nevyužiji, tak jsem se tím ani nezabýval.

Sub SAP_MM03()

Set SapGuiAuto = GetObject("SAPGUI")        'Get the SAP GUI Scripting object
Set SAPApp = SapGuiAuto.GetScriptingEngine  'Get the currently running SAP GUI
Set SAPCon = SAPApp.Children(0)             'Get the first system that is currently connected
Set session = SAPCon.Children(0)            'Get the first session (window) on that connection
session.findById("wnd[0]").Maximize
SAP GUI Scripting
SAP GUI Scripting

Pomocí tohoto kódu, se Excel připojí k SAPu. To, že se Excel k SAPu připojil poznáte podle ikonky s běhajícím červeným šikmým proužkem, vpravo dole ve stavové liště okna SAPu.

Při každém spuštění našeho kódu SAP upozorňuje, že se spouští skript. To je sice super z pohledu zabezpečení, ale z pohledu automatizace a produktivity mi to moc nevyhovuje. Toto oznámení lze snadno deaktivovat v menu.

Deaktivování popup oznámení o připojení skriptu k SAP GUI
Deaktivování popup oznámení o připojení skriptu k SAP GUI

Následující pokračování kódu spustí zvolenou transakci a prokliká se SAPem až na požadované místo. Skriptem můžete vyplňovat pole formulářů, simulovat stisknutí tlačítek na obrazovce nebo používat klávesové zkratky.

' spustíme transakci
session.StartTransaction "MM03"

' zapíšeme číslo materiálu z aktivního řádku tabulky, skript předpokládá umístění čísla materiálu v druhém sloupci                                                               
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").Text = Cells(ActiveCell.Row, 2).Value

' stiskneme F7
session.findById("wnd[0]").sendVKey 7

' stiskneme F8                
session.findById("wnd[0]").sendVKey 8                                                           

End Sub

Jak je vidět, struktura skriptu je jednoduchá. Zdá se tedy, že největší problém budou názvy ovládacích prvků.

Ovládání SAP přes VBA pomocí klávesových zkratek

Začněme od klávesových zkratek. Z kódu výše je vidět, zápis session.findById(„wnd[0]“).sendVKey a číselný kód. Každá používaná klávesová zkratka má svůj číselný kód. Všechny kódy naleznete v nápovědě pod heslem Table GUI_FKEY. Některé nejčastější zkratky, které používám já, uvádím v následující tabulce.

VKey Klávesa nebo klávesová zkratka
0 Enter
3 F3 (zpět)
7 F7
8 F8 (provedení)
12 F12 (zrušení)
15 Shift+F3 (konec)

Výběr polí formuláře v SAP pomocí VBA

Dále se pojďme podívat na formulářová pole. Pokud klikneme na jakékoliv pole formuláře a stiskneme klávesu F1, zobrazí se nápověda.

Nápověda k políčku formuláře

Součástí nápovědy je i tlačítko „Technické informace“ (ikona kladiva a klíče). Klikneme na něj a zobrazí se další okno.

technické info
Technické info

Označení pole uvedené v Pole dynp. je přesně to označení, které zapíšeme do našeho skriptu session.findById(„wnd[0]/usr/ctxtRMMG1-MATNR“).Text

Nahrávání vlastního skriptu v SAP

Mnohdy je rychlejší a efektivnější nahrát si celý postup klikání a zadávání, jako akci a tento skript pak jen pročistit a upravit k obrazu svému.

  1. V menu klikneme na položku Záznam a playback skriptu…
V menu klikneme na záznam a playback skriptu
  1. Na novém okně klikneme na tlačítko více> a vybereme umístění nahraného skriptu.
Okno pro záznam skriptu
  1. Klikneme na tlačítko záznam skriptu.
  2. Provedeme akci, kterou chceme automatizovat.
  3. Klikneme na tlačítko stop.

Upravení nahraného skriptu

  1. Najdeme uložený soubor, klikneme na něj pravým tlačítkem a vybereme upravit.
  2. SAP zaznamenal akce, které jsme provedli. Na začátku je vždy vytvořeno několik řádků, které skript používá, když ho spouštíte přímo v SAPu. Ty můžete ignorovat.
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
  1. V závislosti na tom, jak hodně jsme používali myš nebo klávesové zkratky, pak vypadá náš zaznamenaný kód. Díky našim znalostem ze začátku článku můžeme kód pročistit a tím ho zrychlit.
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell").selectedNode = "F00046"
session.findById("wnd[0]/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell").doubleClickNode "F00046"
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").text = "číslo materialu"
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").caretPosition = 15
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[30]").press
session.findById("wnd[0]/usr/tabsTABSPR1/tabpZU04").select
  1. session.findById(„wnd[0]“).maximize můžeme ponechat, to je maximalizování okna označeného jako wnd[0]
  2. Další 2 řádky jsou ruční spuštění transakce z menu. Můžeme je smazat
    session.findById(„wnd[0]/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell“).selectedNode = „F00046“
    session.findById(„wnd[0]/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell“).doubleClickNode „F00046“
  3. A pro přehlednost nahradit vlastním kódem
    session.StartTransaction „MM03“
  4. Další 2 řádky jsou zapsání čísla materiálu do formulářového políčka. První řádek říká, co jsme napsali a druhý řádek nastavuje pozici kurzoru.
    session.findById(„wnd[0]/usr/ctxtRMMG1-MATNR“).text = „číslo materialu“
    session.findById(„wnd[0]/usr/ctxtRMMG1-MATNR“).caretPosition = 15

    Nastavení pozice kurzoru je v našem skriptu zbytečné, a tak řádek můžeme vypustit.
  5. Poslední čtyři řádky už jsou proklikání se skrze SAP, až na požadované místo – do záložky data dokumentu. Stejnou akci lze udělat mnohem rychleji pomocí klávesových zkratek F7 a následně F8.
    session.findById(„wnd[0]“).sendVKey 0
    session.findById(„wnd[1]“).sendVKey 0
    session.findById(„wnd[0]/tbar[1]/btn[30]“).press
    session.findById(„wnd[0]/usr/tabsTABSPR1/tabpZU04“).select

Nejsnadnější cestou, jak kód pročistit, je vložit kód do VBA editoru v Excelu a stisknutím tlačítka F8 spustit debug mód. Postupným mačkáním tlačítka F8 náš skript postupuje krok po kroku a v okně SAPu vidíme, co který krok provedl.

Excel debug mod

A to je vše. Doufám, že vám automatizace činností v SAP ušetří cenné minuty. To, jak je pak využijete je jen na vás.

Jedna myšlenka na “Jak automatizovat propojení Excel a SAP”

Komentáře nejsou povoleny.