SAP Jobsuche bei DV-Treff


Suchen
ScriptMan
vor 15 Jahre

Hallo zusammen,

 

wenn ich vor einer Zeit über die „Allgemeine Schnittstelle zwischen Excel und SAP“ berichtet habe, möchte ich heute meinen Beitrag etwas in eine andere Richtung rücken. SAP ist aus der Sicht eines Anwenders an vielen Stellen eine sehr zeitintensive Software. Damit meine ich die vielen Eingabemasken, Schalter, Reiter etc. , die ein Anwender ausfüllen und anklicken  muss, wenn er neue Daten erfasst oder vorhandene Daten ergänzt oder ändert. Manchmal sollen nur bestimmte Transaktionen mit veränderlichen Startparametern ausgeführt werden. In diesem Fall geht es dann um Prozessautomatisierung. In einigen Fällen sollen Daten aus anderen Anwendungen nach SAP übernommen werden. Eine geeignete Schnittstelle wird im SAP dafür benötigt.

 

Alle diesen Szenarien lassen sich nun mit einer und der selben Methode lösen:

 

Man nimmt eine Transaktion und alle damit verbundenen Aktivitäten wie Betätigen von Schaltern, Anklicken von Reitern und Ausfüllen von Eingabefeldern einer Erfassungsmaske mittels eines SAP-Skriptrecorders auf. Dieser gehört neuerdings zum SAP-Standard und ist aus allen Transaktionen über Alt / F12 à Skriptaufzeichnung und –Playback aufrufbar. Da sich die benötigten Daten für alle o.g. Szenarien am besten im Excel-Format erfassen lassen, schreiben wir uns ein kleines Programm, dessen Aufgabe sein wird, die erfassten Daten im aufgezeichneten Skript als feste Eingabewerte gegen die Spaltenbezeichnungen aus Excel zu tauschen. Vor dem Abspielen des auf o.g. Weise verallgemeinerten Skriptes tauschen wir Satz für Satz aus Excel mittels eines eigenen Programms die Spaltenbezeichnungen wiederum gegen die entsprechenden Werte aus. Das Ganze packen wir am besten in eine Batch-Datei und geben jedem Anwender die Möglichkeit, aus SAP Easy Access Menü eine Skriptaufzeichnung, eine Skriptverallgemeinerung und eine Skriptabspielung selbst durchzuführen.

 

Das Ergebnis könnte am Ende so aussehen, dass sich SAP wie z.B. Excel oder Word handhaben lässt. Der Anwender kann dann beliebige Skripte aufzeichnen und abspielen lassen, ohne dass er irgendwelche Programmierkenntnisse oder Lizenzen für andere SAP-Werkzeuge besitzen müsste. Excel dient dabei nur als Plattform für schnelle Datenerfassung oder Datenänderung. Die Möglichkeiten scheinen dabei unbegrenzt zu sein. Man kann damit Daten in der Finanzbuchhaltung buchen, Daten im Controlling erfassen, Stammdaten in allen Bereichen erfassen, ändern oder löschen, bestimmte Transaktionen mit immer neuen Daten nacheinander abarbeiten lassen, Daten aus anderen Anwendungen nach SAP über die Datenaustauschplattform Excel realisieren und...

 

Für erfahrene Anwender empfiehlt sich ein gezielter manueller Eingriff in ein aufgezeichnetes Skript, da sich bestimmte Sachverhalte wie auch schon im Excel-Makro nicht aufzeichnen lassen. Dabei sind Kenntnisse aus dem Bereich Windows Scripting Host (WSH) unerlässlich.

 

Alles in allem gibt es nur Handvoll viele Firmen, die sich mit dem o.g. Thema auseinandergesetzt haben und ihre Produkte bestimmt nicht für wenig Geld auf dem Weltmarkt anbieten. Ich habe diese Skripttechnologie für SAP aus eigener Kraft entwickelt und setze sie erfolgreich bereits seit ca. einem Jahr in meinem Unternehmen ein. Für einen aufmerksamer Leser, der sich bereits im Vorfeld mit ähnlichen Themen beschäftigt hat, müsste sich dieser Beitrag eigentlich wie eine Anleitung zum Selbstaufbau lesen müssen. Jedenfalls würde es mir vor ca. 2 Jahren selbst so vorkommen.

 

Freundliche Grüße

 

ScriptMan

