OPEN CURSOR gd_cursor_bsid FOR
SELECT (bsid_fields)
FROM bseg AS i
LEFT OUTER JOIN bkpf AS h
ON h~mandt = i~mandt
AND h~bukrs = i~bukrs
AND h~gjahr = i~gjahr
AND h~belnr = i~belnr
WHERE kunnr IN dd_kunnr
AND koart = 'D'
AND i~h_bstat <> 'D'
AND i~h_bstat <> 'M'
AND i~bukrs IN dd_bukrs
AND zuonr IN dd_zuonr
AND shkzg IN dd_shkzg
AND umskz IN dd_umskz
AND bschl IN dd_bschl
AND h_budat IN dd_budat
AND (bsid_where_hdb)
ORDER BY i~mandt kunnr i~bukrs i~belnr i~buzei i~gjahr.
ENDIF.
lv_index = lines( k_kunnr ).
READ TABLE k_kunnr INDEX 1 INTO DATA(lv_smallest_kunnr).
READ TABLE k_kunnr INDEX lv_index INTO DATA(lv_highest_kunnr).
CLEAR lv_index.
DO.
IF NOT gd_xbsid_save IS INITIAL.
xbsid[] = gd_xbsid_save.
CLEAR gd_xbsid_save.
ELSE.
FETCH NEXT CURSOR gd_cursor_bsid
APPENDING CORRESPONDING FIELDS OF TABLE xbsid
PACKAGE SIZE 150000.
IF sy-subrc <> 0.
*keep the entries corresponding to k_kunnr, save the other ones for the next call
gd_xbsid_save = xbsid[].
DELETE gd_xbsid_save WHERE kunnr LE lv_highest_kunnr-low.
DELETE xbsid WHERE kunnr GT lv_highest_kunnr-low OR kunnr LT lv_smallest_kunnr-low.
EXIT.
ENDIF.
IF xbsid[] IS INITIAL.
EXIT.
ENDIF.
ENDIF.
*keep the entries corresponding to k_kunnr, save the other ones for the next call
gd_xbsid_save = xbsid[].
DELETE gd_xbsid_save WHERE kunnr LE lv_highest_kunnr-low.
DELETE xbsid WHERE kunnr GT lv_highest_kunnr-low OR kunnr LT lv_smallest_kunnr-low.
IF gd_xbsid_save IS NOT INITIAL.
EXIT. "group change
ENDIF.
ENDDO.