*----------------------------------------------------------------------*
* 程序的事务代码:
* 程序名称: 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