Werte per RFC importieren - nicht für alle Tabellen?

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von georg993 (ForumUser / 7 / 1 / 0 ) »
Hallo ABAP-Experten,

ich verwende den Code aus dem Tricktresor für den Import von SAP-Tabellen nach Excel:
http://www.tricktresor.de/blog/werte-pe ... portieren/

Das Auslesen von T001 und EORD (Orderbuch) funktioniert mit dem Code. Wenn ich aber versuche, die Materialstämme aus MARA oder die Lieferantendaten aus LFA1 auszulesen, meldet Excel den Fehler „DATA_BUFFER_EXCEEDED“.
Nach Bestätigung der Meldung mit OK kommt im VBA-Editor der Laufzeitfehler 9: Index außerhalb des gültigen Bereichs in der Code-Zeile
ReDim Preserve SMDdata(SMDTabObj.Rows.Count, UBound(T) - 1)
am Ende der Sub SMDRead_Table(Table As String).

Woran kann das liegen? Wie müsste man den VBA-Code ändern, damit auch z. B. die LFA1 importiert werden kann? (Ich benötige zwar alle Datensätze, aber eigentlich nur ausgewählte Felder.)

An Login- und Rechteproblemen liegt es nicht.
Software:
SAP EHP7 FOR SAP ERP 6.0, NETWEAVER 7.4
Client: Windows 7, MS Excel 2010

Gruss
G.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
Hallo Mr.G.
Das liegt an der Obgrenze einer Zeile von 512 Bytes pro Zeile inkl.Trennzeichen. (Siehe SE37 zu RFC_READ_TABLE)
Die Gesamtmenge aller Zeichen einer MARA-Zeile überschreitet das Limit von 512.
Du solltest hier lieber einzelne Mara-Felder lesen.
lg Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von georg993 (ForumUser / 7 / 1 / 0 ) »
Danke Jens,

so etwas in der Art hatte ich schon vermutet.

> Du solltest hier lieber einzelne Mara-Felder lesen.
Hm, und wie mache ich das per VBA? Hast Du evtl. ein Beispiel?

Gruß
G.

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Hallo Georg,

wo hapert es denn?
Wie die Parameter des FuBa an sich gefüllt werden müssen um einzelne Felder in der Rückgabetabelle zu erhalten.
Oder wie man die Parameter des FuBa aus VBA heraus füllt, wenn man weiß wie sie gefüllt werden müssen?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von georg993 (ForumUser / 7 / 1 / 0 ) »
Hallo Stefan,
Ich habe zwar schon einiges in VBA gemacht, bin aber SAP-Neuling. Also hapert es an beidem.
Gruß
Georg

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Hallo Georg,

im Coding vom Tricktresor findest du folgende auskommentierte Zeilen:

Code: Alles auswählen.


'******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables("FIELDS")
SMDTabObj.freetable

'SMDTabObj.appendrow
'SMDTabObj.appendrow
'SMDTabObj.cell(1, 1) = "CHECKTABLE"
'SMDTabObj.cell(2, 1) = "KEYFLAG"
Nimm mal die Kommentare weg und füge statt "CHECKTABLE" und "KEYFLAG" die Feldnamen in Großbuchstaben ein, die du auslesen willst.
Das könnte deine Probleme schon lösen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von georg993 (ForumUser / 7 / 1 / 0 ) »
Hi,

habe es jetzt zum Laufen gebracht mit folgendem VBA-Code:

Code: Alles auswählen.

'******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables("FIELDS")
SMDTabObj.FreeTable

If Table = "LFA1" Then
  SMDTabObj.appendrow
  SMDTabObj.cell(1, 1) = "LIFNR"

  SMDTabObj.appendrow
  SMDTabObj.cell(2, 1) = "LIFNR"
  SMDTabObj.appendrow
  SMDTabObj.cell(3, 1) = "NAME1"
  SMDTabObj.appendrow
  SMDTabObj.cell(4, 1) = "NAME2"
  SMDTabObj.appendrow
  SMDTabObj.cell(5, 1) = "SORTL"
  SMDTabObj.appendrow
  SMDTabObj.cell(6, 1) = "LAND1"
  SMDTabObj.appendrow
  SMDTabObj.cell(7, 1) = "PSTLZ"
  SMDTabObj.appendrow
  SMDTabObj.cell(8, 1) = "ORT01"
  SMDTabObj.appendrow
  SMDTabObj.cell(9, 1) = "STRAS"
