REPORT zmmd0063.
INCLUDE zmmd0063_top.
INCLUDE zmmd0063_c01.
INCLUDE zmmd0063_f01.
INCLUDE zmmd0063_i01.
INCLUDE zmmd0063_o01.
*&---------------------------------------------------------------------*
*& 包含 ZMMR0063_TOP
*&---------------------------------------------------------------------*
TABLES:ztmm0063_2.
*-----------------------------------------------------------------------
* ALV DECLARATIONS
*-----------------------------------------------------------------------
CLASS lcl_alv_grid DEFINITION DEFERRED.
CLASS lcl_alv_event_handler DEFINITION DEFERRED.
DATA: gv_event_handler TYPE REF TO lcl_alv_event_handler,
gv_docking_container TYPE REF TO cl_gui_docking_container,
gv_grid TYPE REF TO lcl_alv_grid,
gs_alv_variant LIKE disvariant,
gt_exclude TYPE ui_functions,
gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat,
gs_layout TYPE lvc_s_layo,
gs_sort TYPE lvc_s_sort,
gt_sort TYPE lvc_t_sort,
ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
DATA: gt_cellstyle TYPE lvc_t_styl,
gs_cellstyle TYPE lvc_s_styl.
TYPES:BEGIN OF gty_output,
mblnr101 TYPE ztmm0063_2-mblnr101, "物料凭证
zeile101 TYPE ztmm0063_2-zeile101, "物料凭证项目
matnr TYPE ztmm0063_2-matnr, "物料编码
werks101 TYPE ztmm0063_2-werks101, "工厂
lgort101 TYPE ztmm0063_2-lgort101, "库存地点
lifnr TYPE ztmm0063_2-lifnr, "供应商
menge101 TYPE ztmm0063_2-menge101, "数量
meins TYPE ztmm0063_2-meins, "计量单位
ebeln TYPE ztmm0063_2-ebeln, "采购订单
ebelp TYPE ztmm0063_2-ebelp, "采购订单项目
budat101 TYPE ztmm0063_2-budat101, "过账日期
cpudt101 TYPE ztmm0063_2-cpudt101, "录入日期
cputm101 TYPE ztmm0063_2-cputm101, "录入时间
usnam101 TYPE ztmm0063_2-usnam101, "操作人
werks343 TYPE ztmm0063_2-werks343, "工厂
lgort343 TYPE ztmm0063_2-lgort343, "库存地点
menge343 TYPE ztmm0063_2-menge343, "解冻数量
budat343 TYPE ztmm0063_2-budat343, "解冻过账日期
ablad TYPE ztmm0063_2-ablad, "解冻物流单
insmk TYPE ztmm0063_2-insmk, "库存类型
elikz TYPE ztmm0063_2-elikz, "交货已完成标识
menge TYPE ztmm0063_2-menge101,
cellstyle TYPE lvc_t_styl, "单元格样式
END OF gty_output.
DATA:gt_output TYPE STANDARD TABLE OF gty_output,
gs_output TYPE gty_output.
TYPES:BEGIN OF gty_menge,
mblnr101 TYPE ztmm0063_2-mblnr101, "物料凭证
zeile101 TYPE ztmm0063_2-zeile101, "物料凭证项目
menge343 TYPE ztmm0063_2-menge343, "解冻数量
END OF gty_menge.
DATA:gt_menge TYPE STANDARD TABLE OF gty_menge,
gs_menge TYPE gty_menge.
*定义选择屏幕
SELECTION-SCREEN:BEGIN OF BLOCK a1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_werks TYPE ztmm0063_2-werks101 OBLIGATORY.
SELECT-OPTIONS:s_matnr FOR ztmm0063_2-matnr,
s_ebeln FOR ztmm0063_2-ebeln,
s_ebelp FOR ztmm0063_2-ebelp.
PARAMETERS:p_mblnr TYPE ztmm0063_2-mblnr101.
SELECT-OPTIONS:s_budat FOR ztmm0063_2-budat101,
s_cpudt FOR ztmm0063_2-cpudt101.
PARAMETERS:p_usnam TYPE ztmm0063_2-usnam101.
SELECTION-SCREEN:END OF BLOCK a1.
START-OF-SELECTION.
PERFORM frm_process_data.
END-OF-SELECTION.
IF gt_output[] IS INITIAL.
MESSAGE s001(zmm0001) DISPLAY LIKE 'E' WITH TEXT-e01.
"没有冷冻的库存
ELSE.
CALL SCREEN 9000.
ENDIF.
*&---------------------------------------------------------------------*
*& 包含 ZMMR0063_C01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* LOCAL CLASSES: Definition
*&---------------------------------------------------------------------*
CLASS lcl_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.
PUBLIC SECTION.
METHODS: set_optimize_all_cols.
ENDCLASS. "LCL_ALV_GRID DEFINITION
*---------------------------------------------------------------------*
* CLASS LCL_ALV_GRID IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_alv_grid IMPLEMENTATION.
METHOD set_optimize_all_cols.
CALL METHOD me->optimize_all_cols
EXPORTING
include_header = 1.
ENDMETHOD. "SET_OPTIMIZE_ALL_COLS
ENDCLASS. "LCL_ALV_GRID IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS LCL_ALV_EVENT_HANDLER DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_alv_event_handler DEFINITION.
PUBLIC SECTION.
DATA: go_object_name(30) TYPE c.
METHODS :
constructor IMPORTING e_object_text TYPE c,
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object
e_interactive,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS. "LCL_ALV_EVENT_HANDLER DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_ALV_EVENT_HANDLER IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_alv_event_handler IMPLEMENTATION.
METHOD constructor.
go_object_name = e_object_text.
ENDMETHOD. "constructor
"
METHOD handle_toolbar.
PERFORM frm_toolbar_pros USING e_object
e_interactive.
ENDMETHOD. "handle_toolbar
METHOD handle_user_command.
PERFORM frm_user_command_pros USING e_ucomm.
ENDMETHOD. "handle_user_command
METHOD handle_data_changed.
PERFORM frm_data_changed USING er_data_changed.
ENDMETHOD.
ENDCLASS. "LCL_ALV_EVENT_HANDLER IMPLEMENTATION
*&---------------------------------------------------------------------*
*& 包含 ZMMR0063_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_create_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_create_alv .
IF NOT gv_grid IS INITIAL.
CALL METHOD gv_grid->free.
ENDIF.
* Create Main Container
CREATE OBJECT gv_docking_container
EXPORTING
dynnr = '9000'
repid = sy-repid
side = gv_docking_container->dock_at_top
extension = 200
ratio = 100
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
CREATE OBJECT gv_grid
EXPORTING
i_parent = gv_docking_container.
* Variant
PERFORM frm_init_variant.
* Output Fields
PERFORM frm_set_field_catalogs.
* Set GRID Layout Attribute
PERFORM frm_display_layout_attribute USING gs_layout.
* Exclude Tool Bar From Grid1
PERFORM frm_exclude_tb_functions.
* Register Event For Grid1
PERFORM frm_event_handler_register USING gv_grid 'OBJ'.
* ALV Grid Display
PERFORM frm_alv_grid_display.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM frm_init_variant
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_init_variant .
DATA: lv_handle TYPE slis_handl.
lv_handle = '9000'.
gs_alv_variant-handle = lv_handle.
gs_alv_variant-report = sy-repid.
gs_alv_variant-username = sy-uname.
ENDFORM. " FRM_INIT_VARIANT
*&---------------------------------------------------------------------*
*& FORM frm_set_field_catalogs
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_field_catalogs.
DATA: lv_fieldname TYPE lvc_fname,
lv_coltext TYPE lvc_txtcol.
DATA: lv_pos TYPE i.
CLEAR:gs_fieldcat,gt_fieldcat[].
REFRESH gt_fieldcat.
DEFINE set_outtab.
lv_pos = lv_pos + 1.
gs_fieldcat-col_pos = lv_pos.
gs_fieldcat-fieldname = &1.
gs_fieldcat-coltext = &2.
IF gs_fieldcat-fieldname = 'MENGE343'.
gs_fieldcat-ref_table = 'EKPO'.
gs_fieldcat-ref_field = 'MENGE'.
ENDIF.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
END-OF-DEFINITION.
set_outtab:
'MBLNR101' TEXT-100,"物料凭证
'ZEILE101' TEXT-101,"物料凭证项目
'MATNR' TEXT-102,"物料编码
'WERKS101' TEXT-103,"工厂
'LGORT101' TEXT-104,"库存地点
'LIFNR' TEXT-105,"供应商
'MENGE101' TEXT-106,"数量
'MEINS' TEXT-107,"计量单位
'EBELN' TEXT-108,"采购订单
'EBELP' TEXT-109,"采购订单项目
'BUDAT101' TEXT-110,"过账日期
'CPUDT101' TEXT-111,"录入日期
'CPUTM101' TEXT-112,"录入时间
'USNAM101' TEXT-113,"操作人
'WERKS343' TEXT-114,"工厂
'LGORT343' TEXT-115,"库存地点
'MENGE343' TEXT-116,"解冻数量
'BUDAT343' TEXT-117,"解冻过账日期
'ABLAD' TEXT-118."解冻物流单
ENDFORM. " FRM_SET_FIELD_CATALOGS
*&---------------------------------------------------------------------*
*& FORM frm_display_layout_attribute
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
* -->p_gs_layocat1 text
*----------------------------------------------------------------------*
FORM frm_display_layout_attribute USING p_layocat TYPE lvc_s_layo.
p_layocat-cwidth_opt = 'X'.
p_layocat-sel_mode = 'A'.
p_layocat-smalltitle = ' '.
p_layocat-zebra = ' '.
p_layocat-no_rowmark = ' '.
p_layocat-no_headers = ' '.
p_layocat-no_vgridln = ' '.
p_layocat-no_hgridln = ' '.
p_layocat-stylefname = 'CELLSTYLE'.
ENDFORM. " FRM_DISPLAY_LAYOUT_ATTRIBUTE
*&---------------------------------------------------------------------*
*& FORM frm_exclude_tb_functions
*&---------------------------------------------------------------------*
* Text (控制按钮隐藏显示)
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_exclude_tb_functions .
DEFINE exclude_fcode.
APPEND &1 TO gt_exclude.
END-OF-DEFINITION.
REFRESH gt_exclude.
exclude_fcode: cl_gui_alv_grid=>mc_fc_loc_copy_row,
cl_gui_alv_grid=>mc_fc_loc_delete_row,
cl_gui_alv_grid=>mc_fc_loc_append_row,
cl_gui_alv_grid=>mc_fc_loc_insert_row,
cl_gui_alv_grid=>mc_fc_loc_move_row,
cl_gui_alv_grid=>mc_fc_loc_paste_new_row,
cl_gui_alv_grid=>mc_fc_loc_paste,
cl_gui_alv_grid=>mc_fc_loc_undo,
cl_gui_alv_grid=>mc_fc_loc_copy,
cl_gui_alv_grid=>mc_fc_loc_cut,
cl_gui_alv_grid=>mc_fc_refresh.
ENDFORM. " FRM_EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& FORM frm_event_handler_register
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->lo_grid text
* -->lv_obj text
*----------------------------------------------------------------------*
FORM frm_event_handler_register USING lo_grid TYPE REF TO lcl_alv_grid
lv_obj TYPE char30.
CREATE OBJECT gv_event_handler
EXPORTING
e_object_text = lv_obj.
CALL METHOD gv_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CALL METHOD gv_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
CALL METHOD gv_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
SET HANDLER gv_event_handler->handle_data_changed FOR lo_grid.
SET HANDLER gv_event_handler->handle_toolbar FOR lo_grid.
SET HANDLER gv_event_handler->handle_user_command FOR lo_grid.
ENDFORM. "FRM_EVENT_HANDLER_REGISTER
*&---------------------------------------------------------------------*
*& FORM frm_alv_grid_display
*&---------------------------------------------------------------------*
* alv##
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_alv_grid_display .
CALL METHOD gv_grid->set_table_for_first_display
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = gt_exclude
i_save = 'A'
is_variant = gs_alv_variant
CHANGING
it_fieldcatalog = gt_fieldcat
it_sort = gt_sort[]
it_outtab = gt_output.
ENDFORM. " FRM_ALV_GRID_DISPLAY
*&---------------------------------------------------------------------*
*& FORM frm_refresh_alv
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_refresh_alv .
DATA: ls_scroll TYPE lvc_s_stbl.
ls_scroll-row = 'X'.
ls_scroll-col = 'X'.
CALL METHOD gv_grid->refresh_table_display
EXPORTING
* i_soft_refresh = 'X'
is_stable = ls_scroll.
CALL METHOD cl_gui_cfw=>flush.
CALL METHOD gv_grid->set_optimize_all_cols.
ENDFORM. " FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
*& Form frm_process_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process_data .
"设置单元格样式
PERFORM frm_set_cellstyle.
"查询要解冻的库存
SELECT mblnr101
zeile101
matnr
werks101
lgort101
insmk
lifnr
menge101
menge343
meins
ebeln
ebelp
budat101
cpudt101
cputm101
usnam101
elikz
FROM ztmm0063_2
INTO CORRESPONDING FIELDS OF TABLE gt_output
WHERE werks101 = p_werks
AND mblnr101 = p_mblnr
AND usnam101 = p_usnam
AND elikz = ''
AND matnr IN s_matnr
AND ebeln IN s_ebeln
AND ebelp IN s_ebelp
AND budat101 IN s_budat
AND cpudt101 IN s_cpudt.
CHECK gt_output[] IS NOT INITIAL.
LOOP AT gt_output INTO gs_output.
gs_menge-mblnr101 = gs_output-mblnr101.
gs_menge-zeile101 = gs_output-zeile101.
gs_menge-menge343 = gs_output-menge343.
COLLECT gs_menge INTO gt_menge.
ENDLOOP.
SORT gt_menge BY mblnr101 zeile101 menge343 DESCENDING.
DELETE ADJACENT DUPLICATES FROM gt_menge COMPARING mblnr101 zeile101.
SORT gt_output BY mblnr101 zeile101.
DELETE ADJACENT DUPLICATES FROM gt_output COMPARING mblnr101 zeile101.
LOOP AT gt_output INTO gs_output.
gs_output-werks343 = gs_output-werks101.
gs_output-lgort343 = gs_output-lgort101.
IF gs_output-elikz = ''.
READ TABLE gt_menge INTO gs_menge
WITH KEY mblnr101 = gs_output-mblnr101
zeile101 = gs_output-zeile101
BINARY SEARCH.
IF sy-subrc EQ 0.
gs_output-menge343 = gs_output-menge101 - gs_menge-menge343.
gs_output-budat343 = sy-datum.
ENDIF.
gs_output-cellstyle = gt_cellstyle[].
ENDIF.
MODIFY gt_output FROM gs_output.
CLEAR gs_output.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_CELLSTYLE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_cellstyle .
REFRESH gt_cellstyle.
gs_cellstyle-fieldname = 'ABLAD'.
gs_cellstyle-style = cl_gui_alv_grid=>mc_style_enabled.
APPEND gs_cellstyle TO gt_cellstyle.
CLEAR gs_cellstyle.
gs_cellstyle-fieldname = 'BUDAT343'.
gs_cellstyle-style = cl_gui_alv_grid=>mc_style_enabled.
APPEND gs_cellstyle TO gt_cellstyle.
CLEAR gs_cellstyle.
gs_cellstyle-fieldname = 'MENGE343'.
gs_cellstyle-style = cl_gui_alv_grid=>mc_style_enabled.
APPEND gs_cellstyle TO gt_cellstyle.
CLEAR gs_cellstyle.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_toolbar_pros
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_OBJECT
*& --> E_INTERACTIVE
*&---------------------------------------------------------------------*
FORM frm_toolbar_pros USING po_object
TYPE REF TO cl_alv_event_toolbar_set
pv_interactive TYPE char01.
DATA: ls_toolbar TYPE stb_button.
ls_toolbar-function = 'INSERT'.
ls_toolbar-icon = icon_insert_row.
ls_toolbar-text = '插入数据'.
ls_toolbar-quickinfo = '插入数据'.
APPEND ls_toolbar TO po_object->mt_toolbar.
CLEAR ls_toolbar.
ls_toolbar-function = 'UNLOCKED'.
ls_toolbar-icon = icon_unlocked.
ls_toolbar-text = '解冻库存'.
ls_toolbar-quickinfo = '解冻库存'.
APPEND ls_toolbar TO po_object->mt_toolbar.
CLEAR ls_toolbar.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_user_command_pros
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_UCOMM
*&---------------------------------------------------------------------*
FORM frm_user_command_pros USING pv_ucomm TYPE sy-ucomm.
CASE pv_ucomm.
WHEN 'INSERT'.
"插入数据
PERFORM frm_insert_line.
WHEN 'UNLOCKED'.
"保存数据,更新数据库表
PERFORM frm_update_table.
WHEN OTHERS.
ENDCASE.
"刷新ALV
PERFORM frm_refresh_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_update_table
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_update_table .
DATA:lt_rows TYPE lvc_t_row,
ls_rows TYPE lvc_s_row,
lt_mm0063_2 TYPE TABLE OF ztmm0063_2,
ls_mm0063_2 TYPE ztmm0063_2,
lv_mblnr TYPE ztmm0063_2-mblnr101,
lv_zeile TYPE ztmm0063_2-zeile101,
lv_lines TYPE i,
lv_menge TYPE ztmm0063_2-menge101.
*使用bapi需要用到的
"Import
DATA: gs_goodsmvt_header TYPE bapi2017_gm_head_01,
gv_goodsmvt_code TYPE bapi2017_gm_code.
"Export
DATA: gs_goodsmvt_headref TYPE bapi2017_gm_head_ret.
"Table
DATA: gt_goodsmvt_item TYPE TABLE OF bapi2017_gm_item_create,
wa_goodsmvt_item TYPE bapi2017_gm_item_create,
gt_return TYPE TABLE OF bapiret2,
wa_return TYPE bapiret2.
DATA: lv_error TYPE c.
CLEAR:ls_rows,ls_mm0063_2,lv_lines,lv_menge,lv_mblnr,
lv_zeile.
REFRESH:lt_rows,lt_mm0063_2.
CALL METHOD gv_grid->get_selected_rows
IMPORTING
et_index_rows = lt_rows.
lv_lines = lines( lt_rows ).
IF lv_lines NE 1.
MESSAGE s001(zmm0001) WITH TEXT-e04 DISPLAY LIKE 'E'.
"请选择一条数据
EXIT.
ENDIF.
READ TABLE lt_rows INDEX 1 INTO ls_rows.
CHECK sy-subrc EQ 0.
READ TABLE gt_output INDEX ls_rows-index INTO gs_output.
IF sy-subrc EQ 0.
READ TABLE gt_menge INDEX 1 INTO gs_menge.
"可解冻库存
IF sy-subrc EQ 0.
lv_menge = gs_output-menge101 - gs_menge-menge343.
ELSE.
lv_menge = gs_output-menge101.
ENDIF.
IF gs_output-menge343 > lv_menge.
MESSAGE s001(zmm0001) WITH TEXT-e02 DISPLAY LIKE 'E'.
"累计解冻数量大于冻结收货数量,请修改后保存!
ELSE.
"Goods Move
"Header
gs_goodsmvt_header-pstng_date = sy-datum.
gs_goodsmvt_header-doc_date = sy-datum.
"GM Code
gv_goodsmvt_code = '06'. "收货
"Item
wa_goodsmvt_item-material = gs_output-matnr. "物料
wa_goodsmvt_item-plant = gs_output-werks101. "工厂
wa_goodsmvt_item-stge_loc = gs_output-lgort101. "库存地点
wa_goodsmvt_item-move_type = '343'. "移动类型 343
wa_goodsmvt_item-entry_qnt = gs_output-menge343. "交货数量
wa_goodsmvt_item-entry_uom = gs_output-meins. "销售单位
wa_goodsmvt_item-entry_uom_iso = gs_output-meins. "基本的单位
APPEND wa_goodsmvt_item TO gt_goodsmvt_item.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = gs_goodsmvt_header
goodsmvt_code = gv_goodsmvt_code
IMPORTING
goodsmvt_headret = gs_goodsmvt_headref
TABLES
goodsmvt_item = gt_goodsmvt_item
return = gt_return.
LOOP AT gt_return INTO wa_return WHERE type CA 'AEX'.
IF sy-subrc = 0.
lv_error = 'E'.
EXIT.
ENDIF.
ENDLOOP.
IF lv_error EQ 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
MESSAGE '过账失败' TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
MESSAGE '过账成功' TYPE 'S'.
"保存解冻记录
PERFORM frm_save_record USING gs_goodsmvt_headref
ls_rows-index.
ENDIF.
ENDIF.
ENDIF.
FREE:lt_rows,lt_mm0063_2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_insert_line
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_insert_line .
CLEAR gs_output.
READ TABLE gt_output INDEX 1 INTO gs_output.
IF sy-subrc EQ 0.
READ TABLE gt_menge INTO gs_menge
WITH KEY mblnr101 = gs_output-mblnr101
zeile101 = gs_output-zeile101
BINARY SEARCH.
IF sy-subrc EQ 0.
gs_output-menge343 = gs_output-menge101 - gs_menge-menge343.
gs_output-ablad = ''.
gs_output-budat343 = sy-datum.
gs_output-cellstyle = gt_cellstyle[].
IF gs_output-menge101 = gs_menge-menge343.
MESSAGE s001(zmm0001) WITH TEXT-s01 DISPLAY LIKE 'E'.
"解冻已完成
EXIT.
ENDIF.
ENDIF.
APPEND gs_output TO gt_output.
CLEAR gs_output.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_data_changed
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> ER_DATA_CHANGED
*&---------------------------------------------------------------------*
FORM frm_data_changed USING
po_data_changed TYPE REF TO cl_alv_changed_data_protocol.
DATA:lt_modi TYPE lvc_t_modi,
ls_modi TYPE lvc_s_modi,
lv_menge TYPE ztmm0063_2-menge101.
CLEAR:ls_modi,lv_menge.
REFRESH:lt_modi.
LOOP AT po_data_changed->mt_mod_cells INTO ls_modi.
CASE ls_modi-fieldname.
WHEN 'MENGE343'.
CALL METHOD po_data_changed->get_cell_value
EXPORTING
i_row_id = ls_modi-row_id
i_fieldname = ls_modi-fieldname
IMPORTING
e_value = lv_menge.
CLEAR gs_output.
READ TABLE gt_output INDEX ls_modi-row_id INTO gs_output.
IF sy-subrc EQ 0.
READ TABLE gt_menge INTO gs_menge
WITH KEY mblnr101 = gs_output-mblnr101
zeile101 = gs_output-zeile101
BINARY SEARCH.
IF sy-subrc EQ 0.
IF lv_menge > gs_output-menge101 - gs_menge-menge343.
CALL METHOD po_data_changed->add_protocol_entry
EXPORTING
i_msgid = 'ZMM0001'
i_msgty = 'E'
i_msgno = '000'
i_msgv1 = TEXT-e02
i_fieldname = ls_modi-fieldname
i_row_id = ls_modi-row_id.
ENDIF.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
FREE:lt_modi.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_save_record
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GS_GOODSMVT_HEADREF
*&---------------------------------------------------------------------*
FORM frm_save_record USING ps_goodsmvt TYPE bapi2017_gm_head_ret
pv_index.
DATA:ls_mm0063_2 TYPE ztmm0063_2,
lv_zeile TYPE ztmm0063_2-zeile101.
CLEAR:ls_mm0063_2,lv_zeile.
SELECT SINGLE MAX( zeile343 )
FROM ztmm0063_2
INTO lv_zeile
where mblnr343 = ps_goodsmvt-mat_doc
GROUP BY mblnr343.
CLEAR gs_output-cellstyle[].
MODIFY gt_output FROM gs_output INDEX pv_index.
MOVE-CORRESPONDING gs_output TO ls_mm0063_2.
ls_mm0063_2-mandt = sy-mandt.
ls_mm0063_2-mblnr343 = ps_goodsmvt-mat_doc.
ls_mm0063_2-zeile343 = lv_zeile + 1.
ls_mm0063_2-cpudt343 = sy-datum.
ls_mm0063_2-cputm343 = sy-uzeit.
ls_mm0063_2-usnam343 = sy-uname.
MODIFY ztmm0063_2 FROM ls_mm0063_2.
IF gs_output-menge343 = gs_output-menge101 - gs_menge-menge343.
"相同物料收货冻结凭证&行项目下的累计MENGE343=MENGE101时,
"所有MBLNE101 & ZEILE101相关行项目的ELIKZ解冻完成标识更新为“X”
UPDATE ztmm0063_2
SET elikz = 'X'
WHERE mblnr101 = gs_output-mblnr101
AND zeile101 = gs_output-zeile101.
ENDIF.
"更新累计解冻数量
gs_menge-menge343 = gs_menge-menge343 + gs_output-menge343.
MODIFY gt_menge FROM gs_menge INDEX 1.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含 ZMMR0063_I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit_command INPUT.
LEAVE TO SCREEN 0.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
save_ok = ok_code.
CASE save_ok.
WHEN 'EXIT' OR 'BACK' OR 'CANCEL'.
LEAVE TO SCREEN 0.
ENDCASE.
CLEAR: save_ok,ok_code.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZMMR0063_O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
DATA: lv_title TYPE string.
CLEAR: lv_title.
lv_title = '海外BG收货冻结库存解冻入库'.
SET PF-STATUS '9000'.
SET TITLEBAR '9000' WITH lv_title.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CREATE_ALV_GRID OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE create_alv_grid OUTPUT.
IF gv_docking_container IS INITIAL.
PERFORM frm_create_alv.
ELSE.
PERFORM frm_refresh_alv.
ENDIF.
ENDMODULE.