Eagle84
vor 14 Jahre
Moin moin,

Ich hab da mal einen frage und bin sicher, dass du mir da behilflich sein kannst.

Ich sitze in einem Lagerleitstand und wir benötigen für das Monitoring ca 8 verschiedene Transaktionen.

das ist natürlich unheimlich zeitaufwendig bis man soweit ist, dass man alles wieder so hat, wie man es braucht, da unsere IT nicht für alle Transaktionen die möglicheit der Variantenspeicherung frei gibt.

Wir sind nun mit dem Aufzeichnungsscript schonmal soweit das wir nur die Modi fenster öffnen und dann in jedem neuen Modi das jeweilige script abspielen brauchen.

nun meine frage....

gibt es die möglichkeit über das aufzeichnungsscript, das so einzustellen, dass ich mich nur einloggen und das script starten brauch und SAP dann automatisch alle modis erzeugt und die Transaktionen aufruft. ?

also dass ich quasi aus 6 einzelnen scripts 1 einziges mache ?

ScriptMan
vor 14 Jahre

Hallo Eagle84,

so wie immer gibt es auch hier mehrere Lösungsansätze. Einer davon könnte wie folgt aussehen:

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

'hier folgt Skript Nr. 1 ohne die ersten 14 Zeilen

session.createsession
set Wshell = CreateObject("WScript.Shell")
wshell.run "c:\temp\sleep.vbs",1,true
Set session    = connection.Children(1)

'hier folgt Skript Nr. 2 ohne die ersten 14 Zeilen

wshell.run "c:\temp\sleep.vbs",1,true
Set session    = connection.Children(2)

'hier folgt Skript Nr. 3 ohne die ersten 14 Zeilen

usw.

Die VBS-Datei c:\temp\sleep.vbs enthält nur eine einzige Zeile:

Wscript.Sleep 1000

Freundliche Grüße

ScriptMan

ScriptMan
vor 14 Jahre

Hallo Eagle84,

wie ich es heute festgestellt habe, funktioniert der obere Lösungsansatz nur, wenn man es z.B. aus dem Windows Explorer startet. Soll es aber dagegen auch aus SAP heraus (Skript-Aufzeichnung und -Playback...) lauffähig sein, müsste das Skript wie folgt aussehen:

If Not IsObject(application) Then
. . .
   Set session    = connection.Children(0)
. . .
End If
'hier folgt Skript Nr. 1 ohne die ersten 14 Zeilen
session.createsession
set Wshell = CreateObject("WScript.Shell")
wshell.run "c:\temp\sleep.vbs",1,true
wshell.run "c:\temp\script1.vbs",1,true

script1.vbs:

If Not IsObject(application) Then
. . .
   Set session    = connection.Children(1)
. . .
End If
'hier folgt Skript Nr. 2 ohne die ersten 14 Zeilen
. . .
session.createsession
set Wshell = CreateObject("WScript.Shell")
wshell.run "c:\temp\sleep.vbs",1,true
wshell.run "c:\temp\script2.vbs",1,true

script2.vbs:

If Not IsObject(application) Then
. . .
   Set session    = connection.Children(2)
. . .
End If
'hier folgt Skript Nr. 3 ohne die ersten 14 Zeilen
. . .
session.createsession
set Wshell = CreateObject("WScript.Shell")
wshell.run "c:\temp\sleep.vbs",1,true
wshell.run "c:\temp\script3.vbs",1,true

usw.

Freundliche Grüße

ScriptMan

Eagle84
vor 14 Jahre
Moin Scriptman,

also erstmal danke für deine Hilfe.
Hat super funktioniert und ist bei uns im Leitstand sehr gut angekommen.

nun hab ich die nächste Frage....

und  zwar arbeiten wir unter anderem mit Transaktionen von LRF1 / LRF2 und VL06O zur Überwachung unseres Tagesgeschäftes, 

Ich weiss, dass die Disposition bei uns es hinbekommen hat, dass die VL06O sich selber auffrischt und ich nicht ständig selber klicken muss...die wollen mir nur nicht verraten wie *grml*


weisst du zufällig wie ich das hinbekomme das sich die VL06O und am bestern auch der RF Monitor alle 5-10 minuten selber refreshed ?
ScriptMan
vor 14 Jahre

Hallo Eagle84,

