*&---------------------------------------------------------------------*
*& Report ZPPRP027
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZPPRP027.
INCLUDE ZPPRP027TOP.
INCLUDE ZPPRP027A01.
INCLUDE ZPPRP027ALV.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN.
START-OF-SELECTION.
PERFORM FRM_GETDATA.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-STYLEFNAME = 'FIELD_STYLE'.
PERFORM FIELDS_BUILD CHANGING IT_FIELDCAT[].
PERFORM ALV_SHOW. "展示alv"
END-OF-SELECTION.
*======================================================================*
* List Events
*======================================================================*
*** page header
TOP-OF-PAGE.
*** page header after first list
TOP-OF-PAGE DURING LINE-SELECTION.
*** page footer
END-OF-PAGE.
*** when double click
AT LINE-SELECTION.
*&---------------------------------------------------------------------*
*& 包含 ZPPRP027TOP
*&---------------------------------------------------------------------*
TABLES: plaf,makt,mapl,plpo.
DATA: BEGIN OF wtab,
check(1),
pwwrk LIKE plaf-pwwrk, "工厂"
plnum LIKE plaf-plnum, "计划单号"
kdauf LIKE plaf-kdauf, "销售订单"
kdpos LIKE plaf-kdpos,
matnr LIKE plaf-matnr, "物料"
maktx LIKE makt-maktx, "物料描述"
plnnr LIKE mapl-plnnr, "组"
vornr LIKE plpo-vornr, "工序编号"
ltxa1 LIKE plpo-ltxa1, "工序名字"
pedtr LIKE plaf-pedtr, "计划完工日期"
annam LIKE plpo-annam, "创建者"
gsmng LIKE plaf-gsmng, "数量"
vgw02 LIKE plpo-vgw02, "工时"
vge02 LIKE plpo-vge02, "单位"
vgw03 LIKE plpo-vgw03, "计时工资"
vge03 LIKE plpo-vge03, "单位"
vgw04 LIKE plpo-vgw04, "计件工资"
vge04 LIKE plpo-vge04, "单位"
vgw06 LIKE plpo-vgw06, "其他间接费用"
vge06 LIKE plpo-vge06, "单位"
END OF wtab.
DATA: itab LIKE TABLE OF wtab WITH HEADER LINE.
DATA: itab001 LIKE TABLE OF wtab WITH HEADER LINE.
DATA: it_fieldcat TYPE TABLE OF lvc_s_fcat WITH HEADER LINE,gs_layout TYPE lvc_s_layo.
SELECTION-SCREEN BEGIN OF BLOCK blk_1 WITH FRAME TITLE TEXT-001.
PARAMETER:
p_pwwrk LIKE plaf-pwwrk OBLIGATORY MEMORY ID kun.
SELECT-OPTIONS:
p_matnr FOR plaf-matnr,"物料编号"
p_plnum FOR plaf-plnum,"计划单号"
p_kdauf FOR plaf-kdauf,"销售订单"
p_plnnr FOR mapl-plnnr"组"
.
SELECTION-SCREEN END OF BLOCK blk_1.
*&---------------------------------------------------------------------*
*& 包含 ZPPRP027A01
*&---------------------------------------------------------------------*
FORM frm_getdata.
SELECT
DISTINCT
plaf~pwwrk"工厂"
plaf~plnum"计划单号"
plaf~kdauf"销售订单"
plaf~kdpos
plaf~matnr"物料"
makt~maktx"物料描述"
mapl~plnnr"组"
* plpo~vornr"工序编号"
* plpo~ltxa1"工序名字"
* plaf~pedtr"计划完工日期"
* plpo~annam"创建者"
* plaf~gsmng"数量"
* plpo~vgw02"工时"
* plpo~vge02"单位"
* plpo~vgw03"计时工资"
* plpo~vge03"单位"
* plpo~vgw04"计件工资"
* plpo~vge04"单位"
* plpo~vgw06"其他间接费用"
* plpo~vge06"单位"
INTO CORRESPONDING FIELDS OF TABLE itab
FROM plaf
INNER JOIN makt ON plaf~matnr = makt~matnr
INNER JOIN mapl ON plaf~matnr = mapl~matnr AND plaf~pwwrk = mapl~werks
INNER JOIN plpo ON mapl~werks = plpo~werks AND mapl~plnnr = plpo~plnnr
WHERE
plaf~pwwrk = p_pwwrk"工厂"
AND plpo~ltxa1 <> ''
AND plaf~matnr IN p_matnr"物料编号"
AND plaf~plnum IN p_plnum"计划单号"
AND plaf~kdauf IN p_kdauf"销售订单"
AND mapl~plnnr IN p_plnnr"组"
ORDER BY plaf~plnum plaf~kdauf plaf~matnr mapl~plnnr "plpo~vornr
.
IF sy-subrc IS NOT INITIAL.
MESSAGE '没有数据' TYPE 'I'.
STOP.
ENDIF.
ENDFORM.
FORM func001.
itab-check = 'X'.
MODIFY itab FROM itab
TRANSPORTING check WHERE check = ''.
CLEAR itab.
ENDFORM.
FORM func002.
itab-check = ''.
MODIFY itab FROM itab
TRANSPORTING check WHERE check = 'X'.
CLEAR itab.
ENDFORM.
FORM func003.
READ TABLE itab WITH KEY check = 'X'. "是否有选中的记录
IF sy-subrc <> 0.
MESSAGE '请选择' TYPE 'S'.
ENDIF.
SELECT
DISTINCT
plaf~pwwrk"工厂"
plaf~plnum"计划单号"
plaf~kdauf"销售订单"
plaf~kdpos
plaf~matnr"物料"
makt~maktx"物料描述"
mapl~plnnr"组"
plpo~vornr"工序编号"
plpo~ltxa1"工序名字"
plaf~pedtr"计划完工日期"
plpo~annam"创建者"
plaf~gsmng"数量"
plpo~vgw02"工时"
plpo~vge02"单位"
plpo~vgw03"计时工资"
plpo~vge03"单位"
plpo~vgw04"计件工资"
plpo~vge04"单位"
plpo~vgw06"其他间接费用"
plpo~vge06"单位"
INTO CORRESPONDING FIELDS OF TABLE itab001
FROM plaf
INNER JOIN makt ON plaf~matnr = makt~matnr
INNER JOIN mapl ON plaf~matnr = mapl~matnr AND plaf~pwwrk = mapl~werks
INNER JOIN plpo ON mapl~werks = plpo~werks AND mapl~plnnr = plpo~plnnr
WHERE
plaf~pwwrk = p_pwwrk"工厂"
AND plpo~ltxa1 <> ''
AND plaf~matnr IN p_matnr"物料编号"
AND plaf~plnum IN p_plnum"计划单号"
AND plaf~kdauf IN p_kdauf"销售订单"
AND mapl~plnnr IN p_plnnr"组"
ORDER BY plaf~plnum plaf~kdauf plaf~matnr mapl~plnnr plpo~vornr
.
DATA: printab LIKE TABLE OF itab WITH HEADER LINE.
DATA: it_head LIKE TABLE OF zspp001head WITH HEADER LINE,
it_item LIKE TABLE OF zspp001detail WITH HEADER LINE.
"获取选中的数据"
LOOP AT itab WHERE check <> ''.
INSERT itab INTO TABLE printab.
ENDLOOP.
"调用打印
DATA:ls_ssfcompop TYPE ssfcompop,
ls_ssfctrlop TYPE ssfctrlop.
ls_ssfctrlop-no_open = 'X'.
ls_ssfctrlop-no_close = 'X'.
ls_ssfctrlop-preview = 'X'.
ls_ssfctrlop-no_dialog = 'X'.
CLEAR:it_head,it_item.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
control_parameters = ls_ssfctrlop
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
* DELETE ADJACENT DUPLICATES FROM printab COMPARING pwwrk kdauf kdpos matnr plnum plnnr."去重复
LOOP AT printab.
MOVE-CORRESPONDING printab TO it_head.
APPEND: it_head.
LOOP AT itab001 WHERE pwwrk = printab-pwwrk
AND kdauf = printab-kdauf
AND kdpos = printab-kdpos
AND matnr = printab-matnr
AND plnum = printab-plnum
AND plnnr = printab-plnnr.
MOVE-CORRESPONDING itab001 TO it_item.
APPEND: it_item.
ENDLOOP.
DATA fm_name TYPE rs38l_fnam.
fm_name = 'ZLHFR001'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = fm_name
variant = ' '
direct_call = ' '
IMPORTING
fm_name = fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
CALL FUNCTION fm_name
EXPORTING
control_parameters = ls_ssfctrlop
TABLES
tb_detail = it_item
tb_head = it_head.
IF sy-subrc <> 0.
ENDIF.
CLEAR:it_item,it_item[],it_head,it_head[].
ENDLOOP.
CLEAR:it_head,it_item,it_head[],it_item[],itab.
CALL FUNCTION 'SSF_CLOSE'.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含 ZPPRP027ALV
*&---------------------------------------------------------------------*
FORM SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'ZPPRP027STATUS' EXCLUDING RT_EXTAB .
ENDFORM.
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA: L_VALID TYPE C.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LR_GRID.
CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
RS_SELFIELD-REFRESH = 'X'.
READ TABLE ITAB INDEX rs_selfield-tabindex.
CASE R_UCOMM.
WHEN '&FUNC001'.
PERFORM FUNC001.
WHEN '&FUNC002'.
PERFORM FUNC002.
WHEN '&FUNC003'.
PERFORM FUNC003.
ENDCASE.
ENDFORM.
FORM FIELDS_BUILD CHANGING M_FIELDCAT TYPE LVC_T_FCAT.
PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'CHECK' '选择' '' '' '' '' 'X' 'X' '' '' .
PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'PWWRK' '工厂' '' '' '' '' '' '' '' '' .
PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'PLNUM' '计划单号' '' '' '' '' '' '' '' '' .
PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'KDAUF' '销售订单' '' '' '' '' '' '' '' '' .
PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'MATNR' '物料' '' '' '' '' '' '' '' '' .
PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'MAKTX' '物料描述' '' '' '' '' '' '' '' '' .
PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'PLNNR' '组' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VORNR' '工序编号' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'LTXA1' '工序名字' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'PEDTR' '计划完工日期' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'ANNAM' '创建者' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'GSMNG' '数量' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGW02' '工时' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGE02' '单位' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGW03' '计时工资' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGE03' '单位' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGW04' '计件工资' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGE04' '单位' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGW06' '其他间接费用' '' '' '' '' '' '' '' '' .
* PERFORM FRM_FIELDCAT_INIT TABLES M_FIELDCAT USING 'VGE06' '单位' '' '' '' '' '' '' '' '' .
ENDFORM.
FORM FRM_FIELDCAT_INIT TABLES T_FIELDCAT TYPE LVC_T_FCAT
USING FIELDNAME TYPE C " 字段名
SCRTEXT_M TYPE C " 标题
COL_POS TYPE I " 所在列
OUTPUTLEN TYPE I " 输出长度
EMPHASIZE TYPE C " 高亮显示
KEY TYPE C " 主键
CHECKBOX TYPE C
EDIT TYPE C
FIX_COLUMN TYPE C " 固定列
NO_ZERO TYPE C.
DATA: LS_FIELDCAT TYPE LVC_S_FCAT.
LS_FIELDCAT-FIELDNAME = FIELDNAME.
LS_FIELDCAT-SCRTEXT_M = SCRTEXT_M.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-OUTPUTLEN = OUTPUTLEN.
LS_FIELDCAT-EMPHASIZE = EMPHASIZE.
LS_FIELDCAT-KEY = KEY.
LS_FIELDCAT-CHECKBOX = CHECKBOX.
LS_FIELDCAT-EDIT = EDIT.
LS_FIELDCAT-FIX_COLUMN = FIX_COLUMN.
LS_FIELDCAT-NO_ZERO = NO_ZERO.
APPEND LS_FIELDCAT TO T_FIELDCAT.
CLEAR LS_FIELDCAT.
ENDFORM.
FORM ALV_SHOW.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG " /SY-REPID " 程式名称
I_CALLBACK_PF_STATUS_SET = 'SET_STATUS' "GUI状态
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' " 自定义工具栏的事件
IT_FIELDCAT_LVC = IT_FIELDCAT[] " 必须要设置的参数 , 设定输出目录
IS_LAYOUT_LVC = GS_LAYOUT " 对输出样式的设定
TABLES
T_OUTTAB = ITAB "ALV 输出的内表
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS.
ENDFORM.