Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1392to1396
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige