Above code format is too ugly.
TYPES:
BEGIN OF ty_aufk,
user1 TYPE aufk-user1,
aufnr TYPE aufk-aufnr,
bukrs TYPE aufk-bukrs,
prctr TYPE aufk-prctr,
END OF ty_aufk,
BEGIN OF ty_bkpf,
budat TYPE bkpf-budat,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
END OF ty_bkpf,
BEGIN OF ty_bsis,
belnr TYPE bsis-belnr,
bukrs TYPE bsis-bukrs,
gjahr TYPE bsis-gjahr,
aufnr TYPE bsis-aufnr,
prctr TYPE bsis-prctr,
END OF ty_bsis.
DATA:
gt_aaufk TYPE STANDARD TABLE OF aaufk,
gt_aaufk_delete type standard table of aaufk.
PARAMETERS p_gjahr TYPE bseg-gjahr.
PARAMETERS p_date_s TYPE sy-datum.
START-OF-SELECTION.
DATA:
wa_aaufk TYPE aaufk,
lt_bsis TYPE STANDARD TABLE OF ty_bsis,
lt_bsis_tmp TYPE STANDARD TABLE OF ty_bsis,
wa_aufk TYPE ty_aufk,
wa_bsis TYPE ty_bsis,
lt_bkpf TYPE STANDARD TABLE OF ty_bkpf,
wa_bkpf TYPE ty_bkpf,
lt_aufk TYPE STANDARD TABLE OF ty_aufk,
lt_aufk_tmp TYPE STANDARD TABLE OF ty_aufk,
lr_bukrs TYPE RANGE OF bukrs,
ls_bukrs LIKE LINE OF lr_bukrs,
lr_aufnr TYPE RANGE OF aufnr,
ls_aufnr LIKE LINE OF lr_aufnr,
w_belnr TYPE bseg-belnr,
w_budat TYPE bkpf-budat,
lt_aaufk TYPE STANDARD TABLE OF aaufk.
lt_aaufk = gt_aaufk .
SORT lt_aaufk BY aufnr ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_aaufk COMPARING aufnr.
IF NOT lt_aaufk IS INITIAL.
SELECT user1
aufnr
bukrs
prctr
FROM aufk
INTO TABLE lt_aufk
FOR ALL ENTRIES IN lt_aaufk
WHERE aufnr = lt_aaufk-aufnr.
IF sy-subrc = 0.
FREE: lt_aaufk.
SORT lt_aufk BY user1
aufnr
bukrs
prctr.
DELETE ADJACENT DUPLICATES FROM lt_aufk
COMPARING user1
aufnr
bukrs
prctr.
lt_aufk_tmp = lt_aufk.
SORT lt_aufk_tmp BY bukrs.
DELETE ADJACENT DUPLICATES FROM lt_aufk_tmp COMPARING bukrs.
ls_bukrs-sign = 'I'.
ls_bukrs-option = 'EQ'.
LOOP AT lt_aufk_tmp INTO wa_aufk.
ls_bukrs-low = wa_aufk-bukrs.
APPEND ls_bukrs TO lr_bukrs.
ENDLOOP.
lt_aufk_tmp = lt_aufk.
SORT lt_aufk_tmp BY aufnr.
DELETE ADJACENT DUPLICATES FROM lt_aufk_tmp COMPARING aufnr.
LOOP AT lt_aufk_tmp INTO wa_aufk.
ls_aufnr-low = wa_aufk-aufnr.
APPEND ls_aufnr TO lr_aufnr.
ENDLOOP.
FREE:lt_aufk_tmp.
ENDIF.
ENDIF.
IF NOT lt_aufk IS INITIAL.
SELECT belnr
bukrs
gjahr
aufnr
prctr
FROM bsis
INTO TABLE lt_bsis
FOR ALL ENTRIES IN lt_aufk
WHERE bukrs EQ lt_aufk-bukrs
AND gjahr EQ p_gjahr
AND aufnr IN lr_aufnr
AND prctr EQ lt_aufk-prctr.
IF sy-subrc = 0.
SORT lt_bsis BY belnr
bukrs
gjahr
aufnr
prctr.
DELETE ADJACENT DUPLICATES FROM lt_bsis
COMPARING belnr
bukrs
gjahr
aufnr
prctr.
ENDIF.
ENDIF.
FREE:lr_aufnr.
IF NOT lt_bsis IS INITIAL.
lt_bsis_tmp = lt_bsis.
SORT lt_bsis_tmp BY belnr.
DELETE ADJACENT DUPLICATES FROM lt_bsis_tmp COMPARING belnr.
SELECT budat
bukrs
belnr
gjahr
FROM bkpf
INTO TABLE lt_bkpf
FOR ALL ENTRIES IN lt_bsis_tmp
WHERE bukrs IN lr_bukrs
AND belnr EQ lt_bsis_tmp-belnr
AND gjahr EQ p_gjahr.
IF sy-subrc = 0.
SORT lt_bkpf BY budat
bukrs
belnr
gjahr.
DELETE ADJACENT DUPLICATES FROM lt_bkpf COMPARING budat
bukrs
belnr
gjahr.
ENDIF.
FREE:lt_bsis_tmp.
ENDIF.
FREE:lr_bukrs.
LOOP AT gt_aaufk INTO wa_aaufk.
READ TABLE lt_aufk INTO wa_aufk
WITH KEY aufnr = wa_aaufk-aufnr
BINARY SEARCH.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
READ TABLE lt_bsis INTO wa_bsis
WITH KEY bukrs = wa_aufk-bukrs
gjahr = p_gjahr
aufnr = wa_aaufk-aufnr
prctr = wa_aufk-prctr
BINARY SEARCH.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
READ TABLE lt_bkpf INTO wa_bkpf
WITH KEY bukrs = wa_aufk-bukrs
belnr = wa_bsis-belnr
gjahr = p_gjahr
BINARY SEARCH.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
IF wa_bkpf-budat GT p_date_s.
* If Posting Date is GT Start Date, then delete the entry
* as the order had an activity in the last 90 days
* DELETE gt_aaufk WHERE user1 EQ wa_aufk-user1
* AND aufnr EQ wa_aufk-aufnr.
*bug here Dead loop maybe.
wa_aaufk-user1 = wa_aufk-user1.
wa_aaufk-aufnr = wa_aufk-aufnr.
append wa_aaufk to gt_aaufk_delete.
ENDIF.
ENDLOOP.
SORT gt_aaufk_delete by user1 aufnr ASCENDING.
delete ADJACENT DUPLICATES FROM gt_aaufk_delete COMPARING user1 aufnr.
LOOP AT gt_aaufk_delete into WA_AAUFK.
DELETE gt_aaufk WHERE user1 EQ WA_AAUFK-user1
AND aufnr EQ WA_AAUFK-aufnr.
ENDLOOP.
FREE:
gt_aaufk_delete,
lt_aufk,
lt_bsis,
lt_bkpf.