End If 
Warum ich die erste gewünschte Spalte zweimal auslesen muss, habe ich noch nicht herausgefunden. Aber so ist mir erstmal geholfen. Danke.

Gruß
G.

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
Moin.
das mußt Du auch nicht, wenn Du die SMDTabObj.CELL(n,1) - Index werte neu sortierst.
e.g.
'******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables("FIELDS")
SMDTabObj.FreeTable

If Table = "LFA1" Then
SMDTabObj.appendrow
SMDTabObj.cell(1, 1) = "LIFNR"
SMDTabObj.appendrow
SMDTabObj.cell(2, 1) = "NAME1"
SMDTabObj.appendrow
SMDTabObj.cell(3, 1) = "NAME2"
SMDTabObj.appendrow
SMDTabObj.cell(4, 1) = "SORTL"
SMDTabObj.appendrow
SMDTabObj.cell(5, 1) = "LAND1"
SMDTabObj.appendrow
SMDTabObj.cell(6, 1) = "PSTLZ"
SMDTabObj.appendrow
SMDTabObj.cell(7, 1) = "ORT01"
SMDTabObj.appendrow
SMDTabObj.cell(8, 1) = "STRAS"
End If
lg Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von georg993 (ForumUser / 7 / 1 / 0 ) »
Hallo Jens,

so wie in Deinem zuletzt geposteten Code hatte ich es vorher auch versucht. Dabei wurde die LIFNR aber nicht in das Excel-Sheet eingetragen, sondern in Spalte A landete der NAME1. Damit die LIFNR in Spalte A landet, muss ich sie zweimal auslesen. Das heißt, die SMDTabObj.cell(1, 1) wird nicht ins Excel-Sheet übernommen. Es fängt mit SMDTabObj.cell(2, 1) an.

Was meinst Du mit "Index werte neu sortieren"?

Gruß
G.

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
Moin.
Nun mein erster Gedanke war, das versehentlich LIFNR 2 mal angefordert wird.
Statt einen Wert 2 mal zu lesen, würde ich lieber das Befüllen der Excel - Zellen anpassen.
Statt:

Code: Alles auswählen.

For i = 0 To UBound(SMDdata, 1)
    For k = 0 To UBound(SMDdata, 2)
        Cells(i + 1, UBound(SMDdata, 2) - k + 1).Value = SMDdata(i, k)
Next k, i
Dann lieber:

Code: Alles auswählen.

For i = 0 To UBound(SMDdata, 1)
    For k = 0 To UBound(SMDdata, 2)
        Cells(i + 1, UBound(SMDdata, 2) - k + 2).Value = SMDdata(i, k)
Next k, i
lg Jens

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
georg993

<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von georg993 (ForumUser / 7 / 1 / 0 ) »
Tron hat geschrieben: Statt einen Wert 2 mal zu lesen, würde ich lieber das Befüllen der Excel - Zellen anpassen.
Ja, aber da muss ich noch etwas Hirn reinstecken oder experimentieren. Bei Deinem zuletzt geposteten Code bleibt die erste Excel-Spalte jedenfalls leer. LIFNR wird nicht eingetragen (wenn man sie nur 1x ausliest). Funktioniert das denn bei Dir? Hast Du es getestet?

Gruß
G.

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
Moin.
georg993 hat geschrieben: Bei Deinem zuletzt geposteten Code bleibt die erste Excel-Spalte jedenfalls leer
Ja das hatte ich so vorgesehen.

Ich habe mein Coding von damals noch mal etwas re-designed.

Code: Alles auswählen.



Sub SMDRead_Table(Table As String)

Dim T() As String
Dim i As Long
Dim k As Long

SMDFunc.Exports("DELIMITER") = vbTab
'SMDFunc.Exports("NO_DATA") = "X"
SMDFunc.Exports("QUERY_TABLE") = Table
'SMDFunc.Exports("ROWCOUNT") = "500"

'******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables("FIELDS")
SMDTabObj.freetable

