Code: Alles auswählen.
objname = ty_rsdiobj-iobjnm+7(2).
APPEND objname to l_t_rsdiobj.
Dann poste doch mal deine vollständige DATA-Definition und erkläre kurz, wie die Daten in die ITAB kommen (sollen). Würde das Helfen sehr viel einfacher bzw. erst möglich machen (Bei diesem Thema bist du echt beratungsresistent).patlau hat geschrieben:Kann mir keiner helfen
Code: Alles auswählen.
* zuerstmal einen Typ definieren
TYPES: BEGIN OF ty_rsdiobj,
iobjnm TYPE rsdiobj-iobjnm,
.... "die ganzen anderen Felder
objname TYPE n LENGTH 2,
END OF ty_rsdiobj.
* Dann die Variablen
DATA: l_t_rsdodso TYPE TABLE OF ty_rsdiobj, "interne Tabelle
l_s_rsdodso TYPE ty_rsdiobj. "Arbeitsbereich = eine Zeile
START-OF-SELECTION.
* itab füllen
SELECT *
INTO TABLE l_t_rsdodso
.....
* Sortierkriterium aufbauen
LOOP AT l_t_rsdodso INTO l_s_rsdodso.
l_s_rsdodso-objname = l_s_rsdodso-iobjnm+7(2).
MODIFY TABLE l_t_rsdodso FROM l_s_rsdodso. "'Änderung in itab übernehmen
ENDLOOP.
SORT l_t_rsdodso BY objname.
Code: Alles auswählen.
SELECT iobjnm objvers FROM rsdiobj
INTO CORRESPONDING FIELDS OF TABLE l_t_rsdiobj
WHERE objvers = 'A'.
LOOP AT l_t_rsdiobj ASSIGNING <rsdiobj_fields>.
SELECT SINGLE txtlg FROM rsdiobjt
INTO <rsdiobj_fields>-txtlg
WHERE iobjnm = <rsdiobj_fields>-iobjnm.
ENDLOOP.
Bei dem Code dreht sich mir der Magen um.patlau hat geschrieben:Kann mir keiner helfen, bekomme es nicht hin die Variable mit in die interne Tabelle einzubauen.
Habe es auch so probiertund dann sagt er bei der Sortierung, dass kein objname vorhanden istCode: Alles auswählen.
objname = ty_rsdiobj-iobjnm+7(2). APPEND objname to l_t_rsdiobj.
In die immer noch nicht gepostete DATA bzw. TYPES Anweisung!patlau hat geschrieben:wo baue ich die Variable dann ein ?
Code: Alles auswählen.
TYPES: BEGIN OF ty_rsdiobj,
iobjnm TYPE rsdiobj-iobjnm,
objvers TYPE rsdiobj-objvers,
txtlg TYPE rsdiobjt-txtlg,
obj_cnt TYPE n length 2,
END OF ty_rsdiobj,
DATA:
BEGIN OF ty_rsdiobj,
iobjnm TYPE rsdiobj-iobjnm,
END OF ty_rsdiobj,
ty_rsdiobj2 like ty_rsdiobj,
l_s_rsdiobj TYPE ty_rsdiobj,
l_t_rsdiobj TYPE STANDARD TABLE OF ty_rsdiobj,
l_s_rsdiobjt TYPE ty_rsdiobjt,
l_t_rsdiobjt TYPE STANDARD TABLE OF ty_rsdiobjt,
Ich sehe in deinem Posting keine DATA oder TYPES Anweisungen (also das vor BEGIN OF...). Aber gerade die sind interessant!patlau hat geschrieben:Hier die Data und Types Anweisung
Code: Alles auswählen.
LOOP AT l_t_rsdiobj ASSIGNING <rsdiobj_fields>.
SELECT SINGLE txtlg FROM rsdiobjt
INTO <rsdiobj_fields>-txtlg
WHERE iobjnm = <rsdiobj_fields>-iobjnm.
* Sortierspalte füllen
<rsdiobj_fields>-obj_cnt = <rsdiobj_fields>-iobjnm+7(2).
ENDLOOP.
Code: Alles auswählen.
DESCRIBE TABLE l_t_rsdiobj LINES l_tabix.
DO.
CLEAR: ty_rsdiobj, ty_rsdiobj2.
READ TABLE l_t_rsdiobj INTO ty_rsdiobj INDEX l_tabix.
IF sy-subrc EQ 0.
SUBTRACT 1 FROM l_tabix.
READ TABLE l_t_rsdiobj INTO ty_rsdiobj2 INDEX l_tabix.
ENDIF.
ADD 1 TO ty_rsdiobj-iobjnm+7(1).
SHIFT ty_rsdiobj-iobjnm+7(2) RIGHT DELETING TRAILING space.
TRANSLATE ty_rsdiobj+7(1) USING ' 0'.
SHIFT ty_rsdiobj2-iobjnm+7(2) RIGHT DELETING TRAILING space.
TRANSLATE ty_rsdiobj2+7(1) USING ' 0'.
WHILE ty_rsdiobj-iobjnm+7(2) LT ty_rsdiobj2-iobjnm+7(2).
WRITE: /01 'Ausgelassenes Objekt, welches zuerst erstellt werden muss: ', ty_rsdiobj-iobjnm.
ADD 1 TO ty_rsdiobj-iobjnm+7(2).
SHIFT ty_rsdiobj-iobjnm+7(2) RIGHT DELETING TRAILING space.
TRANSLATE ty_rsdiobj+7(1) USING ' 0'.
ENDWHILE.
IF ty_rsdiobj2-iobjnm IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ENDIF.
da zietier ich mich mal selber:patlau hat geschrieben:allerdings hat er wohl ein Problem mit dem Exit, da es die Ausgabe letztendlich nicht ausführt. Habe ich da i-wie eine Endlosschleife ? Bitte um Hilfe, finde den Fehler nicht...
JHM hat geschrieben:Zwei Hinweise:
- Dein gezeigtes Coding hat mMn eine falsche Schachtelung. Die WHILE-Schleife darf nur dann durchlaufen werden, wenn der erste READ TABLE funktioniert hat. (Wobei du dann eine Endlosschleife bekommen solltest, das gezeigte Coding scheint also nicht 1zu1 kopiert worden zu sein).
Code: Alles auswählen.
DESCRIBE TABLE l_t_rsdiobj LINES l_tabix.
DO.
CLEAR: ty_rsdiobj, ty_rsdiobj2.
READ TABLE l_t_rsdiobj INTO ty_rsdiobj INDEX l_tabix.
IF sy-subrc EQ 0.
SUBTRACT 1 FROM l_tabix.
READ TABLE l_t_rsdiobj INTO ty_rsdiobj2 INDEX l_tabix.
* ENDIF. "falsche Schachtelung, hier gehört kein ENDIF hin
ADD 1 TO ty_rsdiobj-iobjnm+7(1).
SHIFT ty_rsdiobj-iobjnm+7(2) RIGHT DELETING TRAILING space.
TRANSLATE ty_rsdiobj+7(1) USING ' 0'.
SHIFT ty_rsdiobj2-iobjnm+7(2) RIGHT DELETING TRAILING space.
TRANSLATE ty_rsdiobj2+7(1) USING ' 0'.
WHILE ty_rsdiobj-iobjnm+7(2) LT ty_rsdiobj2-iobjnm+7(2).
WRITE: /01 'Ausgelassenes Objekt, welches zuerst erstellt werden muss: ', ty_rsdiobj-iobjnm.
ADD 1 TO ty_rsdiobj-iobjnm+7(2).
SHIFT ty_rsdiobj-iobjnm+7(2) RIGHT DELETING TRAILING space.
TRANSLATE ty_rsdiobj+7(1) USING ' 0'.
ENDWHILE.
ENDIF. "NEU EINGEFÜGT
IF ty_rsdiobj2-iobjnm IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ENDIF.