1 |
2 |
3 |
4 | |
5 |
6 |
7 | |
8 |
9 |
10 |
11 | INCLUDE lsvimfl1. |
12 |
13 |
14 |
15 |
16 |
17 | FORM vim_set_languages. |
18 | DATA: dummy_langus LIKE h_t002 OCCURS 0. |
19 | CALL FUNCTION 'VIEW_GET_LANGUAGES' |
20 | EXPORTING |
21 | new_selection = 'X' |
22 |
23 | TABLES |
24 | languages = dummy_langus |
25 | EXCEPTIONS |
26 | no_languages_possible = 1. |
27 | IF sy-subrc = 1. |
28 | MESSAGE s160(sv). |
29 | ENDIF. |
30 | ENDFORM. "vim_set_languages |
31 | |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | FORM vim_reset_texttab USING viewname LIKE tvdir-tabname. |
40 | |
41 | READ TABLE vim_texttab_container WITH KEY viewname = viewname |
42 | BINARY SEARCH. |
43 | IF sy-subrc = 0. |
44 | FREE vim_texttab_container-tabdata-tab_us. |
45 | FREE vim_texttab_container-tabdata-tab_vs. |
46 | FREE vim_texttab_container-tabdata-tab_s. |
47 | FREE vim_texttab_container-tabdata-tab_m. |
48 | FREE vim_texttab_container-tabdata-tab_l. |
49 | FREE vim_texttab_container-tabdata-tab_vl. |
50 | FREE vim_texttab_container-tabdata-tab_ul. |
51 | FREE vim_texttab_container-sel_langus. |
52 | CLEAR vim_texttab_container-all_langus. |
53 | MODIFY vim_texttab_container INDEX sy-tabix. |
54 |
55 | ENDIF. |
56 | ENDFORM. "VIM_RESET_TEXTTAB |
57 | |
58 |
59 |
60 |
61 |
62 |
63 |
64 | FORM vim_multi_langu_text_maint. |
65 | DATA: langus_selected(1) TYPE c, |
66 | curr_sptxt LIKE t002t-sptxt, |
67 | sel_langus LIKE h_t002 OCCURS 0 WITH HEADER LINE, |
68 | texttab_for_output TYPE vimty_multilangu_texttab, |
69 | maint_mode(1) TYPE c, |
70 | textmodif(1) TYPE c, |
71 | f_called_by_viewmaint TYPE c. "XB H611377 BCEK070683 |
72 | |
73 | |
74 | CALL FUNCTION 'VIEW_GET_LANGUAGES' |
75 | IMPORTING |
76 | languages_selected = langus_selected |
77 | curr_sptxt = curr_sptxt |
78 | TABLES |
79 | languages = sel_langus |
80 | EXCEPTIONS |
81 | no_languages_possible = 1. |
82 | IF sy-subrc = 1. |
83 | MESSAGE s160(sv). |
84 | EXIT. |
85 | ELSEIF langus_selected = ' '. |
86 | MESSAGE s153(sv). |
87 | EXIT. |
88 | ENDIF. |
89 | IF x_header-frm_tl_get NE space. |
90 | PERFORM (x_header-frm_tl_get) IN PROGRAM (x_header-fpoolname) |
91 | TABLES sel_langus. |
92 | ELSE. |
93 | PERFORM vim_read_texttab_for_langus TABLES sel_langus USING ' '. |
94 | ENDIF. |
95 | |
96 |
97 |
98 |
99 | |
100 | REFRESH texttab_for_output. |
101 | PERFORM vim_fill_texttab_for_maint TABLES sel_langus |
102 | USING curr_sptxt |
103 | CHANGING texttab_for_output. |
104 | IF status-action EQ anzeigen OR status-action EQ transportieren. |
105 | maint_mode = 'R'. |
106 | ELSE. |
107 | maint_mode = 'U'. |
108 | ENDIF. |
109 |
110 |
111 | IF x_namtab IS NOT INITIAL AND x_header IS NOT INITIAL. |
112 | f_called_by_viewmaint = 'X'. |
113 | ENDIF. |
114 | CALL FUNCTION 'VIEW_MULTI_LANGU_TEXT_MAINT' |
115 | EXPORTING |
116 | mode = maint_mode |
117 | ltext_exit_form = x_header-frm_tltext |
118 | called_by_viewmaint = f_called_by_viewmaint |
119 | IMPORTING |
120 | vim_texttable_modified = textmodif |
121 | TABLES |
122 | vim_d0100_fielddescr = vim_d0100_fdescr_ini |
123 | vim_texttable = texttab_for_output |
124 | x_header = x_header |
125 | x_namtab = x_namtab. |
126 |
127 | IF maint_mode = 'U' AND textmodif = 'X'. |
128 | PERFORM vim_update_texttab USING texttab_for_output. |
129 | MODIFY vim_texttab_container INDEX vim_texttab_container_index. |
130 | ENDIF. |
131 | |
132 | IF status-mode = list_bild. "Entmarkieren |
133 | LOOP AT extract. |
134 | CHECK <xmark> = markiert. |
135 | CLEAR <xmark>. |
136 | MODIFY extract. |
137 | mark_extract = mark_extract - 1. |
138 | READ TABLE total WITH KEY <vim_xextract_key> BINARY SEARCH. |
139 | IF sy-subrc = 0 AND <mark> = markiert. |
140 | CLEAR <mark>. |
141 | MODIFY total INDEX sy-tabix. |
142 | mark_total = mark_total - 1. |
143 | ENDIF. |
144 | ENDLOOP. |
145 | ENDIF. |
146 | |
147 | ENDFORM. " VIM_MULTI_LANGU_TEXT_MAINT |
148 | |
149 |
150 |
151 |
152 |
153 |
154 | FORM vim_select_textfields. |
155 | DATA: nr_of_fields TYPE i. |
156 | |
157 | nr_of_fields = 0. |
158 | LOOP AT x_namtab WHERE keyflag <> 'X' AND |
159 | ( texttabfld = 'X' OR txttabfldn <> space ) AND |
160 | ( readonly = space OR readonly = 'R' )."SW 25.3.97 |
161 | " Textfeld in Tabelle or Textfeld in View |
162 | x_namtab-textfldsel = 'X'. |
163 | nr_of_fields = nr_of_fields + 1. |
164 | MODIFY x_namtab. |
165 | IF nr_of_fields >= vim_max_textfields. " Auswahl über Popup !!! |
166 | EXIT. |
167 | ENDIF. |
168 | ENDLOOP. |
169 | ENDFORM. "VIM_SELECT_TEXTFIELDS |
170 | |
171 |
172 |
173 |
174 |
175 |
176 |
177 | FORM vim_initialize_d0100. |
178 | DATA: fdescr_wa TYPE vimty_screen_fdescr. |
179 | |
180 | REFRESH vim_d0100_fdescr_ini. |
181 |
182 | CLEAR fdescr_wa. |
183 | fdescr_wa-active = 'X'. |
184 | fdescr_wa-name = 'VIM_D0100_WORKAREA-KEY1'. |
185 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
186 | CLEAR fdescr_wa-active. |
187 | fdescr_wa-name = 'VIM_D0100_WORKAREA-KEY2'. |
188 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
189 | fdescr_wa-name = 'VIM_D0100_WORKAREA-KEY3'. |
190 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
191 | fdescr_wa-name = 'VIM_D0100_WORKAREA-KEY4'. |
192 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
193 | fdescr_wa-name = 'VIM_D0100_WORKAREA-KEY5'. |
194 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
195 | fdescr_wa-name = 'VIM_D0100_WORKAREA-KEY6'. |
196 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
197 | fdescr_wa-name = 'VIM_D0100_WORKAREA-KEY7'. |
198 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
199 | fdescr_wa-name = 'VIM_D0100_WORKAREA-KEY8'. |
200 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
201 | fdescr_wa-name = 'VIM_D0100_WORKAREA-KEY9'. |
202 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
203 | fdescr_wa-name = 'VIM_D0100_WORKAREA-KEY10'. |
204 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
205 |
206 | fdescr_wa-vislength = 10. |
207 | fdescr_wa-active = 'X'. |
208 | fdescr_wa-name = 'VIM_D0100_WORKAREA-SPTXT'. |
209 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
210 |
211 | fdescr_wa-name = 'VIM_D0100_WORKAREA-TEXT1'. |
212 | fdescr_wa-textfld = 'X'. |
213 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
214 | CLEAR fdescr_wa-active. |
215 | fdescr_wa-textfld = 'X'. |
216 | fdescr_wa-name = 'VIM_D0100_WORKAREA-TEXT2'. |
217 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
218 | fdescr_wa-name = 'VIM_D0100_WORKAREA-TEXT3'. |
219 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
220 | fdescr_wa-name = 'VIM_D0100_WORKAREA-TEXT4'. |
221 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
222 | fdescr_wa-name = 'VIM_D0100_WORKAREA-TEXT5'. |
223 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
224 | fdescr_wa-name = 'VIM_D0100_WORKAREA-TEXT6'. |
225 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
226 | fdescr_wa-name = 'VIM_D0100_WORKAREA-TEXT7'. |
227 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
228 | fdescr_wa-name = 'VIM_D0100_WORKAREA-TEXT8'. |
229 | APPEND fdescr_wa TO vim_d0100_fdescr_ini. |
230 | ENDFORM. " VIM_INITIALIZE_D0100 |
231 | |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 | FORM vim_actualize_d0100. |
240 | DATA: fdescr_wa TYPE vimty_screen_fdescr, |
241 | next_tabix LIKE sy-tabix, |
242 | nr_of_field TYPE i, |
243 | tot_keylen TYPE i, |
244 | vislen_0(1) TYPE c, |
245 | max_textlen TYPE i, |
246 | tmp_len TYPE i, |
247 | nr_of_text TYPE i. |
248 | FIELD-SYMBOLS: <title> LIKE vimnamtab-scrtext. |
249 | |
250 | PERFORM vim_select_textfields. |
251 | CLEAR: max_textlen, nr_of_text. |
252 | LOOP AT x_namtab WHERE textfldsel = 'X'. |
253 | nr_of_text = nr_of_text + 1. |
254 | IF max_textlen < x_namtab-outputlen. |
255 | max_textlen = x_namtab-outputlen. |
256 | ENDIF. |
257 | ENDLOOP. |
258 | IF max_textlen > 30. max_textlen = 30. ENDIF. |
259 | |
260 | CLEAR: tot_keylen, nr_of_field, vislen_0. |
261 | LOOP AT x_namtab WHERE keyflag = 'X' AND texttabfld <> 'X'. |
262 | CHECK x_namtab-datatype <> 'CLNT' OR x_namtab-position > 0. |
263 | CHECK x_namtab-readonly <> 'S' AND x_namtab-readonly <> 'H'. |
264 | CHECK x_header-delmdtflag = space OR x_header-ptfrkyexst = space OR |
265 | x_namtab-domname <> vim_delim_date_domain OR |
266 | ( x_namtab-rollname NOT in VIM_BEGDA_TYPES and |
267 | X_NAMTAB-ROLLNAME not IN vim_endda_types ). |
268 | nr_of_field = nr_of_field + 1. |
269 | tot_keylen = tot_keylen + x_namtab-outputlen. |
270 | IF nr_of_field <= vim_max_keyfields. |
271 | READ TABLE vim_d0100_fdescr_ini INDEX nr_of_field INTO fdescr_wa. |
272 | fdescr_wa-title = x_namtab-scrtext. |
273 | fdescr_wa-active = 'X'. |
274 | fdescr_wa-fixlength = x_namtab-outputlen. |
275 | tmp_len = tot_keylen + max_textlen. |
276 | IF vislen_0 = 'X'. |
277 | fdescr_wa-vislength = 0. |
278 | ELSEIF tmp_len > 70. "??? |
279 | fdescr_wa-vislength = 70 - max_textlen - |
280 | ( tot_keylen - x_namtab-outputlen ). |
281 | vislen_0 = 'X'. |
282 | IF fdescr_wa-vislength < 0. |
283 | fdescr_wa-vislength = 0. |
284 | ENDIF. |
285 | ELSE. |
286 | fdescr_wa-vislength = fdescr_wa-fixlength. |
287 | ENDIF. |
288 | IF nr_of_field < vim_max_keyfields. |
289 | MODIFY vim_d0100_fdescr_ini FROM fdescr_wa INDEX nr_of_field. |
290 | ENDIF. |
291 | ELSE. |
292 | fdescr_wa-fixlength = fdescr_wa-fixlength + x_namtab-outputlen + 1. |
293 | ENDIF. |
294 | ENDLOOP. |
295 | IF nr_of_field >= vim_max_keyfields. |
296 | fdescr_wa-title = '...'. |
297 | fdescr_wa-active = 'X'. |
298 | fdescr_wa-vislength = 0. |
299 | MODIFY vim_d0100_fdescr_ini FROM fdescr_wa INDEX vim_max_keyfields. |
300 | ELSE. |
301 | next_tabix = nr_of_field + 1. |
302 | LOOP AT vim_d0100_fdescr_ini INTO fdescr_wa |
303 | FROM next_tabix TO vim_max_keyfields. |
304 | CLEAR fdescr_wa-active. |
305 | fdescr_wa-fixlength = 0. |
306 | fdescr_wa-vislength = 0. |
307 | CLEAR fdescr_wa-title. |
308 | MODIFY vim_d0100_fdescr_ini FROM fdescr_wa. |
309 | ENDLOOP. |
310 | ENDIF. |
311 | next_tabix = vim_max_keyfields + 1. "Sprachfeld |
312 | |
313 | LOOP AT x_namtab WHERE textfldsel = 'X'. |
314 | IF x_namtab-readonly = space OR x_namtab-readonly = 'R'."SW 25.3.97 |
315 | next_tabix = next_tabix + 1. |
316 | READ TABLE vim_d0100_fdescr_ini INDEX next_tabix INTO fdescr_wa. |
317 | IF x_namtab-readonly = space. "SW 25.3.1997 |
318 | fdescr_wa-active = 'X'. |
319 | ELSEIF x_namtab-readonly = 'R'. "SW 25.3.1997 .. |
320 | fdescr_wa-active = 'R'. |
321 | ENDIF. ".. SW 25.3.1997 |
322 | fdescr_wa-title = x_namtab-scrtext. |
323 | fdescr_wa-fixlength = x_namtab-outputlen. |
324 | fdescr_wa-vislength = x_namtab-outputlen. |
325 | MODIFY vim_d0100_fdescr_ini FROM fdescr_wa INDEX next_tabix. |
326 | ENDIF. |
327 | ENDLOOP. |
328 | |
329 | next_tabix = next_tabix + 1. |
330 | LOOP AT vim_d0100_fdescr_ini INTO fdescr_wa FROM next_tabix. |
331 | CLEAR fdescr_wa-active. |
332 | fdescr_wa-fixlength = 0. |
333 | fdescr_wa-vislength = 0. |
334 | CLEAR fdescr_wa-title. |
335 | MODIFY vim_d0100_fdescr_ini FROM fdescr_wa. |
336 | ENDLOOP. |
337 | ENDFORM. "VIM_ACTUALIZE_D0100 |
338 | |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 | FORM vim_read_texttab_for_langus TABLES sel_langus STRUCTURE h_t002 |
349 | USING all_langus TYPE c. |
350 | DATA: diff_langus_exist(1) TYPE c, |
351 | diff_langus LIKE h_t002 OCCURS 0 WITH HEADER LINE. |
352 | |
353 | IF vim_texttab_container-all_langus = 'X'. EXIT. ENDIF. "alles eingel. |
354 | |
355 | vim_texttab_container-all_langus = all_langus. |
356 | REFRESH diff_langus. CLEAR diff_langus_exist. |
357 | LOOP AT sel_langus. |
358 | READ TABLE <vim_read_langus> WITH KEY sel_langus-spras |
359 | TRANSPORTING NO FIELDS BINARY SEARCH. |
360 | IF sy-subrc <> 0. |
361 | INSERT sel_langus-spras INTO <vim_read_langus> INDEX sy-tabix. |
362 | diff_langus = sel_langus-spras. |
363 | APPEND diff_langus. |
364 | diff_langus_exist = 'X'. |
365 | ENDIF. |
366 | ENDLOOP. |
367 | |
368 | IF diff_langus_exist = 'X' OR all_langus = 'X'. |
369 | IF diff_langus_exist = 'X'. |
370 | PERFORM vim_get_texttab_data TABLES diff_langus |
371 | CHANGING <vim_texttab>. |
372 | ENDIF. |
373 | MODIFY vim_texttab_container INDEX vim_texttab_container_index. |
374 |
375 | ENDIF. |
376 | ENDFORM. " VIM_READ_TEXTTAB_FOR_LANGUS |
377 | |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 | FORM vim_fill_texttab_for_maint TABLES sel_langus STRUCTURE h_t002 |
391 | USING curr_sptxt LIKE t002t-sptxt |
392 | CHANGING texttab_for_maint TYPE vimty_multilangu_texttab. |
393 | |
394 | DATA: textmaint_record TYPE vimty_textmaint_record, |
395 | textmaint_field TYPE vimty_textfield, |
396 | align1 TYPE f, |
397 | texttab_wa TYPE vim_line_ul, |
398 | align2 TYPE f, |
399 | tmp_wa TYPE tabl8000, |
400 | condense(1) TYPE c, |
401 | texttab_tabix LIKE sy-tabix, |
402 | extract_index LIKE sy-tabix, |
403 | keylen type i. |
404 | FIELD-SYMBOLS: <extract_key> TYPE x, |
405 | <next_spras> TYPE spras, |
406 | <text_rec_key> TYPE x, <h_texttab_wa> TYPE x, |
407 | <viewkey_in_texttab> TYPE x, <txtfld> TYPE ANY, |
408 | <h_tmp> TYPE x, <tmp_struc> TYPE ANY, |
409 | <h_texttab> TYPE x, <texttab_struc> TYPE ANY. |
410 | |
411 | IF x_header-delmdtflag <> space AND "zeitabh. & part. Fremdschl. |
412 | x_header-ptfrkyexst = 'X'. " -> zeitunabh. Texttab. |
413 | condense = 'X'. |
414 | ASSIGN <vim_ext_mkey_beforex> TO <extract_key>. |
415 |
416 | keylen = x_header-after_keyc |
417 | - vim_datum_length * cl_abap_char_utilities=>charsize. |
418 |
419 | CLEAR <vim_old_mkey_beforex>. |
420 | ELSE. |
421 | ASSIGN <vim_xextract_key> TO <extract_key>. |
422 | keylen = x_header-after_keyc. |
423 |
424 | CLEAR condense. |
425 | ENDIF. |
426 | ASSIGN: texttab_wa TO <h_texttab_wa> CASTING, |
427 | <h_texttab_wa>(keylen) TO <viewkey_in_texttab>, |
428 |
429 | <h_texttab_wa>+keylen(x_header-texttablen) TO <h_texttab>, |
430 | tmp_wa+keylen(x_header-texttablen) |
431 | TO <h_tmp>, |
432 | <h_texttab> TO <texttab_struc> |
433 | CASTING TYPE (x_header-texttab), |
434 | <h_tmp> TO <tmp_struc> CASTING TYPE (x_header-texttab), |
435 | COMPONENT x_header-sprasfield OF STRUCTURE <texttab_struc> |
436 | TO <next_spras>, |
437 | textmaint_record-keys TO <text_rec_key> CASTING. |
438 |
439 | IF status-mode = list_bild. |
440 | extract_index = 1. |
441 | ELSE. |
442 | extract_index = nextline. |
443 | ENDIF. |
444 | |
445 | LOOP AT extract FROM extract_index. "Loop für Detail nicht nötig |
446 | CHECK status-mode = detail_bild OR <xmark> = markiert. |
447 | CHECK condense = ' ' OR |
448 | <vim_old_mkey_beforex> <> <vim_ext_mkey_beforex>. |
449 | IF condense = 'X'. |
450 | <vim_old_mkey_beforex> = <vim_ext_mkey_beforex>. |
451 | ENDIF. |
452 |
453 | CLEAR textmaint_record. |
454 | <text_rec_key> = <extract_key>. |
455 |
456 | PERFORM vim_external_repr_for_key TABLES textmaint_record-keytab |
457 | USING <vim_xextract_key>. |
458 | textmaint_record-spras = sy-langu. |
459 | textmaint_record-sptxt = curr_sptxt. |
460 | IF x_header-bastab = space. |
461 |
462 | LOOP AT x_namtab WHERE textfldsel = 'X'. |
463 | textmaint_field-namtab_idx = sy-tabix. |
464 | textmaint_field-outplen = x_namtab-flength. |
465 | ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE |
466 | <vim_extract_struc> TO <txtfld>. |
467 | textmaint_field-text = <txtfld>. |
468 |
469 |
470 | APPEND textmaint_field TO textmaint_record-texttab. |
471 | ENDLOOP. |
472 | ELSE. |
473 |
474 | LOOP AT x_namtab WHERE textfldsel = 'X'. |
475 | textmaint_field-namtab_idx = sy-tabix. |
476 | textmaint_field-outplen = x_namtab-flength. |
477 | ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE |
478 | <vim_ext_txt_struc> TO <txtfld>. |
479 | textmaint_field-text = <txtfld>. |
480 |
481 |
482 | APPEND textmaint_field TO textmaint_record-texttab. |
483 | ENDLOOP. |
484 | ENDIF. |
485 | APPEND textmaint_record TO texttab_for_maint. |
486 | |
487 |
488 |
489 | CLEAR: <viewkey_in_texttab>, <texttab_struc>. |
490 |
491 | READ TABLE <vim_texttab> WITH KEY <extract_key> |
492 | INTO texttab_wa. " BINARY SEARCH. |
493 | texttab_tabix = sy-tabix. |
494 | LOOP AT sel_langus. |
495 | CLEAR textmaint_record. |
496 | <text_rec_key> = <extract_key>. |
497 |
498 | textmaint_record-spras = sel_langus-spras. |
499 | textmaint_record-sptxt = sel_langus-sptxt. |
500 | |
501 | IF <viewkey_in_texttab> = <extract_key> AND |
502 | <next_spras> < sel_langus-spras. "#EC PORTABLE |
503 | LOOP AT <vim_texttab> FROM texttab_tabix INTO texttab_wa. |
504 | IF <viewkey_in_texttab> <> <extract_key> OR |
505 | <next_spras> >= sel_langus-spras. "#EC PORTABLE |
506 | texttab_tabix = sy-tabix. |
507 | EXIT. |
508 | ENDIF. |
509 | ENDLOOP. |
510 | ENDIF. " <next_spras> >= sel_langus-spras oder ex. nicht |
511 | IF <next_spras> <> sel_langus-spras OR |
512 | <viewkey_in_texttab> <> <extract_key>. "Text ex. nicht in Spr. |
513 | CLEAR <tmp_struc>. |
514 |
515 | ELSE. |
516 | tmp_wa = <h_texttab_wa>. |
517 | ENDIF. |
518 | LOOP AT x_namtab WHERE textfldsel = 'X'. |
519 | textmaint_field-namtab_idx = sy-tabix. |
520 | textmaint_field-outplen = x_namtab-flength. |
521 | ASSIGN COMPONENT x_namtab-bastabfld OF STRUCTURE |
522 |
523 | <tmp_struc> TO <txtfld>. "HCG for txtfldname in view differs |
524 | textmaint_field-text = <txtfld>. |
525 |
526 |
527 |
528 | APPEND textmaint_field TO textmaint_record-texttab. |
529 | ENDLOOP. |
530 | APPEND textmaint_record TO texttab_for_maint. |
531 | ENDLOOP. " SEL_LANGUS |
532 | |
533 | IF status-mode = detail_bild. EXIT. ENDIF. |
534 | ENDLOOP. " EXTRACT |
535 | ENDFORM. " VIM_FILL_TEXTTAB_FOR_MAINT |
536 | |
537 |
538 |
539 |
540 |
541 |
542 |
543 | FORM vim_external_repr_for_key TABLES keytab "TYPE VIMTY_TEXTFIELD |
544 | USING int_key TYPE x. |
545 | DATA: keynr TYPE i, |
546 | keyfield TYPE vimty_textfield, |
547 | namtab_idx LIKE sy-tabix. |
548 | FIELD-SYMBOLS: <i_value> TYPE ANY, <e_value> TYPE c. |
549 | |
550 | CLEAR: keynr, keyfield. REFRESH keytab. |
551 | MOVE int_key TO <table1_wax>. |
552 | LOOP AT x_namtab WHERE keyflag = 'X' AND texttabfld <> 'X'. |
553 | namtab_idx = sy-tabix. |
554 |
555 | CHECK x_namtab-datatype <> 'CLNT' OR x_header-clidep = space. |
556 |
557 | CHECK x_namtab-readonly <> 'S' AND x_namtab-readonly <> 'H'. |
558 |
559 | CHECK x_header-delmdtflag = space OR x_header-ptfrkyexst = space OR |
560 | x_namtab-domname <> vim_delim_date_domain OR |
561 | ( x_namtab-rollname NOT in VIM_BEGDA_TYPES and |
562 | X_NAMTAB-ROLLNAME not IN vim_endda_types ). |
563 | keynr = keynr + 1. |
564 | IF keynr > vim_max_keyfields. |
565 | keyfield-text+keyfield-outplen(1) = '|'. |
566 | keyfield-outplen = keyfield-outplen + 1. |
567 | ENDIF. |
568 | ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE <table1_wa> |
569 | TO <i_value>. |
570 |
571 | ASSIGN keyfield-text+keyfield-outplen(x_namtab-outputlen) |
572 | TO <e_value>. |
573 | CALL FUNCTION 'VIEW_CONVERSION_OUTPUT' |
574 | EXPORTING |
575 | value_intern = <i_value> |
576 | tabname = x_header-maintview |
577 | fieldname = x_namtab-viewfield |
578 | outputlen = x_namtab-outputlen |
579 | intlen = x_namtab-flength |
580 | IMPORTING |
581 | value_extern = <e_value>. |
582 | |
583 | IF keynr < vim_max_keyfields. |
584 | keyfield-namtab_idx = namtab_idx. |
585 | keyfield-outplen = x_namtab-outputlen. |
586 | APPEND keyfield TO keytab. |
587 | CLEAR keyfield. |
588 | ELSE. |
589 | keyfield-outplen = keyfield-outplen + x_namtab-outputlen. |
590 | ENDIF. |
591 | ENDLOOP. |
592 | |
593 | IF keynr >= vim_max_keyfields. |
594 | APPEND keyfield TO keytab. |
595 | ENDIF. |
596 | ENDFORM. "VIM_EXTERNAL_REPR_FOR_KEY |
597 | |
598 |
599 |
600 |
601 |
602 |
603 | * |
604 |
605 |
606 |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 | * |
615 |
616 |
617 |
618 |
619 |
620 |
621 |
622 |
623 |
624 | * |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 |
633 |
634 |
635 | FORM vim_fill_view_key USING texttab_wa TYPE vim_line_ul |
636 | CHANGING view_key |
637 | spras LIKE t002-spras. |
638 | |
639 | LOOP AT x_namtab WHERE txttabfldn <> space AND keyflag <> space. |
640 |
641 | view_key+x_namtab-position(x_namtab-flength) = |
642 | texttab_wa+x_namtab-texttabpos(x_namtab-flength). |
643 | ENDLOOP. |
644 | spras = texttab_wa+x_header-sprasfdpos(vim_spras_length). |
645 | ENDFORM. "VIM_FILL_VIEW_KEY |
646 | |
647 |
648 |
649 |
650 |
651 |
652 |
653 | FORM vim_update_texttab |
654 | USING texttab_for_maint TYPE vimty_multilangu_texttab. |
655 | DATA: textmaint_record TYPE vimty_textmaint_record, |
656 | textmaint_field TYPE vimty_textfield, |
657 | align TYPE f, |
658 | texttab_wa TYPE vim_line_ul, |
659 | search_key TYPE tabl8000, |
660 | offset LIKE sy-fdpos, |
661 | keylen LIKE sy-fdpos, |
662 | extract_index LIKE sy-tabix, |
663 | total_index LIKE sy-tabix, |
664 | texttab_tabix LIKE sy-tabix, |
665 | new_entry(1) TYPE c, |
666 | keylen_char type i. |
667 | FIELD-SYMBOLS: |
668 | <search_key> TYPE x, <rec_key> TYPE x, <curr_spras> TYPE ANY, |
669 | <h_texttab_wa> TYPE x, |
670 | <viewkey_in_texttab> TYPE x, "Key aus View/Tab in Texttab |
671 | <texttab_key> TYPE x, <texttab_struc> TYPE ANY, |
672 | <h_texttab> TYPE x, <tot_fld> TYPE ANY, <ext_fld> TYPE ANY, |
673 | <texttab_action> TYPE c, |
674 | <t_action>, <e_action>. |
675 | |
676 | IF x_header-delmdtflag <> space AND "zeitabh. & part. Fremdschl. |
677 | x_header-ptfrkyexst = 'X'. " -> zeitunabh. Texttab. |
678 | keylen = x_header-after_keyc |
679 | - vim_datum_length * cl_abap_char_utilities=>charsize. |
680 | ELSE. |
681 | keylen = x_header-after_keyc. |
682 | ENDIF. |
683 | keylen_char = keylen / cl_abap_char_utilities=>charsize. |
684 | ASSIGN: search_key(keylen) TO <search_key>, |
685 | textmaint_record-keys(keylen_char) TO <rec_key> CASTING, |
686 | texttab_wa TO <h_texttab_wa> CASTING, |
687 | <h_texttab_wa>(keylen) TO <viewkey_in_texttab>, |
688 | <h_texttab_wa>+keylen(x_header-textkeylen) TO <texttab_key>, |
689 | <h_texttab_wa>+keylen(x_header-texttablen) TO <h_texttab>, |
690 | <h_texttab> TO <texttab_struc> |
691 | CASTING TYPE (x_header-texttab), |
692 | COMPONENT x_header-sprasfield OF STRUCTURE <texttab_struc> |
693 | TO <curr_spras>. |
694 | offset = keylen + x_header-aft_txttbc. |
695 | ASSIGN <h_texttab_wa>+offset(cl_abap_char_utilities=>charsize) |
696 | TO <texttab_action> CASTING. |
697 | IF x_header-bastab = 'X'. |
698 |
699 | ASSIGN <action_text> TO <t_action>. |
700 | ASSIGN <xact_text> TO <e_action>. |
701 | ELSE. |
702 | ASSIGN <action> TO <t_action>. |
703 | ASSIGN <xact> TO <e_action>. |
704 | ENDIF. |
705 | |
706 | LOOP AT texttab_for_maint INTO textmaint_record. |
707 | IF textmaint_record-spras = sy-langu. |
708 | <search_key> = <rec_key>. |
709 | READ TABLE extract WITH KEY <search_key> BINARY SEARCH. |
710 | extract_index = sy-tabix. |
711 | ENDIF. |
712 | CHECK textmaint_record-action = 'X'. " Texte wurden modifiziert |
713 | |
714 | IF textmaint_record-spras = sy-langu. |
715 |
716 |
717 |
718 | READ TABLE total WITH KEY <search_key> BINARY SEARCH. |
719 | total_index = sy-tabix. |
720 | IF x_header-bastab = 'X' |
721 | AND <vim_xextract_text> = <text_initial_x>. |
722 | PERFORM map_viewkey_to_texttabkey TABLES x_namtab |
723 | USING x_header |
724 | sy-langu |
725 | <vim_xtotal> |
726 | CHANGING <vim_xextract_text>. |
727 | PERFORM map_viewkey_to_texttabkey TABLES x_namtab |
728 | USING x_header |
729 | sy-langu |
730 | <vim_xtotal> |
731 | CHANGING <vim_xtotal_text>. |
732 |
733 |
734 |
735 |
736 |
737 |
738 | <e_action> = neuer_eintrag. |
739 | <t_action> = neuer_eintrag. |
740 | ELSEIF <e_action> = original. |
741 | <e_action> = aendern. |
742 | <t_action> = aendern. |
743 |
744 | ENDIF. |
745 | LOOP AT textmaint_record-texttab INTO textmaint_field. |
746 | READ TABLE x_namtab INDEX textmaint_field-namtab_idx. |
747 | IF x_namtab-lowercase = space. |
748 | TRANSLATE textmaint_field-text TO UPPER CASE. |
749 | ENDIF. |
750 | IF x_header-bastab = 'X'. |
751 |
752 | ASSIGN: COMPONENT x_namtab-viewfield OF STRUCTURE |
753 | <vim_ext_txt_struc> TO <ext_fld>, |
754 | COMPONENT x_namtab-viewfield OF STRUCTURE |
755 | <vim_tot_txt_struc> TO <tot_fld>. |
756 | ELSE. |
757 |
758 | ASSIGN: COMPONENT x_namtab-viewfield OF STRUCTURE |
759 | <vim_extract_struc> TO <ext_fld>, |
760 | COMPONENT x_namtab-viewfield OF STRUCTURE |
761 | <vim_total_struc> TO <tot_fld>. |
762 | ENDIF. |
763 | <tot_fld> = textmaint_field-text. |
764 | <ext_fld> = textmaint_field-text. |
765 |
766 |
767 |
768 |
769 | ENDLOOP. "TEXTMAINT_RECORD-TEXTTAB |
770 | MODIFY extract INDEX extract_index. |
771 | MODIFY total INDEX total_index. |
772 | |
773 | ELSE. |
774 |
775 | CLEAR: <h_texttab_wa>, <texttab_struc>. |
776 | READ TABLE <vim_texttab> WITH KEY <search_key> |
777 | INTO texttab_wa BINARY SEARCH. |
778 | texttab_tabix = sy-tabix. |
779 | IF <viewkey_in_texttab> = <search_key> AND "Text ex. in and. Spr |
780 | <curr_spras> < textmaint_record-spras. |
781 | LOOP AT <vim_texttab> FROM texttab_tabix INTO texttab_wa. |
782 | IF <viewkey_in_texttab> <> <search_key> OR |
783 | <curr_spras> >= textmaint_record-spras. |
784 | texttab_tabix = sy-tabix. |
785 | EXIT. |
786 | ELSEIF <curr_spras> < textmaint_record-spras. |
787 | texttab_tabix = sy-tabix + 1. |
788 | ENDIF. |
789 | ENDLOOP. |
790 | ENDIF. " <next_spras> >= sel_langus-spras oder ex. nicht |
791 | IF <viewkey_in_texttab> <> <search_key> OR |
792 | <curr_spras> <> textmaint_record-spras. |
793 | CLEAR: <texttab_struc>. |
794 |
795 | new_entry = 'X'. |
796 | <viewkey_in_texttab> = <search_key>. |
797 |
798 | <texttab_action> = neuer_eintrag. |
799 | PERFORM map_viewkey_to_texttabkey TABLES x_namtab |
800 | USING x_header |
801 | textmaint_record-spras |
802 | <viewkey_in_texttab> |
803 | CHANGING <texttab_key>. |
804 |
805 |
806 |
807 |
808 | ELSE. |
809 | CLEAR new_entry. |
810 | ENDIF. |
811 |
812 | LOOP AT textmaint_record-texttab INTO textmaint_field. |
813 | READ TABLE x_namtab INDEX textmaint_field-namtab_idx. |
814 |
815 | IF x_namtab-lowercase = space. |
816 | TRANSLATE textmaint_field-text TO UPPER CASE. |
817 | ENDIF. |
818 | IF x_header-bastab = 'X'."HCG Custmessage 282684/02------------ |
819 |
820 | ASSIGN: COMPONENT x_namtab-viewfield OF STRUCTURE |
821 |
822 | <texttab_struc> TO <ext_fld>. "XB int.40684/02 |
823 | ELSE. |
824 |
825 | ASSIGN: COMPONENT x_namtab-BASTABFLD OF STRUCTURE |
826 |
827 | <texttab_struc> TO <ext_fld>. "XB int.. 40684 |
828 | ENDIF. |
829 |
830 |
831 | <ext_fld> = textmaint_field-text. |
832 |
833 |
834 | ENDLOOP. |
835 | IF <texttab_action> = original. |
836 | <texttab_action> = aendern. |
837 | ENDIF. |
838 | IF new_entry = 'X'. |
839 | INSERT texttab_wa INTO <vim_texttab> INDEX texttab_tabix. |
840 | ELSE. |
841 | MODIFY <vim_texttab> FROM texttab_wa INDEX texttab_tabix. |
842 | ENDIF. |
843 | |
844 | ENDIF. " Sy-Langu |
845 | ENDLOOP. " TEXTTAB_FOR_MAINT |
846 | |
847 | ENDFORM. " VIM_UPDATE_TEXTTAB |
848 | |
849 |
850 |
851 |
852 |
853 |
854 |
855 |
856 |
857 |
858 |
859 |
860 |
861 |
862 |
863 |
864 | FORM vim_temp_delim_texttab USING value(enddate) |
865 | value(orig_key) TYPE x. |
866 | DATA: texttab_orig TYPE vim_line_ul, |
867 | texttab_new TYPE vim_line_ul, |
868 | align TYPE f, |
869 | old_key TYPE tabl8000, |
870 | orig_tabix LIKE sy-tabix, |
871 | new_tabix LIKE sy-tabix, |
872 | len TYPE i, |
873 | offset TYPE i, |
874 | langus_selected(1) TYPE c, |
875 | curr_sptxt LIKE t002t-sptxt, |
876 | sel_langus LIKE h_t002 OCCURS 0 WITH HEADER LINE. |
877 | FIELD-SYMBOLS: <texttab_orig_x> TYPE x, |
878 | <txttb_orig_struc> TYPE ANY, |
879 | <viewkey_in_orig> TYPE x, "-> texttab_orig |
880 | <texttab_new_x> TYPE x, |
881 | <txttb_new_struc> TYPE ANY, |
882 | <viewkey_in_new> TYPE x, "-> texttab_new |
883 | <spras_in_orig> TYPE spras, |
884 | <spras_in_new> TYPE spras, |
885 | <date_in_textkey_new> LIKE sy-datum, |
886 | <action_in_orig>, |
887 | <action_in_new>, |
888 | <textfields_in_new> TYPE x, |
889 | <textfields_in_orig> TYPE x, |
890 | <h_old_key> TYPE x, <old_key_enddate> LIKE sy-datum, |
891 | <old_keyx> TYPE x, <old_key_struc> TYPE ANY. |
892 | |
893 | CALL FUNCTION 'VIEW_GET_LANGUAGES' |
894 | EXPORTING |
895 | all_without_selection = 'X' |
896 | IMPORTING |
897 | languages_selected = langus_selected |
898 | curr_sptxt = curr_sptxt |
899 | TABLES |
900 | languages = sel_langus. |
901 | IF x_header-frm_tl_get NE space. |
902 | PERFORM (x_header-frm_tl_get) IN PROGRAM (x_header-fpoolname) |
903 | TABLES sel_langus. |
904 | ELSE. |
905 | PERFORM vim_read_texttab_for_langus TABLES sel_langus USING 'X'. |
906 | ENDIF. |
907 | |
908 | READ TABLE <vim_texttab> WITH KEY orig_key |
909 | BINARY SEARCH TRANSPORTING NO FIELDS. |
910 | CHECK sy-subrc = 0. |
911 | orig_tabix = sy-tabix. |
912 | ASSIGN: texttab_orig TO <texttab_orig_x> CASTING, |
913 | <texttab_orig_x>(x_header-keylen) TO <viewkey_in_orig>, |
914 | <texttab_orig_x>+x_header-after_keyc |
915 | TO <txttb_orig_struc> CASTING TYPE (x_header-texttab), |
916 | COMPONENT x_header-sprasfield OF STRUCTURE <txttb_orig_struc> |
917 | TO <spras_in_orig>. |
918 | ASSIGN: texttab_new TO <texttab_new_x> CASTING, |
919 | <texttab_new_x>(x_header-keylen) TO <viewkey_in_new>, |
920 | <texttab_new_x>+x_header-after_keyc |
921 | TO <txttb_new_struc> CASTING TYPE (x_header-texttab), |
922 | COMPONENT x_header-sprasfield OF STRUCTURE <txttb_new_struc> |
923 | TO <spras_in_new>. |
924 | offset = x_header-after_keyc + x_header-textkeylen. |
925 | len = x_header-aft_txttbc - x_header-textkeylen. |
926 | ASSIGN: <texttab_new_x>+offset(len) TO <textfields_in_new>, |
927 | <texttab_orig_x>+offset(len) TO <textfields_in_orig>. |
928 | ASSIGN: old_key TO <h_old_key> CASTING, |
929 | <h_old_key>(x_header-keylen) TO <old_keyx>, |
930 | old_key TO <old_key_struc> CASTING TYPE (x_header-maintview). |
931 |
932 |
933 |
934 |
935 |
936 | LOOP AT x_namtab WHERE keyflag = 'X' AND |
937 | ( texttabfld = 'X' OR txttabfldn <> space ) AND |
938 | domname EQ vim_delim_date_domain AND |
939 | ( rollname IN vim_begda_types OR rollname IN vim_endda_types ). |
940 |
941 |
942 | EXIT. |
943 | ENDLOOP. |
944 | ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE <txttb_new_struc> |
945 | TO <date_in_textkey_new>. |
946 |
947 | offset = ( x_header-after_keyc + x_header-aft_txttbc ) |
948 | / cl_abap_char_utilities=>charsize. |
949 |
950 | ASSIGN texttab_orig+offset(1) TO <action_in_orig>. |
951 | ASSIGN texttab_new+offset(1) TO <action_in_new>. |
952 |
953 |
954 | |
955 | LOOP AT <vim_texttab> INTO texttab_orig FROM orig_tabix. |
956 | IF <viewkey_in_orig> <> orig_key. EXIT. ENDIF. |
957 | READ TABLE <vim_texttab> WITH KEY <vim_xtotal_key> |
958 | INTO texttab_new BINARY SEARCH. |
959 | new_tabix = sy-tabix. |
960 | IF <viewkey_in_new> = <vim_xtotal_key> AND |
961 | <spras_in_new> < <spras_in_orig>. "#EC PORTABLE |
962 | LOOP AT <vim_texttab> FROM new_tabix INTO texttab_new. |
963 | IF <viewkey_in_new> <> <vim_xtotal_key> OR |
964 | <spras_in_new> >= <spras_in_orig>. "#EC PORTABLE |
965 | new_tabix = sy-tabix. |
966 | EXIT. |
967 | ELSEIF <spras_in_new> < <spras_in_orig>. "#EC PORTABLE |
968 | new_tabix = sy-tabix + 1. |
969 | ENDIF. |
970 | ENDLOOP. |
971 | ENDIF. |
972 | IF <viewkey_in_new> <> <vim_xtotal_key> OR |
973 | <spras_in_new> <> <spras_in_orig>. |
974 |
975 | texttab_new = texttab_orig. |
976 | <viewkey_in_new> = <vim_xtotal_key>. |
977 | <date_in_textkey_new> = <vim_enddate>. |
978 | <action_in_new> = neuer_eintrag. |
979 | INSERT texttab_new INTO <vim_texttab> INDEX new_tabix. |
980 | ELSE. |
981 | IF <action_in_new> = original. |
982 | <action_in_new> = aendern. |
983 | ENDIF. |
984 | <textfields_in_new> = <textfields_in_orig>. |
985 | MODIFY <vim_texttab> FROM texttab_new INDEX new_tabix. |
986 | ENDIF. |
987 | ENDLOOP. |
988 | |
989 |
990 | <old_keyx> = <vim_xtotal_key>. |
991 |
992 | LOOP AT x_namtab WHERE keyflag = 'X' AND |
993 | ( texttabfld = 'X' OR txttabfldn <> space ) AND |
994 | domname EQ vim_delim_date_domain AND |
995 | ( rollname IN vim_begda_types OR rollname IN vim_endda_types ). |
996 | EXIT. |
997 | ENDLOOP. |
998 | ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE <old_key_struc> |
999 | TO <old_key_enddate>. |
1000 | <old_key_enddate> = enddate. |
1001 |
1002 | READ TABLE <vim_texttab> WITH KEY <old_keyx> |
1003 | BINARY SEARCH TRANSPORTING NO FIELDS. |
1004 |
1005 |
1006 | IF sy-subrc = 0. |
1007 | LOOP AT <vim_texttab> INTO texttab_orig FROM sy-tabix. |
1008 | IF <viewkey_in_orig> <> <old_keyx>. EXIT. ENDIF. |
1009 | IF <action_in_orig> = neuer_eintrag. |
1010 | DELETE <vim_texttab>. |
1011 | ELSE. |
1012 | CLEAR <textfields_in_orig>. |
1013 | IF <action_in_orig> = original. |
1014 | <action_in_orig> = aendern. |
1015 | ENDIF. |
1016 | MODIFY <vim_texttab> FROM texttab_orig. |
1017 | ENDIF. |
1018 | ENDLOOP. |
1019 | ENDIF. |
1020 | MODIFY vim_texttab_container INDEX vim_texttab_container_index. |
1021 | ENDFORM. " VIM_TEMP_DELIM_TEXTTAB |
1022 | |
1023 |
1024 |
1025 |
1026 |
1027 |
1028 | FORM vim_check_upd_texttab. |
1029 | DATA: texttab_wa TYPE vim_line_ul, |
1030 | offset TYPE i. |
1031 | FIELD-SYMBOLS: <texttab_action>. |
1032 | |
1033 | IF x_header-delmdtflag <> space AND "zeitabh. & part. Fremdschl. |
1034 | x_header-ptfrkyexst = 'X'. " -> zeitunabh. Texttab. |
1035 | offset = x_header-after_keyc |
1036 | - vim_datum_length * cl_abap_char_utilities=>charsize. |
1037 | ELSE. |
1038 | offset = x_header-after_keyc. |
1039 | ENDIF. |
1040 | offset = ( offset + x_header-aft_txttbc ) |
1041 | / cl_abap_char_utilities=>charsize. |
1042 | ASSIGN texttab_wa+offset(1) TO <texttab_action>. |
1043 | LOOP AT <vim_texttab> INTO texttab_wa. |
1044 | CHECK <texttab_action> <> original. |
1045 | MOVE 'X' TO <status>-upd_flag. |
1046 | EXIT. |
1047 | ENDLOOP. |
1048 | |
1049 | ENDFORM. "VIM_CHECK_UPD_TEXTTAB |
1050 | |
1051 |
1052 |
1053 |
1054 |
1055 |
1056 |
1057 | FORM vim_set_texttab_action_delete. |
1058 | DATA: texttab_tabix LIKE sy-tabix, |
1059 | offset TYPE i, |
1060 | texttab_wa TYPE vim_line_ul. |
1061 | FIELD-SYMBOLS: <h_texttab_wa> TYPE x, |
1062 | <texttab_action> TYPE char01, |
1063 | <viewkey_in_texttab> TYPE x, |
1064 | <total_key> TYPE x. |
1065 | |
1066 | IF x_header-delmdtflag <> space AND "zeitabh. & part. Fremdschl. |
1067 | x_header-ptfrkyexst = 'X'. " -> zeitunabh. Texttab. |
1068 | offset = x_header-after_keyc |
1069 | - vim_datum_length * cl_abap_char_utilities=>charsize. |
1070 | ASSIGN <vim_tot_mkey_beforex> TO <total_key>. |
1071 | ELSE. |
1072 | offset = x_header-after_keyc. |
1073 | ASSIGN <vim_xtotal_key> TO <total_key>. |
1074 | ENDIF. |
1075 | ASSIGN: texttab_wa TO <h_texttab_wa> CASTING, |
1076 | <h_texttab_wa>(offset) TO <viewkey_in_texttab>. |
1077 | offset = ( offset + x_header-aft_txttbc ) |
1078 | / cl_abap_char_utilities=>charsize. |
1079 | ASSIGN texttab_wa+offset(1) TO <texttab_action>. |
1080 | |
1081 |
1082 |
1083 |
1084 |
1085 |
1086 | LOOP AT <vim_texttab> INTO texttab_wa. |
1087 | CHECK <texttab_action> = geloescht OR |
1088 | <texttab_action> = update_geloescht OR |
1089 | <texttab_action> = neuer_geloescht. |
1090 | TRANSLATE <texttab_action> USING 'D XNYU'. |
1091 | MODIFY <vim_texttab> FROM texttab_wa. |
1092 | ENDLOOP. |
1093 | |
1094 | LOOP AT total. |
1095 | CHECK <action> = update_geloescht OR |
1096 | <action> = geloescht OR |
1097 | <action> = neuer_geloescht. |
1098 | READ TABLE <vim_texttab> WITH KEY <total_key> |
1099 | BINARY SEARCH TRANSPORTING NO FIELDS. |
1100 | IF sy-subrc = 0. |
1101 | texttab_tabix = sy-tabix. |
1102 | LOOP AT <vim_texttab> FROM texttab_tabix INTO texttab_wa. |
1103 | IF <viewkey_in_texttab> <> <total_key>. |
1104 | EXIT. |
1105 | ENDIF. |
1106 | TRANSLATE <texttab_action> USING ' DNXUY'. |
1107 | MODIFY <vim_texttab> FROM texttab_wa. |
1108 | ENDLOOP. |
1109 | ENDIF. |
1110 | ENDLOOP. |
1111 | ENDFORM. "VIM_SET_TEXTTAB_ACTION_DELETE |
1112 | |
1113 |
1114 |
1115 |
1116 |
1117 |
1118 |
1119 |
1120 |
1121 | FORM vim_texttab_modif_for_key CHANGING modif. |
1122 | DATA: texttab_wa TYPE vim_line_ul, |
1123 | texttab_tabix LIKE sy-tabix, |
1124 | keylen TYPE i, |
1125 | offset TYPE i. |
1126 | FIELD-SYMBOLS: <h_texttab_wa> TYPE x, |
1127 | <texttab_action> type xfeld, |
1128 | <viewkey_in_texttab> type x, |
1129 | <extract_key> type x. |
1130 | |
1131 | IF x_header-delmdtflag <> space AND "zeitabh. & part. Fremdschl. |
1132 | x_header-ptfrkyexst = 'X'. " -> zeitunabh. Texttab. |
1133 | ASSIGN <vim_ext_mkey_beforex> TO <extract_key>. |
1134 | keylen = x_header-after_keyc |
1135 | - vim_datum_length * cl_abap_char_utilities=>charsize. |
1136 | ELSE. |
1137 | ASSIGN <vim_xextract_key> TO <extract_key>. |
1138 | keylen = x_header-after_keyc. |
1139 | ENDIF. |
1140 | |
1141 | CLEAR modif. |
1142 | READ TABLE <vim_texttab> WITH KEY <vim_xextract_key> |
1143 | BINARY SEARCH TRANSPORTING NO FIELDS. |
1144 | IF sy-subrc = 0. |
1145 | texttab_tabix = sy-tabix. |
1146 | ELSE. |
1147 | EXIT. "keine Texte zum Key in anderen Sprachen erfaßt |
1148 | ENDIF. |
1149 | |
1150 | ASSIGN: texttab_wa TO <h_texttab_wa> CASTING, |
1151 | <h_texttab_wa>(keylen) TO <viewkey_in_texttab>. |
1152 | offset = ( keylen + x_header-aft_txttbc ) |
1153 | / cl_abap_char_utilities=>charsize. |
1154 | ASSIGN texttab_wa+offset(1) TO <texttab_action>. |
1155 | LOOP AT <vim_texttab> FROM texttab_tabix INTO texttab_wa. |
1156 | IF <viewkey_in_texttab> <> <extract_key>. |
1157 | EXIT. |
1158 | ELSEIF <texttab_action> <> original. |
1159 | modif = 'X'. |
1160 | EXIT. |
1161 | ENDIF. |
1162 | ENDLOOP. |
1163 | ENDFORM. "VIM_TEXTTAB_MODIF_FOR_KEY |
1164 | |
1165 |
1166 |
1167 |
1168 |
1169 |
1170 |
1171 |
1172 |
1173 | FORM vim_text_keytab_entries USING value(vake_action) TYPE c |
1174 | vake_rc TYPE i |
1175 | value(p_keylen) TYPE syfleng |
1176 | value(p_txtkeylen) TYPE syfleng. |
1177 | DATA: rc1 LIKE sy-subrc, |
1178 | offset TYPE i, |
1179 | texttab_wa TYPE vim_line_ul. |
1180 | FIELD-SYMBOLS: <h_texttab_wa> type x, |
1181 | <texttab_action> type c, <texttab_key> type x, |
1182 | <x_header2> TYPE vimdesc. |
1183 | |
1184 | IF x_header-delmdtflag <> space AND "zeitabh. & part. Fremdschl. |
1185 | x_header-ptfrkyexst = 'X'. " -> zeitunabh. Texttab. |
1186 | p_keylen = p_keylen |
1187 | - vim_datum_length * cl_abap_char_utilities=>charsize. "UF170200 |
1188 | ENDIF. |
1189 | ASSIGN: texttab_wa to <h_texttab_wa> casting, |
1190 | <h_texttab_wa>+p_keylen(x_header-textkeylen) TO <texttab_key>. |
1191 | offset = p_keylen + x_header-aft_txttbc. |
1192 | ASSIGN <h_texttab_wa>+offset(cl_abap_char_utilities=>charsize) |
1193 | TO <texttab_action> casting. |
1194 | |
1195 | corr_keytab = e071k. |
1196 | corr_keytab-objname = x_header-texttab. |
1197 | |
1198 | vake_rc = 8. |
1199 | LOOP AT <vim_texttab> INTO texttab_wa. |
1200 | CHECK <texttab_action> <> original AND |
1201 | <texttab_action> <> neuer_geloescht. |
1202 | MOVE <texttab_key> TO <vim_corr_keyx>(p_txtkeylen). |
1203 |
1204 | PERFORM update_corr_keytab USING vake_action rc1. |
1205 | IF rc1 = 0. |
1206 | CLEAR vake_rc. |
1207 | ELSE. |
1208 | IF vake_action EQ pruefen. vake_rc = 8. EXIT. ENDIF. |
1209 | ENDIF. |
1210 | ENDLOOP. |
1211 | ENDFORM. "VIM_TEXT_KEYTAB_ENTRIES |
1212 | |
1213 |
1214 |
1215 |
1216 |
1217 |
1218 | FORM vim_text_keytab_entry USING value(viewkey) TYPE x |
1219 | value(vake_action) TYPE c |
1220 | vake_rc TYPE i. |
1221 | DATA: rc1 LIKE sy-subrc, |
1222 | sys_type(10) TYPE c, |
1223 | keylen TYPE i, |
1224 | offset TYPE i, |
1225 | tbx LIKE sy-tabix, |
1226 | align TYPE f, |
1227 | texttab_wa TYPE vim_line_ul, |
1228 | key_wa TYPE vim_line_ul, |
1229 | wheretab LIKE vimwheretb OCCURS 0 WITH HEADER LINE, |
1230 | tmp_sellist LIKE vimsellist OCCURS 0 WITH HEADER LINE, |
1231 | tmp_texttab TYPE REF TO data, w_tmp_texttab type ref to data. |
1232 | FIELD-SYMBOLS: <tmp_texttab> TYPE STANDARD TABLE, |
1233 | <texttab_wax> TYPE x, |
1234 | <texttab_x> TYPE x, <texttab_struc> TYPE ANY, |
1235 | <texttab_key> TYPE x, <texttab_action> TYPE c, |
1236 | <keyvalue> TYPE ANY, <lang> TYPE spras, |
1237 | <viewkey_in_texttab>, <viewkey> TYPE x. |
1238 | |
1239 | vake_rc = 8. |
1240 | corr_keytab = e071k. |
1241 | corr_keytab-objname = x_header-texttab. |
1242 | |
1243 | IF x_header-generictrp <> space OR x_header-genertxtrp <> space. |
1244 | keylen = x_header-maxtrkeyln. |
1245 | ELSE. |
1246 | keylen = x_header-keylen. |
1247 | ENDIF. |
1248 | CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'transport/systemtype' |
1249 | ID 'VALUE' FIELD sys_type. |
1250 | |
1251 | ASSIGN: viewkey(keylen) TO <viewkey> CASTING. |
1252 | IF vim_texttab_container-all_langus = 'X'. |
1253 |
1254 | ASSIGN: texttab_wa TO <texttab_wax> CASTING, |
1255 | <texttab_wax>+keylen(x_header-texttablen) TO <texttab_x>, |
1256 | <texttab_x>(x_header-textkeylen) TO <texttab_key>, |
1257 | <texttab_x> TO <texttab_struc> |
1258 | CASTING TYPE (x_header-texttab), |
1259 | COMPONENT x_header-sprasfield OF STRUCTURE |
1260 | <texttab_struc> TO <lang>. |
1261 | IF x_header-delmdtflag <> space AND"zeitabh. & part. Fremdschl. |
1262 | x_header-ptfrkyexst = 'X'. " -> zeitunabh. Texttab. |
1263 | keylen = keylen |
1264 | - vim_datum_length * cl_abap_char_utilities=>charsize. |
1265 | ENDIF. |
1266 | ASSIGN <texttab_wax>(keylen) TO <viewkey_in_texttab>. |
1267 | offset = keylen + x_header-aft_txttbc. |
1268 | ASSIGN <texttab_wax>+offset(cl_abap_char_utilities=>charsize) |
1269 | TO <texttab_action> CASTING. |
1270 | |
1271 | READ TABLE <vim_texttab> WITH KEY <viewkey> |
1272 | BINARY SEARCH TRANSPORTING NO FIELDS. |
1273 | IF sy-subrc = 0. |
1274 | LOOP AT <vim_texttab> INTO texttab_wa FROM sy-tabix. |
1275 | CHECK <texttab_action> <> neuer_eintrag. |
1276 | IF <viewkey_in_texttab> <> <viewkey>. EXIT. ENDIF. |
1277 | MOVE <texttab_key> TO <vim_corr_keyx>(x_header-textkeylen). |
1278 |
1279 | PERFORM update_corr_keytab USING vake_action rc1. |
1280 | IF rc1 = 0. |
1281 | CLEAR vake_rc. |
1282 | ELSE. |
1283 | IF vake_action EQ pruefen. vake_rc = 8. EXIT. ENDIF. |
1284 | ENDIF. |
1285 | ENDLOOP. |
1286 | ELSE. |
1287 | CLEAR vake_rc. |
1288 | ENDIF. |
1289 | ELSE. |
1290 |
1291 | REFRESH wheretab. |
1292 | tmp_sellist-operator = 'EQ'. |
1293 | tmp_sellist-and_or = 'AND'. |
1294 | MOVE <viewkey> TO <f1_wax>. |
1295 | LOOP AT x_namtab WHERE keyflag NE space "fill sellist for |
1296 | AND txttabfldn <> space. "texttab |
1297 | tmp_sellist-tabix = sy-tabix. |
1298 |
1299 | ASSIGN COMPONENT x_namtab-viewfield |
1300 | OF STRUCTURE <table1_wa> TO <keyvalue>. |
1301 | tmp_sellist-viewfield = x_namtab-txttabfldn. |
1302 | IF x_namtab-inttype = 'C' and x_namtab-convexit = space. |
1303 | tmp_sellist-value = <keyvalue>. |
1304 | ELSE. |
1305 | CALL FUNCTION 'VIEW_CONVERSION_OUTPUT' |
1306 | EXPORTING |
1307 | value_intern = <keyvalue> |
1308 | tabname = x_header-maintview |
1309 | fieldname = x_namtab-viewfield |
1310 | inttype = x_namtab-inttype |
1311 | datatype = x_namtab-datatype |
1312 | decimals = x_namtab-decimals |
1313 | convexit = x_namtab-convexit |
1314 | sign = x_namtab-sign |
1315 | outputlen = x_namtab-outputlen |
1316 | intlen = x_namtab-flength |
1317 | IMPORTING |
1318 | value_extern = tmp_sellist-value |
1319 | EXCEPTIONS |
1320 | OTHERS = 1. |
1321 | ENDIF. |
1322 | APPEND tmp_sellist. |
1323 | tbx = sy-tabix. |
1324 | ENDLOOP. |
1325 | IF tbx > 0. |
1326 | CLEAR tmp_sellist-and_or. |
1327 | MODIFY tmp_sellist INDEX tbx. |
1328 | CALL FUNCTION 'VIEW_FILL_WHERETAB' |
1329 | EXPORTING |
1330 | tablename = x_header-texttab |
1331 | only_cnds_for_keyflds = 'X' |
1332 | is_texttable = 'X' |
1333 | TABLES |
1334 | sellist = tmp_sellist |
1335 | wheretab = wheretab |
1336 | x_namtab = x_namtab |
1337 | EXCEPTIONS |
1338 | no_conditions_for_table = 01. |
1339 | CREATE DATA tmp_texttab TYPE STANDARD TABLE OF (x_header-texttab). |
1340 | CREATE DATA w_tmp_texttab TYPE (x_header-texttab). |
1341 | ASSIGN: tmp_texttab->* TO <tmp_texttab>, |
1342 | w_tmp_texttab->* to <texttab_struc>, |
1343 | <texttab_struc> TO <texttab_wax> CASTING, |
1344 | <texttab_wax>(x_header-textkeylen) TO <texttab_key>, |
1345 | COMPONENT x_header-sprasfield OF STRUCTURE |
1346 | <texttab_struc> TO <lang>. |
1347 | SELECT * FROM (x_header-texttab) INTO TABLE <tmp_texttab> |
1348 | WHERE (wheretab). |
1349 | IF sy-subrc = 0. |
1350 |
1351 | LOOP AT <tmp_texttab> INTO <texttab_struc>. |
1352 | MOVE <texttab_key> TO <vim_corr_keyx>(x_header-textkeylen). |
1353 |
1354 |
1355 | PERFORM update_corr_keytab USING vake_action rc1. |
1356 | IF rc1 = 0. |
1357 | CLEAR vake_rc. |
1358 | ELSE. |
1359 | IF vake_action EQ pruefen. vake_rc = 8. EXIT. ENDIF. |
1360 | ENDIF. |
1361 | ENDLOOP. |
1362 | ELSE. |
1363 | CLEAR vake_rc. |
1364 | ENDIF. |
1365 | ENDIF. |
1366 | ENDIF. |
1367 | |
1368 | ENDFORM. "VIM_TEXT_KEYTAB_ENTRY |
1369 | |
1370 |
1371 |
1372 |
1373 |
1374 |
1375 |
1376 |
1377 |
1378 |
1379 |
1380 |
1381 |
1382 | FORM vim_copy_texttab_entry USING value(new_key) TYPE x |
1383 | value(orig_key) TYPE x. |
1384 | DATA: texttab_orig TYPE vim_line_ul, |
1385 | texttab_new TYPE vim_line_ul, |
1386 | orig_tabix LIKE sy-tabix, |
1387 | new_tabix LIKE sy-tabix, |
1388 | len TYPE i, |
1389 | offset TYPE i, |
1390 | langus_selected(1) TYPE c, |
1391 | curr_sptxt LIKE t002t-sptxt, |
1392 | sel_langus LIKE h_t002 OCCURS 0 WITH HEADER LINE. |
1393 | FIELD-SYMBOLS: <texttab_orig_x> TYPE x, |
1394 | <h_texttab_orig_x> TYPE x, |
1395 | <txttb_orig_struc> TYPE ANY, |
1396 | <viewkey_in_orig> TYPE x, "-> texttab_orig |
1397 | <texttab_new_x> TYPE x, |
1398 | <h_texttab_new_x> TYPE x, |
1399 | <txttb_new_struc> TYPE ANY, |
1400 | <viewkey_in_new> TYPE x, "-> texttab_new |
1401 | <spras_in_orig> TYPE spras, |
1402 | <spras_in_new> TYPE spras, |
1403 | <action_in_orig>, |
1404 | <action_in_new>, |
1405 | <textfields_in_new> TYPE x, |
1406 | <textfields_in_orig> TYPE x, |
1407 | <textkey_in_new> TYPE x. |
1408 | |
1409 | CALL FUNCTION 'VIEW_GET_LANGUAGES' |
1410 | EXPORTING |
1411 | all_without_selection = 'X' |
1412 | IMPORTING |
1413 | languages_selected = langus_selected |
1414 | curr_sptxt = curr_sptxt |
1415 | TABLES |
1416 | languages = sel_langus. |
1417 | IF x_header-frm_tl_get NE space. |
1418 | PERFORM (x_header-frm_tl_get) IN PROGRAM (x_header-fpoolname) |
1419 | TABLES sel_langus. |
1420 | ELSE. |
1421 | PERFORM vim_read_texttab_for_langus TABLES sel_langus USING 'X'. |
1422 | ENDIF. |
1423 | |
1424 | READ TABLE <vim_texttab> WITH KEY orig_key |
1425 | BINARY SEARCH TRANSPORTING NO FIELDS. |
1426 | CHECK sy-subrc = 0. |
1427 | orig_tabix = sy-tabix. |
1428 | ASSIGN: texttab_orig TO <texttab_orig_x> CASTING, |
1429 | <texttab_orig_x>(x_header-keylen) TO <viewkey_in_orig>, |
1430 | <texttab_orig_x>+x_header-after_keyc(x_header-texttablen) |
1431 | TO <h_texttab_orig_x>, |
1432 | <h_texttab_orig_x> |
1433 | TO <txttb_orig_struc> CASTING TYPE (x_header-texttab), |
1434 | COMPONENT x_header-sprasfield OF STRUCTURE <txttb_orig_struc> |
1435 | TO <spras_in_orig>. |
1436 | ASSIGN: texttab_new TO <texttab_new_x> CASTING, |
1437 | <texttab_new_x>(x_header-keylen) TO <viewkey_in_new>, |
1438 | <texttab_new_x>+x_header-after_keyc(x_header-textkeylen) |
1439 | TO <textkey_in_new>, |
1440 | <texttab_new_x>+x_header-after_keyc(x_header-texttablen) |
1441 | TO <h_texttab_new_x>, |
1442 | <h_texttab_new_x> |
1443 | TO <txttb_new_struc> CASTING TYPE (x_header-texttab), |
1444 | COMPONENT x_header-sprasfield OF STRUCTURE <txttb_new_struc> |
1445 | TO <spras_in_new>. |
1446 | offset = x_header-after_keyc + x_header-textkeylen. |
1447 | len = x_header-aft_txttbc - x_header-textkeylen. |
1448 | ASSIGN: <texttab_new_x>+offset(len) TO <textfields_in_new>, |
1449 | <texttab_orig_x>+offset(len) TO <textfields_in_orig>. |
1450 | offset = ( x_header-after_keyc + x_header-aft_txttbc ) |
1451 | / cl_abap_char_utilities=>charsize. |
1452 | ASSIGN texttab_orig+offset(1) TO <action_in_orig>. |
1453 | ASSIGN texttab_new+offset(1) TO <action_in_new>. |
1454 |
1455 |
1456 |
1457 |
1458 |
1459 |
1460 |
1461 |
1462 |
1463 |
1464 |
1465 |
1466 |
1467 | |
1468 | LOOP AT <vim_texttab> INTO texttab_orig FROM orig_tabix. |
1469 | IF <viewkey_in_orig> <> orig_key. EXIT. ENDIF. |
1470 | READ TABLE <vim_texttab> WITH KEY new_key |
1471 | INTO texttab_new BINARY SEARCH. |
1472 | new_tabix = sy-tabix. |
1473 | IF <viewkey_in_new> = new_key AND |
1474 | <spras_in_new> < <spras_in_orig>. "#EC PORTABLE |
1475 | LOOP AT <vim_texttab> FROM new_tabix INTO texttab_new. |
1476 | IF <viewkey_in_new> <> new_key OR "#EC PORTABLE |
1477 | <spras_in_new> >= <spras_in_orig>. |
1478 | new_tabix = sy-tabix. |
1479 | EXIT. |
1480 | ELSEIF <spras_in_new> < <spras_in_orig>. "#EC PORTABLE |
1481 | new_tabix = sy-tabix + 1. |
1482 | ENDIF. |
1483 | ENDLOOP. |
1484 | ENDIF. |
1485 | IF <viewkey_in_new> <> new_key OR |
1486 | <spras_in_new> <> <spras_in_orig>. |
1487 |
1488 | texttab_new = texttab_orig. |
1489 | <viewkey_in_new> = new_key. |
1490 | PERFORM map_viewkey_to_texttabkey TABLES x_namtab |
1491 | USING x_header |
1492 | <spras_in_orig> |
1493 | new_key |
1494 | CHANGING <textkey_in_new>. |
1495 |
1496 |
1497 |
1498 | <action_in_new> = neuer_eintrag. |
1499 | INSERT texttab_new INTO <vim_texttab> INDEX new_tabix. |
1500 | ELSE. |
1501 | IF <action_in_new> = original. |
1502 | <action_in_new> = aendern. |
1503 | ENDIF. |
1504 | <textfields_in_new> = <textfields_in_orig>. |
1505 | MODIFY <vim_texttab> FROM texttab_new INDEX new_tabix. |
1506 | ENDIF. |
1507 | ENDLOOP. |
1508 | MODIFY vim_texttab_container INDEX vim_texttab_container_index. |
1509 | ENDFORM. " VIM_COPY_TEXTTAB_ENTRY |