es freut mich, dass es geholfen hat. Leider habe ich auf deine nächste Frage keine passende Antwort. Ich kenne die genannten TA nicht und kann nur vermuten, dass sie aus dem Logistik-Bereich stammen. Vielleicht stellst die Frage noch mal dort.

Ansonsten könnte auch was unter Zusätze -> Anzeigeoptionen -> . . . stehen.

Freundliche Grüße

ScriptMan

Eagle84
vor 14 Jahre
Moin Scriptman,

ich hab nun den besagten Refresher code bekommen und den auch schon soweit auf meine Transaktionen umgetippselt.

Nun habe ich nur das problem das ich, nachdem SAP meine aufzeichnung ausgeführt hat und der Refresher zum Einsatz kommen soll folgende Fehlermeldung bekomme:


Zitat:


Microsoft VBScript runtime error - Object required "WScript"



Ich hatte schon versucht den eintrag "Wscript.Sleep(120000)" am ende des Scriptes wegzulassen, dann funktioniert zwar das Refreshen aber ich kann mit der Transaktion nicht mehr arbeiten.
unten ist der komplette text für die Aufzeichnung. Was mach ich verkehrt ?


Zitat:


   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 = "vl06o"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/btnBUTTON6").press
session.findById("wnd[0]/tbar[1]/btn[17]").press
session.findById("wnd[1]/usr/txtENAME-LOW").text = ""
session.findById("wnd[1]/usr/txtENAME-LOW").setFocus
session.findById("wnd[1]/usr/txtENAME-LOW").caretPosition = 0
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[1]").sendVKey 8
session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").selectedRows = "0"
session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").doubleClickCurrentCell
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[33]").press
session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").currentCellRow = 7
session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").firstVisibleRow = 0
session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").selectedRows = "7"
session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").clickCurrentCell

Dim iCall_Variant
Dim iCall
iCall_Variant = 1
Dim iDate1
Do While (iCall_Variant = 1)
    iDate1 = Date



    Dim iDate2
    iCall = 1
    Do While (iCall = 1)
    ' permanente Update Datum
    iDate2 = Date
    If iDate1 <> iDate2 Then
        iCall = 0
        session.findById("wnd[0]/tbar[0]/btn[3]").press
        session.findById("wnd[0]/tbar[0]/btn[3]").press
        Exit Do
    End If
    ' 2 mins
    Wscript.Sleep(120000)
    session.findById("wnd[0]/tbar[1]/btn[20]").press
    Loop
Loop

ScriptMan
vor 14 Jahre

Hallo Eagle84,

das vorhandene Skript müsste ohne Probleme z.B. aus dem Explorer heraus gestartet werden. Wenn es aber aus SAP heraus gestartet wird, dann kommt es zu dem oben beschriebenen Fehler. Um das in beiden Fällen ohne einen Fehler ausführen zu können, muss man folgende Änderung in das Skript einbauen:

Zitat:

   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 = "vl06o"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/btnBUTTON6").press
session.findById("wnd[0]/tbar[1]/btn[17]").press
session.findById("wnd[1]/usr/txtENAME-LOW").text = ""
session.findById("wnd[1]/usr/txtENAME-LOW").setFocus
session.findById("wnd[1]/usr/txtENAME-LOW").caretPosition = 0
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[1]").sendVKey 8
session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").selectedRows = "0"
session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").doubleClickCurrentCell
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[33]").press
session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").currentCellRow = 7
session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").firstVisibleRow = 0
session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").selectedRows = "7"
session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").clickCurrentCell

set Wshell = CreateObject("WScript.Shell")

Dim iCall_Variant
Dim iCall
iCall_Variant = 1
Dim iDate1
Do While (iCall_Variant = 1)
    iDate1 = Date



    Dim iDate2
    iCall = 1
    Do While (iCall = 1)
    ' permanente Update Datum
    iDate2 = Date
    If iDate1 <> iDate2 Then
        iCall = 0
        session.findById("wnd[0]/tbar[0]/btn[3]").press
        session.findById("wnd[0]/tbar[0]/btn[3]").press
        Exit Do
    End If
    ' 2 mins

    wshell.run "c:\tmp\sleep_120000.vbs",1,true    

    session.findById("wnd[0]/tbar[1]/btn[20]").press
    Loop
Loop

Das aufzurufende VBScript enthät nur eine einzige Zeile und müsste laut Beispiel unter c:\tmp\sleep_120000.vbs abgespeichert werden:

