Hi Dennis,
The developer should use the PACKAGE SIZE addition to the SELECT statement in order to avoid the internal table from growing too big i.e. growing more than the space allowed by the system parameter.
This is clearly an example of poor programming. The approach should be similar to the code below:
DATA:
tbl_outrec TYPE STANDARD TABLE OF ty_tbl_outrec,
tbl_bsegout TYPE STANDARD TABLE OF ty_tbl_bsegout,
tbl_bkpf TYPE HASHED TABLE OF bkpf
WITH UNIQUE KEY mandt bukrs belnr gjahr,
tbl_bseg TYPE HASHED TABLE OF bseg
WITH UNIQUE KEY mandt bukrs belnr gjahr buzei.
SELECT bukrs belnr gjahr FROM bkpf PACKAGE SIZE 10000
INTO CORRESPONDING FIELDS OF TABLE lt_bkpf
WHERE bukrs IN s_bukrs
AND budat IN s_budat.
TRY.
SELECT * FROM bseg PACKAGE SIZE 50000
INTO CORRESPONDING FIELDS OF TABLE tbl_bseg
FOR ALL ENTRIES IN lt_bkpf
WHERE bukrs = lt_bkpf-bukrs
AND belnr = lt_bkpf-belnr
AND gjahr = lt_bkpf-gjahr.
LOOP AT tbl_bseg ASSIGNING <ls_bseg>.
APPEND INITIAL LINE TO tbl_bsegout ASSIGNING <ls_rec>.
MOVE-CORRESPONDING <ls_bseg> TO <ls_rec>.
ENDLOOP.
PERFORM write_file USING tbl_bsegout.
FREE:
tbl_bseg,
tbl_bsegout.
ENDSELECT. "SELECT FROM BSEG
CATCH cx_sy_open_sql_db INTO lx_open_sql.
lv_text = lx_open_sql->if_message~get_text( ).
MESSAGE e000 WITH lv_text.
ENDTRY.
FREE lt_bkpf.
ENDSELECT. "SELECT FROM BKPF
Hope this helps.
Cheers,
Sougata.