*&--------------------------------------------------------------------* *& Form TEMPORAL_DELIMITATION * *&--------------------------------------------------------------------* * process temporal delimitation * *&--------------------------------------------------------------------* FORM temporal_delimitation. constants: highdate TYPE d VALUE '99991231'. DATA: entries_exist(1) TYPE c, enddate_safe TYPE d, act(1) TYPE c, act_txt(1) TYPE c, hf TYPE i, date_safe TYPE d, ok_code_safe LIKE ok_code, function_safe LIKE function, delim_entr_safe TYPE STANDARD TABLE OF vim_delim_entr_tl WITH DEFAULT KEY INITIAL SIZE 10, collapsed_mkeys_safe TYPE STANDARD TABLE OF vim_collapsed_mkeys_tl WITH DEFAULT KEY INITIAL SIZE 1, merged_entr_safe TYPE STANDARD TABLE "merged entries OF vim_merged_entr_tl WITH DEFAULT KEY INITIAL SIZE 1. CHECK x_header-delmdtflag NE space. * check if dates entered properly IF ( is initial OR EQ vim_init_date ) AND status-mode EQ list_bild. "only on list screen MESSAGE e127(sv)."Bitte den Gültigkeitsbereich eingrenzen ENDIF. * process delimitation IF x_header-clidep NE space. MOVE sy-mandt TO . ENDIF. IF NE leer AND neuer NE 'J' AND status-delete NE geloescht AND ( status-action NE kopieren AND vim_special_mode EQ space OR vim_special_mode EQ vim_delimit ). READ TABLE total WITH KEY BINARY SEARCH. CHECK sy-subrc EQ 0. ELSE. "entry is new (input, copy, undelete, reset, replace, upgrade) IF status-mode EQ list_bild. "only on list screen IF x_header-delmdtflag EQ 'E' AND "end date is key field GT . MESSAGE e045(sv). "Bitte ein Beginn-Datum angeben, das vor dem ELSEIF x_header-delmdtflag EQ 'B' AND "begin date is key field LT . MESSAGE e046(sv). "Bitte ein Ende-Datum angeben, das nach dem be ENDIF. ENDIF. LOOP AT total. CHECK EQ AND ( vim_mkey_after_exists EQ space OR EQ ). * CHECK EQ AND * ( vim_mkey_after_exists EQ space OR * EQ ). MOVE 'X' TO entries_exist. EXIT. ENDLOOP. CHECK entries_exist NE space. MOVE: TO , TO . IF x_header-delmdtflag EQ 'E'. MOVE highdate TO . ELSE. CLEAR . ENDIF. ENDIF. CHECK NE . * check allowed keyranges IF x_header-customauth CO sap_cust_ctrl_classes OR vim_ale_keyspec_check NE space. PERFORM check_allowed_keyranges. ENDIF. IF x_header-delmdtflag EQ 'E'. "end date is key field IF GT . MESSAGE e045(sv). "Bitte ein Beginn-Datum angeben, das vor dem End ELSEIF LT . PERFORM temp_delim_del_overld_entries USING . ELSE. = - 1. IF x_header-texttbexst NE space AND x_header-ptfrkyexst EQ space. PERFORM vim_temp_delim_texttab USING . "SW Texttransl IF x_header-bastab NE space. MOVE: TO , neuer_eintrag TO . ENDIF. ENDIF. READ TABLE total WITH KEY BINARY SEARCH TRANSPORTING NO FIELDS. * READ TABLE total WITH KEY BINARY SEARCH * TRANSPORTING NO FIELDS. IF sy-subrc NE 0. = neuer_eintrag. = nicht_markiert. "new entries are never marked INSERT total INDEX sy-tabix. ELSE. * entry MUST be a deleted one MESSAGE w121(sv). "Gelöschter Eintrag wird zurückgeholt und ggf. PERFORM temp_delim_determine_action USING sy-tabix act act_txt. = act. IF x_header-bastab NE space AND x_header-texttbexst NE space. = act_txt. ENDIF. MODIFY total INDEX sy-tabix. ENDIF. ENDIF. ELSE. "begin date is key field IF LT . MESSAGE e046(sv). "Bitte ein Ende-Datum angeben, das nach dem begi ELSEIF GT . PERFORM temp_delim_del_overld_entries USING . ELSE. = . IF x_header-bastab NE space AND x_header-texttbexst NE space AND x_header-ptfrkyexst EQ space. IF EQ original. MOVE aendern TO . ENDIF. ENDIF. IF EQ original. = aendern. ENDIF. MODIFY total INDEX sy-tabix. total = extract. = + 1. = = neuer_eintrag. IF x_header-bastab NE space AND x_header-texttbexst NE space AND x_header-ptfrkyexst EQ space. MOVE: TO , neuer_eintrag TO , neuer_eintrag TO . ENDIF. anz_pages = sy-tabix + 1. INSERT total INDEX anz_pages. ENDIF. ENDIF. "x_header-delmdtflag eq 'E' IF temporal_delimitation_happened EQ 'N'. CLEAR temporal_delimitation_happened. EXIT. ENDIF. IF temporal_delimitation_happened NE 'G'. MOVE sy-tabix TO anz_pages. LOOP AT vim_delim_entries WHERE index1 GE anz_pages. ADD 1 TO vim_delim_entries-index1. MODIFY vim_delim_entries. ENDLOOP. MOVE: anz_pages TO vim_delim_entries-index1, nextline TO vim_delim_entries-index2, space TO vim_delim_entries-index3. APPEND vim_delim_entries. MOVE 'X' TO temporal_delimitation_happened. ENDIF. IF NE leer AND neuer NE 'J' AND status-delete NE geloescht AND ( status-action NE kopieren AND vim_special_mode EQ space OR vim_special_mode EQ vim_delimit ). IF x_header-adrnbrflag NE space. * if entry contains address number: ask if new address is wanted CALL FUNCTION 'POPUP_TO_DECIDE' EXPORTING defaultoption = '1' titel = svim_text_037 textline1 = svim_text_038 textline2 = svim_text_039 textline3 = svim_text_040 text_option1 = svim_text_041 text_option2 = svim_text_042 IMPORTING answer = answer. CASE answer. WHEN 'A'. EXIT. WHEN '2'. "clear old address number CLEAR . WHEN OTHERS. "copy old address * not yet possible ENDCASE. ENDIF. IF x_header-guidflag <> space. PERFORM vim_make_guid USING space. ENDIF. * if user exit for hidden fields exists: perform exit routine IF x_header-frm_h_flds NE space. PERFORM (x_header-frm_h_flds) IN PROGRAM. ENDIF. * if user exit for new entries exists: perform exit routine IF x_header-frm_on_new NE space. PERFORM (x_header-frm_on_new) IN PROGRAM. ENDIF. * if entry contains address number: call address maintain IF x_header-adrnbrflag NE space AND answer EQ '2'. PERFORM address_maintain. ENDIF. * if user exit after delimitation exists: perform exit routine IF x_header-frm_af_dlm NE space. delim_entr_safe = vim_delim_entries[]. collapsed_mkeys_safe = vim_collapsed_mainkeys[]. merged_entr_safe = vim_merged_entries[]. IF status-mode EQ detail_bild. ok_code_safe = ok_code. function_safe = function. ENDIF. PERFORM (x_header-frm_af_dlm) IN PROGRAM. MOVE delim_entr_safe TO vim_delim_entries[]. MOVE collapsed_mkeys_safe TO vim_collapsed_mainkeys[]. MOVE merged_entr_safe TO vim_merged_entries[]. IF status-mode EQ detail_bild. MOVE: ok_code_safe TO ok_code, function_safe TO function. ENDIF. ENDIF. ENDIF. ENDFORM. "temp_delimitation