wscript.sleep 120000

Freundliche Grüße 

ScriptMan

Blackface
vor 12 Jahre
ScriptMan schrieb:

................................................Alle diesen Szenarien lassen sich nun mit einer und der selben Methode lösen:

 

Man nimmt eine Transaktion und alle damit verbundenen Aktivitäten wie Betätigen von Schaltern, Anklicken von Reitern und Ausfüllen von Eingabefeldern einer Erfassungsmaske mittels eines SAP-Skriptrecorders auf. Dieser gehört neuerdings zum SAP-Standard und ist aus allen Transaktionen über Alt / F12 à Skriptaufzeichnung und –Playback aufrufbar. Da sich die benötigten Daten für alle o.g. Szenarien am besten im Excel-Format erfassen lassen, schreiben wir uns ein kleines Programm, dessen Aufgabe sein wird, die erfassten Daten im aufgezeichneten Skript als feste Eingabewerte gegen die Spaltenbezeichnungen aus Excel zu tauschen. Vor dem Abspielen des auf o.g. Weise verallgemeinerten Skriptes tauschen wir Satz für Satz aus Excel mittels eines eigenen Programms die Spaltenbezeichnungen wiederum gegen die entsprechenden Werte aus. Das Ganze packen wir am besten in eine Batch-Datei und geben jedem Anwender die Möglichkeit, aus SAP Easy Access Menü eine Skriptaufzeichnung, eine Skriptverallgemeinerung und eine Skriptabspielung selbst durchzuführen.

 

Das Ergebnis könnte am Ende so aussehen, dass sich SAP wie z.B. Excel oder Word handhaben lässt. Der Anwender kann dann beliebige Skripte aufzeichnen und abspielen lassen, ohne dass er irgendwelche Programmierkenntnisse oder Lizenzen für andere SAP-Werkzeuge besitzen müsste. Excel dient dabei nur als Plattform für schnelle Datenerfassung oder Datenänderung. Die Möglichkeiten scheinen dabei unbegrenzt zu sein. Man kann damit Daten in der Finanzbuchhaltung buchen, Daten im Controlling erfassen, Stammdaten in allen Bereichen erfassen, ändern oder löschen, bestimmte Transaktionen mit immer neuen Daten nacheinander abarbeiten lassen, Daten aus anderen Anwendungen nach SAP über die Datenaustauschplattform Excel realisieren und...

 

Für erfahrene Anwender empfiehlt sich ein gezielter manueller Eingriff in ein aufgezeichnetes Skript, da sich bestimmte Sachverhalte wie auch schon im Excel-Makro nicht aufzeichnen lassen. Dabei sind Kenntnisse aus dem Bereich Windows Scripting Host (WSH) unerlässlich.

 

......................................... 

Freundliche Grüße

 

ScriptMan

 

Hallo ScriptMan,

erstmals Hochachtung von mir! Du bist wirklich klasse mit der Ide das Skript-recorder zu verwenden.

Ich arbeite in einer  Firma seit 9 Jahre  und jetzt bin ich in ein Problem gestoßen. Seit einige Zeit möchte ich gerne folgende machen:

1.     ein pdf Datei von einem (lokalen) Rechner (z.B.: d:\\pdf\12345Firma.pdf) ins SAP DVS hochzuladen,

2.     die Dateiname: 12345Firma in die Tabelle DRAW Feld DOKNR des SAP,

3.     eine neue Artikelnr  in der Tabelle RMMG1 Feld MATNR (vgl. Transaktion MM02)

4.     die Dateiname 12345Firma in der Tabelle MARA Feld ZEINR.

5.     Ich kenne nicht gut, wie (technisch) die Verknüpfung zwischen Artikelnr zu eine Dokument aufgebaut?

Kann ich das ganze Prozess über Skript-recorder bzw. Excel VBA machen? Die benötigte Informationen wurden in Excel hinterlegt:

Excel Tabelle

DokumentnameVesionStatusLokalpfad
12345Firma01FRd:\\pdf\12345Firma.pdf
    

 

Vielen Dank

Beste Grüße

ScriptMan
vor 12 Jahre

Hallo Blackface,

also mit der SAP GUI Scripting Methode kann man normalerweise nur die Sachen tun, die man auch sonst manuell über Transaktionsaufrufe tun könnte.