If Table = "LFA1" Then
 SMDTabObj.appendrow
 SMDTabObj.cell(1, 1) = "LIFNR"
 SMDTabObj.appendrow
 SMDTabObj.cell(2, 1) = "NAME1"
 SMDTabObj.appendrow
 SMDTabObj.cell(3, 1) = "NAME2"
 SMDTabObj.appendrow
 SMDTabObj.cell(4, 1) = "SORTL"
 SMDTabObj.appendrow
 SMDTabObj.cell(5, 1) = "LAND1"
 SMDTabObj.appendrow
 SMDTabObj.cell(6, 1) = "PSTLZ"
 SMDTabObj.appendrow
 SMDTabObj.cell(7, 1) = "ORT01"
 SMDTabObj.appendrow
 SMDTabObj.cell(8, 1) = "STRAS"
 SMDTabObj.appendrow
 SMDTabObj.cell(9, 1) = "MANDT"
 End If
'******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables("OPTIONS")
SMDTabObj.freetable
'SMDTabObj.appendrow
'SMDTabObj.cell(1, 1) = "TABNAME EQ '" & Tab_Nam & "' AND LENG NE 0"

'******** Create Table Object ************
Set SMDTabObj = SMDFunc.Tables("DATA")

'******** CLear Table ************
SMDTabObj.freetable

If SMDFunc.Call = True Then
'******** Read Result ************
T = Split(SMDTabObj.cell(1, 1), vbTab)

ReDim SMDdata(SMDTabObj.Rows.Count, UBound(T))

k = 0
For Each element In SMDTabObj.Rows
    T = Split(element("WA"), vbTab)
    For i = 0 To UBound(T)
     SMDdata(k, i) = Trim(T(i))
    Next i
    k = k + 1
Next element

Else
    MsgBox SMDFunc.Exception
End If

'*** ohne Mandant
ReDim Preserve SMDdata(SMDTabObj.Rows.Count, UBound(T) - 1)

End Sub

Sub Start()

Dim i As Long
Dim k As Long

Sheets(1).Select

Logon

SMDRead_Table ("LFA1")

For i = 0 To UBound(SMDdata, 1)
    For k = 0 To UBound(SMDdata, 2)
        Cells(i + 1, k + 1).Value = SMDdata(i, k)
Next k, i

LogoffSMD

End Sub
und hoffe das es jetzt lesbarer ist.
Ein wesentlicher Punkt ist, das es Probleme bei Tabellenzeilen geben kann, die am Ende nicht gefüllte (also Space) Felder haben.
RFC_Read_Table gibt dann nicht die korrekte Anzahl von Trennzeichen aus !
Um dieses Problem in den Griff zu bekommen, hänge ich immer ein garantiert gefülltes Feld (vorzugsweise MANDT) an das Ende der Felderliste,
um so die korrekte Anzahl von Trennzeichen zu gewährleisten. Im Coding entferne ich das Feld MANDT in dem Array und gebe dann "alles ohne Mandant" in das Excel sheet aus.
Deshalb musstest Du auch 2 mal LIFNR angeben. :wink:
Coding ist getestet.

lg Jens
Übrigens: SMD war unser altes Testsystem. :wink:
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von georg993 (ForumUser / 7 / 1 / 0 ) »
Tron hat geschrieben: Ich habe mein Coding von damals noch mal etwas re-designed.
Hallo Jens,
ja, jetzt sieht das Ergebnis so aus, wie ich es mir vorstelle. Danke.

Gruß
G.

Re: Werte per RFC importieren - nicht für alle Tabellen?

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
:up:
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Seite 1 von 1

Vergleichbare Themen

3
Antw.
5860
Views
Werte aus zwei unterschiedlichen Tabellen vergleichen
von blaah » 14.07.2010 10:56 • Verfasst in ABAP® für Anfänger
8
Antw.
8368
Views
PARAMETER Auswahl-Werte aus internen Tabellen
von SteveOh » 06.07.2010 15:25 • Verfasst in ABAP® für Anfänger
4
Antw.
2700
Views
Abhängige Werte-Liste (F4-Werte)
von Gast » 27.12.2005 10:34 • Verfasst in ABAP® Core
2
Antw.
1142
Views
ToC importieren
von jokabi » 16.12.2014 09:54 • Verfasst in ABAP® für Anfänger
5
Antw.
8033
Views

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.