1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | FORM temp_delim_del_overld_entries USING value(begdate) TYPE d |
10 | value(enddate) TYPE d. |
11 | LOCAL: extract, <table1>. |
12 | DATA: first(1) TYPE c VALUE 'X', overlayed(1) TYPE c, cur_ix TYPE i, |
13 | date_increment TYPE i, enddate_safe(8) TYPE c, new_ix TYPE i, |
14 | trans_pattern(6) TYPE c, act_safe, mark_safe, act_txt_safe, |
15 | enddate_safe2(8) TYPE c, act, act_txt, hf TYPE i, |
16 | key_safe LIKE vim_merged_entries-new_key, date_safe TYPE d, |
17 |
18 | old_keyx type VRSDAT1000. |
19 | |
20 | IF vim_temp_delim_alr_checked NE space. |
21 | CLEAR first. |
22 | ENDIF. |
23 | LOOP AT total. |
24 | CHECK <vim_tot_mkey_beforex> EQ <vim_f1_beforex> AND |
25 | ( vim_mkey_after_exists EQ space OR |
26 | <vim_tot_mkey_afterx> EQ <vim_f1_afterx> ). |
27 | IF vim_special_mode NE vim_upgrade AND |
28 | vim_special_mode NE vim_reset AND |
29 | vim_special_mode NE vim_replace. |
30 | CHECK <vim_enddate> NE enddate. |
31 | ENDIF. |
32 | CHECK <action> NE geloescht AND |
33 | <action> NE neuer_geloescht AND |
34 | <action> NE update_geloescht. |
35 | CLEAR overlayed. |
36 | IF x_header-delmdtflag EQ 'E'. "end date is key field |
37 | CHECK <vim_enddate> GE begdate AND <vim_begdate> LE enddate. |
38 | IF <vim_begdate> GE begdate AND <vim_enddate> LT enddate. |
39 | MOVE 'F' TO overlayed. "whole old entry is overlayed by new one |
40 | ELSEIF <vim_begdate> LT begdate AND <vim_enddate> GT enddate. |
41 | MOVE 'M' TO overlayed. "middle of old entry is overl. by new one |
42 | ELSEIF <vim_begdate> LE enddate AND <vim_enddate> GT enddate. |
43 | MOVE 'P' TO overlayed. "part of old entry is overlayed by new on |
44 | ELSEIF <vim_begdate> EQ begdate AND <vim_enddate> EQ enddate. |
45 | temporal_delimitation_happened = 'N'. EXIT. "no delim required |
46 | ELSEIF <vim_enddate> EQ enddate. |
47 | MOVE 'E' TO overlayed. "end of old entry is overlayed by new one |
48 | ENDIF. |
49 | MOVE -1 TO date_increment. |
50 | ELSE. "begin date is key field |
51 | CHECK <vim_enddate> LE begdate AND <vim_begdate> GE enddate. "entr |
52 | IF <vim_begdate> LE begdate AND <vim_enddate> GT enddate. |
53 | MOVE 'F' TO overlayed. "whole old entry is overlayed by new one |
54 | ELSEIF <vim_enddate> LT enddate AND <vim_begdate> GT begdate. |
55 | MOVE 'M' TO overlayed. "middle of old entry is overl. by new one |
56 | ELSEIF <vim_enddate> LE enddate AND <vim_begdate> GT enddate. |
57 | MOVE 'P' TO overlayed. "part of old entry is overlayed by new on |
58 | ELSEIF <vim_begdate> EQ begdate AND <vim_enddate> EQ enddate. |
59 | temporal_delimitation_happened = 'N'. EXIT. "no delim required |
60 | ELSEIF <vim_enddate> EQ enddate. |
61 | MOVE 'E' TO overlayed. "begin of old entry is overlayed by new o |
62 | ENDIF. |
63 | MOVE 1 TO date_increment. |
64 | ENDIF. "x_header-delmdtflag eq 'E' |
65 | IF first NE space. |
66 | IF vim_special_mode NE vim_reset. |
67 | MESSAGE w047(sv). "Überlagerte Sätze werden gelöscht |
68 | ELSE. |
69 | MESSAGE i047(sv). "Überlagerte Sätze werden gelöscht |
70 | ENDIF. |
71 | CLEAR first. |
72 | ENDIF. |
73 | cur_ix = sy-tabix. |
74 | CLEAR vim_delim_entries. |
75 | READ TABLE extract WITH KEY <vim_xtotal_key>. |
76 |
77 | IF sy-subrc EQ 0. |
78 | MOVE sy-tabix TO vim_delim_entries-index3. |
79 | IF overlayed NE 'P' AND overlayed NE 'M' AND overlayed NE 'E'. |
80 | APPEND vim_delim_entries. |
81 | ENDIF. |
82 | ENDIF. |
83 | IF overlayed EQ space OR overlayed EQ 'F'. |
84 |
85 | MOVE: original TO trans_pattern, geloescht TO trans_pattern+1(1), |
86 | aendern TO trans_pattern+2(1), update_geloescht |
87 | TO trans_pattern+3(1), |
88 | neuer_eintrag TO trans_pattern+4(1), neuer_geloescht |
89 | TO trans_pattern+5(1). |
90 | TRANSLATE <action> USING trans_pattern. |
91 | IF x_header-bastab NE space AND x_header-texttbexst NE space AND |
92 | x_header-ptfrkyexst EQ space. |
93 | TRANSLATE <action_text> USING trans_pattern. |
94 | ENDIF. |
95 | IF <mark> EQ markiert. |
96 | <mark> = nicht_markiert. |
97 | SUBTRACT 1 FROM mark_total. |
98 | ENDIF. |
99 | MODIFY total. |
100 | ENDIF. "overlayed eq space or overlayed eq 'F' |
101 | IF overlayed EQ space OR overlayed EQ 'M' OR overlayed EQ 'E'. |
102 |
103 | IF overlayed EQ 'M'. |
104 | MOVE: <vim_enddate> TO enddate_safe, <action> TO act_safe, |
105 | <mark> TO mark_safe. |
106 | IF x_header-bastab NE space AND x_header-texttbexst NE space. |
107 | MOVE <action_text> TO act_txt_safe. |
108 | ENDIF. |
109 | ENDIF. |
110 | CLEAR hf. |
111 | old_keyx = <vim_xtotal_key>. "SW Texttransl |
112 |
113 | <vim_enddate> = begdate + date_increment. |
114 | CHECK <vim_enddate> GE <vim_begdate>. "aro 070798 |
115 | <action> = neuer_eintrag. |
116 | <mark> = nicht_markiert. |
117 | IF x_header-texttbexst NE space AND |
118 | x_header-ptfrkyexst EQ space. |
119 | PERFORM vim_temp_delim_texttab |
120 | USING enddate old_keyx. "SW Texttransl |
121 | IF x_header-bastab NE space. |
122 | MOVE: <vim_enddate> TO <vim_text_enddate>, |
123 | neuer_eintrag TO <action_text>. |
124 | ENDIF. |
125 | ENDIF. |
126 | IF vim_special_mode NE space. "special mode |
127 | PERFORM temp_delim_undelete USING <vim_enddate_mask> |
128 | <vim_begdate> |
129 | act act_txt new_ix. |
130 | IF new_ix NE 0. |
131 | MOVE act TO <action>. |
132 | IF x_header-bastab NE space AND x_header-texttbexst NE space. |
133 | MOVE act_txt TO <action_text>. |
134 | ENDIF. |
135 | MODIFY total INDEX new_ix. |
136 | ENDIF. |
137 | ENDIF. "special mode |
138 | IF vim_special_mode EQ space OR sy-subrc NE 0. |
139 | IF x_header-delmdtflag EQ 'E'. "end date is key field |
140 | new_ix = cur_ix. INSERT total. |
141 | ELSE. "begin date is key field |
142 | new_ix = cur_ix + 1. INSERT total INDEX new_ix. |
143 | ENDIF. "x_header-delmdtflag eq 'E' |
144 | ENDIF. |
145 | IF vim_special_mode NE vim_undelete AND |
146 | vim_delim_entries-index3 NE 0. |
147 | vim_delim_entries-index1 = new_ix. |
148 | vim_delim_entries-index2 = vim_delim_entries-index3. |
149 | sy-fdpos = vim_delim_entries-index3. |
150 | CLEAR vim_delim_entries-index3. |
151 | APPEND vim_delim_entries. |
152 | vim_delim_entries-index3 = sy-fdpos. |
153 | ENDIF. "no undelete mode |
154 | ENDIF. "overlayed eq space or overlayed eq 'M' |
155 | IF overlayed EQ 'P' OR overlayed EQ 'M'. |
156 | IF overlayed EQ 'M'. |
157 | MOVE: enddate_safe TO <vim_enddate>, act_safe TO <action>, |
158 | mark_safe TO <mark>. |
159 | IF x_header-bastab NE space AND x_header-texttbexst NE space. |
160 | MOVE act_txt_safe TO <action_text>. |
161 | ENDIF. |
162 | ENDIF. |
163 | CLEAR hf. |
164 | <vim_begdate> = enddate - date_increment. |
165 | MOVE: original TO trans_pattern, aendern TO trans_pattern+1(1). |
166 | TRANSLATE <action> USING trans_pattern. |
167 | IF <mark> EQ markiert. |
168 | <mark> = nicht_markiert. |
169 | SUBTRACT 1 FROM mark_total. |
170 | ENDIF. |
171 | MODIFY total. |
172 | IF vim_delim_entries-index3 NE 0. |
173 | vim_delim_entries-index1 = cur_ix. |
174 | vim_delim_entries-index2 = vim_delim_entries-index3. |
175 | APPEND vim_delim_entries. |
176 | ENDIF. |
177 | ENDIF. "overlayed eq 'P' or overlayed eq 'M' |
178 | ENDLOOP. |
179 | MOVE 'G' TO temporal_delimitation_happened. |
180 | ENDFORM. "temp_delim_del_overled_entries |