SAP Jobsuche bei DV-Treff
Vigo
  • Vigo
  • SAP Forum - Neuling Thema Starter
vor 10 Jahre
Hallo zusammen!

Ich bin neu in diesem Forum und hoffe, dass ich eine Hilfestellung für mein Problem finde.

Ich möchte gern ein Excel- Tool mit VBA entwickeln, welches aus einer Excel- Tabelle Daten in SAP importiert und die erforderlichen Daten, welche benötigt werden, in die Excel exportiert.

Ich habe schon folgendes (Anmeldung SAP):

Zitat:

Option Explicit

Public Sub Anmelden_an_SAP()

Dim functionCtrl, sap_connection As Object

Dim SAP_Anmeldung As Boolean

Dim SAP_Benutzername, SAP_Passwort As String

Set functionCtrl = CreateObject("SAP.Functions")

Set sap_connection = functionCtrl.Connection

With sap_connection

.RfcWithDialog = True

If .Logon(0, False) <> True Then

'Nur wenn keine Verbindung zu SAP kommt eine Fehlermeldung

.LastError

SAP_Anmeldung = False

Else

SAP_Anmeldung = True

End If

End With

If sap_connection.IsConnected Then

MsgBox "Verbindung mit SAP hergestellt"

Else

MsgBox "Keine Verbindung mit SAP hergestellt"

End If

End Sub

Die Verbingung steht soweit(die Messagebox gibt aus, dass die Verbindung mit SAP hergestellt ist).

Ich würde nun gerne aus Tabellenblatt x Materialnummern (Spalte A2 bis zuletzte gefüllte Zeile) in SAP importieren. Dabei sollen folgende Informationen aus SAP exportiert werden: Materialnummer,Materialkurztext,Rundungswert,Planungskalender,Bedarfsvorlaufszeit/ Ist- RW, Mindestbestellgröße, Sicherheitsbestand, stapelbar, Planlieferzeit.

Manuell geschieht das über die Transaktion ZPMS, man lädt die Daten in den Zwischenspeicher hoch, wählt das Layout aus und führt die Transaktion aus.

Die Umsetzung mittels Code ist mir irgendwie nicht klar.

Wie importiere ich die Daten?

Kann mir da jemand helfen? Das wäre wirklich toll!

Viele Grüße, Vigo

Förderer

Alpmann
vor 10 Jahre
Hallo Vigo,

mit dieser Erweiterung deines Programmes kannst du den

Materialkurztext in deutscher Sprache zu einem Material lesen.

Da es bei euch um etwas selbest geschriebenes (Z-Transaktion) geht, am besten in der IT nachfragen. Die müssten ja wissen, was das Programm im Detail macht und wo die Quellen anzuzapfen sind.

Dim FUBAU_rfc_read_table As Object

DIM T_I_Options As Object

Dim T_I_Fields As Object

Dim T_E_Data As Object

' lesen SAP-Tabelle MAKT

Set FUBAU_rfc_read_table = functionCtrl.Add("RFC_READ_TABLE")

With FUBAU_rfc_read_table

.exports("QUERY_TABLE") = "MAKT"

.exports("DELIMITER") = "|" 'Delimiter

End With

Set T_I_Options = FUBAU_rfc_read_table.Tables("OPTIONS")

Set T_I_Fields = FUBAU_rfc_read_table.Tables("FIELDS")

Set T_E_Data = FUBAU_rfc_read_table.Tables("DATA")

T_I_Options.AppendRow

T_I_Options(1, "TEXT") = "MANDT EQ '100' and MATNR EQ '0000000004711' and SPRAS EQ 'D'"

T_I_Fields.AppendRow

T_I_Fields(1, "FIELDNAME") = "MAKTX"

' Aufruf des FUBAs

ret = FUBAU_rfc_read_table.Call

If T_E_Data.RowCount > 0 And ret = True Then

strDataRow = T_E_Data(1, 1)

DataRow = Split(strDataRow, "|")

SAP_MAKT_DE = DataRow(0)

End If

Call T_E_Data.freetable

Call T_I_Fields.freetable

Call T_I_Options.freetable

Mit freundlichen Grüßen

Matthias Alpmann

Vigo
  • Vigo
  • SAP Forum - Neuling Thema Starter
vor 10 Jahre
Hallo Matthias!

Ich freu mich über deine Antwort! Vielen Dank, dass du dir die Zeit nimmst!

Ich bin zugegebenermaßen etwas irritiert wegen

Zitat:

mit dieser Erweiterung deines Programmes kannst du den

Materialkurztext in deutscher Sprache zu einem Material lesen.

Es sollen ja Materialnummern übergeben werden. Der Materialtext ist nachher eines der Ausgabefelder.

Mir ist auch nicht ganz ersichtlich was hier der Importparameter sein soll.

