TABLES:MSEG,MAKT. "定义结构 TYPES:BEGIN OF TY_DATA, MJAHR LIKE MSEG-MJAHR, "物料凭证的年份 MBLNR LIKE MSEG-MBLNR, "物料凭证 BWART LIKE MSEG-BWART, "移动类型 XAUTO LIKE MSEG-XAUTO, "是否自动创建 MATNR LIKE MSEG-MATNR, "物料编码 MAKTX LIKE MAKT-MAKTX, "物料描述 WERKS LIKE MSEG-WERKS, "工厂 LGORT LIKE MSEG-LGORT, "库位 CHARG LIKE MSEG-CHARG, "批次 MENGE LIKE MSEG-MENGE, "基本单位数量 MEINS LIKE MSEG-MEINS, "基本单位 ERFMG LIKE MSEG-ERFMG, "录入数量 ERFME LIKE MSEG-ERFME, "录入单位 BUDAT_MKPF LIKE MSEG-BUDAT_MKPF, "过账日期 CPUDT_MKPF LIKE MSEG-CPUDT_MKPF, "输入日期 CPUTM_MKPF LIKE MSEG-CPUTM_MKPF, "输入时间 USNAM_MKPF LIKE MSEG-USNAM_MKPF, "用户名 END OF TY_DATA. TYPES:BEGIN OF TY_DATA1, * MJAHR LIKE MSEG-MJAHR, "物料凭证的年份 * MBLNR LIKE MSEG-MBLNR, "物料凭证 WERKS LIKE MSEG-WERKS, "工厂 LGORT LIKE MSEG-LGORT, "库位 MATNR LIKE MSEG-MATNR, "物料编码 MAKTX LIKE MAKT-MAKTX, "物料描述 BWART LIKE MSEG-BWART, "移动类型 * XAUTO LIKE MSEG-XAUTO, "是否自动创建 * CHARG LIKE MSEG-CHARG, "批次 MENGE LIKE MSEG-MENGE, "基本单位数量 MEINS LIKE MSEG-MEINS, "基本单位 * ERFMG LIKE MSEG-ERFMG, "录入数量 * ERFME LIKE MSEG-ERFME, "录入单位 * BUDAT_MKPF LIKE MSEG-BUDAT_MKPF, "过账日期 * CPUDT_MKPF LIKE MSEG-CPUDT_MKPF, "输入日期 * CPUTM_MKPF LIKE MSEG-CPUTM_MKPF, "输入时间 * USNAM_MKPF LIKE MSEG-USNAM_MKPF, "用户名 END OF TY_DATA1. TYPES:BEGIN OF TY_DATA2, * MJAHR LIKE MSEG-MJAHR, "物料凭证的年份 * MBLNR LIKE MSEG-MBLNR, "物料凭证 * WERKS LIKE MSEG-WERKS, "工厂 * LGORT LIKE MSEG-LGORT, "库位 * MATNR LIKE MSEG-MATNR, "物料编码 * MAKTX LIKE MAKT-MAKTX, "物料描述 BWART LIKE MSEG-BWART, "移动类型 * XAUTO LIKE MSEG-XAUTO, "是否自动创建 * CHARG LIKE MSEG-CHARG, "批次 * MENGE LIKE MSEG-MENGE, "基本单位数量 * MEINS LIKE MSEG-MEINS, "基本单位 * ERFMG LIKE MSEG-ERFMG, "录入数量 * ERFME LIKE MSEG-ERFME, "录入单位 * BUDAT_MKPF LIKE MSEG-BUDAT_MKPF, "过账日期 * CPUDT_MKPF LIKE MSEG-CPUDT_MKPF, "输入日期 * CPUTM_MKPF LIKE MSEG-CPUTM_MKPF, "输入时间 * USNAM_MKPF LIKE MSEG-USNAM_MKPF, "用户名 END OF TY_DATA2. DATA:IT_DATA TYPE STANDARD TABLE OF TY_DATA, WA_DATA TYPE TY_DATA. DATA:IT_DATA1 TYPE STANDARD TABLE OF TY_DATA1, WA_DATA1 TYPE TY_DATA1. DATA:IT_DATA2 TYPE STANDARD TABLE OF TY_DATA2, WA_DATA2 TYPE TY_DATA2. DATA:N TYPE I. DATA: IT_TABLE TYPE REF TO DATA, IT_STRUCTURE TYPE LVC_T_FCAT, WA_STRUCTURE TYPE LVC_S_FCAT. DATA: WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV, IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, WA_LAYOUT TYPE LVC_S_LAYO. DATA: G_TITLE TYPE LVC_TITLE. "FIELD SYMBOLS FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE, <DYN_WA>, <DYN_FIELD>. "定义屏幕 SELECTION-SCREEN BEGIN OF BLOCK BLK01. SELECT-OPTIONS:S_WERKS FOR MSEG-WERKS,"工厂 S_LGORT FOR MSEG-LGORT,"库位 S_MATNR FOR MSEG-MATNR,"物料 S_BUDAT FOR MSEG-BUDAT_MKPF,"过账日期 S_CPUDT FOR MSEG-CPUDT_MKPF,"输入日期 S_BWART FOR MSEG-BWART,"移动类型 S_USNAM FOR MSEG-USNAM_MKPF."username SELECTION-SCREEN END OF BLOCK BLK01. "主程序 START-OF-SELECTION. PERFORM GET_DATA."取数 PERFORM CREAT_STRUCTURE."创建内表结构 PERFORM CREAT_TABLE."按照结构定义内表 PERFORM DATA_TO_TABLE."写数据进内表 PERFORM FRM_INIT_LAYOUT. PERFORM FRM_SHOW_ALV."内表数据展示 FORM GET_DATA. SELECT MSEG~MJAHR, MSEG~MBLNR, MSEG~BWART, MSEG~XAUTO, MSEG~MATNR, MAKT~MAKTX, MSEG~WERKS, MSEG~LGORT, MSEG~CHARG, CASE MSEG~SHKZG WHEN 'H' THEN ( 0 - MSEG~MENGE ) ELSE MSEG~MENGE END AS MENGE, MSEG~MEINS, CASE MSEG~SHKZG WHEN 'H' THEN ( 0 - MSEG~ERFMG ) ELSE MSEG~ERFMG END AS ERFMG, MSEG~ERFME, MSEG~BUDAT_MKPF, MSEG~CPUDT_MKPF, MSEG~CPUTM_MKPF, MSEG~USNAM_MKPF FROM MSEG LEFT JOIN MAKT ON MAKT~MATNR = MSEG~MATNR INTO CORRESPONDING FIELDS OF TABLE @IT_DATA WHERE MSEG~WERKS IN @S_WERKS AND MSEG~LGORT IN @S_LGORT AND MSEG~MATNR IN @S_MATNR AND MSEG~BUDAT_MKPF IN @S_BUDAT AND MSEG~BWART IN @S_BWART AND MSEG~USNAM_MKPF IN @S_USNAM AND MSEG~CPUDT_MKPF IN @S_CPUDT. LOOP AT IT_DATA INTO WA_DATA. MOVE-CORRESPONDING WA_DATA TO WA_DATA1. COLLECT WA_DATA1 INTO IT_DATA1. CLEAR:WA_DATA,WA_DATA1. ENDLOOP. ENDFORM. FORM CREAT_STRUCTURE. DATA: L_LINES TYPE I. LOOP AT IT_DATA1 INTO WA_DATA1. MOVE-CORRESPONDING WA_DATA1 TO WA_DATA2. APPEND WA_DATA2 TO IT_DATA2. ENDLOOP. SORT IT_DATA2 BY BWART. DELETE ADJACENT DUPLICATES FROM IT_DATA2 COMPARING BWART. DESCRIBE TABLE IT_DATA2 LINES N. L_LINES = 5. * 创建静态结构部分 PERFORM FRM_ALV_FCAT_SET USING: 1 'WERKS' TEXT-007 'WERKS' 'MSEG' SPACE SPACE, 2 'LGORT' TEXT-008 'LGORT' 'MSEG' SPACE SPACE, 3 'MATNR' TEXT-008 'MATNR' 'MAKT' SPACE SPACE, 4 'MAKTX' TEXT-008 'MAKTX' 'MAKT' SPACE SPACE. * 5 'BUDAT_MKPF' TEXT-008 'BUDAT_MKPF' 'MSEG' SPACE SPACE, * 6 'CPUDT_MKPF' TEXT-008 'CPUDT_MKPF' 'MSEG' SPACE SPACE. LOOP AT IT_DATA2 INTO WA_DATA2. * DO N TIMES. CLEAR WA_STRUCTURE. *字段名称 WA_STRUCTURE-FIELDNAME = WA_DATA2-BWART. *列名称 * CONCATENATE '移动类型' WA_DATA2-BWART INTO WA_STRUCTURE-SCRTEXT_L. WA_STRUCTURE-SCRTEXT_L = WA_DATA2-BWART. WA_STRUCTURE-SCRTEXT_M = WA_STRUCTURE-SCRTEXT_L. WA_STRUCTURE-SCRTEXT_S = WA_STRUCTURE-SCRTEXT_L. WA_STRUCTURE-COLTEXT = WA_STRUCTURE-SCRTEXT_L. WA_STRUCTURE-NO_ZERO = 'X'. WA_STRUCTURE-DO_SUM = 'X'. WA_STRUCTURE-REF_FIELD = 'MENGE'. WA_STRUCTURE-REF_TABLE = 'EKPO'. WA_STRUCTURE-COL_POS = L_LINES. APPEND WA_STRUCTURE TO IT_STRUCTURE. L_LINES = L_LINES + 1. ENDLOOP. WA_STRUCTURE-FIELDNAME = 'SUM'. WA_STRUCTURE-SCRTEXT_L = '行总计'. WA_STRUCTURE-SCRTEXT_M = WA_STRUCTURE-SCRTEXT_L. WA_STRUCTURE-SCRTEXT_S = WA_STRUCTURE-SCRTEXT_L. WA_STRUCTURE-COLTEXT = WA_STRUCTURE-SCRTEXT_L. WA_STRUCTURE-NO_ZERO = 'X'. WA_STRUCTURE-DO_SUM = 'X'. * WA_STRUCTURE-REF_FIELD = 'MENGE'. * WA_STRUCTURE-REF_TABLE = 'EKPO'. WA_STRUCTURE-COL_POS = L_LINES. APPEND WA_STRUCTURE TO IT_STRUCTURE. ENDFORM. FORM CREAT_TABLE. CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE EXPORTING IT_FIELDCATALOG = IT_STRUCTURE IMPORTING EP_TABLE = IT_TABLE. ASSIGN IT_TABLE->* TO <DYN_TABLE>. ENDFORM. FORM DATA_TO_TABLE. DATA:WA_NEW_LINE TYPE REF TO DATA. CREATE DATA WA_NEW_LINE LIKE LINE OF <DYN_TABLE>. ASSIGN WA_NEW_LINE->* TO <DYN_WA>. DATA: L_SUM(7) TYPE P DECIMALS 3. DATA:L_FIELDNAME TYPE LVC_S_FCAT-FIELDNAME. DATA:LW_ERFMG TYPE TY_DATA1. SORT IT_DATA1 BY WERKS LGORT MATNR. LOOP AT IT_DATA1 INTO WA_DATA1. CLEAR:L_FIELDNAME. L_FIELDNAME = WA_DATA1-BWART. ASSIGN COMPONENT L_FIELDNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. IF WA_DATA1-MENGE IS NOT INITIAL. <DYN_FIELD> = WA_DATA1-MENGE. L_SUM = L_SUM + WA_DATA1-MENGE. ENDIF. LW_ERFMG = WA_DATA1. AT END OF MATNR. ASSIGN COMPONENT 'WERKS' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = LW_ERFMG-WERKS. ASSIGN COMPONENT 'LGORT' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = LW_ERFMG-LGORT. ASSIGN COMPONENT 'MATNR' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = LW_ERFMG-MATNR. ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = LW_ERFMG-MAKTX. * ASSIGN COMPONENT 'BUDAT_MKPF' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. * <DYN_FIELD> = LW_ERFMG-BUDAT_MKPF. * ASSIGN COMPONENT 'CPUDT_MKPF' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. * <DYN_FIELD> = LW_ERFMG-CPUDT_MKPF. ASSIGN COMPONENT 'SUM' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = L_SUM. APPEND <DYN_WA> TO <DYN_TABLE>. CLEAR: L_SUM, <DYN_WA>. ENDAT. CLEAR: LW_ERFMG, WA_DATA1. ENDLOOP. * DELETE <DYN_TABLE> WHERE MATNR IS INITIAL. ENDFORM. *设置layout属性 FORM FRM_INIT_LAYOUT . G_TITLE = TEXT-006. CLEAR WA_LAYOUT. WA_LAYOUT-CWIDTH_OPT = 'X'. ENDFORM. " FRM_INIT_LAYOUT FORM FRM_SHOW_ALV. * * ALV显示函数 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT_LVC = WA_LAYOUT IT_FIELDCAT_LVC = IT_STRUCTURE I_GRID_TITLE = G_TITLE * i_callback_pf_status_set = 'PF_STATUS_SET' * IT_EXCLUDING = "系统自带STATUS图标控制内表 I_SAVE = 'A' * i_callback_pf_status_set = 'PF_STATUS_SET' * i_callback_user_command = 'FRM_USER_COMMAND' TABLES T_OUTTAB = <DYN_TABLE> EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. FORM FRM_ALV_FCAT_SET USING PU_POS TYPE I PU_FNAME TYPE C PU_FTEXT TYPE C PU_RFIELD TYPE C PU_RTABLE TYPE C PU_QNAME TYPE C PU_EDIT TYPE C. CLEAR WA_STRUCTURE. WA_STRUCTURE-COL_POS = PU_POS. WA_STRUCTURE-FIELDNAME = PU_FNAME. WA_STRUCTURE-SCRTEXT_L = PU_FTEXT. WA_STRUCTURE-SCRTEXT_M = PU_FTEXT. WA_STRUCTURE-SCRTEXT_S = PU_FTEXT. WA_STRUCTURE-REF_FIELD = PU_RFIELD. WA_STRUCTURE-REF_TABLE = PU_RTABLE. WA_STRUCTURE-QFIELDNAME = PU_QNAME. WA_STRUCTURE-EDIT = PU_EDIT. WA_STRUCTURE-KEY = 'X'. APPEND WA_STRUCTURE TO IT_STRUCTURE. ENDFORM. " FRM_ALV_FCAT_S