Du hast es immer noch nicht geschaft das "Problem" mal näher zu beschreiben. Was macht dein Code aktuell wenn mehrere Zähler fehlen...patlau hat geschrieben:Nun aber noch das andere Problem, das dies so nur klappt wenn ein Objekt ausgelassen worden ist,
Mit implizierter Typumwandlung kommst du hier nicht weiter (hatte ich dir auch schon geschrieben). Entweder du machst eine expliziete Typumwandlung in ein gescheites Format oder fummelst dir die Null wieder dazu, wenn Sie fehlt.patlau hat geschrieben:Im debugger sieht man, dass bei +6(2) lediglich eine 1 zu der ersten Stelle addiert wird...wie sorge ich dafür dass es praktisch beiden Stellen zugerechnet wird und nicht nur der ersten. Hatte überlegt ADD 01 zu schreiben bringt aber nichts.
Code: Alles auswählen.
REPORT ztest.
TYPES: BEGIN OF ts_data,
obj TYPE rsdodsobject,
END OF ts_data.
DATA: gt_data TYPE TABLE OF ts_data,
gs_data TYPE ts_data,
gs_data_tmp TYPE ts_data,
gv_line_cnt TYPE i,
gv_dlh TYPE n LENGTH 2.
START-OF-SELECTION.
gs_data-obj = 'XXXXXX01'. APPEND gs_data TO gt_data.
gs_data-obj = 'XXXXXX02'. APPEND gs_data TO gt_data.
gs_data-obj = 'XXXXXX08'. APPEND gs_data TO gt_data.
gs_data-obj = 'XXXXXX10'. APPEND gs_data TO gt_data.
SORT gt_data DESCENDING BY obj.
DESCRIBE TABLE gt_data LINES gv_line_cnt.
DO.
CLEAR: gs_data, gs_data_tmp.
READ TABLE gt_data INTO gs_data INDEX gv_line_cnt.
IF sy-subrc EQ 0.
SUBTRACT 1 FROM gv_line_cnt.
READ TABLE gt_data INTO gs_data_tmp INDEX gv_line_cnt.
* expliziete Typumwandlung
gv_dlh = gs_data-obj+6(2).
ADD 1 TO gv_dlh.
WRITE gv_dlh TO gs_data-obj+6(2).
WHILE gs_data-obj+6(2) LT gs_data_tmp-obj+6(2).
WRITE: /01 'Ausgelassenes Objekt, welches zuerst erstellt werden muss: ', gs_data-obj.
* gefummelte Lösung
ADD 1 TO gs_data-obj+6(2).
SHIFT gs_data-obj+6(2) RIGHT DELETING TRAILING space.
TRANSLATE gs_data+6(2) USING ' 0'.
ENDWHILE.
ENDIF.
IF gs_data-obj IS INITIAL.
EXIT.
ENDIF.
ENDDO.
Hast du das Programm mal als Testprogramm bei dir im System angelegt (simples copy&past)?patlau hat geschrieben:Wenn ich es richtig verstanden habe, is es notwendig in dieser Lösung zu wissen, welche Objekte existieren oder?
Code: Alles auswählen.
DATA: gv_dlh TYPE n LENGTH 2. "dirty littel helper für die Konvertierung
gv_dlh = gs_data-obj+6(2). "aus dem CHAR ein NUM machen
ADD 1 TO gv_dlh. "rechnen
WRITE gv_dlh TO gs_data-obj+6(2). "aus dem NUM wieder ein CHAR machen
Code: Alles auswählen.
ADD 1 TO gs_data-obj+6(2).
SHIFT gs_data-obj+6(2) RIGHT DELETING TRAILING space. "die neue Zahl solange nach rechts schieben, bis es keine Leerzeichen mehr gibt
TRANSLATE gs_data+6(2) USING ' 0'. "wenn die Zahl geschoben wurde dann fehlt eine führende Null (statt dessen gibt es ein Leerzeichen), aus dem Leerzeichen eine Null machen
patlau hat geschrieben:und ich hätte gerne
10
4
2
1
Code: Alles auswählen.
BEGIN OF ty_rsdiobj,
iobjnm TYPE rsdiobj-iobjnm,
objname TYPE n LENGTH 2