历史库存查询(6月滚动)(动态列表的使用)(含日期F4的选择帮助)
*&---------------------------------------------------------------------* *& Report ZPMRP031 *&---------------------------------------------------------------------* *&历史库存查询6个月--Creat by Bruce King20191203 *&---------------------------------------------------------------------* REPORT ZPMRP031. TABLES:MATDOC,S031. TYPES:BEGIN OF TY_DATA, BUKRS TYPE MATDOC-BUKRS, "公司 WERKS TYPE MATDOC-WERKS, "工厂 LGORT_SID TYPE MATDOC-LGORT_SID, "库位 MATBF TYPE MATDOC-MATBF, "物料编码 MAKTX TYPE MAKT-MAKTX, "物料描述 * CHARG_SID TYPE MATDOC-CHARG_SID, "批次 EISBE LIKE MARC-EISBE, "基于工厂的安全库存 add by King 20191209 MEINS TYPE MATDOC-MEINS, "基本单位 YEARMONTH_BUDAT1 TYPE MATDOC-YEARMONTH_BUDAT, "年月 MENGE1 TYPE MATDOC-MENGE, "月末结存数量 END OF TY_DATA. TYPES:BEGIN OF TY_DATA1, YEARMONTH_BUDAT1 TYPE MATDOC-YEARMONTH_BUDAT, END OF TY_DATA1. DATA:IT_TEMP TYPE STANDARD TABLE OF TY_DATA1, WA_TEMP TYPE TY_DATA1. DATA IT_DATA TYPE TABLE OF TY_DATA. DATA IT_DATA1 TYPE TABLE OF TY_DATA. DATA WA_DATA TYPE TY_DATA. DATA WA_DATA1 TYPE TY_DATA. "FIELD SYMBOLS FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE, <DYN_WA>, <DYN_FIELD>. 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, POS TYPE I, WA_LAYOUT TYPE SLIS_LAYOUT_ALV, G_LAYOUT TYPE LVC_S_LAYO. DATA: G_TITLE TYPE LVC_TITLE. DATA:TEMP_DATE(8) TYPE N. DATA:L_ON_DATE_E TYPE P0001-BEGDA. DATA:D_MONTH TYPE P0001-BEGDA. DEFINE ADD_COL. CLEAR WA_FIELDCAT. ADD 1 TO POS. WA_FIELDCAT-COL_POS = POS. WA_FIELDCAT-FIELDNAME = &1. WA_FIELDCAT-REF_FIELDNAME = &2. WA_FIELDCAT-REF_TABNAME = &3. WA_FIELDCAT-SELTEXT_M = &4. WA_FIELDCAT-TABNAME = &5. WA_FIELDCAT-DO_SUM = &6. WA_FIELDCAT-INPUT = &7. WA_FIELDCAT-NO_ZERO = &8. WA_FIELDCAT-DECIMALS_OUT = &9. APPEND WA_FIELDCAT TO IT_FIELDCAT. END-OF-DEFINITION. DEFINE CHANGE_DATE. "用来转换日期 change by king 20200302 CLEAR:TEMP_DATE,D_MONTH. D_MONTH = |{ &1 }01|. CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' EXPORTING DATE = D_MONTH "输入日期 DAYS = 0 "天数加N或者减N 不加也不减 写0 MONTHS = 1 "月份加N或者减N 不加也不减 写0 SIGNUM = '-' "可以是+或者- YEARS = 0 "年份加N或者减N 不加也不减 写0 IMPORTING CALC_DATE = L_ON_DATE_E. "得到加减之后的日期 S_MONTH1 = L_ON_DATE_E(6) + 0. "取月份 END-OF-DEFINITION. "选择屏幕定义 SELECTION-SCREEN: BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-010. SELECT-OPTIONS: S_WERKS FOR MATDOC-WERKS OBLIGATORY,"工厂 S_LGORT FOR MATDOC-LGORT_SID OBLIGATORY,"库存地 S_MATNR FOR MATDOC-MATBF."物料编码 PARAMETERS S_MONTH1 TYPE S031-SPMON OBLIGATORY. "月份 SELECTION-SCREEN: END OF BLOCK A1. INITIALIZATION. AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MONTH1. PERFORM MONAT_F4. START-OF-SELECTION. D_MONTH = |{ S_MONTH1 }01|. PERFORM FRM_GET_DATA1. CHANGE_DATE S_MONTH1. DATA(S_MONTH2) = S_MONTH1 . PERFORM FRM_GET_DATA2. CHANGE_DATE S_MONTH1. DATA(S_MONTH3) = S_MONTH1 . PERFORM FRM_GET_DATA3. CHANGE_DATE S_MONTH1. DATA(S_MONTH4) = S_MONTH1 . PERFORM FRM_GET_DATA4. CHANGE_DATE S_MONTH1. DATA(S_MONTH5) = S_MONTH1 . PERFORM FRM_GET_DATA5. CHANGE_DATE S_MONTH1. DATA(S_MONTH6) = S_MONTH1 . PERFORM FRM_GET_DATA6. PERFORM FRM_AUTHRITY_CHECK. PERFORM CREAT_STRUCTURE."创建内表结构 PERFORM CREAT_TABLE."按照结构定义内表 PERFORM DATA_TO_TABLE."写数据进内表 PERFORM FRM_INIT_LAYOUT. PERFORM FRM_SHOW_ALV."内表数据展示 FORM FRM_GET_DATA1. SELECT BUKRS, "公司 WERKS, "工厂 LGORT_SID, "库位 MATBF, "物料编码 MEINS, "基本计量单位 MENGE, "月末结存数量 YEARMONTH_BUDAT,"年月 BSTTYP_SG, "库存类别 * UMSOK_CID, "特殊库存标识 * CHARG_SID, "批次 SHKZG "借贷标识 FROM MATDOC INTO TABLE @DATA(IT_MATDOC1) WHERE WERKS IN @S_WERKS AND LGORT_SID IN @S_LGORT AND MATBF IN @S_MATNR AND YEARMONTH_BUDAT <= @S_MONTH1. "降序排列 REFRESH IT_DATA. SORT IT_MATDOC1 BY YEARMONTH_BUDAT ASCENDING. LOOP AT IT_MATDOC1 INTO DATA(WA) GROUP BY ( KEY1 = WA-BUKRS KEY2 = WA-WERKS KEY3 = WA-LGORT_SID KEY4 = WA-MATBF ) INTO DATA(KEY). WA_DATA-BUKRS = KEY-KEY1. WA_DATA-WERKS = KEY-KEY2. WA_DATA-LGORT_SID = KEY-KEY3. WA_DATA-MATBF = KEY-KEY4. * WA_DATA-CHARG_SID = KEY-KEY5. WA_DATA-YEARMONTH_BUDAT1 = S_MONTH1. LOOP AT GROUP KEY INTO DATA(WA_MATDOC1). IF WA_MATDOC1-SHKZG = 'H'. WA_MATDOC1-MENGE = 0 - WA_MATDOC1-MENGE. ENDIF. WA_DATA-MENGE1 = WA_DATA-MENGE1 + WA_MATDOC1-MENGE. WA_DATA-MEINS = WA_MATDOC1-MEINS. ENDLOOP. "获取物料描述 SELECT SINGLE MAKTX FROM MAKT INTO WA_DATA-MAKTX WHERE MATNR = WA_DATA-MATBF AND SPRAS = SY-LANGU. SELECT SINGLE EISBE FROM MARC INTO WA_DATA-EISBE WHERE MATNR = WA_DATA-MATBF AND WERKS = WA_DATA-WERKS. WA_DATA-MATBF = |{ WA_DATA-MATBF ALPHA = OUT }|. APPEND WA_DATA TO IT_DATA. CLEAR WA_DATA. ENDLOOP. ENDFORM. FORM FRM_GET_DATA2. SELECT BUKRS, "公司 WERKS, "工厂 MATBF, "物料编码 LGORT_SID, "库位 MEINS, "基本计量单位 MENGE, "月末结存数量 YEARMONTH_BUDAT,"年月 BSTTYP_SG, "库存类别 * UMSOK_CID, "特殊库存标识 * CHARG_SID, "批次 SHKZG "借贷标识 FROM MATDOC INTO TABLE @DATA(IT_MATDOC2) WHERE WERKS IN @S_WERKS AND LGORT_SID IN @S_LGORT AND MATBF IN @S_MATNR AND YEARMONTH_BUDAT <= @S_MONTH2. "降序排列 SORT IT_MATDOC2 BY YEARMONTH_BUDAT ASCENDING. LOOP AT IT_MATDOC2 INTO DATA(WA) GROUP BY ( KEY1 = WA-BUKRS KEY2 = WA-WERKS KEY3 = WA-LGORT_SID KEY4 = WA-MATBF ) INTO DATA(KEY). WA_DATA-BUKRS = KEY-KEY1. WA_DATA-WERKS = KEY-KEY2. WA_DATA-LGORT_SID = KEY-KEY3. WA_DATA-MATBF = KEY-KEY4. * WA_DATA-CHARG_SID = KEY-KEY5. WA_DATA-YEARMONTH_BUDAT1 = S_MONTH2. LOOP AT GROUP KEY INTO DATA(WA_MATDOC2). IF WA_MATDOC2-SHKZG = 'H'. WA_MATDOC2-MENGE = 0 - WA_MATDOC2-MENGE. ENDIF. WA_DATA-MENGE1 = WA_DATA-MENGE1 + WA_MATDOC2-MENGE. WA_DATA-MEINS = WA_MATDOC2-MEINS. ENDLOOP. "获取物料描述 SELECT SINGLE MAKTX FROM MAKT INTO WA_DATA-MAKTX WHERE MATNR = WA_DATA-MATBF AND SPRAS = SY-LANGU. SELECT SINGLE EISBE FROM MARC INTO WA_DATA-EISBE WHERE MATNR = WA_DATA-MATBF AND WERKS = WA_DATA-WERKS. WA_DATA-MATBF = |{ WA_DATA-MATBF ALPHA = OUT }|. APPEND WA_DATA TO IT_DATA. CLEAR WA_DATA. ENDLOOP. ENDFORM. FORM FRM_GET_DATA3. SELECT BUKRS, "公司 WERKS, "工厂 MATBF, "物料编码 LGORT_SID, "库位 MEINS, "基本计量单位 MENGE, "月末结存数量 YEARMONTH_BUDAT,"年月 BSTTYP_SG, "库存类别 * UMSOK_CID, "特殊库存标识 * CHARG_SID, "批次 SHKZG "借贷标识 FROM MATDOC INTO TABLE @DATA(IT_MATDOC3) WHERE WERKS IN @S_WERKS AND LGORT_SID IN @S_LGORT AND MATBF IN @S_MATNR AND YEARMONTH_BUDAT <= @S_MONTH3. "降序排列 SORT IT_MATDOC3 BY YEARMONTH_BUDAT ASCENDING. LOOP AT IT_MATDOC3 INTO DATA(WA) GROUP BY ( KEY1 = WA-BUKRS KEY2 = WA-WERKS KEY3 = WA-LGORT_SID KEY4 = WA-MATBF ) INTO DATA(KEY). WA_DATA-BUKRS = KEY-KEY1. WA_DATA-WERKS = KEY-KEY2. WA_DATA-LGORT_SID = KEY-KEY3. WA_DATA-MATBF = KEY-KEY4. * WA_DATA-CHARG_SID = KEY-KEY5. WA_DATA-YEARMONTH_BUDAT1 = S_MONTH3. LOOP AT GROUP KEY INTO DATA(WA_MATDOC3). IF WA_MATDOC3-SHKZG = 'H'. WA_MATDOC3-MENGE = 0 - WA_MATDOC3-MENGE. ENDIF. WA_DATA-MENGE1 = WA_DATA-MENGE1 + WA_MATDOC3-MENGE. WA_DATA-MEINS = WA_MATDOC3-MEINS. ENDLOOP. "获取物料描述 SELECT SINGLE MAKTX FROM MAKT INTO WA_DATA-MAKTX WHERE MATNR = WA_DATA-MATBF AND SPRAS = SY-LANGU. SELECT SINGLE EISBE FROM MARC INTO WA_DATA-EISBE WHERE MATNR = WA_DATA-MATBF AND WERKS = WA_DATA-WERKS. WA_DATA-MATBF = |{ WA_DATA-MATBF ALPHA = OUT }|. APPEND WA_DATA TO IT_DATA. CLEAR WA_DATA. ENDLOOP. ENDFORM. FORM FRM_GET_DATA4. SELECT BUKRS, "公司 WERKS, "工厂 MATBF, "物料编码 LGORT_SID, "库位 MEINS, "基本计量单位 MENGE, "月末结存数量 YEARMONTH_BUDAT,"年月 BSTTYP_SG, "库存类别 * UMSOK_CID, "特殊库存标识 * CHARG_SID, "批次 SHKZG "借贷标识 FROM MATDOC INTO TABLE @DATA(IT_MATDOC4) WHERE WERKS IN @S_WERKS AND LGORT_SID IN @S_LGORT AND MATBF IN @S_MATNR AND YEARMONTH_BUDAT <= @S_MONTH4. "降序排列 SORT IT_MATDOC4 BY YEARMONTH_BUDAT ASCENDING. LOOP AT IT_MATDOC4 INTO DATA(WA) GROUP BY ( KEY1 = WA-BUKRS KEY2 = WA-WERKS KEY3 = WA-LGORT_SID KEY4 = WA-MATBF ) INTO DATA(KEY). WA_DATA-BUKRS = KEY-KEY1. WA_DATA-WERKS = KEY-KEY2. WA_DATA-LGORT_SID = KEY-KEY3. WA_DATA-MATBF = KEY-KEY4. * WA_DATA-CHARG_SID = KEY-KEY5. WA_DATA-YEARMONTH_BUDAT1 = S_MONTH4. LOOP AT GROUP KEY INTO DATA(WA_MATDOC4). IF WA_MATDOC4-SHKZG = 'H'. WA_MATDOC4-MENGE = 0 - WA_MATDOC4-MENGE. ENDIF. WA_DATA-MENGE1 = WA_DATA-MENGE1 + WA_MATDOC4-MENGE. WA_DATA-MEINS = WA_MATDOC4-MEINS. ENDLOOP. "获取物料描述 SELECT SINGLE MAKTX FROM MAKT INTO WA_DATA-MAKTX WHERE MATNR = WA_DATA-MATBF AND SPRAS = SY-LANGU. SELECT SINGLE EISBE FROM MARC INTO WA_DATA-EISBE WHERE MATNR = WA_DATA-MATBF AND WERKS = WA_DATA-WERKS. WA_DATA-MATBF = |{ WA_DATA-MATBF ALPHA = OUT }|. APPEND WA_DATA TO IT_DATA. CLEAR WA_DATA. ENDLOOP. ENDFORM. FORM FRM_GET_DATA5. SELECT BUKRS, "公司 WERKS, "工厂 MATBF, "物料编码 LGORT_SID, "库位 MEINS, "基本计量单位 MENGE, "月末结存数量 YEARMONTH_BUDAT,"年月 BSTTYP_SG, "库存类别 * UMSOK_CID, "特殊库存标识 * CHARG_SID, "批次 SHKZG "借贷标识 FROM MATDOC INTO TABLE @DATA(IT_MATDOC5) WHERE WERKS IN @S_WERKS AND LGORT_SID IN @S_LGORT AND MATBF IN @S_MATNR AND YEARMONTH_BUDAT <= @S_MONTH5. "降序排列 SORT IT_MATDOC5 BY YEARMONTH_BUDAT ASCENDING. LOOP AT IT_MATDOC5 INTO DATA(WA) GROUP BY ( KEY1 = WA-BUKRS KEY2 = WA-WERKS KEY3 = WA-LGORT_SID KEY4 = WA-MATBF ) INTO DATA(KEY). WA_DATA-BUKRS = KEY-KEY1. WA_DATA-WERKS = KEY-KEY2. WA_DATA-LGORT_SID = KEY-KEY3. WA_DATA-MATBF = KEY-KEY4. * WA_DATA-CHARG_SID = KEY-KEY5. WA_DATA-YEARMONTH_BUDAT1 = S_MONTH5. LOOP AT GROUP KEY INTO DATA(WA_MATDOC5). IF WA_MATDOC5-SHKZG = 'H'. WA_MATDOC5-MENGE = 0 - WA_MATDOC5-MENGE. ENDIF. WA_DATA-MENGE1 = WA_DATA-MENGE1 + WA_MATDOC5-MENGE. WA_DATA-MEINS = WA_MATDOC5-MEINS. ENDLOOP. "获取物料描述 SELECT SINGLE MAKTX FROM MAKT INTO WA_DATA-MAKTX WHERE MATNR = WA_DATA-MATBF AND SPRAS = SY-LANGU. SELECT SINGLE EISBE FROM MARC INTO WA_DATA-EISBE WHERE MATNR = WA_DATA-MATBF AND WERKS = WA_DATA-WERKS. WA_DATA-MATBF = |{ WA_DATA-MATBF ALPHA = OUT }|. APPEND WA_DATA TO IT_DATA. CLEAR WA_DATA. ENDLOOP. ENDFORM. FORM FRM_GET_DATA6. SELECT BUKRS, "公司 WERKS, "工厂 MATBF, "物料编码 LGORT_SID, "库位 MEINS, "基本计量单位 MENGE, "月末结存数量 YEARMONTH_BUDAT,"年月 BSTTYP_SG, "库存类别 * UMSOK_CID, "特殊库存标识 * CHARG_SID, "批次 SHKZG "借贷标识 FROM MATDOC INTO TABLE @DATA(IT_MATDOC6) WHERE WERKS IN @S_WERKS AND LGORT_SID IN @S_LGORT AND MATBF IN @S_MATNR AND YEARMONTH_BUDAT <= @S_MONTH6. "降序排列 SORT IT_MATDOC6 BY YEARMONTH_BUDAT ASCENDING. LOOP AT IT_MATDOC6 INTO DATA(WA) GROUP BY ( KEY1 = WA-BUKRS KEY2 = WA-WERKS KEY3 = WA-LGORT_SID KEY4 = WA-MATBF ) INTO DATA(KEY). WA_DATA-BUKRS = KEY-KEY1. WA_DATA-WERKS = KEY-KEY2. WA_DATA-LGORT_SID = KEY-KEY3. WA_DATA-MATBF = KEY-KEY4. * WA_DATA-CHARG_SID = KEY-KEY5. WA_DATA-YEARMONTH_BUDAT1 = S_MONTH6. LOOP AT GROUP KEY INTO DATA(WA_MATDOC6). IF WA_MATDOC6-SHKZG = 'H'. WA_MATDOC6-MENGE = 0 - WA_MATDOC6-MENGE. ENDIF. WA_DATA-MENGE1 = WA_DATA-MENGE1 + WA_MATDOC6-MENGE. WA_DATA-MEINS = WA_MATDOC6-MEINS. ENDLOOP. "获取物料描述 SELECT SINGLE MAKTX FROM MAKT INTO WA_DATA-MAKTX WHERE MATNR = WA_DATA-MATBF AND SPRAS = SY-LANGU. SELECT SINGLE EISBE FROM MARC INTO WA_DATA-EISBE WHERE MATNR = WA_DATA-MATBF AND WERKS = WA_DATA-WERKS. WA_DATA-MATBF = |{ WA_DATA-MATBF ALPHA = OUT }|. APPEND WA_DATA TO IT_DATA. CLEAR WA_DATA. ENDLOOP. ENDFORM. FORM FRM_AUTHRITY_CHECK . LOOP AT IT_DATA INTO DATA(WA1). "排除没有权限的数据 AUTHORITY-CHECK OBJECT 'EDO_BUK' ID 'BUKRS' FIELD WA1-BUKRS. IF SY-SUBRC <> 0. DELETE IT_DATA. ENDIF. CLEAR WA1. ENDLOOP. ENDFORM. FORM L_STATUS100 USING EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS 'STANDARD'. ENDFORM. FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. DATA: REF TYPE REF TO CL_GUI_ALV_GRID. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = REF. CALL METHOD REF->CHECK_CHANGED_DATA. RS_SELFIELD-REFRESH = 'X'. ENDFORM. FORM MONAT_F4 . DATA: BEGIN OF MF_DYNPFIELDS OCCURS 1. INCLUDE STRUCTURE DYNPREAD. DATA: END OF MF_DYNPFIELDS. DATA: MF_RETURNCODE LIKE SY-SUBRC, MF_MONAT LIKE ISELLIST-MONTH, MF_HLP_REPID LIKE SY-REPID. FIELD-SYMBOLS: <MF_FELD>. GET CURSOR FIELD MF_DYNPFIELDS-FIELDNAME. APPEND MF_DYNPFIELDS. MF_HLP_REPID = SY-REPID. DO 2 TIMES. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING DYNAME = MF_HLP_REPID DYNUMB = SY-DYNNR TABLES DYNPFIELDS = MF_DYNPFIELDS EXCEPTIONS INVALID_ABAPWORKAREA = 01 INVALID_DYNPROFIELD = 02 INVALID_DYNPRONAME = 03 INVALID_DYNPRONUMMER = 04 INVALID_REQUEST = 05 NO_FIELDDESCRIPTION = 06 UNDEFIND_ERROR = 07. IF SY-SUBRC = 3. MF_HLP_REPID = 'SAPLALDB'. ELSE. READ TABLE MF_DYNPFIELDS INDEX 1. TRANSLATE MF_DYNPFIELDS-FIELDVALUE USING '_ '. EXIT. ENDIF. ENDDO. IF SY-SUBRC = 0. CALL FUNCTION 'CONVERSION_EXIT_PERI_INPUT' EXPORTING INPUT = MF_DYNPFIELDS-FIELDVALUE IMPORTING OUTPUT = MF_MONAT EXCEPTIONS ERROR_MESSAGE = 1. IF MF_MONAT IS INITIAL. MF_MONAT = SY-DATLO(6). ENDIF. CALL FUNCTION 'POPUP_TO_SELECT_MONTH' EXPORTING ACTUAL_MONTH = MF_MONAT IMPORTING SELECTED_MONTH = MF_MONAT RETURN_CODE = MF_RETURNCODE EXCEPTIONS FACTORY_CALENDAR_NOT_FOUND = 01 HOLIDAY_CALENDAR_NOT_FOUND = 02 MONTH_NOT_FOUND = 03. IF SY-SUBRC = 0 AND MF_RETURNCODE = 0. CALL FUNCTION 'CONVERSION_EXIT_PERI_OUTPUT' EXPORTING INPUT = MF_MONAT IMPORTING OUTPUT = MF_DYNPFIELDS-FIELDVALUE. COLLECT MF_DYNPFIELDS. CALL FUNCTION 'DYNP_VALUES_UPDATE' EXPORTING DYNAME = MF_HLP_REPID DYNUMB = SY-DYNNR TABLES DYNPFIELDS = MF_DYNPFIELDS EXCEPTIONS INVALID_ABAPWORKAREA = 01 INVALID_DYNPROFIELD = 02 INVALID_DYNPRONAME = 03 INVALID_DYNPRONUMMER = 04 INVALID_REQUEST = 05 NO_FIELDDESCRIPTION = 06 UNDEFIND_ERROR = 07. ENDIF. ENDIF. ENDFORM. FORM CREAT_STRUCTURE. DATA: L_LINES TYPE I. LOOP AT IT_DATA INTO WA_DATA. MOVE-CORRESPONDING WA_DATA TO WA_TEMP. APPEND WA_TEMP TO IT_TEMP. ENDLOOP. SORT IT_TEMP BY YEARMONTH_BUDAT1 ASCENDING. DELETE ADJACENT DUPLICATES FROM IT_TEMP COMPARING YEARMONTH_BUDAT1. SORT IT_TEMP BY YEARMONTH_BUDAT1 . DESCRIBE TABLE IT_TEMP LINES N. L_LINES = 8. * 创建静态结构部分 PERFORM FRM_ALV_FCAT_SET USING: 1 'BUKRS' TEXT-007 'BUKRS' 'MSEG' SPACE SPACE, 2 'WERKS' TEXT-007 'WERKS' 'MSEG' SPACE SPACE, 3 'LGORT_SID' TEXT-008 'LGORT' 'MSEG' SPACE SPACE, 4 'MATBF' TEXT-008 'MATNR' 'MAKT' SPACE SPACE, 5 'MAKTX' TEXT-008 'MAKTX' 'MAKT' SPACE SPACE, 6 'EISBE' TEXT-008 'EISBE' 'MARC' SPACE SPACE, 7 'MEINS' TEXT-008 'MEINS' 'MARA' SPACE SPACE. LOOP AT IT_TEMP INTO WA_TEMP. * DO N TIMES. CLEAR WA_STRUCTURE. *字段名称 WA_STRUCTURE-FIELDNAME = WA_TEMP-YEARMONTH_BUDAT1. *列名称 * CONCATENATE '移动类型' WA_DATA2-BWART INTO WA_STRUCTURE-SCRTEXT_L. WA_STRUCTURE-SCRTEXT_L = WA_TEMP-YEARMONTH_BUDAT1. 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 = ''. 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. 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_FIELDNAME TYPE LVC_S_FCAT-FIELDNAME. DATA:LW_ERFMG TYPE TY_DATA. SORT IT_DATA BY BUKRS WERKS LGORT_SID MATBF. LOOP AT IT_DATA INTO WA_DATA. CLEAR:L_FIELDNAME. L_FIELDNAME = WA_DATA-YEARMONTH_BUDAT1. ASSIGN COMPONENT L_FIELDNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = WA_DATA-MENGE1. LW_ERFMG = WA_DATA. AT END OF MATBF. "会将of后面的字段及其左边的字段变化时运行下面的代码块 ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. "将固定的字段一一列出 <DYN_FIELD> = LW_ERFMG-BUKRS. ASSIGN COMPONENT 'WERKS' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = LW_ERFMG-WERKS. ASSIGN COMPONENT 'LGORT_SID' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = LW_ERFMG-LGORT_SID. ASSIGN COMPONENT 'MATBF' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = LW_ERFMG-MATBF. ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = LW_ERFMG-MAKTX. ASSIGN COMPONENT 'EISBE' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = LW_ERFMG-EISBE. ASSIGN COMPONENT 'MEINS' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. <DYN_FIELD> = LW_ERFMG-MEINS. APPEND <DYN_WA> TO <DYN_TABLE>. CLEAR: <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. G_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 = G_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