SAP Jobsuche bei DV-Treff
MichaelS2
  • MichaelS2
  • SAP Forum - Neuling Thema Starter
vor 9 Jahre
Hallo Zusammen,

ich bin hier neu und habe folgendes Problem.

Ich möchte aus einem Serviceauftrag (IW32) mit einem Pushbutton

(GUIXT Image-Anweisung) im aktuellen Modus ein VBScript aufrufen.

Das VBScript soll eine Excel-Tabelle öffnet und den Inhalt einiger SAP Felder an Excelzellen des 1. Tabellenblattes übergeben. Das Aufrufen des VBScript und bestimmen der SAP Felder um die es geht ist noch kein Problem, aber leider bin ich mit dem Öffnen der Datei und den übergeben der Inhalte etwas überfordert.

Ich bin kein Programmierer, aber bisher konnte ich mit dem SAP GUI Scripting (durch Aufnahme + Änderungen) und GUIXT (leider ohne InputAssistant) doch einige Erleichterungen und Verbesserungen in SAP durchführen und meinen Kollegen zur Verfügung stellen. Niemand konnte sich bisher vorstellen, dass so etwas mit SAP geht ohne das man Programmierungen beauftragen muss.

So würde ich beginnen

GUIXT Script 🤤

Image (10,150) "Bericht.png" Start="Bericht.vbs"

Bericht.vbs 🤬

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

set session = Application.ActiveSession

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

'Datei öffnen wie????

Datei c:/..........XLS

'SAP Feldinhalt an Excelzelle übergeben????

xclsht.Cells(3,4).Value = session.findById("wnd[0]........").text

xclsht.Cells(4,2).Value = session.findById("wnd[0]........").text

xclsht.Cells(4,11).Value = session.findById("wnd[0]........").text

Kann mir jemand helfen?

Danke!

Förderer

newgui
vor 8 Jahre
Hallo Michael,

willkommen im Forum. War bei uns auch so, dass sich niemand vorstellen konnte was man auch als Nicht-Programmmierer mit ein wenig Interesse alles in SAP bewerkstelligen kann. Inzwischen gehört guixt und gui-scripting zu einem festen Bestandteil und erleichtert unsere Reports und Prozesse ungemein. 😁

Bzgl. deiner Frage, schau dir mal den Forumsbeitrag von mir an. Hatte vor einigen Jahren mehr oder weniger das selbe Problem.

http://www.dv-treff.de/yaf_postst7971_Ubrgabe-von-Variablen-an-excel-und-html.aspx 

Ich hoffe das hilft dir bei deinem Report.

mfg

newgui

MichaelS2
  • MichaelS2
  • SAP Forum - Neuling Thema Starter
vor 8 Jahre
Hallo newgui,

erst mal vielen Dank für die schnelle Antwort. Ich befürchte nur, dass ich mit dem Link nicht klar bzw. weiter (InputAssistant erforderlich?) kommen werde.

Uns werden teilweise kundenspezifische Excel-Dateien auf einem zentralen Laufwerk (nur abrufen) vorgegeben, bei denen ich je nach Bedarf 3 und mehr Zellen füllen möchte. Also für jeden Kunde würde ich ein VBScript erstellen. So etwas wie unter dem Link

http://www.koehn.ch/pdf-dokument-mit-daten-aus-dem-sap-erp-erzeugen/ 

mit Ausgabe in Excel schwebt mir vor, nur das wir GUIXT ohne Lizenzschlüssel haben.

Auch habe ich einen Link

https://scn.sap.com/thread/3805523 

siehe Antwort von Holger Kohn Oct 5, 2015 9:26 gesehen, wo ich gedacht habe, das müsste doch auch mit mehrere einzeln definierten Zellen funktionieren. Leider gescheitert und dann erst mal nicht weiter verfolgt.

Das VBScript ist so Ähnlich, wie das VBScript mit dem du http://www.dv-treff.de/yaf_postst15904_Anlage-von-Personalstammdaten-via-Batch-Input.aspx  doch arbeitest und ich habe noch ein drittes http://scn.sap.com/docs/DOC-57020  gefunden, mit dem ich bis jetzt gearbeitet habe.

Ich werde (wahrscheinlich leider diese Woche nicht mehr) noch mal versuchen mit einer Excel-Tabelle, die nur einen Eintrag (AuftragsNr.) hat, diesen aufzurufen und einen SAP Feld zurück zuschreiben.

Vielleicht bringt mich das weiter.

