Hallo zusammen.
Habe hier ein Problem, welches mich noch in den Wahnsinn treibt.
Ich möchte aus der Tabelle LFA1 das Feld "NAME1" auslesen. Als Queryparameter habe ich "LIFNR" = '54199'.
Ich möchte also aus der Kreditorennummer den vollständigen Namen des Lieferanten herausfinden.
Mache ich dies über die Transaktion SE16N im SAP, dann wird da im Feld auch was angezeigt.
Ich bekomme aber immer ein leeres Ergebnis. Andere Tabellen (MARA, MARC) funktionieren wunderbar, nur diese nicht :(
Hier mal mein Code:
Option Explicit
Public Sub SAPLogin()
'Variablen definieren
Dim FUBA_rfc_read_table, T_I_Options, T_I_Fields, T_E_Data, conn, sap As Object
Dim ret As Boolean
Dim strDataRow, DataRow, SAP_MAKT_DE, SAP_MARA_DE, SAP_LFA1_DE, SAP_MARC_DE
Dim MatNr, KurzText, NettoGewicht, Legierung, FormFaktor, Lieferant, VP, Lager, Lieferantenname As String
'SAP-Objekt erstellen
Set sap = CreateObject("SAP.Functions")
Set conn = sap.Connection
'Anmeldedaten anlegen
conn.System = "SAP Test"
conn.client = "001"
conn.user = "****"
conn.Password = "****"
conn.Language = "DE"
conn.RfcWithDialog = False
'Login
If conn.Logon(0, True) <> True Then
MsgBox "Login NICHT erfolgreich", vbCritical, "Logon Fehler"
Unload frmMatNr
Exit Sub
Else
'MsgBox "Login erfolgreich", vbOKOnly, "Comment"
End If
'###########################################################################
'###########################################################################
'Lieferant aus Kreditorennummer
Set FUBA_rfc_read_table = sap.Add("RFC_READ_TABLE")
With FUBA_rfc_read_table
.exports("QUERY_TABLE") = "LFA1"
.exports("DELIMITER") = "|" 'Delimiter
End With
Set T_I_Options = FUBA_rfc_read_table.Tables("OPTIONS")
Set T_I_Fields = FUBA_rfc_read_table.Tables("FIELDS")
Set T_E_Data = FUBA_rfc_read_table.Tables("DATA")
T_I_Options.AppendRow
T_I_Options(1, "TEXT") = "MANDT EQ '001' and LIFNR EQ '54199'"
T_I_Fields.AppendRow
T_I_Fields(1, "FIELDNAME") = "NAME1"
ret = FUBA_rfc_read_table.Call
If T_E_Data.RowCount > 0 And ret = True Then
strDataRow = T_E_Data(1, 1)
DataRow = Split(strDataRow, "|")
If strDataRow = "" Then
SAP_LFA1_DE = DataRow
Else
SAP_LFA1_DE = DataRow(0)
End If
End If
If T_E_Data.RowCount > 0 Then
KurzText = T_E_Data(1, 1)
Else
KurzText = "Nicht gepflegt"
End If
Debug.Print KurzText
Call T_E_Data.freetable
Call T_I_Fields.freetable
Call T_I_Options.freetable
'###########################################################################
conn.LogOff
End Sub
Das ist ein Schnipsel aus dem kompletten Script, welches ich zum Testen ausgelagert habe. Daher auch die vielen Deklarationen. Ich weiss, der Code ist wohl nicht der sauberste, aber bei anderen Dingen funktioniert's :D
strDataRow ist leer und damit bekomme ich bei der debug-Ausgabe immer ein "Nicht gepflegt".
Hab ich nen Denkfehler? Ist die Tabelle irgendwie speziell? Wenn ja, stehen die gewünschten Daten auch evtl in einer anderen Tabelle?
Über Hilfe wäre ich sehr dankbar 🙂
Bearbeitet vom Benutzer
vor 9 Jahre
|
Grund: Nicht angegeben