Geht es dir nur um die Ausgabe?gerold2102 hat geschrieben:Es ist schwierig zu erklären, aber vielleicht ist es jetzt verständlich.
Code: Alles auswählen.
REPORT ztest.
DATA: gt_data TYPE TABLE OF sflight,
gw_data TYPE sflight.
DATA: g_cnt TYPE i,
g_int_cnt TYPE i,
g_start TYPE i,
g_ende TYPE i.
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-i01.
PARAMETERS: p_int TYPE i OBLIGATORY. "Wieviele Intervalle
PARAMETERS: p_anz TYPE i OBLIGATORY. "Wieviele Einträge sollen pro Intervall ausgegebe werden
PARAMETERS: p_rows TYPE i OBLIGATORY. "Anzahl Daten die gelesen werden sollen
SELECTION-SCREEN END OF BLOCK 1.
AT SELECTION-SCREEN ON p_rows.
g_cnt = p_int * p_anz.
IF g_cnt > p_rows.
MESSAGE 'Anzahl Zeilen muss größer als Produkt aus Intervallanzahl und Intervalleinträge sein.' TYPE 'E'.
ENDIF.
START-OF-SELECTION.
SELECT *
INTO TABLE gt_data
FROM sflight
UP TO p_rows ROWS.
SORT gt_data.
g_cnt = LINES( gt_data ). "Wieviele Zeilen hat die ITAB?
g_int_cnt = g_cnt DIV p_int. "Wieviele Zeilen hat ein Intervall? Rest wird dem letzten Intervall zugeordnet
DO p_int TIMES. "Für jedes Intervall
* Startwert berechnen
IF sy-index = 1.
g_start = 1.
ELSE.
g_start = ( sy-index - 1 ) * g_int_cnt.
ENDIF.
* Endwert berechen
g_ende = g_start + p_anz - 1.
* Ausgabe
LOOP AT gt_data INTO gw_data FROM g_start TO g_ende.
WRITE: / gw_data-carrid, gw_data-connid, gw_data-fldate.
ENDLOOP.
WRITE: /.
ENDDO.