SAP Jobsuche bei DV-Treff
KingDingeling
vor 14 Jahre
Hallo,

Ich sitze hier an einem kleinen Problem und komme absolut nicht weiter. Und zwar versuche ich über den FB RFC_READ_TABLE die Tabelle VBAP nach einer bestimmten Kontraktnummer auszulesen. Bei der Tabelle VBAK funktioniert es einwandfrei, blos bei der VBAP nicht und ich hoffe, dass ihr mir helfen könnt. Problem ist, dass immer die Fehlermeldung "System_Failure" angezeigt bekomme. Änder ich jedoch VBAP in VBAK funktionierts einwandfrei. Ich bin ratlos :-(

Anbei mein Quellcode:


            Set Func = FunctionCtrl.Add("RFC_READ_TABLE")
            Func.Exports("QUERY_TABLE") = "VBAP"
            Func.Exports("DELIMITER") = "|"
           
            Dim oRowOPTIONS As Object
            Dim ORowFields As Object
           
            Set oRowOPTIONS = Func.Tables("OPTIONS").Rows.Add
            oRowOPTIONS("TEXT") = "VBELN = '00" & KontrNr & "'"
           
            Set ORowFields = Func.Tables("FIELDS").Rows.Add
            ORowFields("FIELDNAME") = "VBELN"
            Set ORowFields = Func.Tables("FIELDS").Rows.Add
            ORowFields("FIELDNAME") = "PS_PSP_PNR"
            Set ORowFields = Func.Tables("FIELDS").Rows.Add
            ORowFields("FIELDNAME") = "ABGRU"
           
            ret = Func.Call
           
            If Func.Exception = "" And ret Then
               
                Dim Spaltenname As String
                Dim Datazeile As Object
                Dim Offset As Long
                Dim Length As Long
                Dim PS_PSP_PNR As String
                Dim ps As String
                Dim absa As String
                Dim vbeln As String
                Dim ABGRU As String
               
                For Each oData In Func.Tables("DATA").Rows
               
                    Datazeile = oData("WA")
                   
                    For Each ORowFields In Func.Tables("FIELDS").Rows
                   
                        Offset = ORowFields("OFFSET")
                        Length = ORowFields("LENGTH")
                        Spaltenname = ORowFields("FIELDNAME")
                       
                        If Spaltenname = "PS_PSP_PNR" Then
                            ps = Mid(Datazeile, Offset + 1, Length)
                        ElseIf Spaltenname = "ABGRU" Then
                            absa = Mid(Datazeile, Offset + 1, Length)
                        ElseIf Spaltenname = "VBELN" Then
                            vbeln = Mid(Datazeile, Offset + 1, Length)
                        End If
                       
                        If ps = pspelement And absa = newvalue Then
                           
                            MsgBox "Verarbeitung"
                           
                        ElseIf ps = pspelement And absa <> newvalue Then
                           
                            MsgBox "Vorsicht, Kontraktänderung wurde nicht nachgezogen!!"
                       
                        End If
                       
                    Next ORowFields
                   
                Next oData
            Else
                MsgBox Func.Exception
           
            End If


Ich hoffe ihr könnt mir helfen

LG
Markus
peterl
vor 14 Jahre

Hallo Markus,

die Feldreihenfolge sollte es nicht sein (ABGRU steht an 16. Position und das PSP-Element an Stelle 134), beim Aufruf aus dem SAP heraus macht das keine Probleme.

Vielleicht hilft das Beispiel weiter.

Gruß

Peter

Ich habe den Baustein im SAP mal wie folgt befüllt:

Import-Parameter                Wert

QUERY_TABLE                     VBAP
DELIMITER                       |
NO_DATA
ROWSKIPS                        0
ROWCOUNT                        0

Tabelle OPTIONS

VBELN EQ '0020000092'

 Tabelle FIELDS

FIELDNAME                      OFFSET LENGTH T FIELDTEXT

VBELN                          000000 000000   VERTRIEBSBELEG
POSNR                          000000 000000   POSITION
ABGRU                          000000 000000   ABSAGEGRUND
PS_PSP_PNR                     000000 000000   PROJEKTSTRUKTURPLANELEMENT (PSP-ELEMENT)

Ergebnismenge in Tabelle DATA

0020000092 000010 01 00000241
0020000092 000020 01 00000000
0020000092 000030 01 00000000

ScriptMan
vor 14 Jahre

Hallo Markus,

ich habe mir mit RPY_TABLE_READ die Spaltenüberschriften der Tabellen angesehen. In unserem System habe ich erstaunlicherweise festgestellt, dass die Tabelle VBAK die Spalte = ABGRU überhaupt nicht enthält. Dafür beinhaltet die Tabelle VBAP alle angesprochenen Spalten.

Das ganze passt aber nicht zu der geschilderten Fehlererscheinung. Es gibt eine Spalte = AUGRU, die die Tabelle VBAK enthält. Leider kann ich es nicht ausprobieren, weil diese Tabellen bei uns leer sind.

 

Freundliche Grüße

ScriptMan