Könntest du mir deinen Code schrittweise erklären?

Viele Grüße und eine schöne Woche,

Vigo

Alpmann
vor 10 Jahre
Hallo Vigo,

zunächst einmal Entschuldigung, dass ich mich erst so spät wieder melde.

Wenn ich dich richtig verstanden habe, dann hast du eine Excel-Tabelle mit Materialnummern (in Spalte 1). Die anderen Spalten sollen mit den entsprechenden Werten aus SAP gefüllt werden.

Nach deiner Anmeldung im SAP musst du dann für jede Zeile im Excel eine Datenbeschaffung aus dem SAP vornehmen.

Mit diesem Code (der dann nur ein kleiner Teil der gesamten Datenbeschaffung ist), kannst du zu einer gegebenen Materialnummer die deutsche Materialkurzbezeichung auslesen.

Hierzu benutze ich den Funktionsbaustein RFC_READ_TABLE, mit dem man Tabelleninhalte aus dem SAP lesen kann.

Hier ein paar Anmerkungen:

.exports("QUERY_TABLE") = "MAKT"

Tabelle MAKT enthält die Materialkurztexte in den unterschiedlichen Sprachen.

.exports("DELIMITER") = "|" 'Delimiter

Hiermit gibst du ein Trennzeichen an, mit dem die zurückgegebenen Werte getrennt werden.

T_I_Options.AppendRow

T_I_Options(1, "TEXT") = "MANDT EQ '100' and MATNR EQ '0000000004711' and SPRAS EQ 'D'"

Hiermit füge ich eine Eingrenzungszeile ein.

MANDT ist der Mandandt

MATNR ist die Materialnummer

SPRAS ist die Sprache (D = deutsch)

T_I_Fields.AppendRow

T_I_Fields(1, "FIELDNAME") = "MAKTX"

Hier sage ich welche Felder ich aus der Tabelle haben möchte.

ret = FUBAU_rfc_read_table.Call

Hiermit wird der Funktionsbaustein im SAP aufgerufen.

If T_E_Data.RowCount > 0 And ret = True Then

strDataRow = T_E_Data(1, 1)

DataRow = Split(strDataRow, "|")

SAP_MAKT_DE = DataRow(0)

End If

Wenn Datensätze zurückgegeben wurden (T_E_Data.RowCount > 0) und der Aufruf (ret = True) keine Fehler bereitet hat, dann wird in das Feld SAP_MAKT_DE der Kurztext übernommen. Dies müsste dann bei dir in die Excel-Tabelle geschrieben werden.

Für die anderen Felder (Rundungswert, Planungskalender, Bedarfsvorlaufszeit, Ist-RW, Mindestbestellgröße, Sicherheitsbestand, stapelbar, Planlieferzeit) müstest du dann von deiner IT-Abteilung gesagt bekommen, woher diese Werte ermittelt werden. Die anderen Werte können dann genauso wie die Beschaffung des Materialkurtextes Online aus dem SAP gelesen werden.

Hier der komplette Code:

Dim FUBAU_rfc_read_table As Object

DIM T_I_Options As Object

Dim T_I_Fields As Object

Dim T_E_Data As Object

' lesen SAP-Tabelle MAKT

Set FUBAU_rfc_read_table = functionCtrl.Add("RFC_READ_TABLE")

With FUBAU_rfc_read_table

.exports("QUERY_TABLE") = "MAKT"

.exports("DELIMITER") = "|" 'Delimiter

End With

Set T_I_Options = FUBAU_rfc_read_table.Tables("OPTIONS")

Set T_I_Fields = FUBAU_rfc_read_table.Tables("FIELDS")

Set T_E_Data = FUBAU_rfc_read_table.Tables("DATA")

T_I_Options.AppendRow

T_I_Options(1, "TEXT") = "MANDT EQ '100' and MATNR EQ '0000000004711' and SPRAS EQ 'D'"

T_I_Fields.AppendRow

T_I_Fields(1, "FIELDNAME") = "MAKTX"

' Aufruf des FUBAs

ret = FUBAU_rfc_read_table.Call

If T_E_Data.RowCount > 0 And ret = True Then

strDataRow = T_E_Data(1, 1)

DataRow = Split(strDataRow, "|")

SAP_MAKT_DE = DataRow(0)

End If

Call T_E_Data.freetable

Call T_I_Fields.freetable

Call T_I_Options.freetable

Mit freundlichen Grüßen

Matthias Alpmann

Vigo
  • Vigo
  • SAP Forum - Neuling Thema Starter
vor 10 Jahre
Hallo Matthias!

Ich freu mich über deine Antwort und über deine Erläuterungen! Ich werd morgen gleich mal zur IT schreiten für die restlichen Informationen und mich dann noch einmal melden.

Vielen Dank, dass du dir diese Mühe machst!

Viele Grüße,Vigo