SAP Jobsuche bei DV-Treff
Steve85
  • Steve85
  • SAP Forum - Neuling Thema Starter
vor 9 Jahre
Hallo liebe Forum-Mitglieder,

ich habe eine Frage 😕

Und zwar habe ich eine Excel-Liste mit 200 Teilenummer für diese ich in der ME01 eine Source Liste anlegen muss.

Das heißt bei diesen 200 Teilenummern das gleiche "Valid from" & "Valid to" Datum sowie Vendor Nummer und einen Häckchen.

Wie kann ich das ganze automatisieren? Ich komme mit dem Recorder von SAP irgendwie nicht klar...

Vielen Dank :)

wreichelt
vor 9 Jahre
Hallo,

schaue Dir mal das Thema LSMW oder Batch-Input an.

Gruß

Wolfgang

ScriptMan
vor 9 Jahre
Hallo Steve85,

nur so am Rande:

SAP Script und SAP GUI Scripting sind unterschiedliche Themenbereiche. Hier in diesem Forum gibt es aber kein Unterforum speziell zu diesem Thema. Daher landen solche Anfragen entweder hier oder in SAP GuiXT, was aber auch nicht das gleiche ist.

Zu den bereits empfohlenen Methoden, wie man es lösen könnte, habe ich auch einen Link. Hier kann man sich eventuell eine Anregung holen, wie man so was mit den bereits vorhandenen SAP-Bordmitteln lösen kann. Die Voraussetzung ist, dass man mit dem SAP Skriptrecorder umgehen kann und das einmalig aufgezeichnete VB-Skript für die erste Teilenummer ohne die ersten 14 Zeilen weiter verwendet wird.

Viel Spaß beim Testen!

ScriptMan

Und der Link selbstverständlich auch noch:

http://scn.sap.com/thread/1699675 

Steve85
  • Steve85
  • SAP Forum - Neuling Thema Starter
vor 9 Jahre
Zitat von: wreichelt 

schaue Dir mal das Thema LSMW oder Batch-Input an.

Leider wird mir der Zugriff auf LSMW im System verweigert.

Ich habe mit dem Scriptrekorder nun einmal den Vorgang aufgezeichnet und so einen Code bekommen den ich einfach reinkopieren habe und die Zahlen, welche ich eingegeben habe durch die Platzhalter "Customer" ect. ersetzt.


for i = 2 to xclapp.ActiveCell.SpecialCells(11).Row
 for j = 1 to xclapp.ActiveCell.SpecialCells(11).Column 
  if j=1 then CUSTOMER =  xclsht.Cells(i,j).Value 
  if j=2 then  PRODUCT =  xclsht.Cells(i,j).Value 
  if j=3 then PRICE =  xclsht.Cells(i,j).Value 
 next
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/ctxtEINA-LIFNR").text = COSTOMER
session.findById("wnd[0]/usr/ctxtEINA-MATNR").text = PRODUCT
session.findById("wnd[0]/usr/ctxtEINE-WERKS").setFocus
session.findById("wnd[0]/usr/ctxtEINE-WERKS").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/txtEINE-APLFZ").text = PRICE session.findById("wnd[0]/usr/txtEINE-APLFZ").caretPosition = 2
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[11]").press

next
msgbox "All " & cstr(xclapp.ActiveCell.SpecialCells(11).Row - 1) & " Excel rows have been processed."

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

1. Warum kann ich die Bezeichnungen z.B. CUSTOMER nicht ändern in meine Bezeichnungen? Dann gibt er mir eine Fehlermeldung? (Expected end of statement)

2. Wie kann ich

if j=1 then CUSTOMER =  xclsht.Cells(i,j).Value
verstehen?

3. Es erscheint keine Box in der er sagt das er fertig ist, aber das steht doch da (msgbox?)? Muss ich Ihm sagen nach wie vielen Zeilen er stoppen soll? Denn Momentan erzeugt er ein paar mal Fehler und stoppt dann erst.

Vielen Dank für eure Hilfe! Finde es echt toll das ihr mir helft 🙂 Wenn ich das Script hinbekomm wär das echt eine Arbeitserleichterung 🙂

ScriptMan
vor 9 Jahre
Hallo Steve85,

anscheinend bist Du meinem Link gefolgt. Da ich aber auf die TA ME01 keinen Zugriff habe, kann ich auf das von Dir aufgezeichnete Skript nicht näher eingehen.

Soviel sei aber gesagt:

1. Das VB-Skript könnte auch so aussehen:


for i = 2 to xclapp.ActiveCell.SpecialCells(11).Row
 for j = 1 to xclapp.ActiveCell.SpecialCells(11).Column 
  if j=1 then PAR1 =  xclsht.Cells(i,j).Value 
  if j=2 then PAR2 =  xclsht.Cells(i,j).Value 
  if j=3 then PAR3 =  xclsht.Cells(i,j).Value 
 next
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/ctxtEINA-LIFNR").text = PAR1
session.findById("wnd[0]/usr/ctxtEINA-MATNR").text = PAR2
session.findById("wnd[0]/usr/ctxtEINE-WERKS").setFocus
session.findById("wnd[0]/usr/ctxtEINE-WERKS").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/txtEINE-APLFZ").text = PAR3
session.findById("wnd[0]/usr/txtEINE-APLFZ").caretPosition = 2
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[11]").press

next
msgbox "All " & cstr(xclapp.ActiveCell.SpecialCells(11).Row - 1) & " Excel rows have been processed."

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

D.h., dass die sog. "Platzhalter" besser als Variablen/ Parameter verstanden werden sollten.

Um zu erkennen, warum Du diese Variablen in Deine "Bezeichnungen" nicht ändern kannst, müsste man zuerst das konkrete Bsp. von Dir sehen.

2.

if j=1 then PAR1 =  xclsht.Cells(i,j).Value

Diese Programmzeile bedeutet, dass aus einer Excel-Mappe, die zuvor geöffnet wurde, aus einem Blatt (xclsht), aus einer Zelle mit der Zeile = i und Spalte = j ein Wert in die Variable PAR1 übertragen wird. Die Bedingung j=1 sichert ab, dass der Parameter aus der 1. Spalte im Excel abgegriffen wird.

Die Excel-Mappe könnte dabei z.B. so aussehen:


      A           B             C           D
1   PAR1          PAR2          PAR3      
2   1234          23            10,00
3   1235          24            11,00
4
3.
for i = 2 to xclapp.ActiveCell.SpecialCells(11).Row
Der o.g. Befehl weist an, die Schleife solange fortzusetzen, bis das absolute Zeilenende von Excel erkannt wird. Es ist nicht mit einer ersten leeren Zeile zu verwechseln. Wenn nach den mit Daten gefüllten Zeilen und Spalten einige Zeilen folgen, die leer sind, aber nicht gleichzeitig als absolutes Ende gelten, dann kann es schon zu der beschriebenen Erscheinung kommen.

Lösung:

Entweder man löscht alle "leeren Zeilen" und speichert die Excel-Mappe erneut (mit STRG / Ende jeder Zeit überprüfbar)

oder man baut zusätzliche Befehle in die Schleifen ein:

z.B.


for i = 2 to xclapp.ActiveCell.SpecialCells(11).Row
 if xclsht.Cells(i,j).Value = 0 then Exit for
 for j = 1 to xclapp.ActiveCell.SpecialCells(11).Column 
 if xclsht.Cells(i,j).Value = 0 then Exit for
 . . .

Meine Frage:

Wo bleiben in dem aufgezeichneten Skript die o.g. Variablen wie

"Valid from" , "Valid to" , "Vendor Nummer" und "ein Häckchen"?

Grüße,

ScriptMan

M&Mler
vor 9 Jahre
ähm :-)

Nimm doch einfach den SAP Standard

ME05 -> Orderbücher erzeugen. Dort per Mehrfachauswahl deine Materialnummern eingrenzen und im Anschluss "beim Speichern" nur den gewünschten Lieferanten markieren. Dauert keine 5 Minuten.

Grüße

Viez
  • Viez
  • SAP Forum - Neuling
vor 9 Jahre
Hallo Forum :)

ich habe ein Script auf dem beschriebenen Weg erstellt, erhalte aber immer diese Fehlermeldung:

UserPostedImage

Wo ist der Fehler bei mir? (Das ganze ist für die Transaktion CS02)


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:\Users\USERID\Desktop\CS02.xls")
set xclsht = xclwbk.Sheets("Sheet1")

for i = 2 to xclapp.ActiveCell.SpecialCells(11).Row
 for j = 1 to xclapp.ActiveCell.SpecialCells(11).Column 
  if j=1 then Option =  xclsht.Cells(i,j).Value 
  if j=2 then Wert =  xclsht.Cells(i,j).Value 
 next
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/btn%_AUTOTEXT001").press
session.findById("wnd[1]/usr/subPOS_SETP:SAPLCSDI:0710/txtRC29P-SELID").text = Option
session.findById("wnd[1]/usr/subPOS_SETP:SAPLCSDI:0710/txtRC29P-SELID").setFocus
session.findById("wnd[1]/usr/subPOS_SETP:SAPLCSDI:0710/txtRC29P-SELID").caretPosition = 7
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[4,0]").text = Wert
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[4,0]").setFocus
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[4,0]").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
next
msgbox "All " & cstr(xclapp.ActiveCell.SpecialCells(11).Row - 1) & " Excel rows have been processed."

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

Excel Datei ist folgendermaßen aufgebaut:


SpalteA  SpalteB   
1 Option  Wert  
2 12354   1,00
3 21144   0,80
....

Fehler gefunden, er konnte mit dem Begriff "Option" nichts anfangen.