Gruß

Michael

MichaelS2
  • MichaelS2
  • SAP Forum - Neuling Thema Starter
vor 8 Jahre
Hallo Zusammen,

nach dem ich einiges im Internet gelesen und manchmal aber nicht wirklich verstanden habe, hatte es dann doch noch geklappt. Da ich so etwas nicht gefunden habe wollte mein Script allen zur Verfügung stellen, die wie ich als Nichtprogrammierer doch selbst in SAP mit GUIXT und VBScript einiges verändern/verbessern wollen. Sollte jemand in dem Script (funktioniert hat es) Fehler entdecken, so wäre ich über eine Rückmeldung dankbar.

Zusammenfassung

Über die GUIXT Image-Anweisung wird durch das Anklicken der Bericht.png Datei die Bericht.vbs Datei im aktiven SAP Modus ausgeführt. Dann wird Excel mit der angegebenen Excel-Datei gestartet und Stück für Stück die entsprechenden Excel-Zellen befüllt. Die SAP Felder habe ich über die Script-Aufzeichnung bzw. nicht beschreibbare Felder über den Scripting-Tracker identifiziert.

GUIXT Script

Image (10,150) "Bericht.png" Start="Bericht.vbs"

Bericht.vbs

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

set session = application.ActiveSession

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

Set xclapp = CreateObject("Excel.Application")

Set xclwbk = xclapp.Workbooks.Open("U:\........\Berich.xlsx")

set xclsht = xclwbk.Sheets("Tabelle1")

'Excel sichtbar machen

xclapp.Visible = True

'Auftragsnummer an Excel übertragen

xclsht.Cells(7, 😎.Value = session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/txtCAUFVD-AUFNR").text

'Kundenbestellnummer an Excel übertragen

xclsht.Cells(6, 5).Value = session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subSUB_SERVICE:SAPLCOI3:0300/txtPMSDO-BSTKD").text

'Auftragskurztext an Excel übertragen

xclsht.Cells(10, 4).Value = session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/txtCAUFVD-KTEXT").text

session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/txtCAUFVD-KTEXT").setFocus

session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/txtCAUFVD-KTEXT").caretPosition = 9

session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/subSUB_BTN:SAPLCOIH:1105/btnBTN_LTHE").press

'Auftragslangtext an Excel übertragen

xclsht.Cells(11, 1).Value = session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/subSUB_TEXT:SAPLCOIH:1103/cntlLTEXT/shell").text

session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/subSUB_TEXT:SAPLCOIH:1103/cntlLTEXT/shell").setSelectionIndexes 8,8

session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/subSUB_TEXT:SAPLCOIH:1103/cntlLTEXT/shell").firstVisibleLine = "1"

session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/subSUB_BTN:SAPLCOIH:1106/btnBTN_LTHE").press

'Standortdaten aufrufen

session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subSUB_ADRESSE:SAPLIPAR:0704/tabsTSTRIP_700/tabpADOB").select

'KundeText an Excel übertragen

xclsht.Cells(8, 2).Value = session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subSUB_ADRESSE:SAPLIPAR:0704/tabsTSTRIP_700/tabpADOB/ssubTSTRIP_SCREEN:SAPLIPAR:0130/subADRESSE:SAPLIPAR:0122/txtDIADR-NAME1").text

'Straße an Excel übertragen

xclsht.Cells(6, 2).Value = session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subSUB_ADRESSE:SAPLIPAR:0704/tabsTSTRIP_700/tabpADOB/ssubTSTRIP_SCREEN:SAPLIPAR:0130/subADRESSE:SAPLIPAR:0122/ctxtDIADR-STREET").text

'Plz in Variable übertragen

varPlz = session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subSUB_ADRESSE:SAPLIPAR:0704/tabsTSTRIP_700/tabpADOB/ssubTSTRIP_SCREEN:SAPLIPAR:0130/subADRESSE:SAPLIPAR:0122/txtDIADR-POST_CODE1").text

'Ort in Variable übertragen

varOrt = session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subSUB_ADRESSE:SAPLIPAR:0704/tabsTSTRIP_700/tabpADOB/ssubTSTRIP_SCREEN:SAPLIPAR:0130/subADRESSE:SAPLIPAR:0122/txtDIADR-CITY1").text

'Variablen PLZ und Ort verketten und an Excel übertragen

xclsht.Cells(7, 2).Value = varPlz + " " + varOrt

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

Gruß

Michael