Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: BAPI_SalesOrder_GetList aus VBA aufrufen

BAPI_SalesOrder_GetList aus VBA aufrufen
26.11.2014 15:55:02
Joey
Hallo zusammen,
ich möchte gerne mittels VBA aus SAP mir eine Liste aller Aufträge mit Produkten zu jedem Auftrag in Excel anzeigen lassen.
Bisher habe ich ein Skript vorliegen, mit dem ich mir zu einer Auftragsnummer verschiedene Informationen anzeigen lassen kann:
Sub sap()
Dim oBook As Workbook
Dim oSheet As Worksheet
Dim oBapiCtrl As Object
Dim oBapiLogon As Object
Dim oSalesOrder As Object
Dim oCustomer As Object
Dim oProduct As Object
Dim oItem As Object
Dim iIndex As Integer
Set oBook = Application.ActiveWorkbook
Set oSheet = oBook.Worksheets(1)
Set oBapiCtrl = CreateObject("sap.bapi.1")
Set oBapiLogon = CreateObject("sap.logoncontrol.1")
oBapiCtrl.Connection = oBapiLogon.NewConnection
oBapiCtrl.Connection.hostname = "atvies9910zx"
oBapiCtrl.Connection.System = "SEP"
oBapiCtrl.Connection.Client = "100"
oBapiCtrl.Connection.User = oSheet.Cells(2, 3)
oBapiCtrl.Connection.Password = oSheet.Cells(3, 3)
oBapiCtrl.Connection.Language = "DE"
oBapiCtrl.Connection.SystemNumber = "56"
If oBapiCtrl.Connection.Logon(0, True)  True Then
MsgBox "User or Password incorrect", vbInformation, "SAP Logon"
Exit Sub
End If
If oBapiCtrl.Connection.IsConnected Then
Set oSalesOrder = oBapiCtrl.GetSAPObject("SalesOrder", oSheet.Cells(2, 5))
oSheet.Cells(6, 2).Value = "Sales Document"
oSheet.Cells(6, 3).Value = "Net Value"
oSheet.Cells(6, 4).Value = "Customer Number"
oSheet.Cells(6, 5).Value = "Document Date"
oSheet.Cells(6, 6).Value = "Number of Items"
oSheet.Cells(6, 7).Value = "Division"
oSheet.Cells(7, 2).Value = oSalesOrder.Getlist.salesdocument
oSheet.Cells(7, 3).Value = oSalesOrder.netvalue
oSheet.Cells(7, 4).Value = oSalesOrder.orderingparty.customerno
oSheet.Cells(7, 5).Value = oSalesOrder.documentdate
oSheet.Cells(7, 6).Value = oSalesOrder.items.Count
oSheet.Cells(7, 7).Value = oSalesOrder.Division
End If
iIndex = 10
oSheet.Cells(9, 2).Value = "Order No"
oSheet.Cells(9, 3).Value = "Item No"
oSheet.Cells(9, 4).Value = "Product Code"
oSheet.Cells(9, 5).Value = "Product Description"
oSheet.Cells(9, 6).Value = "Selling Quantity"
oSheet.Cells(9, 7).Value = "Selling UoM"
For Each oItem In oSalesOrder.items
oSheet.Cells(iIndex, 2).Value = oItem.SalesDocumentno
oSheet.Cells(iIndex, 3).Value = oItem.itemNo
oSheet.Cells(iIndex, 4).Value = oItem.material.material
oSheet.Cells(iIndex, 5).Value = oItem.material.materialdescription
oSheet.Cells(iIndex, 6).Value = oItem.targetquantity
oSheet.Cells(iIndex, 7).Value = oItem.targetquantityunit
iIndex = iIndex + 1
Next
Set oBapiLogon = Nothing
Set oBapiCtrl = Nothing
End Sub
Ich bin ein ziemlicher Anfänger in VBA-Programmierung und habe dieses Skript auch nur mithilfe etlicher Foren zusammenstellen können.
Könnt ihr mir helfen und erklären, wie ich die Funktion SalesOrder.GetList mit einbaue, um das oben Geforderte zu erreichen?
Viele Grüße,
Joey

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: BAPI_SalesOrder_GetList aus VBA aufrufen
02.12.2014 11:02:29
fcs
Hallo Joey,
ich hab bisher nichts mit der Einbindung von SAP-Objekten in eine Excel-Umgebung zu tun gehabt.
Deshalb kann ich nur prinzipielle Hinweise geben, wie du evtl. weiterkommst.
Blende im VBA-Editor via Menü "Ansicht" das "Lokalfenster" ein. In diesem Fenster werden während der Makroausführung die Eigenschaften und Inhalte der deklarierten Variablen angezeigt. Bei Objekt-Variablen bzw. deren Unterobjekten kann man durch Klick auf das Symbol + bzw. - Deteilinformationen einblenden bzw. ausblenden.
Führe das Makro schrittweise aus - Fortsetzung jeweils mit Funktionstaste F8. Falls du bestimmte Makroabschnitte schneller ausführen möchtes, dann kann kannst du per Mausklick am linken Rand des Code-Fensters auch Haltepunkte setzen. Hier stoppt das Makro dann jeweils.
Im Lokalfenster kannst du dann die Eigenschaften und Werte der Variablen verfolgen.
GetList scheint in SAP eine Anweisung/Methode zu sein, um die Inhalte eines SAP-Objektes abzurufen.
Ich weiss aber nicht, ob GetList ein Objekt erzeugt oder ein Datenarray.
Deklariere deshalb eine Variable asl Variant
Dim varSalesList as Variant
Füge nach der Zeile
    Set oSalesOrder = oBapiCtrl.GetSAPObject("SalesOrder", oSheet.Cells(2, 5))

im ersten Versuch die Zeile
Set varSalesList = oSalesOrder.GetList
ein und führe das Makro bis zu dieser Zeile aus. Wenn kein Fehler auftritt, dann schau dir im Lokal-Fenster die Eigenschaften/Inhalte der Variablen an. Da es eine Objekt-Variable ist kannst dann versuchen über Objekt-Eigenschaften oder Items-Werte an die gewünschten Infos zu kommen.
Gibt es einen Fehler, dann versuche es mit
varSalesList = oSalesOrder.GetList
Die Daten liegen dann Daten-Array vor und können ggf. in 2 geschachtelten For-Next-Schleifen über die Zeilen und Spalten des Array in eine Tabelle eingelesen werden.
Gruß
Franz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige