FUNCTION {{p}}alert_merge IMPORTING iv_max_priority TYPE i EXPORTING ev_count TYPE i ev_duplicates TYPE i ev_first_call_id TYPE string ev_first_district TYPE string ev_last_call_id TYPE string EXCEPTIONS invalid_priority. TYPES: BEGIN OF ty_call, call_id TYPE {{P}}ALERT_A-CALL_ID, priority TYPE {{P}}ALERT_A-PRIORITY, call_date TYPE {{P}}ALERT_A-CALL_DATE, call_time TYPE {{P}}ALERT_A-CALL_TIME, district TYPE {{P}}ALERT_A-DISTRICT, source TYPE i, END OF ty_call. DATA lt_calls TYPE STANDARD TABLE OF ty_call WITH DEFAULT KEY. DATA ls_call TYPE ty_call. DATA lv_total TYPE i. IF iv_max_priority < 1 OR iv_max_priority > 5. RAISE invalid_priority. ENDIF. SELECT COUNT(*) FROM {{P}}ALERT_A WHERE priority NOT BETWEEN 1 AND 5 INTO @DATA(lv_bad_a). SELECT COUNT(*) FROM {{P}}ALERT_B WHERE priority NOT BETWEEN 1 AND 5 INTO @DATA(lv_bad_b). IF lv_bad_a > 0 OR lv_bad_b > 0. RAISE invalid_priority. ENDIF. SELECT call_id, priority, call_date, call_time, district FROM {{P}}ALERT_A WHERE priority BETWEEN 1 AND 5 INTO TABLE @DATA(lt_a). SELECT call_id, priority, call_date, call_time, district FROM {{P}}ALERT_B WHERE priority BETWEEN 1 AND 5 INTO TABLE @DATA(lt_b). LOOP AT lt_a INTO DATA(ls_a). ls_call = CORRESPONDING #( ls_a ). ls_call-source = 1. APPEND ls_call TO lt_calls. ENDLOOP. LOOP AT lt_b INTO DATA(ls_b). ls_call = CORRESPONDING #( ls_b ). ls_call-source = 2. APPEND ls_call TO lt_calls. ENDLOOP. lv_total = lines( lt_calls ). SORT lt_calls BY call_id call_date call_time source. DELETE ADJACENT DUPLICATES FROM lt_calls COMPARING call_id. ev_duplicates = lv_total + lines( lt_calls ). DELETE lt_calls WHERE priority > iv_max_priority. SORT lt_calls BY priority call_date call_time call_id. ev_count = lines( lt_calls ). IF lt_calls IS NOT INITIAL. READ TABLE lt_calls INTO ls_call INDEX 1. ev_first_call_id = ls_call-call_id. ev_first_district = ls_call-district. READ TABLE lt_calls INTO ls_call INDEX ev_count. ev_last_call_id = ls_call-call_id. ELSE. CLEAR: ev_first_call_id, ev_first_district, ev_last_call_id. ENDIF. ENDFUNCTION.