*&---------------------------------------------------------------------*
*& Report ZMMR031*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr031.
TABLES : t001l , mard , mslb ,msku ,marc .
INCLUDE zmmf031_top.
INCLUDE zmmf031_scr.
INCLUDE zmmf031_frm.
START-OF-SELECTION .
"月度 年终
IF r_1 EQ 'X' OR r_2 EQ 'X' .
PERFORM: frm_get_data."获取数据
PERFORM: frm_process_data."处理数据.
PERFORM frm_display_data .
ENDIF .
"仓管员
IF r_5 EQ 'X' OR r_5A EQ 'X' . " 按仓管员代码
PERFORM: frm_get_data5."获取数据
PERFORM: frm_process_data5."处理数据.
PERFORM frm_display_data5 .
ENDIF .
" 供应商
IF r_3 EQ 'X' .
PERFORM: frm_get_data2."获取数据
PERFORM: frm_process_data2."处理数据.
PERFORM frm_display_data2 .
ENDIF .
"客户
IF r_4 EQ 'X' .
PERFORM: frm_get_data3."获取数据
PERFORM: frm_process_data3."处理数据.
PERFORM frm_display_data3 .
ENDIF .
*&---------------------------------------------------------------------*
*& 包含 ZMMF031_TOP
*&---------------------------------------------------------------------*
DATA: BEGIN OF gs_mard ,
matnr LIKE mard-matnr,
bismt LIKE mara-bismt,
zznme LIKE zmmt002-zznme,
maktx LIKE makt-maktx,
meins LIKE mara-meins,
werks LIKE mard-werks,
lgort LIKE mard-lgort,
lgobe LIKE t001l-lgobe,
labst LIKE mard-labst, " 非限制使用库存
speme LIKE mard-speme, "冻结库存
loggr LIKE marc-loggr,
END OF gs_mard .
DATA: gt_mard LIKE TABLE OF gs_mard .
DATA: BEGIN OF gs_mchb ,
matnr LIKE mchb-matnr,
bismt LIKE mara-bismt,
zznme LIKE zmmt002-zznme,
maktx LIKE makt-maktx,
meins LIKE mara-meins,
werks LIKE mchb-werks,
lgort LIKE mchb-lgort,
lgobe LIKE t001l-lgobe,
clabs LIKE mchb-clabs, "非限制
cspem LIKE mchb-cspem, " 冻结
loggr LIKE marc-loggr,
charg LIKE mchb-charg,
END OF gs_mchb .
DATA: gt_mchb LIKE TABLE OF gs_mchb .
DATA: BEGIN OF gs_out ,
matnr LIKE mard-matnr,
bismt LIKE mara-bismt,
zznme LIKE zmmt002-zznme,
maktx LIKE makt-maktx,
meins LIKE mara-meins,
werks LIKE mard-werks,
lgort LIKE mard-lgort,
lgobe LIKE t001l-lgobe,
labst LIKE mard-labst, " 非限制使用库存
speme LIKE mard-speme,
loggr LIKE marc-loggr,
charg LIKE mchb-charg,
zxh TYPE i,
mark ,
END OF gs_out .
DATA: gt_out LIKE TABLE OF gs_out .
DATA: BEGIN OF gs_mslb ," 供应商外包库存
lifnr LIKE mslb-lifnr,
matnr LIKE mslb-matnr,
bismt LIKE mara-bismt , " 旧料号
zznme LIKE zmmt002-zznme,
maktx LIKE makt-maktx,
meins LIKE mara-meins,
charg LIKE mslb-charg,
lblab LIKE mslb-lblab,
name_org4 LIKE but000-name_org4,
zxh TYPE i,
mark,
END OF gs_mslb .
DATA: gt_mslb LIKE TABLE OF gs_mslb .
DATA: BEGIN OF gs_msku ," 客户库存
kunnr LIKE msku-kunnr,
matnr LIKE msku-matnr,
bismt LIKE mara-bismt,
zznme LIKE zmmt002-zznme,
maktx LIKE makt-maktx,
meins LIKE mara-meins,
charg LIKE msku-charg,
kulab LIKE msku-kulab,
bu_sort1 LIKE but000-bu_sort1,
zxh TYPE i,
mark,
END OF gs_msku .
DATA: gt_msku LIKE TABLE OF gs_msku .
DATA: gt_fieldcat TYPE TABLE OF slis_fieldcat_alv.
DATA: gs_fieldcat TYPE slis_fieldcat_alv.
DATA: gs_layout TYPE slis_layout_alv .
DATA: g_fm_name TYPE rs38l_fnam.
DATA: gw_options TYPE ssfcompop,
gw_control TYPE ssfctrlop.
*&---------------------------------------------------------------------*
*& 包含 ZMMF031_SCR
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_werks FOR t001l-werks OBLIGATORY ,
s_lgort FOR t001l-lgort ,
s_matnr FOR mard-matnr ,
s_lifnr FOR mslb-lifnr ,
s_kunnr FOR msku-kunnr ,
s_loggr FOR marc-loggr .
PARAMETERS : r_1 RADIOBUTTON GROUP g1 .
PARAMETERS : r_5 RADIOBUTTON GROUP g1 .
PARAMETERS : r_2 RADIOBUTTON GROUP g1 .
PARAMETERS : r_5a RADIOBUTTON GROUP g1 .
PARAMETERS : r_3 RADIOBUTTON GROUP g1 .
PARAMETERS : r_4 RADIOBUTTON GROUP g1 .
*&---------------------------------------------------------------------*
*& 包含 ZMMF031_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
SELECT
a~matnr
d~bismt
e~zznme
b~maktx
d~meins
a~werks
a~lgort
c~lgobe
a~labst " 非限制使用库存
a~speme "冻结
f~loggr
INTO TABLE gt_mard
FROM mard AS a
INNER JOIN makt AS b ON a~matnr = b~matnr
INNER JOIN t001l AS c ON a~werks = c~werks AND a~lgort = c~lgort
INNER JOIN mara AS d ON a~matnr = d~matnr
INNER JOIN zmmt002 AS e ON a~matnr = e~matnr
INNER JOIN marc AS f ON a~matnr = f~matnr AND a~werks = f~werks
WHERE a~lgort IN s_lgort
AND c~werks EQ s_werks-low
AND a~matnr IN s_matnr
AND f~loggr IN s_loggr .
IF gt_mard IS NOT INITIAL .
SELECT
a~matnr
d~bismt
e~zznme
b~maktx
d~meins
a~werks
a~lgort
c~lgobe
a~clabs "非限制库存
a~cspem " 冻结
f~loggr
a~charg "评估类
INTO TABLE gt_mchb
FROM mchb AS a
INNER JOIN makt AS b ON a~matnr = b~matnr
INNER JOIN t001l AS c ON a~werks = c~werks AND a~lgort = c~lgort
INNER JOIN mara AS d ON a~matnr = d~matnr
INNER JOIN zmmt002 AS e ON a~matnr = e~matnr
INNER JOIN marc AS f ON a~matnr = f~matnr
FOR ALL ENTRIES IN gt_mard
WHERE a~matnr = gt_mard-matnr
AND a~lgort = gt_mard-lgort
AND f~loggr IN s_loggr
AND a~werks EQ s_werks-low .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process_data .
SORT gt_mchb BY matnr werks lgort .
DATA lv_tabix TYPE sy-tabix .
LOOP AT gt_mard INTO gs_mard .
CLEAR lv_tabix .
lv_tabix = sy-tabix .
" 如果有批次从表中去除
READ TABLE gt_mchb WITH KEY matnr = gs_mard-matnr
werks = gs_mard-werks
lgort = gs_mard-lgort
BINARY SEARCH
TRANSPORTING NO FIELDS .
IF sy-subrc EQ 0 .
DELETE gt_mard INDEX lv_tabix .
ENDIF .
ENDLOOP .
CLEAR gs_mard .
LOOP AT gt_mard INTO gs_mard .
APPEND gs_mard TO gt_out .
ENDLOOP .
" 把带批次的放入GT_oUT
LOOP AT gt_mchb INTO gs_mchb.
APPEND gs_mchb TO gt_out .
ENDLOOP .
" 去0库存
DELETE gt_out WHERE labst EQ 0 .
DATA: lv_i TYPE i .
DATA: lv_lgort LIKE mard-lgort.
lv_i = 0 .
" 加上序号 转换 小数点
SORT gt_out BY lgort matnr .
LOOP AT gt_out INTO gs_out .
IF lv_lgort IS INITIAL OR lv_lgort <> gs_out-lgort .
lv_i = 0 .
ENDIF .
lv_i = lv_i + 1 .
gs_out-zxh = lv_i .
gs_out-labst = gs_out-labst + gs_out-speme .
MODIFY gt_out FROM gs_out .
lv_lgort = gs_out-lgort .
CLEAR gs_out .
ENDLOOP .
SORT gt_out BY lgort zxh.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_data .
DEFINE append_field.
gs_fieldcat-fieldname = &1.
gs_fieldcat-seltext_l = &2.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
END-OF-DEFINITION.
append_field: 'ZXH' '序号' .
append_field: 'MATNR' '物料编号' .
append_field: 'ZZNME' '物料名称' .
append_field: 'MAKTX' '物料描述' .
append_field: 'CHARG' '评估类别' .
append_field: 'LABST' '数量'.
append_field: 'MEINS' '单位' .
append_field: 'LGORT' '仓库代码' .
append_field: 'LGOBE' '仓储地点' .
append_field: 'LOGGR' '仓管员代码' .
gs_layout-box_fieldname = 'MARK'.
gs_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_STATUS_SET'
i_callback_user_command = 'FRM_USER_COMMAND'
*
* I_GRID_SETTINGS =
is_layout = gs_layout
it_fieldcat = gt_fieldcat
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_out
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM .
FORM frm_status_set USING ut_extab TYPE slis_t_extab.
SET PF-STATUS 'PF_001'.
ENDFORM.
FORM frm_user_command USING uv_ucomm LIKE sy-ucomm
us_selfield TYPE slis_selfield.
IF sy-ucomm EQ 'PRINT' .
IF r_1 EQ 'X' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF031'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
IF r_2 EQ 'X' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF031A'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
gw_options-tdnewid = 'X'. "New Spool
gw_options-tdimmed = 'X'.
gw_options-tddelete = 'X'. "Delete Spool After Print
gw_options-tdfinal = 'X'.
gw_options-tdiexit = 'X'. "Exit after printing in print preview
gw_options-tddest = 'LP01'.
* gw_control-no_dialog = 'X'.
gw_control-preview = 'X'.
gw_control-no_open = 'X'.
gw_control-no_close = 'X'.
CALL FUNCTION 'SSF_OPEN' "打开打印窗口
EXPORTING
control_parameters = gw_control
output_options = gw_options
user_settings = ''
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
DATA: lt_out LIKE TABLE OF gs_out .
DATA: ls_out LIKE gs_out .
DATA: lt_out2 LIKE TABLE OF gs_out .
lt_out = gt_out .
DELETE lt_out WHERE mark <> 'X'.
SORT lt_out BY lgort .
DELETE ADJACENT DUPLICATES FROM lt_out COMPARING lgort.
LOOP AT lt_out INTO ls_out .
LOOP AT gt_out INTO gs_out WHERE mark EQ 'X'.
IF gs_out-lgort EQ ls_out-lgort.
APPEND gs_out TO lt_out2 .
ENDIF .
ENDLOOP .
CALL FUNCTION g_fm_name
EXPORTING
control_parameters = gw_control
output_options = gw_options
* is_bkpf = gs_bkpf
* IMPORTING
* job_output_info = l_end
* job_output_options = l_start
TABLES
it_out = lt_out2
* it_bkpf = lt_bkpf
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CLEAR: lt_out2[] .
ENDLOOP .
CALL FUNCTION 'SSF_CLOSE'
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
ENDIF.
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data2 .
" 供应商外包库存
SELECT
a~lifnr
a~matnr
d~bismt
b~zznme
c~maktx
d~meins
a~charg
a~lblab " 数量
e~name_org4
INTO TABLE gt_mslb
FROM mslb AS a
JOIN zmmt002 AS b ON a~matnr = b~matnr
JOIN makt AS c ON a~matnr = c~matnr
JOIN mara AS d ON a~matnr = d~matnr
JOIN but000 AS e ON a~lifnr = e~partner
WHERE lifnr IN s_lifnr .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process_data2 .
SORT gt_mslb BY lifnr .
DATA: lv_i TYPE i .
lv_i = 0 .
DELETE gt_mslb WHERE lblab EQ 0 .
LOOP AT gt_mslb INTO gs_mslb .
lv_i = lv_i + 1 .
gs_mslb-zxh = lv_i .
MODIFY gt_mslb FROM gs_mslb .
AT END OF lifnr .
lv_i = 0 .
ENDAT.
ENDLOOP .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_data2 .
DEFINE append_field.
gs_fieldcat-fieldname = &1.
gs_fieldcat-seltext_l = &2.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
END-OF-DEFINITION.
append_field: 'ZXH' '序号' .
append_field: 'MATNR' '物料编号' .
append_field: 'BISMT' '旧料号' .
append_field: 'ZZNME' '物料名称' .
append_field: 'MAKTX' '物料描述' .
append_field: 'CHARG' '评估类别' .
append_field: 'LBLAB' '数量'.
append_field: 'MEINS' '单位' .
append_field: 'LIFNR' '供应商代码' .
append_field: 'NAME_ORG4' '供应商简称' .
gs_layout-box_fieldname = 'MARK'.
gs_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_STATUS_SET2'
i_callback_user_command = 'FRM_USER_COMMAND2'
*
* I_GRID_SETTINGS =
is_layout = gs_layout
it_fieldcat = gt_fieldcat
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_mslb
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM .
FORM frm_status_set2 USING ut_extab TYPE slis_t_extab.
SET PF-STATUS 'PF_001'.
ENDFORM.
FORM frm_user_command2 USING uv_ucomm LIKE sy-ucomm
us_selfield TYPE slis_selfield.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF031B'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
gw_options-tdnewid = 'X'. "New Spool
gw_options-tdimmed = 'X'.
gw_options-tddelete = 'X'. "Delete Spool After Print
gw_options-tdfinal = 'X'.
gw_options-tdiexit = 'X'. "Exit after printing in print preview
gw_options-tddest = 'LP01'.
* gw_control-no_dialog = 'X'.
gw_control-preview = 'X'.
gw_control-no_open = 'X'.
gw_control-no_close = 'X'.
CALL FUNCTION 'SSF_OPEN' "打开打印窗口
EXPORTING
control_parameters = gw_control
output_options = gw_options
user_settings = ''
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
DATA: lt_mslb LIKE TABLE OF gs_mslb .
DATA: ls_mslb LIKE gs_mslb .
DATA: lt_mslb2 LIKE TABLE OF gs_mslb .
lt_mslb = gt_mslb .
DELETE lt_mslb WHERE mark <> 'X'.
SORT lt_mslb BY lifnr .
DELETE ADJACENT DUPLICATES FROM lt_mslb COMPARING lifnr.
LOOP AT lt_mslb INTO ls_mslb .
LOOP AT gt_mslb INTO gs_mslb WHERE mark EQ 'X'.
IF gs_mslb-lifnr EQ ls_mslb-lifnr.
APPEND gs_mslb TO lt_mslb2 .
ENDIF .
ENDLOOP .
CALL FUNCTION g_fm_name
EXPORTING
control_parameters = gw_control
output_options = gw_options
* is_bkpf = gs_bkpf
* IMPORTING
* job_output_info = l_end
* job_output_options = l_start
TABLES
it_out = lt_mslb2
* it_bkpf = lt_bkpf
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CLEAR: lt_mslb2[] .
ENDLOOP .
CALL FUNCTION 'SSF_CLOSE'
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA3
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data3 .
" 供应商外包库存
SELECT
a~kunnr
a~matnr
d~bismt
b~zznme
c~maktx
d~meins
a~charg
a~kulab " 数量
e~bu_sort1
INTO TABLE gt_msku
FROM msku AS a
JOIN zmmt002 AS b ON a~matnr = b~matnr
JOIN makt AS c ON a~matnr = c~matnr
JOIN mara AS d ON a~matnr = d~matnr
JOIN but000 AS e ON a~kunnr = e~partner
WHERE a~kunnr IN s_kunnr .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA3
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process_data3 .
SORT gt_msku BY kunnr .
DATA: lv_i TYPE i .
lv_i = 0 .
"删除0库存
DELETE gt_msku WHERE kulab EQ 0 .
" 加序号
LOOP AT gt_msku INTO gs_msku .
lv_i = lv_i + 1 .
gs_msku-zxh = lv_i .
MODIFY gt_msku FROM gs_msku .
AT END OF kunnr .
lv_i = 0 .
ENDAT.
ENDLOOP .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA3
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_data3 .
DEFINE append_field.
gs_fieldcat-fieldname = &1.
gs_fieldcat-seltext_l = &2.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
END-OF-DEFINITION.
append_field: 'ZXH' '序号' .
append_field: 'MATNR' '物料编号' .
append_field: 'ZZNME' '物料名称' .
append_field: 'MAKTX' '物料描述' .
append_field: 'CHARG' '评估类别' .
append_field: 'KULAB' '数量'.
append_field: 'MEINS' '单位' .
append_field: 'KUNNR' '客户代码' .
append_field: 'BU_SORT1' '客户简称' .
gs_layout-box_fieldname = 'MARK'.
gs_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_STATUS_SET3'
i_callback_user_command = 'FRM_USER_COMMAND3'
*
* I_GRID_SETTINGS =
is_layout = gs_layout
it_fieldcat = gt_fieldcat
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_msku
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM .
FORM frm_status_set3 USING ut_extab TYPE slis_t_extab.
SET PF-STATUS 'PF_001'.
ENDFORM.
FORM frm_user_command3 USING uv_ucomm LIKE sy-ucomm
us_selfield TYPE slis_selfield.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF031C'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
gw_options-tdnewid = 'X'. "New Spool
gw_options-tdimmed = 'X'.
gw_options-tddelete = 'X'. "Delete Spool After Print
gw_options-tdfinal = 'X'.
gw_options-tdiexit = 'X'. "Exit after printing in print preview
gw_options-tddest = 'LP01'.
* gw_control-no_dialog = 'X'.
gw_control-preview = 'X'.
gw_control-no_open = 'X'.
gw_control-no_close = 'X'.
CALL FUNCTION 'SSF_OPEN' "打开打印窗口
EXPORTING
control_parameters = gw_control
output_options = gw_options
user_settings = ''
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
DATA: lt_msku LIKE TABLE OF gs_msku .
DATA: ls_msku LIKE gs_msku .
DATA: lt_msku2 LIKE TABLE OF gs_msku .
lt_msku = gt_msku .
DELETE lt_msku WHERE mark <> 'X'.
SORT lt_msku BY kunnr.
DELETE ADJACENT DUPLICATES FROM lt_msku COMPARING kunnr.
LOOP AT lt_msku INTO ls_msku .
LOOP AT gt_msku INTO gs_msku WHERE mark EQ 'X'.
IF gs_msku-kunnr EQ ls_msku-kunnr.
APPEND gs_msku TO lt_msku2 .
ENDIF .
ENDLOOP .
CALL FUNCTION g_fm_name
EXPORTING
control_parameters = gw_control
output_options = gw_options
* is_bkpf = gs_bkpf
* IMPORTING
* job_output_info = l_end
* job_output_options = l_start
TABLES
it_out = lt_msku2
* it_bkpf = lt_bkpf
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CLEAR: lt_msku2[] .
ENDLOOP .
CALL FUNCTION 'SSF_CLOSE'
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA5
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data5 .
SELECT
a~matnr
d~bismt
e~zznme
b~maktx
d~meins
a~werks
a~lgort
c~lgobe
a~labst " 非限制使用库存
a~speme
f~loggr " 仓管员代码
INTO TABLE gt_mard
FROM mard AS a
INNER JOIN makt AS b ON a~matnr = b~matnr
INNER JOIN t001l AS c ON a~werks = c~werks AND a~lgort = c~lgort
INNER JOIN mara AS d ON a~matnr = d~matnr
INNER JOIN zmmt002 AS e ON a~matnr = e~matnr
INNER JOIN marc AS f ON a~matnr = f~matnr AND a~werks = f~werks
WHERE a~lgort IN s_lgort
AND c~werks EQ s_werks-low
AND a~matnr IN s_matnr
AND f~loggr IN s_loggr .
IF gt_mard IS NOT INITIAL .
SELECT
a~matnr
d~bismt
e~zznme
b~maktx
d~meins
a~werks
a~lgort
c~lgobe
a~clabs "非限制库存
a~cspem
f~loggr " 仓管员代码
a~charg "评估类
INTO TABLE gt_mchb
FROM mchb AS a
INNER JOIN makt AS b ON a~matnr = b~matnr
INNER JOIN t001l AS c ON a~werks = c~werks AND a~lgort = c~lgort
INNER JOIN mara AS d ON a~matnr = d~matnr
INNER JOIN zmmt002 AS e ON a~matnr = e~matnr
INNER JOIN marc AS f ON a~matnr = f~matnr
FOR ALL ENTRIES IN gt_mard
WHERE a~matnr = gt_mard-matnr
AND a~werks = gt_mard-werks
AND a~lgort = gt_mard-lgort
AND f~loggr IN s_loggr .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA5
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process_data5 .
SORT gt_mchb BY matnr lgort .
DATA lv_tabix TYPE sy-tabix .
LOOP AT gt_mard INTO gs_mard .
CLEAR lv_tabix .
lv_tabix = sy-tabix .
" 如果有批次从表中去除
READ TABLE gt_mchb WITH KEY matnr = gs_mard-matnr
lgort = gs_mard-lgort
BINARY SEARCH
TRANSPORTING NO FIELDS .
IF sy-subrc EQ 0 .
DELETE gt_mard INDEX lv_tabix .
ENDIF .
ENDLOOP .
CLEAR gs_mard .
LOOP AT gt_mard INTO gs_mard .
APPEND gs_mard TO gt_out .
ENDLOOP .
" 把带批次的放入GT_oUT
LOOP AT gt_mchb INTO gs_mchb.
APPEND gs_mchb TO gt_out .
ENDLOOP .
" 去0库存
DELETE gt_out WHERE labst EQ 0 .
DATA: lv_i TYPE i .
DATA: lv_loggr LIKE marc-loggr.
lv_i = 0 .
" 加上序号 转换 小数点
SORT gt_out BY loggr matnr .
LOOP AT gt_out INTO gs_out .
IF lv_loggr IS INITIAL OR lv_loggr <> gs_out-loggr .
lv_i = 0 .
ENDIF .
lv_i = lv_i + 1 .
gs_out-zxh = lv_i .
gs_out-labst = gs_out-labst + gs_out-speme .
MODIFY gt_out FROM gs_out .
lv_loggr = gs_out-loggr .
CLEAR gs_out .
ENDLOOP .
SORT gt_out BY loggr zxh.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA5
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_data5 .
DEFINE append_field.
gs_fieldcat-fieldname = &1.
gs_fieldcat-seltext_l = &2.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
END-OF-DEFINITION.
append_field: 'LOGGR' '仓管员代码' .
append_field: 'ZXH' '序号' .
append_field: 'MATNR' '物料编号' .
append_field: 'ZZNME' '物料名称' .
append_field: 'MAKTX' '物料描述' .
append_field: 'CHARG' '评估类别' .
append_field: 'LABST' '数量'.
append_field: 'MEINS' '单位' .
append_field: 'LGORT' '仓库代码' .
append_field: 'LGOBE' '仓储地点' .
gs_layout-box_fieldname = 'MARK'.
gs_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_STATUS_SET'
i_callback_user_command = 'FRM_USER_COMMAND5'
*
* I_GRID_SETTINGS =
is_layout = gs_layout
it_fieldcat = gt_fieldcat
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_out
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
FORM frm_user_command5 USING uv_ucomm LIKE sy-ucomm
us_selfield TYPE slis_selfield.
IF sy-ucomm EQ 'PRINT' .
IF r_5 EQ 'X' . "OR r_5A EQ 'X'
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF031D'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ELSE .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF031D_02'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
gw_options-tdnewid = 'X'. "New Spool
gw_options-tdimmed = 'X'.
gw_options-tddelete = 'X'. "Delete Spool After Print
gw_options-tdfinal = 'X'.
gw_options-tdiexit = 'X'. "Exit after printing in print preview
gw_options-tddest = 'LP01'.
* gw_control-no_dialog = 'X'.
gw_control-preview = 'X'.
gw_control-no_open = 'X'.
gw_control-no_close = 'X'.
CALL FUNCTION 'SSF_OPEN' "打开打印窗口
EXPORTING
control_parameters = gw_control
output_options = gw_options
user_settings = ''
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
DATA: lt_out LIKE TABLE OF gs_out .
DATA: ls_out LIKE gs_out .
DATA: lt_out2 LIKE TABLE OF gs_out .
lt_out = gt_out .
DELETE lt_out WHERE mark <> 'X'.
SORT lt_out BY loggr .
DELETE ADJACENT DUPLICATES FROM lt_out COMPARING loggr.
LOOP AT lt_out INTO ls_out .
LOOP AT gt_out INTO gs_out WHERE mark EQ 'X'.
IF gs_out-loggr EQ ls_out-loggr.
APPEND gs_out TO lt_out2 .
ENDIF .
ENDLOOP .
CALL FUNCTION g_fm_name
EXPORTING
control_parameters = gw_control
output_options = gw_options
* is_bkpf = gs_bkpf
* IMPORTING
* job_output_info = l_end
* job_output_options = l_start
TABLES
it_out = lt_out2
* it_bkpf = lt_bkpf
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CLEAR: lt_out2[] .
ENDLOOP .
CALL FUNCTION 'SSF_CLOSE'
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
ENDIF.
ENDFORM .