--------------------------------------------------------无打印报表--------------------------------------------------------
*&---------------------------------------------------------------------*
*& REPORT ZPPR_0006
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZPPR_0006 NO STANDARD PAGE HEADING MESSAGE-ID ZSELEN_PRINT.
"申明表
TABLES: MSEG,
MAKT,
PLPO,
CRHD,
MKPF,
PLKO.
TYPE-POOLS:SLIS.
"定义结构
TYPES:BEGIN OF TW_MSEG,
BOX TYPE C ,
MATNR TYPE MSEG-MATNR,"物料
MAKTX TYPE MAKT-MAKTX,"物料描述
MENGE TYPE MSEG-MENGE,"入库数量
VORNR TYPE PLPO-VORNR,"工序号
WERKS TYPE MSEG-WERKS,"工厂
BUDAT TYPE MKPF-BUDAT,"过账日期
ARBPL TYPE CRHD-ARBPL ,"工作中心
VGW03 TYPE PLPO-VGW03,"标准工时(人工)
VGE03 TYPE PLPO-VGE03,"标准单位(人工)
SUM1 TYPE P DECIMALS 2 ,
VGW02 TYPE PLPO-VGW02,"标准工时(机器)
VGE02 TYPE PLPO-VGE02,"标准单位(机器)
SUM2 TYPE P DECIMALS 2 ,
VGW04 TYPE PLPO-VGW04,"标准工时(制费)
VGE04 TYPE PLPO-VGE04,"标准单位(制费)
SUM3 TYPE P DECIMALS 2 ,
PLNNR TYPE MAPL-PLNNR,"组
PLNAL TYPE MAPL-PLNAL,"组计数器
BMSCH TYPE PLKO-BMSCH,"基本数
ARBID TYPE PLPO-ARBID,"对象表示
ZAEHL TYPE MAPL-ZAEHL,"计数器
END OF TW_MSEG.
TYPES:TAB_MSEG TYPE TABLE OF TW_MSEG.
DATA :GW_MSEG TYPE TW_MSEG,
GT_MSEG TYPE TABLE OF TW_MSEG.
" 选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
S_MATNR FOR MSEG-MATNR,
S_WERKS FOR MSEG-WERKS,
S_BUDAT FOR MKPF-BUDAT.
SELECTION-SCREEN END OF BLOCK B1.
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
PERFORM FRM_DISPLAY.
" 取数据
FORM FRM_GET_DATA.
FIELD-SYMBOLS <FS_MSEG> TYPE TW_MSEG.
SELECT DISTINCT
MSEG~MATNR "物料
MAKT~MAKTX "物料描述
MSEG~MENGE "入库数量
* MSEG~AUFNR "订单号
* MSEG~BWART "移动类型
MSEG~WERKS "工厂
MKPF~BUDAT "过账日期
PLPO~VORNR"工序号
CRHD~ARBPL "工作中心
PLPO~VGW03"标准工时(人工)
PLPO~VGE03"标准单位(人工)
PLPO~VGW02"标准工时(机器)
PLPO~VGE02"标准单位(机器)
PLPO~VGW04"标准工时(制费)
PLPO~VGE04"标准单位(制费)
MAPL~PLNNR "组
MAPL~PLNAL "组计数器
MAPL~ZAEHL "计数器
PLKO~BMSCH "基本数
PLPO~ARBID "对象表
INTO CORRESPONDING FIELDS OF TABLE GT_MSEG
FROM MSEG
INNER JOIN MAKT ON MSEG~MATNR = MAKT~MATNR
INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR
INNER JOIN MAPL ON MSEG~MATNR = MAPL~MATNR AND
MSEG~WERKS = MAPL~WERKS
INNER JOIN PLKO ON MAPL~PLNNR = PLKO~PLNNR AND
MAPL~PLNAL = PLKO~PLNAL AND
MAPL~ZAEHL = PLKO~ZAEHL
INNER JOIN PLPO ON MAPL~PLNNR = PLPO~PLNNR AND
MAPL~ZAEHL = PLPO~ZAEHL AND
MAPL~PLNTY = PLPO~PLNTY AND
PLKO~BMSCH = PLPO~BMSCH
INNER JOIN CRHD ON PLPO~ARBID = CRHD~OBJID
WHERE MSEG~MATNR IN S_MATNR AND
MSEG~WERKS IN S_WERKS AND
MKPF~BUDAT IN S_BUDAT AND
MSEG~BWART = '101' AND
MSEG~VGART_MKPF = 'WF'.
IF SY-SUBRC <> 0.
MESSAGE S001 DISPLAY LIKE 'E'.
STOP.
ENDIF.
LOOP AT GT_MSEG ASSIGNING <FS_MSEG>.
DATA : A TYPE P DECIMALS 2,
B TYPE P DECIMALS 2,
C TYPE P DECIMALS 2.
IF <FS_MSEG>-MENGE IS NOT INITIAL AND
<FS_MSEG>-VGE03 = 'H'.
A = <FS_MSEG>-MENGE * <FS_MSEG>-VGW03 .
B = <FS_MSEG>-MENGE * <FS_MSEG>-VGW02 .
C = <FS_MSEG>-MENGE * <FS_MSEG>-VGW04 .
<FS_MSEG>-SUM1 = A.
<FS_MSEG>-SUM2 = B.
<FS_MSEG>-SUM3 = C.
ELSE.
A = <FS_MSEG>-MENGE * <FS_MSEG>-VGW03 / 60.
B = <FS_MSEG>-MENGE * <FS_MSEG>-VGW02 / 60.
C = <FS_MSEG>-MENGE * <FS_MSEG>-VGW04 / 60.
<FS_MSEG>-SUM1 = A.
<FS_MSEG>-SUM2 = B.
<FS_MSEG>-SUM3 = C.
ENDIF.
ENDLOOP.
SORT GT_MSEG BY MATNR MENGE.
ENDFORM.
FORM FRM_DISPLAY.
DATA : LV_REPID TYPE SY-REPID,
LS_GRID_SETTING TYPE LVC_S_GLAY,
LS_LAYOUT TYPE LVC_S_LAYO,
LT_FCAT TYPE LVC_T_FCAT,
LT_SORT TYPE LVC_T_SORT,
LS_VARIANT TYPE DISVARIANT.
LV_REPID = SY-REPID.
PERFORM FRM_GRID_SETTING CHANGING LS_GRID_SETTING.
PERFORM FRM_BUILD_LAYOUT CHANGING LS_LAYOUT.
PERFORM FRM_BUILD_FCAT CHANGING LT_FCAT.
PERFORM FRM_BUILD_VARIANT CHANGING LS_VARIANT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = LV_REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_GRID_SETTINGS = LS_GRID_SETTING
IS_LAYOUT_LVC = LS_LAYOUT
IT_FIELDCAT_LVC = LT_FCAT
I_SAVE = 'A'
IS_VARIANT = LS_VARIANT
TABLES
T_OUTTAB = GT_MSEG
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
ENDIF.
ENDFORM.
FORM FRM_GRID_SETTING CHANGING PW_GRID TYPE LVC_S_GLAY.
PW_GRID-EDT_CLL_CB = 'X'.
ENDFORM. " FRM_GRID_SETTING
FORM FRM_BUILD_LAYOUT CHANGING PS_LAYOUT TYPE LVC_S_LAYO.
PS_LAYOUT-ZEBRA = 'X'.
PS_LAYOUT-CWIDTH_OPT = 'X'.
* PS_LAYOUT-SEL_MODE = 'A'.
PS_LAYOUT-NO_ROWMARK = 'X'.
ENDFORM. " FRM_BUILD_LAYOUT
FORM FRM_BUILD_FCAT CHANGING PT_FCAT TYPE LVC_T_FCAT.
DATA : LW_FCAT TYPE LVC_S_FCAT.
DEFINE FCAT.
CLEAR LW_FCAT.
LW_FCAT-COL_POS = &1.
LW_FCAT-FIELDNAME = &2.
LW_FCAT-TABNAME = &3.
LW_FCAT-QFIELDNAME = &4.
LW_FCAT-CHECKBOX = &5.
LW_FCAT-EDIT = &6.
LW_FCAT-SCRTEXT_L = LW_FCAT-SCRTEXT_M = LW_FCAT-SCRTEXT_S = &7.
LW_FCAT-CONVEXIT = &8.
APPEND LW_FCAT TO PT_FCAT.
END-OF-DEFINITION.
FCAT 1 'BOX' 'GT_VBAK' SPACE 'X' 'X' TEXT-F15 SPACE.
FCAT 2 'MATNR' 'GT_MSEG' SPACE SPACE SPACE TEXT-F01 SPACE .
FCAT 3 'MAKTX' 'GT_MSEG' SPACE SPACE SPACE TEXT-F02 SPACE.
FCAT 4 'MENGE' 'GT_MSEG' SPACE SPACE SPACE TEXT-F03 SPACE.
FCAT 5 'VORNR' 'GT_MSEG' SPACE SPACE SPACE TEXT-F04 SPACE.
FCAT 6 'ARBPL' 'GT_MSEG' SPACE SPACE SPACE TEXT-F05 SPACE.
FCAT 7 'VGW03' 'GT_MSEG' SPACE SPACE SPACE TEXT-F06 SPACE.
FCAT 8 'VGE03' 'GT_MSEG' SPACE SPACE SPACE TEXT-F07 SPACE.
FCAT 9 'SUM1' 'GT_MSEG' SPACE SPACE SPACE TEXT-F08 SPACE.
FCAT 10 'VGW02' 'GT_MSEG' SPACE SPACE SPACE TEXT-F09 SPACE.
FCAT 11 'VGE02' 'GT_MSEG' SPACE SPACE SPACE TEXT-F10 SPACE.
FCAT 12 'SUM2' 'GT_MSEG' SPACE SPACE SPACE TEXT-F11 SPACE.
FCAT 13 'VGW04' 'GT_MSEG' SPACE SPACE SPACE TEXT-F12 SPACE.
FCAT 14 'VGE04' 'GT_MSEG' SPACE SPACE SPACE TEXT-F13 SPACE.
FCAT 15 'SUM3' 'GT_MSEG' SPACE SPACE SPACE TEXT-F14 SPACE.
ENDFORM. " FRM_BUILD_FCAT
FORM FRM_BUILD_VARIANT CHANGING PS_VARIANT TYPE DISVARIANT.
PS_VARIANT-USERNAME = SY-UNAME.
PS_VARIANT-REPORT = SY-REPID.
* PS_VARIANT-VARIANT = P_VAR.
ENDFORM. " FRM_BUILD_VARIANT
FORM PF_STATUS USING P_EXTAB TYPE SLIS_T_EXTAB .
SET PF-STATUS 'STATUS' .
ENDFORM.
FORM USER_COMMAND USING P_UCOMM TYPE SY-UCOMM
P_RS_SELFIELD TYPE SLIS_SELFIELD .
FIELD-SYMBOLS : <FS_MSEG> TYPE TW_MSEG.
P_RS_SELFIELD-REFRESH = 'X'.
P_RS_SELFIELD-COL_STABLE = 'X'.
P_RS_SELFIELD-ROW_STABLE = 'X'.
CASE P_UCOMM.
WHEN 'SALL'.
LOOP AT GT_MSEG ASSIGNING <FS_MSEG>.
<FS_MSEG>-BOX = 'X'.
ENDLOOP.
WHEN 'SN'.
LOOP AT GT_MSEG ASSIGNING <FS_MSEG>.
CLEAR <FS_MSEG>-BOX.
ENDLOOP.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& REPORT ZPPR_0006
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZPPR_0006 NO STANDARD PAGE HEADING MESSAGE-ID ZSELEN_PRINT.
"申明表
TABLES: MSEG,
MAKT,
PLPO,
CRHD,
MKPF,
PLKO.
TYPE-POOLS:SLIS.
"定义结构
TYPES:BEGIN OF TW_MSEG,
BOX TYPE C ,
MATNR TYPE MSEG-MATNR,"物料
MAKTX TYPE MAKT-MAKTX,"物料描述
MENGE TYPE MSEG-MENGE,"入库数量
VORNR TYPE PLPO-VORNR,"工序号
WERKS TYPE MSEG-WERKS,"工厂
BUDAT TYPE MKPF-BUDAT,"过账日期
ARBPL TYPE CRHD-ARBPL ,"工作中心
VGW03 TYPE PLPO-VGW03,"标准工时(人工)
VGE03 TYPE PLPO-VGE03,"标准单位(人工)
SUM1 TYPE P DECIMALS 2 ,
VGW02 TYPE PLPO-VGW02,"标准工时(机器)
VGE02 TYPE PLPO-VGE02,"标准单位(机器)
SUM2 TYPE P DECIMALS 2 ,
VGW04 TYPE PLPO-VGW04,"标准工时(制费)
VGE04 TYPE PLPO-VGE04,"标准单位(制费)
SUM3 TYPE P DECIMALS 2 ,
PLNNR TYPE MAPL-PLNNR,"组
PLNAL TYPE MAPL-PLNAL,"组计数器
BMSCH TYPE PLKO-BMSCH,"基本数
ARBID TYPE PLPO-ARBID,"对象表示
ZAEHL TYPE MAPL-ZAEHL,"计数器
END OF TW_MSEG.
TYPES:TAB_MSEG TYPE TABLE OF TW_MSEG.
DATA :GW_MSEG TYPE TW_MSEG,
GT_MSEG TYPE TABLE OF TW_MSEG.
" 选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
S_MATNR FOR MSEG-MATNR,
S_WERKS FOR MSEG-WERKS,
S_BUDAT FOR MKPF-BUDAT.
SELECTION-SCREEN END OF BLOCK B1.
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
PERFORM FRM_DISPLAY.
" 取数据
FORM FRM_GET_DATA.
FIELD-SYMBOLS <FS_MSEG> TYPE TW_MSEG.
SELECT DISTINCT
MSEG~MATNR "物料
MAKT~MAKTX "物料描述
MSEG~MENGE "入库数量
* MSEG~AUFNR "订单号
* MSEG~BWART "移动类型
MSEG~WERKS "工厂
MKPF~BUDAT "过账日期
PLPO~VORNR"工序号
CRHD~ARBPL "工作中心
PLPO~VGW03"标准工时(人工)
PLPO~VGE03"标准单位(人工)
PLPO~VGW02"标准工时(机器)
PLPO~VGE02"标准单位(机器)
PLPO~VGW04"标准工时(制费)
PLPO~VGE04"标准单位(制费)
MAPL~PLNNR "组
MAPL~PLNAL "组计数器
MAPL~ZAEHL "计数器
PLKO~BMSCH "基本数
PLPO~ARBID "对象表
INTO CORRESPONDING FIELDS OF TABLE GT_MSEG
FROM MSEG
INNER JOIN MAKT ON MSEG~MATNR = MAKT~MATNR
INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR
INNER JOIN MAPL ON MSEG~MATNR = MAPL~MATNR AND
MSEG~WERKS = MAPL~WERKS
INNER JOIN PLKO ON MAPL~PLNNR = PLKO~PLNNR AND
MAPL~PLNAL = PLKO~PLNAL AND
MAPL~ZAEHL = PLKO~ZAEHL
INNER JOIN PLPO ON MAPL~PLNNR = PLPO~PLNNR AND
MAPL~ZAEHL = PLPO~ZAEHL AND
MAPL~PLNTY = PLPO~PLNTY AND
PLKO~BMSCH = PLPO~BMSCH
INNER JOIN CRHD ON PLPO~ARBID = CRHD~OBJID
WHERE MSEG~MATNR IN S_MATNR AND
MSEG~WERKS IN S_WERKS AND
MKPF~BUDAT IN S_BUDAT AND
MSEG~BWART = '101' AND
MSEG~VGART_MKPF = 'WF'.
IF SY-SUBRC <> 0.
MESSAGE S001 DISPLAY LIKE 'E'.
STOP.
ENDIF.
LOOP AT GT_MSEG ASSIGNING <FS_MSEG>.
DATA : A TYPE P DECIMALS 2,
B TYPE P DECIMALS 2,
C TYPE P DECIMALS 2.
IF <FS_MSEG>-MENGE IS NOT INITIAL AND
<FS_MSEG>-VGE03 = 'H'.
A = <FS_MSEG>-MENGE * <FS_MSEG>-VGW03 .
B = <FS_MSEG>-MENGE * <FS_MSEG>-VGW02 .
C = <FS_MSEG>-MENGE * <FS_MSEG>-VGW04 .
<FS_MSEG>-SUM1 = A.
<FS_MSEG>-SUM2 = B.
<FS_MSEG>-SUM3 = C.
ELSE.
A = <FS_MSEG>-MENGE * <FS_MSEG>-VGW03 / 60.
B = <FS_MSEG>-MENGE * <FS_MSEG>-VGW02 / 60.
C = <FS_MSEG>-MENGE * <FS_MSEG>-VGW04 / 60.
<FS_MSEG>-SUM1 = A.
<FS_MSEG>-SUM2 = B.
<FS_MSEG>-SUM3 = C.
ENDIF.
ENDLOOP.
SORT GT_MSEG BY MATNR MENGE.
ENDFORM.
FORM FRM_DISPLAY.
DATA : LV_REPID TYPE SY-REPID,
LS_GRID_SETTING TYPE LVC_S_GLAY,
LS_LAYOUT TYPE LVC_S_LAYO,
LT_FCAT TYPE LVC_T_FCAT,
LT_SORT TYPE LVC_T_SORT,
LS_VARIANT TYPE DISVARIANT.
LV_REPID = SY-REPID.
PERFORM FRM_GRID_SETTING CHANGING LS_GRID_SETTING.
PERFORM FRM_BUILD_LAYOUT CHANGING LS_LAYOUT.
PERFORM FRM_BUILD_FCAT CHANGING LT_FCAT.
PERFORM FRM_BUILD_VARIANT CHANGING LS_VARIANT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = LV_REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_GRID_SETTINGS = LS_GRID_SETTING
IS_LAYOUT_LVC = LS_LAYOUT
IT_FIELDCAT_LVC = LT_FCAT
I_SAVE = 'A'
IS_VARIANT = LS_VARIANT
TABLES
T_OUTTAB = GT_MSEG
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
ENDIF.
ENDFORM.
FORM FRM_GRID_SETTING CHANGING PW_GRID TYPE LVC_S_GLAY.
PW_GRID-EDT_CLL_CB = 'X'.
ENDFORM. " FRM_GRID_SETTING
FORM FRM_BUILD_LAYOUT CHANGING PS_LAYOUT TYPE LVC_S_LAYO.
PS_LAYOUT-ZEBRA = 'X'.
PS_LAYOUT-CWIDTH_OPT = 'X'.
* PS_LAYOUT-SEL_MODE = 'A'.
PS_LAYOUT-NO_ROWMARK = 'X'.
ENDFORM. " FRM_BUILD_LAYOUT
FORM FRM_BUILD_FCAT CHANGING PT_FCAT TYPE LVC_T_FCAT.
DATA : LW_FCAT TYPE LVC_S_FCAT.
DEFINE FCAT.
CLEAR LW_FCAT.
LW_FCAT-COL_POS = &1.
LW_FCAT-FIELDNAME = &2.
LW_FCAT-TABNAME = &3.
LW_FCAT-QFIELDNAME = &4.
LW_FCAT-CHECKBOX = &5.
LW_FCAT-EDIT = &6.
LW_FCAT-SCRTEXT_L = LW_FCAT-SCRTEXT_M = LW_FCAT-SCRTEXT_S = &7.
LW_FCAT-CONVEXIT = &8.
APPEND LW_FCAT TO PT_FCAT.
END-OF-DEFINITION.
FCAT 1 'BOX' 'GT_VBAK' SPACE 'X' 'X' TEXT-F15 SPACE.
FCAT 2 'MATNR' 'GT_MSEG' SPACE SPACE SPACE TEXT-F01 SPACE .
FCAT 3 'MAKTX' 'GT_MSEG' SPACE SPACE SPACE TEXT-F02 SPACE.
FCAT 4 'MENGE' 'GT_MSEG' SPACE SPACE SPACE TEXT-F03 SPACE.
FCAT 5 'VORNR' 'GT_MSEG' SPACE SPACE SPACE TEXT-F04 SPACE.
FCAT 6 'ARBPL' 'GT_MSEG' SPACE SPACE SPACE TEXT-F05 SPACE.
FCAT 7 'VGW03' 'GT_MSEG' SPACE SPACE SPACE TEXT-F06 SPACE.
FCAT 8 'VGE03' 'GT_MSEG' SPACE SPACE SPACE TEXT-F07 SPACE.
FCAT 9 'SUM1' 'GT_MSEG' SPACE SPACE SPACE TEXT-F08 SPACE.
FCAT 10 'VGW02' 'GT_MSEG' SPACE SPACE SPACE TEXT-F09 SPACE.
FCAT 11 'VGE02' 'GT_MSEG' SPACE SPACE SPACE TEXT-F10 SPACE.
FCAT 12 'SUM2' 'GT_MSEG' SPACE SPACE SPACE TEXT-F11 SPACE.
FCAT 13 'VGW04' 'GT_MSEG' SPACE SPACE SPACE TEXT-F12 SPACE.
FCAT 14 'VGE04' 'GT_MSEG' SPACE SPACE SPACE TEXT-F13 SPACE.
FCAT 15 'SUM3' 'GT_MSEG' SPACE SPACE SPACE TEXT-F14 SPACE.
ENDFORM. " FRM_BUILD_FCAT
FORM FRM_BUILD_VARIANT CHANGING PS_VARIANT TYPE DISVARIANT.
PS_VARIANT-USERNAME = SY-UNAME.
PS_VARIANT-REPORT = SY-REPID.
* PS_VARIANT-VARIANT = P_VAR.
ENDFORM. " FRM_BUILD_VARIANT
FORM PF_STATUS USING P_EXTAB TYPE SLIS_T_EXTAB .
SET PF-STATUS 'STATUS' .
ENDFORM.
FORM USER_COMMAND USING P_UCOMM TYPE SY-UCOMM
P_RS_SELFIELD TYPE SLIS_SELFIELD .
FIELD-SYMBOLS : <FS_MSEG> TYPE TW_MSEG.
P_RS_SELFIELD-REFRESH = 'X'.
P_RS_SELFIELD-COL_STABLE = 'X'.
P_RS_SELFIELD-ROW_STABLE = 'X'.
CASE P_UCOMM.
WHEN 'SALL'.
LOOP AT GT_MSEG ASSIGNING <FS_MSEG>.
<FS_MSEG>-BOX = 'X'.
ENDLOOP.
WHEN 'SN'.
LOOP AT GT_MSEG ASSIGNING <FS_MSEG>.
CLEAR <FS_MSEG>-BOX.
ENDLOOP.
ENDCASE.
ENDFORM.