*&---------------------------------------------------------------------*
*& Report ZMMRP048
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMMRP048.
INCLUDE ZMMRP048TOP.
INCLUDE ZZMMRP048ALV.
*执行按钮点击事件
START-OF-SELECTION.
PERFORM FUNC_ITAB_GET_DATA."获取数据
PERFORM FUNC_ALV_SHOW. "显示ALV
*&---------------------------------------------------------------------*
*& 包含 ZMMRP048TOP
*&---------------------------------------------------------------------*
TABLES: MSEG, MARA, MAKT.
DATA: BEGIN OF COMM_WTAB_001,
MANDT LIKE MSEG-MANDT,
MBLNR LIKE MSEG-MBLNR,
MJAHR LIKE MSEG-MJAHR,
ZEILE LIKE MSEG-ZEILE,
WERKS LIKE MSEG-WERKS,
BWART LIKE MSEG-BWART,
MTART LIKE MARA-MTART,
MATNR LIKE MSEG-MATNR, "物料编码
MAKTX LIKE MAKT-MAKTX, "物料描述
MEINS LIKE MSEG-MEINS, "基本单位
MENGE LIKE MSEG-MENGE, "数量
BPRME LIKE MSEG-BPRME, "辅单位
BPMNG LIKE MSEG-BPMNG, "辅数量
BUALT LIKE MSEG-BUALT, "金额
STPRS LIKE MBEW-STPRS, "标准价
PEINH LIKE MBEW-PEINH, "价格单位
BUDAT_MKPF LIKE MSEG-BUDAT_MKPF, "过账日期
END OF COMM_WTAB_001.
DATA: COMM_ALV_ITAB LIKE TABLE OF COMM_WTAB_001 WITH HEADER LINE.
PARAMETER:
COMM_PWK LIKE PLAF-PWWRK OBLIGATORY DEFAULT '1001',
COMM_BRT LIKE MSEG-BWART OBLIGATORY DEFAULT '101'.
SELECT-OPTIONS:
COMM_MTT FOR MARA-MTART,
COMM_PLN FOR MAKT-MATNR.
*&---------------------------------------------------------------------*
*& 包含 ZZMMRP048ALV
*&---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* ALV字段显示控制
*---------------------------------------------------------------------*
FORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_T_FCAT TYPE LVC_T_FCAT USING
FUNC_FIELDNAME TYPE C " 字段名
FUNC_SCRTEXT_M TYPE C " 标题
FUNC_COL_POS TYPE I " 所在列
FUNC_OUTPUTLEN TYPE I " 输出长度
FUNC_EMPHASIZE TYPE C " 高亮显示
FUNC_KEY TYPE C " 主键
FUNC_CHECKBOX TYPE C " 显示checkbox
FUNC_EDIT TYPE C " 是否可编辑
FUNC_FIX_COLUMN TYPE C " 固定列
FUNC_NO_ZERO TYPE C " 为输出隐藏零
.
DATA: FUNC_LVC_S_FCAT TYPE LVC_S_FCAT.
FUNC_LVC_S_FCAT-FIELDNAME = FUNC_FIELDNAME.
FUNC_LVC_S_FCAT-SCRTEXT_M = FUNC_SCRTEXT_M.
FUNC_LVC_S_FCAT-COL_POS = FUNC_COL_POS.
FUNC_LVC_S_FCAT-OUTPUTLEN = FUNC_OUTPUTLEN.
FUNC_LVC_S_FCAT-EMPHASIZE = FUNC_EMPHASIZE.
FUNC_LVC_S_FCAT-KEY = FUNC_KEY.
FUNC_LVC_S_FCAT-CHECKBOX = FUNC_CHECKBOX.
FUNC_LVC_S_FCAT-EDIT = FUNC_EDIT.
FUNC_LVC_S_FCAT-FIX_COLUMN = FUNC_FIX_COLUMN.
FUNC_LVC_S_FCAT-NO_ZERO = FUNC_NO_ZERO.
APPEND FUNC_LVC_S_FCAT TO FUNC_LVC_T_FCAT.
CLEAR FUNC_LVC_S_FCAT.
ENDFORM.
*---------------------------------------------------------------------*
* 绑定按钮
*---------------------------------------------------------------------*
FORM FUNC_ALV_BTN_INIT USING
FUNC_SLIS_T_EXTAB TYPE SLIS_T_EXTAB
.
SET PF-STATUS 'ZMMRP048STATUS' EXCLUDING FUNC_SLIS_T_EXTAB.
ENDFORM.
*---------------------------------------------------------------------*
* 绑定按钮事件
*---------------------------------------------------------------------*
FORM FUNC_ALV_BTN_EVENT USING
FUNC_SY_UCOMM LIKE SY-UCOMM
FUNC_SLIS_SELFIELD TYPE SLIS_SELFIELD
.
DATA: FUNC_CL_GUI_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = FUNC_CL_GUI_ALV_GRID.
CALL METHOD FUNC_CL_GUI_ALV_GRID->CHECK_CHANGED_DATA.
FUNC_SLIS_SELFIELD-REFRESH = 'X'.
READ TABLE COMM_ALV_ITAB INDEX FUNC_SLIS_SELFIELD-TABINDEX.
* CASE FUNC_SY_UCOMM.
* WHEN '&FUNC_001'.
* PERFORM FUNC_001.
* WHEN '&FUNC_002'.
* PERFORM FUNC_002.
* WHEN '&FUNC_003'.
* PERFORM FUNC_003.
* WHEN '&FUNC_005'.
* PERFORM FUNC_001.
* WHEN OTHERS.
* ENDCASE.
CLEAR:FUNC_SY_UCOMM.
ENDFORM.
*---------------------------------------------------------------------*
* 显示ALV
*---------------------------------------------------------------------*
FORM FUNC_ALV_SHOW.
DATA: FUNC_LVC_S_FCAT TYPE TABLE OF LVC_S_FCAT WITH HEADER LINE."设定输出目录
DATA: FUNC_LVC_S_LAYO TYPE LVC_S_LAYO."对输出样式的设定
FUNC_LVC_S_LAYO-CWIDTH_OPT = 'X'.
FUNC_LVC_S_LAYO-CWIDTH_OPT = 'X'.
FUNC_LVC_S_LAYO-STYLEFNAME = 'FIELD_STYLE'.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'WERKS' '工厂' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'BWART' '移动类型' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MTART' '物料类型' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MATNR' '物料编码' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MAKTX' '物料描述' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MEINS' '基本单位' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MENGE' '数量' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'BPRME' '辅单位' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'BPMNG' '辅数量' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'BUALT' '基本单位不含税单价' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'STPRS' '标准价' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'PEINH' '价格单位' '' '' '' '' '' '' '' ''.
PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'BUDAT_MKPF' '过账日期' '' '' '' '' '' '' '' ''.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_PF_STATUS_SET = 'FUNC_ALV_BTN_INIT' "绑定按钮
I_CALLBACK_USER_COMMAND = 'FUNC_ALV_BTN_EVENT' "自定义工具栏的事件
IT_FIELDCAT_LVC = FUNC_LVC_S_FCAT[]
IS_LAYOUT_LVC = FUNC_LVC_S_LAYO
TABLES
T_OUTTAB = COMM_ALV_ITAB "ALV 输出的内表
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS.
ENDFORM.
*---------------------------------------------------------------------*
* itab赋值
*---------------------------------------------------------------------
FORM FUNC_ITAB_GET_DATA.
CLEAR: COMM_ALV_ITAB[], COMM_ALV_ITAB.
SELECT
MSEG~WERKS
MSEG~BWART
MSEG~MATNR
MAX( MSEG~BUDAT_MKPF ) AS BUDAT_MKPF
INTO CORRESPONDING FIELDS OF TABLE COMM_ALV_ITAB
FROM MSEG
INNER JOIN MAKT ON MSEG~MATNR = MAKT~MATNR AND MAKT~SPRAS = '1'
INNER JOIN MBEW ON MSEG~MATNR = MBEW~MATNR
INNER JOIN MARA ON MSEG~MATNR = MARA~MATNR
WHERE MSEG~WERKS = COMM_PWK
AND MSEG~BWART = COMM_BRT
AND MARA~MTART IN COMM_MTT
AND MSEG~MATNR IN COMM_PLN
GROUP BY
MSEG~WERKS
MSEG~BWART
MSEG~MATNR
.
LOOP AT COMM_ALV_ITAB.
DATA: FUNC_ALV_ITAB001 LIKE TABLE OF COMM_WTAB_001 WITH HEADER LINE.
CLEAR: FUNC_ALV_ITAB001.
SELECT
MSEG~MEINS
MSEG~MENGE
MSEG~BPRME
MSEG~BPMNG
MSEG~BUALT
MAKT~MAKTX
MARA~MTART
MBEW~STPRS
MBEW~PEINH
INTO CORRESPONDING FIELDS OF TABLE FUNC_ALV_ITAB001
FROM MSEG
INNER JOIN MAKT ON MSEG~MATNR = MAKT~MATNR AND MAKT~SPRAS = '1'
INNER JOIN MBEW ON MSEG~MATNR = MBEW~MATNR
INNER JOIN MARA ON MSEG~MATNR = MARA~MATNR
WHERE MSEG~WERKS = COMM_PWK
AND MSEG~BWART = COMM_BRT
AND MARA~MTART IN COMM_MTT
AND MSEG~MATNR IN COMM_PLN
AND MSEG~WERKS = COMM_ALV_ITAB-WERKS
AND MSEG~BWART = COMM_ALV_ITAB-BWART
AND MSEG~MATNR = COMM_ALV_ITAB-MATNR
AND MSEG~BUDAT_MKPF = COMM_ALV_ITAB-BUDAT_MKPF.
LOOP AT FUNC_ALV_ITAB001.
DATA: TMP_MATNR LIKE MSEG-MATNR.
CLEAR: TMP_MATNR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' "前缀去零
EXPORTING
INPUT = COMM_ALV_ITAB-MATNR
IMPORTING
OUTPUT = TMP_MATNR.
COMM_ALV_ITAB-MATNR = TMP_MATNR.
DATA: TMP_MEINS TYPE MARA-MEINS.
CLEAR: TMP_MEINS.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT' "单位处理
EXPORTING
INPUT = FUNC_ALV_ITAB001-MEINS
IMPORTING
OUTPUT = TMP_MEINS.
COMM_ALV_ITAB-MEINS = TMP_MEINS.
COMM_ALV_ITAB-MENGE = FUNC_ALV_ITAB001-MENGE.
DATA: TMP_BPRME TYPE MSEG-BPRME.
CLEAR: TMP_BPRME.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT' "单位处理
EXPORTING
INPUT = FUNC_ALV_ITAB001-BPRME
IMPORTING
OUTPUT = TMP_BPRME.
COMM_ALV_ITAB-BPRME = TMP_BPRME.
COMM_ALV_ITAB-BPMNG = FUNC_ALV_ITAB001-BPMNG.
COMM_ALV_ITAB-BUALT = FUNC_ALV_ITAB001-BUALT / FUNC_ALV_ITAB001-MENGE.
COMM_ALV_ITAB-MAKTX = FUNC_ALV_ITAB001-MAKTX.
COMM_ALV_ITAB-MTART = FUNC_ALV_ITAB001-MTART.
COMM_ALV_ITAB-STPRS = FUNC_ALV_ITAB001-STPRS.
COMM_ALV_ITAB-PEINH = FUNC_ALV_ITAB001-PEINH.
MODIFY COMM_ALV_ITAB.
ENDLOOP.
ENDLOOP.
* MSEG~MEINS
* MSEG~MENGE
* MSEG~BPRME
* MSEG~BPMNG
* MSEG~BUALT
* MAKT~MAKTX
* MARA~MTART
* MBEW~STPRS
* MBEW~PEINH
ENDFORM.