*----------------------------------------------------------------------*
* 程序的事务代码:
* 程序名称: Z_MM_EXEC_MODIFYSOURCE
* 时间 : 2018-01-25
* 描述 : 根据输入条件修改货源清单中的MRP字段
*----------------------------------------------------------------------*
REPORT z_mm_exec_modifysource.
TABLES: eord.
* ALV定义
TYPE-POOLS: slis.
TABLES: mmim_rep_print.
* Global variables for handling ALV functionality
DATA: alv_keyinfo TYPE slis_keyinfo_alv,
alv_variant LIKE disvariant,
alv_layout TYPE slis_layout_alv,
alv_repid LIKE sy-repid,
alv_print TYPE slis_print_alv,
alv_events TYPE slis_t_event,
alv_detail_func(30).
DATA: fieldcat TYPE slis_t_fieldcat_alv,
fcs TYPE slis_fieldcat_alv.
DATA: w_index LIKE sy-tabix.
DATA: i_xeord LIKE eordu OCCURS 0 WITH HEADER LINE. "存放要修改的数据
DATA: i_yeord LIKE eord OCCURS 0 WITH HEADER LINE. "数据库中的未修改前的数据
DATA: BEGIN OF i_result OCCURS 0,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
ekorg LIKE eord-ekorg,
autet LIKE eord-autet,
info(30) TYPE c,
END OF i_result.
****************** 输入屏幕 ********************************************
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_matnr FOR eord-matnr,
s_werks FOR eord-werks,
s_ekorg FOR eord-ekorg.
PARAMETERS: p_autet LIKE eord-autet.
SELECTION-SCREEN END OF BLOCK bk1.
INITIALIZATION.
TOP-OF-PAGE.
START-OF-SELECTION.
PERFORM get_eord_data.
PERFORM modify_eord.
END-OF-SELECTION.
PERFORM alv_output.
*&---------------------------------------------------------------------*
*& Form GET_EORD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_eord_data .
SELECT *
FROM eord
INTO TABLE i_yeord
WHERE matnr IN s_matnr
AND werks IN s_werks
AND ekorg IN s_ekorg
AND vdatu <= sy-datum
AND bdatu >= sy-datum.
IF i_yeord[] IS INITIAL.
MESSAGE '没有对应的货源清单!请检查...' TYPE 'S'.
LEAVE LIST-PROCESSING.
ENDIF.
* 更改autet字段为指定值
LOOP AT i_yeord.
CLEAR i_xeord.
MOVE-CORRESPONDING i_yeord TO i_xeord.
i_xeord-autet = p_autet.
APPEND i_xeord.
ENDLOOP.
ENDFORM. " GET_EORD_DATA
*&---------------------------------------------------------------------*
*& Form MODIFY_EORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM modify_eord .
CLEAR: i_yeord, i_xeord.
CHECK NOT i_yeord[] IS INITIAL.
* 更改货源清单
CALL FUNCTION 'ME_UPDATE_SOURCES_OF_SUPPLY'
EXPORTING
i_changedocument = 'X'
TABLES
xeord = i_xeord
yeord = i_yeord.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.
* 取未更新成功的记录
SELECT matnr
werks
ekorg
autet
FROM eord
INTO TABLE i_result
WHERE matnr IN s_matnr
AND werks IN s_werks
AND ekorg IN s_ekorg
AND autet <> p_autet
AND vdatu <= sy-datum
AND bdatu >= sy-datum.
LOOP AT i_result.
w_index = sy-tabix.
i_result-info = '修改货源清单不成功!'.
MODIFY i_result INDEX w_index TRANSPORTING info.
ENDLOOP.
IF i_result[] IS INITIAL.
LOOP AT i_yeord.
CLEAR i_result.
MOVE-CORRESPONDING i_yeord TO i_result.
i_result-autet = p_autet.
i_result-info = '更改货源清单成功!'.
APPEND i_result.
ENDLOOP.
ENDIF.
CLEAR: i_yeord, i_xeord.
REFRESH: i_yeord, i_xeord.
ENDFORM. " MODIFY_EORD
*&---------------------------------------------------------------------*
*& Form ALV_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_output .
* Define fieldcat initail macro
DEFINE ftaddg.
CLEAR fcs.
fcs-fieldname = &1.
fcs-tabname = &2.
fcs-seltext_l = &3.
fcs-outputlen = &4.
fcs-inttype = &5.
fcs-key = &6.
fcs-do_sum = &7.
APPEND fcs TO fieldcat.
END-OF-DEFINITION.
REFRESH fieldcat.
ftaddg 'MATNR' 'I_RESULT' '物料号' '18' '' '' ''.
ftaddg 'WERKS' 'I_RESULT' '工厂' '04' '' '' ''.
ftaddg 'EKORG' 'I_RESULT' '采购组织' '08' '' '' ''.
ftaddg 'AUTET' 'I_RESULT' 'MRP' '04' '' '' ''.
ftaddg 'INFO' 'I_RESULT' '信息' '30' '' '' ''.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = alv_repid
is_layout = alv_layout
it_events = alv_events
is_variant = alv_variant
* i_callback_pf_status_set = 'STATUS'
* i_callback_user_command = 'USER_COMMAND'
it_fieldcat = fieldcat
i_default = 'X'
i_save = 'A'
TABLES
t_outtab = i_result
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " ALV_OUTPUT
* 程序的事务代码:
* 程序名称: Z_MM_EXEC_MODIFYSOURCE
* 时间 : 2018-01-25
* 描述 : 根据输入条件修改货源清单中的MRP字段
*----------------------------------------------------------------------*
REPORT z_mm_exec_modifysource.
TABLES: eord.
* ALV定义
TYPE-POOLS: slis.
TABLES: mmim_rep_print.
* Global variables for handling ALV functionality
DATA: alv_keyinfo TYPE slis_keyinfo_alv,
alv_variant LIKE disvariant,
alv_layout TYPE slis_layout_alv,
alv_repid LIKE sy-repid,
alv_print TYPE slis_print_alv,
alv_events TYPE slis_t_event,
alv_detail_func(30).
DATA: fieldcat TYPE slis_t_fieldcat_alv,
fcs TYPE slis_fieldcat_alv.
DATA: w_index LIKE sy-tabix.
DATA: i_xeord LIKE eordu OCCURS 0 WITH HEADER LINE. "存放要修改的数据
DATA: i_yeord LIKE eord OCCURS 0 WITH HEADER LINE. "数据库中的未修改前的数据
DATA: BEGIN OF i_result OCCURS 0,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
ekorg LIKE eord-ekorg,
autet LIKE eord-autet,
info(30) TYPE c,
END OF i_result.
****************** 输入屏幕 ********************************************
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_matnr FOR eord-matnr,
s_werks FOR eord-werks,
s_ekorg FOR eord-ekorg.
PARAMETERS: p_autet LIKE eord-autet.
SELECTION-SCREEN END OF BLOCK bk1.
INITIALIZATION.
TOP-OF-PAGE.
START-OF-SELECTION.
PERFORM get_eord_data.
PERFORM modify_eord.
END-OF-SELECTION.
PERFORM alv_output.
*&---------------------------------------------------------------------*
*& Form GET_EORD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_eord_data .
SELECT *
FROM eord
INTO TABLE i_yeord
WHERE matnr IN s_matnr
AND werks IN s_werks
AND ekorg IN s_ekorg
AND vdatu <= sy-datum
AND bdatu >= sy-datum.
IF i_yeord[] IS INITIAL.
MESSAGE '没有对应的货源清单!请检查...' TYPE 'S'.
LEAVE LIST-PROCESSING.
ENDIF.
* 更改autet字段为指定值
LOOP AT i_yeord.
CLEAR i_xeord.
MOVE-CORRESPONDING i_yeord TO i_xeord.
i_xeord-autet = p_autet.
APPEND i_xeord.
ENDLOOP.
ENDFORM. " GET_EORD_DATA
*&---------------------------------------------------------------------*
*& Form MODIFY_EORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM modify_eord .
CLEAR: i_yeord, i_xeord.
CHECK NOT i_yeord[] IS INITIAL.
* 更改货源清单
CALL FUNCTION 'ME_UPDATE_SOURCES_OF_SUPPLY'
EXPORTING
i_changedocument = 'X'
TABLES
xeord = i_xeord
yeord = i_yeord.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.
* 取未更新成功的记录
SELECT matnr
werks
ekorg
autet
FROM eord
INTO TABLE i_result
WHERE matnr IN s_matnr
AND werks IN s_werks
AND ekorg IN s_ekorg
AND autet <> p_autet
AND vdatu <= sy-datum
AND bdatu >= sy-datum.
LOOP AT i_result.
w_index = sy-tabix.
i_result-info = '修改货源清单不成功!'.
MODIFY i_result INDEX w_index TRANSPORTING info.
ENDLOOP.
IF i_result[] IS INITIAL.
LOOP AT i_yeord.
CLEAR i_result.
MOVE-CORRESPONDING i_yeord TO i_result.
i_result-autet = p_autet.
i_result-info = '更改货源清单成功!'.
APPEND i_result.
ENDLOOP.
ENDIF.
CLEAR: i_yeord, i_xeord.
REFRESH: i_yeord, i_xeord.
ENDFORM. " MODIFY_EORD
*&---------------------------------------------------------------------*
*& Form ALV_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_output .
* Define fieldcat initail macro
DEFINE ftaddg.
CLEAR fcs.
fcs-fieldname = &1.
fcs-tabname = &2.
fcs-seltext_l = &3.
fcs-outputlen = &4.
fcs-inttype = &5.
fcs-key = &6.
fcs-do_sum = &7.
APPEND fcs TO fieldcat.
END-OF-DEFINITION.
REFRESH fieldcat.
ftaddg 'MATNR' 'I_RESULT' '物料号' '18' '' '' ''.
ftaddg 'WERKS' 'I_RESULT' '工厂' '04' '' '' ''.
ftaddg 'EKORG' 'I_RESULT' '采购组织' '08' '' '' ''.
ftaddg 'AUTET' 'I_RESULT' 'MRP' '04' '' '' ''.
ftaddg 'INFO' 'I_RESULT' '信息' '30' '' '' ''.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = alv_repid
is_layout = alv_layout
it_events = alv_events
is_variant = alv_variant
* i_callback_pf_status_set = 'STATUS'
* i_callback_user_command = 'USER_COMMAND'
it_fieldcat = fieldcat
i_default = 'X'
i_save = 'A'
TABLES
t_outtab = i_result
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " ALV_OUTPUT