Beim Aufzeichnen eines Skriptes werden keine Tabellennamen definiert und keine Feldnamen angesteuert. Wenn du weißt, wo die Daten aus dem PDF Dokument in einer SAP Eingabemaske unterzubringen sind, zeichne ein Skript auf, verbinde es mit deinen Excel-Daten und lade es nach SAP hoch.

Es gibt auch diverse BAPIs und RFC-Bausteine, mit denen man so was realisieren könnte. Ich besitze hierzu aber keine Kenntnisse. 

Freundliche Grüße

ScriptMan

 

TyloHH
vor 10 Jahre
Wenn ich ein vorhandenes Script in der zweiten Session

Set session = connection.Children(1)

einbinde, erhalte ich die Meldung "The control could not found by id"

in der Zeile

session.findById("wnd[0]").maximize

session.findById("wnd[0]/tbar[0]/okcd").text = "ko88"

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/usr/chkLKO74-TESTLAUF").selected = false

Liegt es an diesem Testlauf? Sonst muss ich es nochmal aufzeichnen.

Stimmt es das ich den Zähler auch einen höher setzen muss?

session.findById("wnd[0]/tbar[0]/okcd").text = "ko88"

ScriptMan
vor 10 Jahre
Wer sucht, der findet...

Frage:

Wurde die TA KO88 in dem 2. SAP-Modus bereits gestartet?

Wenn ja, dann hat das Kommando

Set session = connection.Children(1)

erstmal funktioniert.

Frage:

Ist das KZ LKO74-TESTLAUF in dem 2. Modus zu sehen und lässt sich es manuell setzen/ zurücksetzen?

Wenn ja, dann könnte vielleicht eine kurze Pause helfen:

z.B.

...

session.findById("wnd[0]").sendVKey 0

wscript.sleep 500

session.findById("wnd[0]/usr/chkLKO74-TESTLAUF").selected = false

...

Mit dem Kommando session.findById("wnd[1]... wir ein weiteres Fenster innerhalb einer Session angesprochen. Für diesen Fall wäre es sogar falsch.

TyloHH
vor 10 Jahre
Zitat von: ScriptMan 

Das Ergebnis könnte am Ende so aussehen, dass sich SAP wie z.B. Excel oder Word handhaben lässt. Der Anwender kann dann beliebige Skripte aufzeichnen und abspielen lassen, ohne dass er irgendwelche Programmierkenntnisse oder Lizenzen für andere SAP-Werkzeuge besitzen müsste. Excel dient dabei nur als Plattform für schnelle Datenerfassung oder Datenänderung. Die Möglichkeiten scheinen dabei unbegrenzt zu sein. Man kann damit Daten in der Finanzbuchhaltung buchen, Daten im Controlling erfassen, Stammdaten in allen Bereichen erfassen, ändern oder löschen, bestimmte Transaktionen mit immer neuen Daten nacheinander abarbeiten lassen, Daten aus anderen Anwendungen nach SAP über die Datenaustauschplattform Excel realisieren und...

Genau das habe ich gerade als Aufgabe. Es sollen 600 Stammsätze geändert werden. Die Informationen stehen in einer Excel-Tabelle.

Ich habe mich nun schon durch mehrere Foren gekämpft und ausprobiert. Leider wird das meiste als Makro für Excel angeboten.

Die VBS Dateien bearbeite ich schon selbst manuel und bastel mir so meine Wünsche zusammen. Der nächste Schritt soll nun die Anbindung an Excel sein.

Kannst Du mir ein Denkanstoß geben? Eine Zeilenweise Bearbeitung kann ich in SAP realisieren mit einer Schleife, aber (noch) nicht die zeilenweise Auslesung der Excelinhalte (in Variablen?)

Gruß

TyloHH
vor 10 Jahre
Also mit einer Access Datenbank klappt es wunderbar:

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3
cn.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source =F:\Database1.mdb"
rs.Open "SELECT * FROM Tabelle1" , cn, adOpenStatic, adUseClient
ein Traum 👍

Leider haben nicht alle Anwender hier Access. Auch wenn man Access nur als Schnittstelle verwenden kann, möchte ich gerne versuchen direkt auf die Excel-Tabelle zu greifen.

Geht das auch so leicht von den Befehlen?

n0vize
vor 8 Jahre
Hallo,

bin aufgrund meiner Such nach einem Tool um Materialstämme anzulegen hierauf gestossen.

Bspw. würde ich gerne mittels Script den Materialstamm auf weitere VKOrg verteilen.

Leider sind meine Kenntnisse im Script Bereich bescheiden.

Kann mir jemand von Euch helfen, das Script so anzupassen, dass es die Daten aus einer Excel-Datei liest?

Vielen Dank im Voraus.

Gruss, novize

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]/usr/ctxtRMMG1-MATNR").text = "FL 6.70HU"
session.findById("wnd[0]/usr/ctxtRMMG1_REF-MATNR").text = "FL 6.70HU"
session.findById("wnd[0]/usr/ctxtRMMG1_REF-MATNR").setFocus
session.findById("wnd[0]/usr/ctxtRMMG1_REF-MATNR").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[1]/usr/ctxtRMMG1-WERKS").text = "2900"
session.findById("wnd[1]/usr/ctxtRMMG1-VKORG").text = "2900"
session.findById("wnd[1]/usr/ctxtRMMG1-VKORG").setFocus
session.findById("wnd[1]/usr/ctxtRMMG1-VKORG").caretPosition = 4
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 11
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP13/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2485/ctxtMARC-FHORI").text = "001"
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP13/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2484/ctxtMARC-LGPRO").text = ""
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP13/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2484/ctxtMARC-LGPRO").setFocus
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP13/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2484/ctxtMARC-LGPRO").caretPosition = 0
session.findById("wnd[0]").sendVKey 11
TyloHH
vor 8 Jahre
Zitat von: n0vize 

