Hallo,
ich möchte eine Excel Tabelle auslesen und die versch. Datensätze dann in SAP verbuchen.
Habe mir mal in der SAP Hilfe das Beispiel zu RFC_CUSTOMERS_GET angesehen. Das funktioniert auch.
Ich möchte nun wissen, wie man als Exportparameter an einen Funktionsbaustein ganze Tabellen übergibt. Einzelne Felder sind klar.
Wäre nett, wenn mir jemand ein paar Zeilen Code posten könnte.
Hier ist der Code:
Sub GetCustomer()
'
'Deklaration der Objekte und Variablen
'
Dim functionCtrl As Object
Dim sapConnection As Object
Dim theFunc As Object
'Erstellen eines Funktionsobjektes
'
Set functionCtrl = CreateObject("SAP.Functions")
Set sapConnection = functionCtrl.Connection
'
'Logon mit Initialwerten
'
sapConnection.Client = "000"
sapConnection.user = "SAPuser"
sapConnection.Language = "DE"
If sapConnection.logon(0, False) <> True Then
MsgBox "Keine Verbindung zum R/3!"
Exit Sub
End If
'
'Referenz auf Funktionsobjekt "RFC_CUSTOMER_GET"
'
Set theFunc = functionCtrl.Add("RFC_CUSTOMER_GET")
'Vorbereitung der Ausgabe auf EXCEL-Sheet
'
Worksheets(1).Select
Cells.Clear
'
'Deklaration
'
Dim customers As Object
Dim returnFunc As Boolean
Dim startzeil As Integer
Dim endcol As Integer
Dim the_name As String
startzeil = 1
'Festlegen der Importparameter für Funktionsaufruf
'
For start_char = Asc("A") To Asc("Z")
the_name = Chr$(start_char) + "*"
'
theFunc.exports("NAME1") = the_name
theFunc.exports("KUNNR") = "*"
returnFunc = theFunc.Call
die_exception = theFunc.Exception
If returnFunc = True Then
Set customers = theFunc.tables.Item("CUSTOMER_T")
endcol = 0
Call display_customers(the_name, customers, startzeil, endcol)
startzeil = endcol
Set customers = Nothing
Else
If die_exception = "NO_RECORD_FOUND" Then
Cells(startzeil, 1) = "Keine Werte vorhanden für " + the_name
startzeil = startzeil + 1
Else
MsgBox "Fehler beim Zugriff auf Funktion im R/3 ! "
Exit Sub
End If
End If
Next start_char
End Sub
Sub display_customers(aName As String, ByRef customers_table As Object, start_zeil As Integer, ByRef end_col As Integer)
'
'Anzeige des Tabellenkopfes
'
Cells(start_zeil, 1) = "KundenNr."
Cells(start_zeil, 2) = "Anrede "
Cells(start_zeil, 3) = "Kundenname " + aName
Cells(start_zeil, 4) = "PLZ"
Cells(start_zeil, 5) = "Ort"
Cells(start_zeil, 6) = "Tel.Nr "
'Hervorhebung der Fonts
Range(Cells(start_zeil, 1), Cells(start_zeil, 6)).Font.Bold = True
'
'Zeigt Inhalte der Kundentabelle an
'
bManyCustomers = False
If (bManyCustomers = False) Then
i = start_zeil + 2
For Each Customer In customers_table.Rows
Cells(i, 1) = Trim(Customer("KUNNR"))
Cells(i, 2) = Customer("ANRED")
Cells(i, 3) = Customer("NAME1")
Cells(i, 4) = Customer("PSTLZ")
Cells(i, 5) = Customer("ORT01")
Cells(i, 6) = Customer("TELF1")
i = i + 1
Next
End If
end_col = i
End Sub
wie gesagt....
meine frage ist nun, wie man hier ganze tabellen zum exportieren (also dem fb übergeben) kann.
Für diesen FB ist dies zwar nicht nötig, bzw. möglich, aber generell braucht man diese funktionalität natürlich.
Einzelne Felder werden hier mit:
theFunc.exports("NAME1") = the_name
theFunc.exports("KUNNR") = "*"
übergeben.
Ich habe soetwas ähnliches schon öfters in java gemacht (natürlich nicht excelspezifisch..)
da würde das so gehen:
//werte für plantselection
codes = function.getTableParameterList().getTable("PLANTSELECTION");
codes.appendRow();
codes.setValue ("I","SIGN");
codes.setValue ("EQ","OPTION");
codes.setValue ("0010","PLANT_LOW");
codes.setValue ("0010","PLANT_HIGH");
// führe Funktion aus
try
{
mConnection.execute(function);
}
catch(Exception connectExcep)
{
//System.out.println("connectExcep:"+connectExcep.getMessage());
System.out.println("fehler");
}
wobei "codes" die zu übergebende interne tabelle darstellt....
vom prinzip her muß das in vb genauso funktionieren....
vielleicht kannst findest du es ja raus ich bin nicht gerade ne leuchte was vb angeht...
tut mir leid, wenn das vielleicht im falschen board steht..aber VBA und SAP gab es leider nicht
Schöne Grüße und vielen dank
kevin