1、 源码: *&---------------------------------------------------------------------* *& Report ZDEMO_ALV_MERGERHEADER * *& * *&---------------------------------------------------------------------
2、 *& * *& * *&---------------------------------------------------------------------* REPORT z_alv_manual_set_header . TABLES:afko,afru,afpo,p
3、bim,pbed,makt,mard . *************ALV TYPE-POOLS slis. DATA:l_events TYPE slis_t_event, gs_layout TYPE slis_layout_alv, fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE, eventcat TYPE slis_t_event WITH HEADER LINE. DATA:l_variant TYPE TABLE OF disvariant WITH HEADER LINE,
4、 prg LIKE sy-repid. ************** DATA:bedat LIKE pbed-pdatu,"当月月初 eddat LIKE pbed-pdatu."当月月末 DATA yesterday LIKE sy-datum. DATA: lcm LIKE makt-matnr, " 冷藏门 ldm LIKE makt-matnr, " 冷冻门 bwm LIKE makt-matnr, "变温门 czhxt LIKE makt-matnr," 初装后箱体 zzhxt L
5、IKE makt-matnr." 总装后箱体 DATA:gmnga_buf LIKE afru-gmnga. "计算当月计划 DATA:BEGIN OF itb_list_fert OCCURS 0, "当天有生产的整机清单 stlbez LIKE afko-stlbez, "物料号 stlal LIKE afko-stlal, "可选BOM stlan LIKE afko-stlan, "BOM 用途 END OF itb_list_fert. DATA: maktx LIKE ma
6、kt-maktx , maktx1 LIKE makt-maktx , f1 LIKE makt-maktx , f2 LIKE makt-maktx , f3 LIKE makt-maktx , dot VALUE '.', dot1 VALUE ','. DATA:BEGIN OF itb_output OCCURS 0,"输出表格 maktx LIKE makt-maktx, "产品型号 plnmg_f_m LIKE pbed-plnmg, "当月计划
7、 czhxt LIKE makt-matnr," 初装后箱体 gmnga_lcm LIKE afru-gmnga, "冷藏门 当日完成 gmnga_lcm_lj LIKE afru-gmnga,"冷藏门 累计完成 labst_lcm LIKE mard-labst, "冷藏门 结存 gmnga_ldm LIKE afru-gmnga, "冷冻门 当日完成 gmnga_ldm_lj LIKE afru-gmnga,"冷冻门 累计完成 labst_ldm LIKE mar
8、d-labst, "冷冻门 结存 gmnga_bwm LIKE afru-gmnga, "变温门 当日完成 gmnga_bwm_lj LIKE afru-gmnga,"变温门 累计完成 labst_bwm LIKE mard-labst, "变温门 结存 gmnga_czhxt LIKE afru-gmnga, "初装上楼 当日完成 gmnga_czhxt_lj LIKE afru-gmnga,"初装上楼 累计完成 labst_czhxt LIKE mard-labst,
9、 "初装上楼 结存 gmnga_zzhxt LIKE afru-gmnga, "总装完成 当日完成 gmnga_zzhxt_lj LIKE afru-gmnga,"总装完成 累计完成 labst_zzhxt LIKE mard-labst, "总装完成 结存 gmnga_zj LIKE afru-gmnga, "成品入库 当日完成 "生产计划已完成数 gmnga_zj_lj LIKE afru-gmnga,"成品入库 累计完成 labst_zj LIKE mard-lab
10、st, "成品入库 结存 sljhc LIKE afru-gmnga , "上楼冰箱与计划差 bzjhc LIKE afru-gmnga , "包装入库冰箱与计划差 gmnga_zj1 LIKE afru-gmnga, "生产计划已完成数 END OF itb_output. DATA itb_stpox LIKE STANDARD TABLE OF stpox WITH HEADER LINE. DATA:BEGIN OF itb_bom_maktx OCCURS 0,"BOM展开后的
11、物料描述 idnrk LIKE stpox-idnrk, maktx LIKE makt-maktx, END OF itb_bom_maktx. INITIALIZATION. l_variant-report = sy-repid. *******************************************START-OF-SelectION START-OF-SelectION. PERFORM eventtab_build CHANGING l_events. PERFORM input_data. PER
12、FORM write_data. *&---------------------------------------------------------------------* *& Form write_data *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1
13、text * <-- p2 text *----------------------------------------------------------------------* FORM write_data . PERFORM get_fieldcat. gs_layout-zebra = 'X' . prg = sy-repid. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = prg is_layo
14、ut = gs_layout is_variant = l_variant it_fieldcat = fieldcat[] it_events = eventcat[] TABLES t_outtab = itb_output[] EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. "
15、 write_data *&---------------------------------------------------------------------* *& Form GET_FIELDCAT *&---------------------------------------------------------------------* * 因为ALV表头是手工调整输出的,所以必须在这里输入每个列的宽度 * fieldcat-outputlen . *---------------------------------------------
16、 * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM get_fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'MAKTX'. fieldcat-col_pos = 1. "
17、 Position on screen fieldcat-seltext_l = '产品型号'. fieldcat-key = 'X'. fieldcat-outputlen = 11. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'PLNMG_F_M'. fieldcat-col_pos = 2. " Position on screen fieldcat-seltex
18、t_l = '月计划合计'. fieldcat-key = 'X'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GMNGA_LCM'. fieldcat-col_pos = 3. " Position on screen fieldcat-seltext_l = '冷藏门当日完成'. fieldcat-outputle
19、n = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GMNGA_LCM_LJ'. fieldcat-col_pos = 4. " Position on screen fieldcat-seltext_l = '冷藏门累计完成'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. f
20、ieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'LABST_LCM'. fieldcat-col_pos = 5. " Position on screen fieldcat-seltext_l = '冷藏门结存'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GM
21、NGA_LDM'. fieldcat-col_pos = 6. " Position on screen fieldcat-seltext_l = '冷冻门当日完成'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GMNGA_LDM_LJ'. fieldcat-col_pos = 7. " Po
22、sition on screen fieldcat-seltext_l = '冷冻门累计完成'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'LABST_LDM'. fieldcat-col_pos = 8. " Position on screen fieldcat-seltext_l = '冷冻门结存'. field
23、cat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GMNGA_BWM'. fieldcat-col_pos = 9. " Position on screen fieldcat-seltext_l = '变温室当日完成'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat.
24、fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GMNGA_BWM_LJ'. fieldcat-col_pos = 10. " Position on screen fieldcat-seltext_l = '变温室累计完成'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldnam
25、e = 'LABST_BWM'. fieldcat-col_pos = 11. " Position on screen fieldcat-seltext_l = '变温室结存'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GMNGA_CZHXT'. fieldcat-col_pos = 12.
26、 " Position on screen fieldcat-seltext_l = '初装上楼当日完成'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GMNGA_CZHXT_LJ'. fieldcat-col_pos = 13. " Position on screen fieldcat-seltext_l = '初装上
27、楼累计完成'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'LABST_CZHXT'. fieldcat-col_pos = 14. " Position on screen fieldcat-seltext_l = '初装上楼结存'. fieldcat-outputlen = 10. APPEND fieldcat.
28、 CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GMNGA_ZZHXT'. fieldcat-col_pos = 15. " Position on screen fieldcat-seltext_l = '总装当日完成'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPU
29、T'. fieldcat-fieldname = 'GMNGA_ZZHXT_LJ'. fieldcat-col_pos = 16. " Position on screen fieldcat-seltext_l = '总装累计完成'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'LABST_ZZHXT'. fieldca
30、t-col_pos = 17. " Position on screen fieldcat-seltext_l = '总装结存'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GMNGA_ZJ'. fieldcat-col_pos = 18. " Position on screen field
31、cat-seltext_l = '成品入库当日完成'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'GMNGA_ZJ_LJ'. fieldcat-col_pos = 19. " Position on screen fieldcat-seltext_l = '成品入库累计完成'. fieldcat-outputlen = 10
32、 APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'LABST_ZJ'. fieldcat-col_pos = 20. " Position on screen fieldcat-seltext_l = '成品入库结存'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-ta
33、bname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'SLJHC'. fieldcat-col_pos = 21. " Position on screen fieldcat-seltext_l = '上楼冰箱与计划差'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-fieldname = 'BZJHC'. f
34、ieldcat-col_pos = 22. " Position on screen fieldcat-seltext_l = '包装入库冰箱与计划差'. fieldcat-outputlen = 10. APPEND fieldcat. CLEAR fieldcat. fieldcat-tabname = 'ITAB_OUTPUT'. fieldcat-col_pos = 23. " Position on screen fieldcat-fieldname = 'GMNGA_Z
35、J1'. fieldcat-seltext_l = '生产计划已完成数'. fieldcat-outputlen = 10. APPEND fieldcat. ENDFORM. " GET_FIELDCAT *&---------------------------------------------------------------------* *& Form EVENTTAB_BUILD *&------------------------------------------------------
36、 * text *----------------------------------------------------------------------* * <--P_GT_EVENTS text *----------------------------------------------------------------------* FORM eventtab_build CHANGING p_events TYPE slis_t_event. DATA l_event TYPE LINE OF slis
37、t_event. CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 0 IMPORTING et_events = p_events EXCEPTIONS list_type_wrong = 1 OTHERS = 2. IF sy-subrc <> 0. * message id sy-msgid type sy-msgty number sy-msgno *
38、 with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. READ TABLE p_events INTO l_event WITH KEY name = 'AFTER_LINE_OUTPUT'. eventcat-name = l_event-name. eventcat-form = 'AFTER_LINE_OUTPUT'. APPEND eventcat. READ TABLE p_events INTO l_event WITH KEY name = 'TOP_OF_PAGE'. eventcat
39、name = l_event-name. eventcat-form = 'F_TOP_OF_PAGE'. APPEND eventcat. ENDFORM. " EVENTTAB_BUILD *&--------------------------------------------------------------------* *& Form AFTER_LINE_OUTPUT *&------------------------------------------------------------------
40、 * 输出ALV的表头,手动配置这些 *---------------------------------------------------------------------* FORM after_line_output USING gs_lineinfo TYPE slis_lineinfo. DATA i TYPE i. DATA: d(394) TYPE c . DATA: l_line(398) TYPE c. DATA: tmp_size TYPE i. DESCRIBE FIELD d OUTPUT-LENGTH i. IF
41、 gs_lineinfo-tabindex = 1. MODIFY LINE 1 LINE VALUE FROM sy-uline(gs_lineinfo-linsz). CLEAR l_line. WRITE sy-vline TO l_line+0. WRITE sy-vline TO l_line+12. WRITE sy-vline TO l_line+23. WRITE '门体发泡完成' TO l_line+33. WRITE sy-vline TO l_line+122. WRITE '初装上楼
42、完成' TO l_line+123. WRITE sy-vline TO l_line+155. WRITE '总装完成' TO l_line+156. WRITE sy-vline TO l_line+188. WRITE '成品入库' TO l_line+189. WRITE sy-vline TO l_line+221. WRITE sy-vline TO l_line+232. WRITE sy-vline TO l_line+243. WRITE sy-vline TO l_line+254.
43、 MODIFY LINE 2 LINE VALUE FROM l_line(gs_lineinfo-linsz). CLEAR l_line. WRITE sy-vline TO l_line+0. WRITE sy-vline TO l_line+12. WRITE sy-vline TO l_line+23. tmp_size = gs_lineinfo-linsz - 24. WRITE sy-uline TO l_line+24(tmp_size). WRITE '上楼冰箱' TO l_line+2
44、22. WRITE sy-vline TO l_line+232. WRITE '包装入库' TO l_line+233. WRITE sy-vline TO l_line+243. WRITE '生产计划' TO l_line+244. WRITE sy-vline TO l_line+254. MODIFY LINE 3 LINE VALUE FROM l_line(gs_lineinfo-linsz). CLEAR l_line. WRITE sy-vline TO l_line+0. WRIT
45、E '产品型号' TO l_line+1. WRITE sy-vline TO l_line+12. WRITE '月计划合计' TO l_line+13. WRITE sy-vline TO l_line+23. WRITE '冷藏门' TO l_line+24. WRITE sy-vline TO l_line+56. WRITE '冷冻门' TO l_line+57. WRITE sy-vline TO l_line+89. WRITE '变温室' TO l_line+90. WRITE sy
46、vline TO l_line+122. WRITE sy-vline TO l_line+133. WRITE sy-vline TO l_line+144. WRITE sy-vline TO l_line+155. WRITE sy-vline TO l_line+166. WRITE sy-vline TO l_line+177. WRITE sy-vline TO l_line+188. WRITE sy-vline TO l_line+199. WRITE sy-vline TO l_li
47、ne+210. WRITE sy-vline TO l_line+221. WRITE '与计划差' TO l_line+222. WRITE sy-vline TO l_line+232. WRITE '冰箱与' TO l_line+233. WRITE sy-vline TO l_line+243. WRITE '已完成数' TO l_line+244. WRITE sy-vline TO l_line+254. MODIFY LINE 4 LINE VALUE FROM l_line(gs_linein
48、fo-linsz). CLEAR l_line. WRITE sy-vline TO l_line+0. WRITE sy-vline TO l_line+12. WRITE sy-vline TO l_line+23. tmp_size = gs_lineinfo-linsz - 24. WRITE sy-uline TO l_line+24(tmp_size). WRITE '当日完成' TO l_line+123. WRITE sy-vline TO l_line+133. WRITE
49、 '累计完成' TO l_line+134. WRITE sy-vline TO l_line+144. WRITE '结存' TO l_line+145. WRITE sy-vline TO l_line+155. WRITE '当日完成' TO l_line+156. WRITE sy-vline TO l_line+166. WRITE '累计完成' TO l_line+167. WRITE sy-vline TO l_line+177. WRITE '结存' TO l_line+178.
50、 WRITE sy-vline TO l_line+188. WRITE '当日完成' TO l_line+189. WRITE sy-vline TO l_line+199. WRITE '累计完成' TO l_line+200. WRITE sy-vline TO l_line+210. WRITE '结存' TO l_line+211. WRITE sy-vline TO l_line+221. WRITE sy-vline TO l_line+232. WRITE '计划差' TO l_li