Hallo,

bin aufgrund meiner Such nach einem Tool um Materialstämme anzulegen hierauf gestossen.

Bspw. würde ich gerne mittels Script den Materialstamm auf weitere VKOrg verteilen.

Leider sind meine Kenntnisse im Script Bereich bescheiden.

Kann mir jemand von Euch helfen, das Script so anzupassen, dass es die Daten aus einer Excel-Datei liest?

Hi,

schau mal ob es mit diesem Code klappt.

Hinweise

- Zeile 1 in der Exceldatei wird ignoriert (wegen Überschriften)

- zur Zeit werden nur die ersten drei Spalten erfasst, kann aber beliebig erweitert werden

- bitte überprüfe den Dateipfad, ggf. anpassen

- auch den Tabellennamen

- bitte überprüfen ob die richtigen Felder überschrieben werden

- siehe dazu in den Zeilen wo [...].text = VAR

- ggf. nur mit einer Tabelle mit einer Zeile test oder in der Sandbox

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
Set xclapp = CreateObject("Excel.Application")
Set xclwbk = xclapp.Workbooks.Open("C:\Datei.xlsx")
set xclsht = xclwbk.Sheets("Tabelle1")

for i = 2 to xclapp.ActiveCell.SpecialCells(11).Row
for j = 1 to xclapp.ActiveCell.SpecialCells(11).Column 
if j=1 then MATNR = xclsht.Cells(i,j).Value ‚Spalte A
if j=2 then MATNR2 = xclsht.Cells(i,j).Value ‚Spalte B
if j=3 then VKORG = xclsht.Cells(i,j).Value ‚Spalte C
next
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").text = MATNR1
session.findById("wnd[0]/usr/ctxtRMMG1_REF-MATNR").text = MATNR2
session.findById("wnd[0]/usr/ctxtRMMG1_REF-MATNR").setFocus
session.findById("wnd[0]/usr/ctxtRMMG1_REF-MATNR").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[1]/usr/ctxtRMMG1-WERKS").text = VKORG
session.findById("wnd[1]/usr/ctxtRMMG1-VKORG").text = VKORG
session.findById("wnd[1]/usr/ctxtRMMG1-VKORG").setFocus
session.findById("wnd[1]/usr/ctxtRMMG1-VKORG").caretPosition = 4
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 11
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP13/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2485/ctxtMARC-FHORI").text = "001"
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP13/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2484/ctxtMARC-LGPRO").text = ""
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP13/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2484/ctxtMARC-LGPRO").setFocus
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP13/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2484/ctxtMARC-LGPRO").caretPosition = 0
session.findById("wnd[0]").sendVKey 11

next
msgbox "Alle " & cstr(xclapp.ActiveCell.SpecialCells(11).Row - 1) & " Excel-Zeilen wurden verarbeitet."

Set xclwbk = Nothing
Set xclsht = Nothing
xclapp.Quit
set xclapp = Nothing