1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | FORM list_alv. |
10 | |
11 |
12 |
13 |
14 | STATICS: texttab_begin LIKE sy-tabix, |
15 | textlen TYPE intlen, unittab TYPE tabname, |
16 | unitname TYPE fieldname, cukytab TYPE tabname, |
17 | cukyname TYPE fieldname, |
18 | glob_unitvalue(3) TYPE c, "vim_unit,UF296573/2000 |
19 | glob_cukyvalue TYPE vim_cuky. |
20 | DATA: textfld_no, textoffset TYPE intlen, rc LIKE sy-subrc, |
21 | progname LIKE sy-repid, value_len TYPE intlen, |
22 | w_alv_value_tab TYPE tabl8000. |
23 | FIELD-SYMBOLS: <alv_fcat> LIKE LINE OF vim_alv_fcat, |
24 | <textfields>. |
25 | |
26 | IF x_header-frm_bf_prn <> space. |
27 |
28 | PERFORM drucken_ztp_alt. |
29 | EXIT. |
30 | ENDIF. |
31 | IF NOT vim_alv_fcat[] IS INITIAL. |
32 | READ TABLE vim_alv_fcat ASSIGNING <alv_fcat> INDEX 1. |
33 | IF <alv_fcat>-ref_tabname <> view_name. |
34 | UNASSIGN <alv_fcat>. FREE vim_alv_fcat. |
35 | ENDIF. |
36 | ENDIF. |
37 | IF vim_alv_fcat[] IS INITIAL. |
38 |
39 | PERFORM fill_alv_fieldcat CHANGING vim_alv_fcat |
40 | texttab_begin |
41 | vim_alv_value_length |
42 | unittab |
43 | unitname |
44 | glob_unitvalue |
45 | cukytab |
46 | cukyname |
47 | glob_cukyvalue. |
48 | PERFORM define_alv_callbacks CHANGING vim_alv_events. |
49 | PERFORM make_list_commentary USING unittab |
50 | unitname |
51 | glob_unitvalue |
52 | cukytab |
53 | cukyname |
54 | glob_cukyvalue |
55 | CHANGING vim_list_header. |
56 | PERFORM make_alv_layout CHANGING vim_alv_layout |
57 | vim_alv_print. |
58 | PERFORM init_alv_variant CHANGING vim_var_save |
59 | vim_var_default |
60 | vim_alv_variant. |
61 | vim_alv_called_by = 'VIM_CALL_ALV'. |
62 |
63 |
64 |
65 | ENDIF. "new structure table |
66 | REFRESH alv_value_tab. |
67 | IF status-mode = list_bild. |
68 |
69 | LOOP AT extract. |
70 | w_alv_value_tab = <vim_xextract>. |
71 |
72 |
73 | APPEND w_alv_value_tab TO alv_value_tab. |
74 | ENDLOOP. |
75 | ELSE. |
76 |
77 | w_alv_value_tab = <vim_xextract>. |
78 |
79 | APPEND w_alv_value_tab TO alv_value_tab. |
80 | ENDIF. |
81 | IF x_header-bastab <> space AND x_header-texttbexst <> space. |
82 |
83 | textlen = x_header-aft_txttbc - x_header-aft_txtkc. |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 | PERFORM maintain_alv_value_tab_text USING textlen. |
92 | ELSE. |
93 | vim_alv_value_length = x_header-tablen. |
94 | ENDIF. |
95 | IF x_header-frm_bf_alv <> space. |
96 | PERFORM (x_header-frm_bf_alv) IN PROGRAM (sy-repid). |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 | CHECK NOT alv_value_tab[] IS INITIAL. "suppress list |
109 | ENDIF. |
110 | PERFORM check_list_before_alv CHANGING rc. |
111 | CHECK rc = 0. |
112 | progname = sy-repid. |
113 | CALL FUNCTION 'REUSE_ALV_TABLE_CREATE' |
114 | EXPORTING |
115 | it_fieldcat = vim_alv_fcat |
116 | i_callback_program = progname |
117 | i_formname = vim_alv_called_by. |
118 | FREE alv_value_tab. |
119 | ENDFORM. " LIST_ALV |
120 | |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 | FORM drucken_ztp_alt. |
129 | DATA: rc_safe LIKE sy-subrc, texttab_begin LIKE sy-tabix, x TYPE i, |
130 | entifct_begin LIKE sy-tabix, len TYPE i, |
131 | after_text_assigned TYPE c, hname LIKE d021s-fnam. |
132 | DATA: fcat_entry TYPE slis_fieldcat_alv, i TYPE i, |
133 | cukytab TYPE tabname, unittab TYPE tabname, rc LIKE sy-subrc, |
134 | cukyname TYPE fieldname, unitname TYPE fieldname, |
135 | cukyvalue TYPE vim_cuky, unitvalue TYPE vim_unit, |
136 | length TYPE doffset, cukylength TYPE doffset, |
137 | fcat_entry2 TYPE slis_fieldcat_alv, progname LIKE sy-repid, |
138 | alv_called_by TYPE char30 VALUE 'VIM_CALL_ALV'. |
139 | FIELD-SYMBOLS: <before_text>, <text>, <after_text>, <cuky>, <unit>, |
140 | <value> TYPE tabl8000, <w_value_tab_x> TYPE x. |
141 | |
142 | CLEAR structure_table. |
143 | DESCRIBE TABLE structure_table. |
144 | IF sy-tfill NE 0. READ TABLE structure_table INDEX 1. ENDIF. |
145 | IF structure_table-tabname NE view_name. |
146 | CALL FUNCTION 'VIEW_GET_FIELDTAB' |
147 | EXPORTING |
148 | view_name = view_name |
149 | TABLES |
150 | fieldtab = structure_table. |
151 | IF x_header-bastab NE space AND x_header-texttbexst NE space |
152 | AND x_header-maintview = x_header-viewname. "Subviews |
153 |
154 | LOOP AT x_namtab WHERE texttabfld NE space |
155 | AND keyflag NE space. |
156 | texttab_begin = sy-tabix. |
157 | EXIT. |
158 | ENDLOOP. |
159 | LOOP AT x_namtab WHERE texttabfld EQ space |
160 | AND keyflag EQ space. |
161 | entifct_begin = sy-tabix. |
162 | EXIT. |
163 | ENDLOOP. |
164 | IF sy-subrc NE 0. "no entifct fields -> delete text key fields |
165 | LOOP AT structure_table FROM texttab_begin |
166 | WHERE keyflag NE space. |
167 | DELETE structure_table. |
168 | ENDLOOP. |
169 | ELSE. |
170 | WHILE sy-subrc EQ 0. |
171 | LOOP AT structure_table FROM texttab_begin. |
172 | DELETE structure_table. |
173 | IF structure_table-keyflag EQ space. |
174 | EXIT. |
175 | ENDIF. |
176 | ENDLOOP. |
177 | IF sy-subrc EQ 0. |
178 | INSERT structure_table INDEX entifct_begin. |
179 | ADD: 1 TO entifct_begin, 1 TO texttab_begin. |
180 | ENDIF. |
181 | ENDWHILE. |
182 | ENDIF. |
183 |
184 | len = 0. |
185 | LOOP AT structure_table. |
186 | structure_table-offset = len. |
187 | structure_table-position = sy-tabix. |
188 |
189 | IF 'CNDT' CS structure_table-inttype. |
190 |
191 | x = ( structure_table-offset |
192 | + cl_abap_char_utilities=>charsize ) |
193 | MOD cl_abap_char_utilities=>charsize. |
194 | IF x NE 0. |
195 | structure_table-offset = structure_table-offset |
196 | + cl_abap_char_utilities=>charsize - x. |
197 | ENDIF. |
198 | ELSE. |
199 | CASE structure_table-datatype. |
200 | WHEN 'INT2' OR 'PREC'. |
201 | x = ( structure_table-offset + 2 ) MOD 2. |
202 | IF x NE 0. |
203 | structure_table-offset = structure_table-offset + 2 - x. |
204 | ENDIF. |
205 | WHEN 'INT4'. |
206 | x = ( structure_table-offset + 4 ) MOD 4. |
207 | IF x NE 0. |
208 | structure_table-offset = structure_table-offset + 4 - x. |
209 | ENDIF. |
210 | WHEN 'FLTP'. |
211 | x = ( structure_table-offset + 8 ) MOD 8. |
212 | IF x NE 0. |
213 | structure_table-offset = structure_table-offset + 8 - x. |
214 | ENDIF. |
215 | ENDCASE. |
216 | ENDIF. |
217 | MODIFY structure_table. |
218 | len = structure_table-offset + structure_table-intlen. |
219 | ENDLOOP. |
220 | ENDIF. "table with texttable |
221 | IF x_header-hiddenflag NE space. "hidden fields exist |
222 |
223 | LOOP AT x_namtab WHERE readonly EQ vim_hidden OR |
224 | domname IN vim_guid_domain. |
225 | LOOP AT structure_table WHERE fieldname EQ x_namtab-viewfield. |
226 | DELETE structure_table. |
227 | EXIT. |
228 | ENDLOOP. |
229 | ENDLOOP. |
230 |
231 | len = 0. |
232 | LOOP AT structure_table. |
233 | structure_table-offset = len. |
234 | structure_table-position = sy-tabix. |
235 | IF 'CNDT' CS structure_table-inttype. |
236 |
237 | x = ( structure_table-offset |
238 | + cl_abap_char_utilities=>charsize ) |
239 | MOD cl_abap_char_utilities=>charsize. |
240 | IF x NE 0. |
241 | structure_table-offset = structure_table-offset |
242 | + cl_abap_char_utilities=>charsize - x. |
243 | ENDIF. |
244 | ELSE. |
245 | CASE structure_table-datatype. |
246 | WHEN 'INT2' OR 'PREC'. |
247 | x = ( structure_table-offset + 2 ) MOD 2. |
248 | IF x NE 0. |
249 | structure_table-offset = structure_table-offset + 2 - x. |
250 | ENDIF. |
251 | WHEN 'INT4'. |
252 | x = ( structure_table-offset + 4 ) MOD 4. |
253 | IF x NE 0. |
254 | structure_table-offset = structure_table-offset + 4 - x. |
255 | ENDIF. |
256 | WHEN 'FLTP'. |
257 | x = ( structure_table-offset + 8 ) MOD 8. |
258 | IF x NE 0. |
259 | structure_table-offset = structure_table-offset + 8 - x. |
260 | ENDIF. |
261 | ENDCASE. |
262 | ENDIF. |
263 | MODIFY structure_table. |
264 | len = structure_table-offset + structure_table-intlen. |
265 | ENDLOOP. |
266 | ENDIF. "hidden fields exist |
267 | ENDIF. "new structure table |
268 |
269 | ASSIGN value_tab TO <w_value_tab_x> CASTING. |
270 | IF x_header-bastab NE space AND x_header-texttbexst NE space |
271 | "base table with text table |
272 | AND x_header-maintview = x_header-viewname. |
273 | CLEAR value_tab. |
274 | IF status-mode EQ list_bild. |
275 | LOOP AT extract. |
276 | PERFORM build_valtab_hfields. |
277 | ENDLOOP. |
278 | ELSE. |
279 | PERFORM build_valtab_hfields. |
280 | ENDIF. |
281 |
282 | ELSE. |
283 |
284 |
285 | CLEAR value_tab. |
286 | IF x_header-hiddenflag EQ space AND"no hidden fields |
287 | x_header-fieldorder EQ space. "Subviews /untersch. Feldreihenf. |
288 | IF status-mode EQ list_bild. |
289 | LOOP AT extract. |
290 | MOVE <vim_xextract> TO <w_value_tab_x>(x_header-tablen). |
291 |
292 | APPEND value_tab. |
293 | ENDLOOP. |
294 | ELSE. |
295 | MOVE <vim_xextract> TO <w_value_tab_x>(x_header-tablen). |
296 |
297 | APPEND value_tab. |
298 | ENDIF. |
299 | ELSE. "hidden fields exist -> move field by field |
300 | IF status-mode EQ list_bild. |
301 | LOOP AT extract. |
302 | PERFORM build_valtab_hfields. |
303 | ENDLOOP. |
304 | ELSE. |
305 | PERFORM build_valtab_hfields. |
306 | ENDIF. |
307 | ENDIF. |
308 | ENDIF. "base table with text_table. |
309 | IF x_header-frm_bf_prn NE space. "user exit exists |
310 |
311 | PERFORM (x_header-frm_bf_prn) IN PROGRAM (sy-repid). |
312 | ENDIF. |
313 | CHECK NOT value_tab[] IS INITIAL. "suppress list |
314 |
315 |
316 | REFRESH vim_alv_fcat. |
317 | LOOP AT structure_table. |
318 | CLEAR fcat_entry. |
319 | PERFORM conv_dfies_fcat USING structure_table |
320 | sy-tabix |
321 | CHANGING fcat_entry. |
322 | APPEND fcat_entry TO vim_alv_fcat. |
323 | ENDLOOP. |
324 | length = structure_table-offset + structure_table-intlen. |
325 |
326 | DESCRIBE TABLE vim_alv_fcat LINES i. |
327 | LOOP AT vim_alv_fcat INTO fcat_entry WHERE datatype = 'CURR' |
328 | OR datatype = 'QUAN'. |
329 | CASE fcat_entry-datatype. |
330 | WHEN 'CURR'. |
331 | READ TABLE x_namtab WITH KEY viewfield = fcat_entry-cfieldname |
332 | TRANSPORTING NO FIELDS. |
333 | IF sy-subrc <> 0. |
334 |
335 | READ TABLE x_namtab WITH KEY viewfield = fcat_entry-fieldname. |
336 | cukytab = x_namtab-reftable. |
337 | cukyname = x_namtab-reffield. |
338 | CONCATENATE x_namtab-reftable '-' x_namtab-reffield |
339 | INTO hname. |
340 | ASSIGN (hname) TO <cuky>. |
341 | IF sy-subrc = 0. |
342 |
343 | fcat_entry-currency = cukyvalue = <cuky>. |
344 | ENDIF. |
345 | ENDIF. |
346 | WHEN 'QUAN'. |
347 | READ TABLE x_namtab WITH KEY viewfield = fcat_entry-qfieldname |
348 | TRANSPORTING NO FIELDS. |
349 | IF sy-subrc <> 0. |
350 |
351 | READ TABLE x_namtab WITH KEY viewfield = fcat_entry-fieldname. |
352 | unittab = x_namtab-reftable. |
353 | unitname = x_namtab-reffield. |
354 | CONCATENATE x_namtab-reftable '-' x_namtab-reffield |
355 | INTO hname. |
356 | ASSIGN (hname) TO <unit>. |
357 | IF sy-subrc = 0. |
358 |
359 | fcat_entry-quantity = unitvalue = <unit>. |
360 | ENDIF. |
361 | ENDIF. |
362 | ENDCASE. |
363 | MODIFY vim_alv_fcat FROM fcat_entry. |
364 | ENDLOOP. |
365 | REFRESH alv_value_tab. |
366 | LOOP AT value_tab. |
367 | APPEND <w_value_tab_x> TO alv_value_tab. |
368 | ENDLOOP. |
369 |
370 | FREE value_tab. |
371 | IF NOT cukyname IS INITIAL. |
372 |
373 | LOOP AT alv_value_tab ASSIGNING <value>. |
374 | <value>+length = cukyvalue. |
375 | ENDLOOP. |
376 | length = length + cukylength. |
377 | ENDIF. |
378 | IF NOT unitname IS INITIAL. |
379 |
380 | LOOP AT alv_value_tab ASSIGNING <value>. |
381 | <value>+length = unitvalue. |
382 | ENDLOOP. |
383 | ENDIF. |
384 | PERFORM define_alv_callbacks CHANGING vim_alv_events. |
385 | PERFORM make_list_commentary USING unittab |
386 | unitname |
387 | unitvalue |
388 | cukytab |
389 | cukyname |
390 | cukyvalue |
391 | CHANGING vim_list_header. |
392 | PERFORM make_alv_layout CHANGING vim_alv_layout |
393 | vim_alv_print. |
394 | PERFORM init_alv_variant CHANGING vim_var_save |
395 | vim_var_default |
396 | vim_alv_variant. |
397 | progname = sy-repid. |
398 | PERFORM check_list_before_alv CHANGING rc. |
399 | CHECK rc = 0. |
400 | CALL FUNCTION 'REUSE_ALV_TABLE_CREATE' |
401 | EXPORTING |
402 | it_fieldcat = vim_alv_fcat |
403 | i_callback_program = progname |
404 | i_formname = alv_called_by. |
405 | FREE alv_value_tab. |
406 |
407 | ENDFORM. " DRUCKEN_ZTP_ALT |
408 | |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 | FORM make_list_commentary USING p_unittab TYPE tabname |
417 | p_unitname TYPE fieldname |
418 | p_unitvalue TYPE any |
419 | "vim_unitUF296573/2000 |
420 | p_cukytab TYPE tabname |
421 | p_cukyname TYPE fieldname |
422 | p_cukyvalue TYPE vim_cuky |
423 | CHANGING p_list_header TYPE slis_t_listheader. |
424 | DATA: h_header TYPE slis_listheader, |
425 | text(40), w_dfies TYPE dfies. |
426 | |
427 | REFRESH p_list_header. |
428 | h_header-typ = 'H'. |
429 | h_header-info = x_header-ddtext. |
430 | APPEND h_header TO p_list_header. |
431 | h_header-typ = 'S'. |
432 | IF x_header-bastab NE space AND x_header-texttbexst NE space |
433 | AND x_header-maintview = x_header-viewname. |
434 | h_header-key = svim_text_p01. |
435 | ELSE. |
436 | h_header-key = svim_text_p02. |
437 | ENDIF. |
438 | h_header-info = x_header-viewname. |
439 | APPEND h_header TO p_list_header. |
440 | IF x_header-clidep <> space. |
441 | h_header-key = svim_text_p03. |
442 | h_header-info = sy-mandt. |
443 | APPEND h_header TO p_list_header. |
444 | ENDIF. |
445 | IF p_unitname <> space. |
446 | CLEAR h_header. |
447 | h_header-typ = 'S'. |
448 | PERFORM vim_get_reffield_alv USING p_unitname |
449 | p_unittab |
450 | CHANGING w_dfies. |
451 | IF w_dfies <> space. |
452 | IF w_dfies-scrtext_m <> space. |
453 | h_header-key = w_dfies-scrtext_m(20). |
454 | ELSE. |
455 | IF w_dfies-scrtext_l <> space. |
456 | h_header-key = w_dfies-scrtext_l(20). |
457 | ELSE. |
458 | IF w_dfies-scrtext_s <> space. |
459 | h_header-key = w_dfies-scrtext_s(10). |
460 | ELSE. |
461 | IF w_dfies-reptext <> space. |
462 | h_header-key = w_dfies-reptext(20). |
463 | ELSE. |
464 | h_header-key = w_dfies-fieldname. |
465 | ENDIF. |
466 | ENDIF. |
467 | ENDIF. |
468 | ENDIF. |
469 | ENDIF. |
470 | h_header-info = p_unitvalue. |
471 | APPEND h_header TO p_list_header. |
472 | ENDIF. |
473 | IF p_cukyname <> space. |
474 | CLEAR h_header. |
475 | h_header-typ = 'S'. |
476 | PERFORM vim_get_reffield_alv USING p_cukyname |
477 | p_cukytab |
478 | CHANGING w_dfies. |
479 | IF w_dfies <> space. |
480 | IF w_dfies-scrtext_m <> space. |
481 | h_header-key = w_dfies-scrtext_m(20). |
482 | ELSE. |
483 | IF w_dfies-scrtext_l <> space. |
484 | h_header-key = w_dfies-scrtext_l(20). |
485 | ELSE. |
486 | IF w_dfies-scrtext_s <> space. |
487 | h_header-key = w_dfies-scrtext_s(10). |
488 | ELSE. |
489 | IF w_dfies-reptext <> space. |
490 | h_header-key = w_dfies-reptext(20). |
491 | ELSE. |
492 | h_header-key = w_dfies-fieldname. |
493 | ENDIF. |
494 | ENDIF. |
495 | ENDIF. |
496 | ENDIF. |
497 | ENDIF. |
498 | h_header-info = p_cukyvalue. |
499 | APPEND h_header TO p_list_header. |
500 | ENDIF. |
501 | ENDFORM. " MAKE_LIST_COMMENTARY |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 | FORM define_alv_callbacks CHANGING p_alv_events TYPE slis_t_event. |
510 | DATA: h_event TYPE slis_alv_event. |
511 | CONSTANTS: formname_top_of_list TYPE slis_formname |
512 | VALUE 'ALV_TOP_OF_LIST', |
513 | formname_top_of_page TYPE slis_formname |
514 | VALUE 'ALV_TOP_OF_PAGE', |
515 | formname_end_of_page TYPE slis_formname |
516 | VALUE 'ALV_END_OF_PAGE', |
517 | formname_end_of_list TYPE slis_formname |
518 | VALUE 'ALV_END_OF_LIST'. |
519 | REFRESH p_alv_events. |
520 | CALL FUNCTION 'REUSE_ALV_EVENTS_GET' |
521 | EXPORTING |
522 | i_list_type = 0 |
523 | IMPORTING |
524 | et_events = p_alv_events. |
525 |
526 | READ TABLE p_alv_events WITH KEY name = slis_ev_top_of_list |
527 | INTO h_event. |
528 | IF sy-subrc = 0. |
529 | h_event-form = formname_top_of_list. |
530 | APPEND h_event TO p_alv_events. |
531 | ENDIF. |
532 |
533 | READ TABLE p_alv_events WITH KEY name = slis_ev_top_of_page |
534 | INTO h_event. |
535 | IF sy-subrc = 0. |
536 | h_event-form = formname_top_of_page. |
537 | APPEND h_event TO p_alv_events. |
538 | ENDIF. |
539 |
540 | READ TABLE p_alv_events WITH KEY name = slis_ev_end_of_page |
541 | INTO h_event. |
542 | IF sy-subrc = 0. |
543 | h_event-form = formname_end_of_page. |
544 | APPEND h_event TO p_alv_events. |
545 | ENDIF. |
546 |
547 | READ TABLE p_alv_events WITH KEY name = slis_ev_end_of_list |
548 | INTO h_event. |
549 | IF sy-subrc = 0. |
550 | h_event-form = formname_end_of_list. |
551 | APPEND h_event TO p_alv_events. |
552 | ENDIF. |
553 | ENDFORM. "define_alv_callbacks |
554 | |
555 |
556 |
557 |
558 |
559 |
560 | * |
561 |
562 | FORM alv_top_of_list. |
563 | CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' |
564 | EXPORTING |
565 | it_list_commentary = vim_list_header. |
566 | |
567 | ENDFORM. " ALV_TOP_OF_LIST |
568 |
569 |
570 |
571 |
572 |
573 | * |
574 |
575 | FORM alv_top_of_page. |
576 | WRITE AT (sy-linsz) sy-datum RIGHT-JUSTIFIED. |
577 | ENDFORM. " ALV_TOP_OF_PAGE |
578 |
579 |
580 |
581 |
582 |
583 | * |
584 |
585 | FORM alv_end_of_page. |
586 | WRITE AT (sy-linsz) sy-pagno CENTERED. |
587 | ENDFORM. " ALV_END_OF_PAGE |
588 | |
589 |
590 |
591 |
592 |
593 |
594 |
595 |
596 | FORM make_alv_layout CHANGING p_alv_layout TYPE slis_layout_alv |
597 | p_alv_print TYPE slis_print_alv. |
598 |
599 | CLEAR p_alv_layout. |
600 | p_alv_layout-colwidth_optimize = 'X'. |
601 | p_alv_layout-f2code = '&ETA'. |
602 | p_alv_layout-detail_popup = 'X'. |
603 |
604 |
605 | p_alv_print-no_print_listinfos = 'X'. |
606 | ENDFORM. " MAKE_ALV_LAYOUT |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 | FORM fill_alv_fieldcat CHANGING p_vim_alv_fcat TYPE slis_t_fieldcat_alv |
615 | texttab_begin LIKE sy-tabix |
616 | p_value_length TYPE intlen |
617 |
618 | p_unittab TYPE tabname |
619 | p_unitname TYPE fieldname |
620 | p_unitvalue TYPE any "vim_unit |
621 | "UF296573/2000 |
622 | p_cukytab TYPE tabname |
623 | p_cukyname TYPE fieldname |
624 | p_cukyvalue TYPE vim_cuky. |
625 | |
626 | DATA: fcat_header TYPE slis_fieldcat_alv, textfld_no TYPE i, |
627 | fcat_reffield TYPE slis_fieldcat_alv, rc LIKE sy-subrc, |
628 | first TYPE xfeld VALUE 'X', list_width TYPE outputlen, |
629 | i TYPE i, first_func_field TYPE i, text_outp_len TYPE outputlen, |
630 | fldno(2) TYPE n, strln TYPE i, |
631 | hname TYPE fnam_____4, maintview, global_unit_set, |
632 | global_cuky_set. |
633 | |
634 | CONSTANTS: max_list_width TYPE i VALUE 250. |
635 | |
636 | FIELD-SYMBOLS: <alv_fcat> LIKE LINE OF p_vim_alv_fcat, |
637 | <alv_fcat2> LIKE LINE OF p_vim_alv_fcat, "UF412290/2001 |
638 | <x_namt> LIKE LINE OF x_namtab, <cuky> TYPE vim_cuky, |
639 | <unit> TYPE ANY. "vim_unit. UF296573/2000 |
640 | |
641 | REFRESH p_vim_alv_fcat. |
642 | CLEAR: p_unitname, p_cukyname, p_unitvalue, p_cukyvalue, |
643 | p_value_length. |
644 | IF x_header-bastab EQ space OR x_header-texttbexst EQ space |
645 | OR x_header-maintview NE x_header-viewname. |
646 | maintview = 'X'. "It's a maintenance view! |
647 | ENDIF. |
648 |
649 | LOOP AT x_namtab ASSIGNING <x_namt> WHERE texttabfld = space |
650 | OR keyflag = space. |
651 | i = i + 1. |
652 | fcat_header-col_pos = i. |
653 | fcat_header-fieldname = <x_namt>-viewfield. |
654 | IF maintview = space. |
655 | fcat_header-ref_tabname = <x_namt>-bastabname. |
656 | ELSE. |
657 | fcat_header-ref_tabname = x_header-maintview. |
658 | ENDIF. |
659 | fcat_header-key = <x_namt>-keyflag. |
660 | fcat_header-seltext_l = <x_namt>-scrtext_l. |
661 | fcat_header-seltext_m = <x_namt>-scrtext_m. |
662 | fcat_header-seltext_s = <x_namt>-scrtext_s. |
663 | fcat_header-reptext_ddic = <x_namt>-reptext. |
664 | fcat_header-datatype = <x_namt>-datatype. |
665 | fcat_header-inttype = <x_namt>-inttype. |
666 | fcat_header-ddic_outputlen = <x_namt>-outputlen. |
667 | fcat_header-intlen = <x_namt>-flength. |
668 | fcat_header-lowercase = <x_namt>-lowercase. |
669 | CASE <x_namt>-datatype. |
670 | WHEN 'CLNT'. |
671 | IF x_header-clidep <> space. |
672 | fcat_header-tech = 'X'. |
673 | ENDIF. |
674 | WHEN 'CURR'. |
675 | READ TABLE x_namtab WITH KEY viewfield = <x_namt>-reffield |
676 | TRANSPORTING NO FIELDS. |
677 | IF sy-subrc = 0 AND <x_namt>-reftable = x_header-maintview. |
678 | "UF163276/2001 |
679 |
680 | fcat_header-cfieldname = <x_namt>-reffield. |
681 | ELSE. |
682 | IF p_cukyvalue IS INITIAL. |
683 |
684 | p_cukytab = <x_namt>-reftable. |
685 | p_cukyname = <x_namt>-reffield. |
686 | CONCATENATE <x_namt>-reftable '-' <x_namt>-reffield |
687 | INTO hname. |
688 | ASSIGN (hname) TO <cuky>. |
689 | IF sy-subrc = 0. |
690 |
691 | fcat_header-currency = p_cukyvalue = <cuky>. |
692 | ENDIF. |
693 | ELSE. |
694 | fcat_header-currency = p_cukyvalue. |
695 | ENDIF. |
696 | ENDIF. |
697 | WHEN 'QUAN'. |
698 | READ TABLE x_namtab WITH KEY viewfield = <x_namt>-reffield |
699 | TRANSPORTING NO FIELDS. |
700 | IF sy-subrc = 0 AND <x_namt>-reftable = x_header-maintview. |
701 | "UF163276/2001. |
702 |
703 | fcat_header-qfieldname = <x_namt>-reffield. |
704 | ELSE. |
705 |
706 | IF p_unitvalue IS INITIAL. |
707 | p_unittab = <x_namt>-reftable. |
708 | p_unitname = <x_namt>-reffield. |
709 | CONCATENATE <x_namt>-reftable '-' <x_namt>-reffield |
710 | INTO hname. |
711 | ASSIGN (hname) TO <unit>. |
712 | IF sy-subrc = 0. |
713 |
714 | fcat_header-quantity = p_unitvalue = <unit>. |
715 | ENDIF. |
716 | ELSE. |
717 | fcat_header-quantity = p_unitvalue. |
718 | ENDIF. |
719 | ENDIF. |
720 | ENDCASE. |
721 | IF <x_namt>-readonly = vim_hidden |
722 |
723 | OR <x_namt>-domname IN vim_guid_domain. |
724 |
725 | fcat_header-tech = 'X'. |
726 | ELSE. |
727 | list_width = list_width + <x_namt>-outputlen + 1. |
728 | ENDIF. |
729 | p_value_length = p_value_length + fcat_header-intlen. |
730 | APPEND fcat_header TO p_vim_alv_fcat. |
731 | CLEAR fcat_header. |
732 | CHECK <x_namt>-texttabfld <> space. |
733 | textfld_no = textfld_no + 1. "get no. of text fields |
734 |
735 | CHECK <x_namt>-readonly <> vim_hidden. |
736 | IF first <> space. |
737 | texttab_begin = i. "position of 1st text fld |
738 | CLEAR first. |
739 | ENDIF. |
740 | text_outp_len = text_outp_len + <x_namt>-outputlen. |
741 | ENDLOOP. |
742 | first = 'X'. |
743 | CLEAR i. |
744 | IF x_header-bastab NE space AND x_header-texttbexst NE space |
745 | AND x_header-maintview = x_header-viewname. |
746 |
747 | LOOP AT p_vim_alv_fcat ASSIGNING <alv_fcat> WHERE key = space. |
748 | IF first <> space. |
749 | first_func_field = <alv_fcat>-col_pos. |
750 | CLEAR first. |
751 | ENDIF. |
752 | IF sy-tabix < texttab_begin. |
753 | <alv_fcat>-col_pos = <alv_fcat>-col_pos + textfld_no. |
754 | ELSE. |
755 | i = i + 1. |
756 | <alv_fcat>-col_pos = first_func_field + i - 1. |
757 | ENDIF. |
758 | ENDLOOP. |
759 | first = 'X'. |
760 | SORT p_vim_alv_fcat BY col_pos. |
761 | ENDIF. |
762 | IF list_width > max_list_width. |
763 |
764 | list_width = i = 1. |
765 | LOOP AT p_vim_alv_fcat ASSIGNING <alv_fcat>. |
766 | list_width = list_width + <alv_fcat>-ddic_outputlen + 1. |
767 | IF list_width > max_list_width. |
768 | i = i + 1. |
769 | list_width = <alv_fcat>-ddic_outputlen + 1. |
770 | ENDIF. |
771 | <alv_fcat>-row_pos = i. |
772 | ENDLOOP. |
773 | ENDIF. |
774 | IF maintview = space. "UF412290/2001b |
775 |
776 | LOOP AT p_vim_alv_fcat ASSIGNING <alv_fcat>. |
777 | i = sy-tabix. |
778 | CLEAR fldno. |
779 | LOOP AT p_vim_alv_fcat ASSIGNING <alv_fcat2> |
780 | WHERE fieldname = <alv_fcat>-fieldname. |
781 | CHECK sy-tabix <> i. |
782 | <alv_fcat2>-ref_fieldname = <alv_fcat2>-fieldname. |
783 | ADD 1 TO fldno. |
784 | CONCATENATE <alv_fcat2>-fieldname fldno |
785 | INTO <alv_fcat2>-fieldname. |
786 | IF sy-subrc <> 0. |
787 | strln = strlen( <alv_fcat2>-fieldname ) - 2. |
788 | CONCATENATE <alv_fcat2>-fieldname(strln) fldno |
789 | INTO <alv_fcat2>-fieldname. |
790 | ENDIF. |
791 | ENDLOOP. |
792 | ENDLOOP. |
793 | ENDIF. "UF412290/2001e |
794 | ENDFORM. " FILL_ALV_FIELDCAT |
795 | |
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
804 | FORM vim_call_alv TABLES value_tab. |
805 | |
806 | DATA: progname LIKE sy-repid. |
807 | FIELD-SYMBOLS: <alv_value_tab_x> TYPE tabl8000, |
808 | <value_tab_x> TYPE x. |
809 | |
810 | REFRESH value_tab. |
811 | ASSIGN value_tab TO <value_tab_x> CASTING. |
812 | LOOP AT alv_value_tab ASSIGNING <alv_value_tab_x>. |
813 | <value_tab_x> = <alv_value_tab_x>. |
814 | APPEND value_tab. |
815 | ENDLOOP. |
816 |
817 | progname = sy-repid. |
818 | CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' |
819 | EXPORTING |
820 | i_callback_program = progname |
821 | is_layout = vim_alv_layout |
822 | it_fieldcat = vim_alv_fcat |
823 |
824 |
825 |
826 |
827 |
828 | i_default = vim_var_default |
829 | i_save = vim_var_save |
830 | is_variant = vim_alv_variant |
831 | it_events = vim_alv_events |
832 |
833 | is_print = vim_alv_print |
834 |
835 |
836 |
837 |
838 |
839 |
840 |
841 |
842 | TABLES |
843 | t_outtab = value_tab[] |
844 | EXCEPTIONS |
845 | program_error = 1 |
846 | OTHERS = 2. |
847 | IF sy-subrc NE 0. RAISE print_error. ENDIF. |
848 | ENDFORM. "vim_call_alv |
849 |
850 |
851 |
852 |
853 |
854 |
855 |
856 | FORM maintain_alv_value_tab_text USING p_textlen TYPE intlen. |
857 | |
858 | DATA: x TYPE i, record TYPE tabl8000, textoffset TYPE intlen, |
859 | BEGIN OF new_offs, |
860 | ref_tabname TYPE tabname, |
861 | fieldname TYPE viewfield, |
862 | ref_fieldname TYPE fieldname, |
863 | offset TYPE tabfdpos, |
864 | END OF new_offs. |
865 | |
866 | STATICS: t_fld_offs LIKE SORTED TABLE OF new_offs WITH UNIQUE KEY |
867 | ref_tabname fieldname ref_fieldname |
868 | INITIAL SIZE 1, |
869 | viewname TYPE viewname. |
870 | FIELD-SYMBOLS: <x_namt> LIKE LINE OF x_namtab, |
871 | <alv_fcat> TYPE slis_fieldcat_alv, |
872 | <alv_val>. |
873 | |
874 | IF viewname <> x_header-viewname. |
875 | viewname = x_header-viewname. |
876 | REFRESH t_fld_offs. |
877 | new_offs-offset = x_header-after_keyc. |
878 |
879 |
880 | LOOP AT vim_alv_fcat ASSIGNING <alv_fcat> WHERE key = space. |
881 | new_offs-ref_tabname = <alv_fcat>-ref_tabname. |
882 | new_offs-fieldname = <alv_fcat>-fieldname. |
883 | new_offs-ref_fieldname = <alv_fcat>-ref_fieldname. "UF412290/2001 |
884 |
885 | IF 'CNDT' CS <alv_fcat>-inttype. |
886 |
887 | x = ( new_offs-offset + cl_abap_char_utilities=>charsize ) |
888 | MOD cl_abap_char_utilities=>charsize. |
889 | IF x NE 0. |
890 | new_offs-offset = new_offs-offset |
891 | + cl_abap_char_utilities=>charsize - x. |
892 | ENDIF. |
893 | ELSE. |
894 | CASE <alv_fcat>-datatype. |
895 | WHEN 'INT2' OR 'PREC'. |
896 | x = ( new_offs-offset + 2 ) MOD 2. |
897 | IF x NE 0. |
898 | new_offs-offset = new_offs-offset + 2 - x. |
899 | ENDIF. |
900 | WHEN 'INT4'. |
901 | x = ( new_offs-offset + 4 ) MOD 4. |
902 | IF x NE 0. |
903 | new_offs-offset = new_offs-offset + 4 - x. |
904 | ENDIF. |
905 | WHEN 'FLTP'. |
906 | x = ( new_offs-offset + 8 ) MOD 8. |
907 | IF x NE 0. |
908 | new_offs-offset = new_offs-offset + 8 - x. |
909 | ENDIF. |
910 | ENDCASE. |
911 | ENDIF. |
912 | INSERT new_offs INTO TABLE t_fld_offs. |
913 | new_offs-offset = new_offs-offset + <alv_fcat>-intlen. |
914 | ENDLOOP. |
915 | ENDIF. |
916 | textoffset = x_header-after_tabc + x_header-aft_txtkc. |
917 |
918 | LOOP AT alv_value_tab ASSIGNING <alv_val>. |
919 | record(x_header-after_keyc) = <alv_val>(x_header-after_keyc). |
920 |
921 | IF p_textlen > 0. |
922 | record+x_header-after_keyc(p_textlen) = |
923 | <alv_val>+textoffset(p_textlen). |
924 |
925 |
926 | ENDIF. |
927 | LOOP AT x_namtab ASSIGNING <x_namt> WHERE keyflag = space AND |
928 | texttabfld = space. |
929 | READ TABLE t_fld_offs INTO new_offs WITH TABLE KEY |
930 | ref_tabname = <x_namt>-bastabname |
931 | fieldname = <x_namt>-viewfield |
932 | ref_fieldname = space. |
933 | IF sy-subrc = 0. |
934 | record+new_offs-offset(<x_namt>-flength) = |
935 | <alv_val>+<x_namt>-position(<x_namt>-flength). |
936 | ELSE. "UF412290/2001b |
937 |
938 | READ TABLE t_fld_offs INTO new_offs WITH KEY |
939 | ref_tabname = <x_namt>-bastabname |
940 | ref_fieldname = <x_namt>-viewfield. |
941 | IF sy-subrc = 0. |
942 | record+new_offs-offset(<x_namt>-flength) = |
943 | <alv_val>+<x_namt>-position(<x_namt>-flength). |
944 | ENDIF. "UF412290/2001e |
945 | ENDIF. |
946 | ENDLOOP. |
947 | CLEAR <alv_val>. |
948 | <alv_val> = record. |
949 | ENDLOOP. |
950 | ENDFORM. " MAINTAIN_ALV_VALUE_TAB_TEXT |
951 |
952 |
953 |
954 |
955 |
956 |
957 |
958 |
959 |
960 | FORM vim_get_reffield_alv USING value(p_reffield) TYPE fieldname |
961 | value(p_reftable) TYPE tabname |
962 | CHANGING p_dfies TYPE dfies. |
963 | |
964 | DATA: dfies_tab TYPE TABLE OF dfies. |
965 | |
966 | CALL FUNCTION 'DDIF_FIELDINFO_GET' |
967 | EXPORTING |
968 | tabname = p_reftable |
969 | fieldname = p_reffield |
970 | langu = sy-langu |
971 | TABLES |
972 | dfies_tab = dfies_tab |
973 | EXCEPTIONS |
974 | not_found = 1 |
975 | internal_error = 2 |
976 | OTHERS = 3. |
977 | IF sy-subrc <> 0. |
978 | EXIT. |
979 | ELSE. |
980 | READ TABLE dfies_tab INTO p_dfies INDEX 1. |
981 | ENDIF. |
982 | ENDFORM. " VIM_GET_REFFIELD_ALV |
983 | |
984 |
985 |
986 |
987 |
988 |
989 |
990 |
991 |
992 | FORM conv_dfies_fcat USING p_dfies LIKE dfies |
993 | i TYPE i |
994 | CHANGING p_fcat_reffield TYPE slis_fieldcat_alv. |
995 | |
996 | p_fcat_reffield-col_pos = i. |
997 | p_fcat_reffield-fieldname = p_dfies-fieldname. |
998 | p_fcat_reffield-ref_tabname = p_dfies-tabname. |
999 | p_fcat_reffield-key = p_dfies-keyflag. |
1000 | p_fcat_reffield-seltext_l = p_dfies-scrtext_l. |
1001 | p_fcat_reffield-seltext_m = p_dfies-scrtext_m. |
1002 | p_fcat_reffield-seltext_s = p_dfies-scrtext_s. |
1003 | p_fcat_reffield-reptext_ddic = p_dfies-reptext. |
1004 | p_fcat_reffield-datatype = p_dfies-datatype. |
1005 | p_fcat_reffield-inttype = p_dfies-inttype. |
1006 | p_fcat_reffield-ddic_outputlen = p_dfies-outputlen. |
1007 | p_fcat_reffield-intlen = p_dfies-intlen. |
1008 | p_fcat_reffield-lowercase = p_dfies-lowercase. |
1009 | CASE p_dfies-datatype. |
1010 | WHEN 'CLNT'. |
1011 | CHECK x_header-clidep <> space AND p_fcat_reffield-key <> space. |
1012 | p_fcat_reffield-tech = 'X'. |
1013 | WHEN 'CURR'. |
1014 |
1015 | p_fcat_reffield-cfieldname = p_dfies-reffield. |
1016 | WHEN 'QUAN'. |
1017 |
1018 | p_fcat_reffield-qfieldname = p_dfies-reffield. |
1019 | ENDCASE. |
1020 | ENDFORM. " CONV_DFIES_FCAT |
1021 |
1022 |
1023 |
1024 |
1025 |
1026 |
1027 |
1028 |
1029 | FORM init_alv_variant CHANGING p_save |
1030 | p_default |
1031 | p_variant STRUCTURE disvariant. |
1032 | |
1033 | CONCATENATE x_header-viewname sy-repid INTO p_variant-report. |
1034 | p_save = 'A'. |
1035 | p_default = 'X'. |
1036 | ENDFORM. " INIT_ALV_VARIANT |
1037 |
1038 |
1039 |
1040 |
1041 |
1042 | * |
1043 |
1044 | FORM alv_end_of_list. |
1045 | WRITE AT /(sy-linsz) sy-pagno CENTERED. |
1046 | ENDFORM. " ALV_END_OF_LIST |