Schönen guten Morgen newgui,
hier mal ein Beispiel für das lesen von Fertigungsaufträgen (realisiert allerdings in Access). Die Übernahme der einzelnen Felder habe ich hier aber gekürzt.
Mit RFC_READ_TABLE kann man keine Joins so wie in SQL angeben. Dafür müsste das aber mit Views funktionieren - die ja auch Joins enthalten können.
Ich bin aber der Meinung, dass man mit Funktionsbausteinen, die mehr Funktionalität zur Verfügung stellen (z. B. BAPI_PRODORD_GET_DETAIL) besser dran ist. Gerade, wenn man selber nicht genau weiß, wie das SAP arbeitet im Detail. Ein gutes Beispiel wäre hier zum Beispiel das ermitteln von offenen Bestellungen. Hier habe ich auch schon mal mittels RFC Daten aus der MD04 gelesen. Hier dann alles von Hand zu berücksichtigen ist schwer (Einteilungen, Auftragsbestätigungen, Auftragsbestätigung hat höhere Menge wie Einteilungen, ...). Lieber einen Baustein nehmen, der einem so etwas abnimmt.
Set FunctionCtrl = CreateObject("SAP.Functions")
Set SapConnection = FunctionCtrl.Connection
SapConnection.client = SAP_Client
SapConnection.User = SAP_User
SapConnection.Password = SAP_User_Passwort
SapConnection.Language = SAP_Sprache
SapConnection.HostName = SAP_Host
SapConnection.SystemNumber = SAP_SystemNumber
SapConnection.tracelevel = 0
If Not SapConnection.Logon(0, True) Then
MsgBox "SAP Anmeldung fehlgeschlagen!"
Exit Function
Else
' MsgBox "Logon erfolgreich!!"
End If
' Daten löschen
db.Execute ("DELETE * FROM [SAP Fertigungsaufträge Kopf];")
db.Execute ("DELETE * FROM [SAP Fertigungsaufträge Arbeitsplan];")
db.Execute ("DELETE * FROM [SAP Fertigungsaufträge Positionen];")
db.Execute ("DELETE * FROM [SAP Fertigungsaufträge FHM];")
Set tabKopf = db.OpenRecordset("SAP Fertigungsaufträge Kopf", dbOpenDynaset)
Set tabAPL = db.OpenRecordset("SAP Fertigungsaufträge Arbeitsplan", dbOpenDynaset)
Set tabPOS = db.OpenRecordset("SAP Fertigungsaufträge Positionen", dbOpenDynaset)
Set tabFHM = db.OpenRecordset("SAP Fertigungsaufträge FHM", dbOpenDynaset)
Set tabAuftrag = db.OpenRecordset("Fertigungsaufträge_Freigaben_01", dbOpenDynaset)
While tabAuftrag.EOF = False
Set fubau = FunctionCtrl.Add("BAPI_PRODORD_GET_DETAIL")
fubau.exports("NUMBER") = tabAuftrag![aufnr]
fubau.exports("ORDER_OBJECTS").Value(1) = "X"
fubau.exports("ORDER_OBJECTS").Value(2) = "X"
fubau.exports("ORDER_OBJECTS").Value(3) = "X"
fubau.exports("ORDER_OBJECTS").Value(4) = "X"
fubau.exports("ORDER_OBJECTS").Value(5) = "X"
fubau.exports("ORDER_OBJECTS").Value(6) = "X"
fubau.exports("ORDER_OBJECTS").Value(7) = "X"
fubau.exports("ORDER_OBJECTS").Value(8) = "X"
Set tdata_APL = fubau.tables("OPERATION")
Set tdata_header = fubau.tables("HEADER")
Set tdata_POS = fubau.tables("POSITION")
Set tdata_FHM = fubau.tables("PROD_REL_TOOL")
'Aufruf des FUBAs
ret = fubau.Call
If tdata_header.rowcount > 0 And ret = True Then
For i = 1 To tdata_header.rowcount
tabKopf.AddNew
tabKopf![ORDER_NUMBER] = tdata_header(i, 1)
tabKopf![PRODUCTION_PLANT] = tdata_header(i, 2)
tabKopf![MATERIAL_VERSION] = tdata_header(i, 48)
tabKopf.Update
Next i
End If
Call tdata_header.freeTable
If tdata_APL.rowcount > 0 And ret = True Then
For i = 1 To tdata_APL.rowcount
tabAPL.AddNew
tabAPL![routing_no] = tdata_APL(i, 1)
tabAPL![counter] = tdata_APL(i, 2)
tabAPL![SUBOPERATION] = tdata_APL(i, 46)
tabAPL.Update
Next i
End If
Call tdata_APL.freeTable
If tdata_POS.rowcount > 0 And ret = True Then
For i = 1 To tdata_POS.rowcount
tabPOS.AddNew
tabPOS![ORDER_NUMBER] = tdata_POS(i, "ORDER_NUMBER")
tabPOS![ORDER_ITEM_NUMBER] = tdata_POS(i, "ORDER_ITEM_NUMBER")
tabPOS![MATERIAL_VERSION] = tdata_POS(i, "MATERIAL_VERSION")
tabPOS.Update
Next i
End If
Call tdata_POS.freeTable
If tdata_FHM.rowcount > 0 And ret = True Then
For i = 1 To tdata_FHM.rowcount
If Trim(tdata_FHM(i, "CTRL_KEY")) = "1" Then
tabFHM.AddNew
tabFHM![routing_no] = tdata_FHM(i, "ROUTING_NO")
tabFHM![counter] = tdata_FHM(i, "COUNTER")
tabFHM![MATERIAL_VERSION] = tdata_FHM(i, "MATERIAL_VERSION")
tabFHM.Update
End If
Next i
End If
Call tdata_FHM.freeTable
tabAuftrag.MoveNext
Wend
tabAuftrag.Close
tabAPL.Close
tabKopf.Close
tabPOS.Close
SapConnection.Logoff
Mit freundlichen Grüßen
Matthias Alpmann