SAP ABAP 顧問(wèn)(開(kāi)發(fā)工程師)能力模型-CSDN博客文章瀏覽閱讀959次。目標(biāo):基于對(duì)SAP abap 顧問(wèn)能力模型的梳理,給一年左右經(jīng)驗(yàn)的abaper 快速成長(zhǎng)為三年經(jīng)驗(yàn)提供超級(jí)燃料!https://blog.csdn.net/java_zhong1990/article/details/132469977
目標(biāo):從工廠、庫(kù)存地點(diǎn)、物料層面,設(shè)置庫(kù)存的范圍,在范圍內(nèi)的庫(kù)存表示正常,在范圍外的庫(kù)存表示異常.
需要考慮的是如何定義正常的庫(kù)存范圍,
一、背景說(shuō)明
1.1 實(shí)現(xiàn)效果
?
1.2 業(yè)務(wù)說(shuō)明
設(shè)計(jì)步驟:
1 計(jì)劃員,批量維護(hù)物料的安全庫(kù)存
2 計(jì)劃主管,可以更改安全庫(kù)存范圍
3 輸出安全庫(kù)存報(bào)表
1.3?代碼實(shí)現(xiàn)
*&---------------------------------------------------------------------*
*& Report ZMM028
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmm031.
INCLUDE zmm031_top.
INCLUDE zmm031_sel.
INCLUDE zmm031_frm.
INCLUDE zmm031_pbo.
INCLUDE zmm031_pai.
SELECTION-SCREEN FUNCTION KEY: 1 .
INITIALIZATION.
PERFORM init.
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_file.
PERFORM get_excel.
AT SELECTION-SCREEN.
CASE sscrfields-ucomm .
WHEN 'FC01'.
PERFORM download_template USING '批導(dǎo)模版.xlsx' 'ZMM031'.
WHEN OTHERS.
ENDCASE.
START-OF-SELECTION.
IF p_inp = 'X'.
* SELECT * INTO TABLE @DATA(ls_ztmm031) FROM ztmm031 WHERE ztmm031~c1 = @sy-uname.
* IF sy-subrc = 0.
* ELSE.
* MESSAGE '沒(méi)有權(quán)限,請(qǐng)聯(lián)系系統(tǒng)管理員!' TYPE 'S' DISPLAY LIKE 'E'.
* LEAVE TO LIST-PROCESSING.
* EXIT.
*
* ENDIF.
PERFORM get_data_for_excel.
PERFORM check_data_for_excel.
PERFORM set_catalog.
PERFORM display_alv.
ELSEIF p_sel = 'X'.
PERFORM get_data_for_ztmm030.
PERFORM set_catalog1.
PERFORM display_alv_ztmm030.
ELSE.
PERFORM get_data_for_mard.
PERFORM set_catalog2.
PERFORM display_alv2.
ENDIF.
*&---------------------------------------------------------------------*
*& Form get_data_for_mard
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data_for_mard .
DATA:lv_lfgja TYPE mard-lfgja.
DATA:lv_lfmon TYPE mard-lfmon.
lv_lfgja = sy-datum+0(4).
lv_lfmon = sy-datum+4(2).
* lv_lfgja = '2022'.
* lv_lfmon = '05'.
SELECT
mard~lfgja,
mard~lfmon,
mard~werks,
mard~lgort,
mard~matnr,
mard~labst,
t001l~lgobe,
mara~zwlcms,
mara~meins,
mbew~verpr,
mbew~peinh,
ztmm030~l1,
ztmm030~l2,
ztmm030~createby,
ztmm030~createdate,
ztmm030~createtime
INTO CORRESPONDING FIELDS OF TABLE @gt_data2
FROM mard
LEFT JOIN ztmm030 ON ztmm030~werks = mard~werks AND ztmm030~lgort = mard~lgort AND ztmm030~matnr = mard~matnr
INNER JOIN t001l ON t001l~werks = mard~werks AND mard~lgort = t001l~lgort
INNER JOIN mara ON mara~matnr = mard~matnr
INNER JOIN mbew ON mbew~matnr = mard~matnr AND mbew~bwkey = mard~werks AND mbew~vprsv = 'V'
WHERE mard~lfgja = @lv_lfgja AND mard~lfmon = @lv_lfmon
AND mard~werks IN @so_werks
AND mard~lgort IN @so_lgort
AND mard~matnr IN @so_matnr
AND mard~labst <> '0'
.
"verpr
LOOP AT gt_data2 ASSIGNING FIELD-SYMBOL(<fs1>).
<fs1>-je = <fs1>-verpr / <fs1>-peinh * <fs1>-labst.
IF <fs1>-l1 IS NOT INITIAL AND <fs1>-l2 IS NOT INITIAL.
IF <fs1>-labst < <fs1>-l1 .
<fs1>-text = '庫(kù)存過(guò)低'.
ELSEIF <fs1>-labst > <fs1>-l2.
<fs1>-text = '超上限'.
ELSE.
<fs1>-text = '庫(kù)存正常'.
ENDIF.
ENDIF.
* <fs1>-labst2 = <fs1>-labst.
<fs1>-l1_ = <fs1>-l1.
<fs1>-l2_ = <fs1>-l2.
IF <fs1>-l1 IS INITIAL AND <fs1>-l2 IS INITIAL.
<fs1>-f1 = 'X'.
ELSE.
SELECT * INTO TABLE @DATA(ls_ztmm031) FROM ztmm031 WHERE ztmm031~c1 = @sy-uname.
IF sy-subrc = 0.
<fs1>-f1 = 'X'.
ELSE.
"<fs>-message = '無(wú)權(quán)限修改'.<fs>-status = 'E'. CONTINUE.
ENDIF.
ENDIF.
ENDLOOP.
DATA:gwa_edit TYPE lvc_s_styl,
git_edit TYPE lvc_t_styl.
LOOP AT gt_data2 INTO gs_data2.
IF gs_data2-f1 = 'X'.
CLEAR: gwa_edit.
gwa_edit-fieldname = 'L1'.
gwa_edit-style = cl_gui_alv_grid=>mc_style_enabled."設(shè)置為可編輯
APPEND gwa_edit TO gs_data2-celtab .
CLEAR: gwa_edit.
gwa_edit-fieldname = 'L2'.
gwa_edit-style = cl_gui_alv_grid=>mc_style_enabled."設(shè)置為可編輯
APPEND gwa_edit TO gs_data2-celtab .
ELSE.
CLEAR: gwa_edit.
gwa_edit-fieldname = 'L1'.
gwa_edit-style = cl_gui_alv_grid=>mc_style_disabled."設(shè)置為不可編輯
APPEND gwa_edit TO gs_data2-celtab .
CLEAR: gwa_edit.
gwa_edit-fieldname = 'L2'.
gwa_edit-style = cl_gui_alv_grid=>mc_style_disabled."設(shè)置為不可編輯
APPEND gwa_edit TO gs_data2-celtab .
ENDIF.
MODIFY gt_data2 FROM gs_data2 .
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含 ZMM028_FRM
*&---------------------------------------------------------------------*
FORM get_excel.
DATA : l_filetab TYPE filetable,
l_waftab LIKE LINE OF l_filetab,
l_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = '打開(kāi)文件'
initial_directory = 'C:/'
CHANGING
file_table = l_filetab
rc = l_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ELSE.
READ TABLE l_filetab INTO l_waftab INDEX 1.
pa_file = l_waftab-filename.
CLEAR: l_filetab,l_waftab.
ENDIF.
ENDFORM.
FORM init.
DATA: ls_dyntxt TYPE smp_dyntxt .
ls_dyntxt-icon_id = icon_export.
ls_dyntxt-quickinfo = '模板下載'.
ls_dyntxt-icon_text = '模板下載'.
sscrfields-functxt_01 = ls_dyntxt.
ENDFORM.
FORM init_output.
ENDFORM.
FORM get_data_for_excel.
TYPES: BEGIN OF ly_excel_data,
werks TYPE ztmm030-werks, "工廠
lgort TYPE ztmm030-lgort, "存儲(chǔ)地點(diǎn)
matnr TYPE ztmm030-matnr, "物料編號(hào)
l1 TYPE ztmm030-l1, "庫(kù)存下限(未來(lái))
l2 TYPE ztmm030-l2, "庫(kù)存上限(未來(lái))
* createby TYPE ztmm030-createby, "最近更新人
* createdate TYPE ztmm030-createdate, "最近更新日期
* createtime TYPE ztmm030-createtime, "最近更新時(shí)間
END OF ly_excel_data.
DATA: lt_excel TYPE TABLE OF alsmex_tabline WITH HEADER LINE,
ls_excel_data TYPE ly_excel_data,
l_index LIKE sy-tabix.
DATA: lv_lines TYPE i.
FIELD-SYMBOLS: <fs>.
IF pa_file IS NOT INITIAL.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = pa_file
i_begin_col = '1'
i_begin_row = '2'
i_end_col = '10'
i_end_row = '50000'
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc = 0.
*&& 將EXCEL格式中的數(shù)據(jù)導(dǎo)入到內(nèi)表TAB_LOAD中
LOOP AT lt_excel.
ASSIGN COMPONENT lt_excel-col OF STRUCTURE ls_excel_data TO <fs>.
<fs> = lt_excel-value.
AT END OF row.
MOVE-CORRESPONDING ls_excel_data TO gs_data."跟Excel的列一一對(duì)應(yīng)的內(nèi)表
APPEND gs_data TO gt_data.
CLEAR: ls_excel_data,gs_data.
ENDAT.
ENDLOOP.
lv_lines = lines( gt_data ).
IF lv_lines > 8000.
MESSAGE '本次導(dǎo)入數(shù)據(jù)超過(guò)5000,請(qǐng)拆分?jǐn)?shù)據(jù)文件!' TYPE 'S'DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDIF.
ELSE.
MESSAGE '請(qǐng)輸入文件路徑!' TYPE 'S'DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM.
FORM check_data_for_excel.
LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs>).
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = <fs>-matnr
IMPORTING
output = <fs>-matnr
* EXCEPTIONS
* LENGTH_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
ENDIF.
SELECT SINGLE matnr INTO @DATA(ls1) FROM mara WHERE mara~matnr = @<fs>-matnr.
IF sy-subrc = 0.
ELSE.
<fs>-message = '物料號(hào)不存在'.
<fs>-status = 'E'.
CONTINUE.
ENDIF.
SELECT SINGLE t001l~werks INTO @DATA(ls2) FROM t001l WHERE t001l~werks = @<fs>-werks.
IF sy-subrc = 0.
ELSE.
<fs>-message = '工廠不存在'.<fs>-status = 'E'.
CONTINUE.
ENDIF.
SELECT SINGLE t001l~werks INTO @DATA(ls3) FROM t001l WHERE t001l~lgort = @<fs>-lgort.
IF sy-subrc = 0.
ELSE.
<fs>-message = '庫(kù)位不存在'.<fs>-status = 'E'.
CONTINUE.
ENDIF.
SELECT SINGLE * INTO @DATA(ls_ztmm030)
FROM ztmm030 WHERE ztmm030~werks = @<fs>-werks AND ztmm030~lgort = @<fs>-lgort AND ztmm030~matnr = @<fs>-matnr.
IF sy-subrc = 0.
<fs>-l1_old = ls_ztmm030-l1.
<fs>-l2_old = ls_ztmm030-l2.
<fs>-createby = ls_ztmm030-createby.
<fs>-createdate = ls_ztmm030-createdate.
<fs>-createtime = ls_ztmm030-createtime.
SELECT * INTO TABLE @DATA(ls_ztmm031) FROM ztmm031 WHERE ztmm031~c1 = @sy-uname.
IF sy-subrc = 0.
ELSE.
<fs>-message = '無(wú)權(quán)限修改'.<fs>-status = 'E'. CONTINUE.
ENDIF.
ELSE.
<fs>-createby = sy-uname.
<fs>-createdate = sy-datum.
<fs>-createtime = sy-uzeit.
ENDIF.
ENDLOOP.
ENDFORM.
FORM download_template USING pu_filename pu_objid.
*& 下載模版
DATA: ls_objdata LIKE wwwdatatab.
DATA: lv_filename TYPE string,
lv_fullpath TYPE string VALUE 'C:\',
lv_path TYPE string VALUE 'C:\'.
DATA: lv_errtxt TYPE string.
DATA: lv_destination LIKE rlgrap-filename.
DATA: lv_rc LIKE sy-subrc.
DATA: lv_fileup LIKE rlgrap-filename.
lv_filename = pu_filename .
*& 調(diào)用保存對(duì)話框
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'xlsx'
default_file_name = lv_filename
initial_directory = 'C:\'
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc NE 0.
MESSAGE '不能打開(kāi)EXCEL' TYPE 'E'.
ENDIF.
CHECK lv_fullpath IS NOT INITIAL .
lv_fileup = lv_fullpath.
ls_objdata-relid = 'MI' .
ls_objdata-objid = pu_objid .
lv_destination = lv_fullpath .
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = ls_objdata
destination = lv_destination
IMPORTING
rc = lv_rc.
IF lv_rc NE 0.
CONCATENATE '模板文件:' ls_objdata-objid '下載失敗' INTO lv_errtxt.
MESSAGE lv_errtxt TYPE 'E'.
ELSE.
MESSAGE '模版下載成功' TYPE 'S'.
ENDIF.
ENDFORM. " DOWNLOAD_TEMPLATE
FORM set_catalog.
DATA:lv_position TYPE i VALUE 1.
CLEAR: lv_position.
lv_position = lv_position + 1.
* 預(yù)定義一個(gè)輸出模式
DEFINE df_fieldcat.
CLEAR gs_fieldcat_lvc.
gs_fieldcat_lvc-col_pos = lv_position."ALV 控制: 輸出列
gs_fieldcat_lvc-scrtext_m = &1."中字段標(biāo)簽
gs_fieldcat_lvc-fieldname = &2."ALV 控制: 內(nèi)部表字段的字段名稱
gs_fieldcat_lvc-no_zero = &3."ALV 控制: 為輸出隱藏零
gs_fieldcat_lvc-checkbox = &4."ALV 控制: 作為復(fù)選框輸出
gs_fieldcat_lvc-edit = &5."設(shè)置可編輯模式
gs_fieldcat_lvc-outputlen = &6."輸出長(zhǎng)度
gs_fieldcat_lvc-ref_table = &7.
gs_fieldcat_lvc-ref_field = &8.
gs_fieldcat_lvc-datatype = &9.
APPEND gs_fieldcat_lvc TO gt_fieldcat_lvc.
ADD 1 TO lv_position.
END-OF-DEFINITION.
df_fieldcat:
'狀態(tài)' 'STATUS' 'X' '' '' '' '' '' '',
'消息' 'MESSAGE' 'X' '' '' '' '' '' '',
'工廠' 'WERKS' 'X' '' '' '' '' '' '',
'存儲(chǔ)地點(diǎn)' 'LGORT' 'X' '' '' '' '' '' '',
'物料編號(hào)' 'MATNR' 'X' '' '' '' '' '' '',
'庫(kù)存下限(當(dāng)前)' 'L1_OLD' 'X' '' '' '' '' '' '',
'庫(kù)存上限(當(dāng)前)' 'L2_OLD' 'X' '' '' '' '' '' '',
'最近更新人' 'CREATEBY' 'X' '' '' '' '' '' '',
'最近更新日期' 'CREATEDATE' 'X' '' '' '' '' '' '',
'最近更新時(shí)間' 'CREATETIME' 'X' '' '' '' '' '' '',
'庫(kù)存下限(未來(lái))' 'L1' 'X' '' '' '' '' '' '',
'庫(kù)存上限(未來(lái))' 'L2' 'X' '' '' '' '' '' ''
.
ENDFORM.
FORM set_catalog1.
DATA:lv_position TYPE i VALUE 1.
CLEAR: lv_position.
lv_position = lv_position + 1.
* 預(yù)定義一個(gè)輸出模式
DEFINE df_fieldcat.
CLEAR gs_fieldcat_lvc.
gs_fieldcat_lvc-col_pos = lv_position."ALV 控制: 輸出列
gs_fieldcat_lvc-scrtext_m = &1."中字段標(biāo)簽
gs_fieldcat_lvc-fieldname = &2."ALV 控制: 內(nèi)部表字段的字段名稱
gs_fieldcat_lvc-no_zero = &3."ALV 控制: 為輸出隱藏零
gs_fieldcat_lvc-checkbox = &4."ALV 控制: 作為復(fù)選框輸出
gs_fieldcat_lvc-edit = &5."設(shè)置可編輯模式
gs_fieldcat_lvc-outputlen = &6."輸出長(zhǎng)度
gs_fieldcat_lvc-ref_table = &7.
gs_fieldcat_lvc-ref_field = &8.
gs_fieldcat_lvc-datatype = &9.
APPEND gs_fieldcat_lvc TO gt_fieldcat_lvc.
ADD 1 TO lv_position.
END-OF-DEFINITION.
df_fieldcat:
'工廠' 'WERKS' 'X' '' '' '' '' '' '',
'存儲(chǔ)地點(diǎn)' 'LGORT' 'X' '' '' '' '' '' '',
'物料編號(hào)' 'MATNR' 'X' '' '' '' '' '' '',
'庫(kù)存下限' 'L1' 'X' '' '' '' '' '' '',
'庫(kù)存上限' 'L2' 'X' '' '' '' '' '' '',
'最近更新人' 'CREATEBY' 'X' '' '' '' '' '' '',
'最近更新日期' 'CREATEDATE' 'X' '' '' '' '' '' '',
'最近更新時(shí)間' 'CREATETIME' 'X' '' '' '' '' '' ''
.
ENDFORM.
FORM set_catalog2.
DATA:lv_position TYPE i VALUE 1.
CLEAR: lv_position.
lv_position = lv_position + 1.
* 預(yù)定義一個(gè)輸出模式
DEFINE df_fieldcat.
CLEAR gs_fieldcat_lvc.
gs_fieldcat_lvc-col_pos = lv_position."ALV 控制: 輸出列
gs_fieldcat_lvc-scrtext_m = &1."中字段標(biāo)簽
gs_fieldcat_lvc-fieldname = &2."ALV 控制: 內(nèi)部表字段的字段名稱
gs_fieldcat_lvc-no_zero = &3."ALV 控制: 為輸出隱藏零
gs_fieldcat_lvc-checkbox = &4."ALV 控制: 作為復(fù)選框輸出
gs_fieldcat_lvc-edit = &5."設(shè)置可編輯模式
gs_fieldcat_lvc-outputlen = &6."輸出長(zhǎng)度
gs_fieldcat_lvc-ref_table = &7.
gs_fieldcat_lvc-ref_field = &8.
gs_fieldcat_lvc-datatype = &9.
APPEND gs_fieldcat_lvc TO gt_fieldcat_lvc.
ADD 1 TO lv_position.
END-OF-DEFINITION.
df_fieldcat:
'年度' 'LFGJA' 'X' '' '' '' '' '' '',
'月份' 'LFMON' 'X' '' '' '' '' '' '',
'工廠' 'WERKS' 'X' '' '' '' '' '' '',
'庫(kù)存地點(diǎn)' 'LGORT' 'X' '' '' '' '' '' '',
'倉(cāng)儲(chǔ)地點(diǎn)描述' 'LGOBE' 'X' '' '' '' '' '' '',
'物料' 'MATNR' 'X' '' '' '' '' '' '',
'物料描述' 'ZWLCMS' 'X' '' '' '' '' '' '',
'單位' 'MEINS' 'X' '' '' '' '' '' '',
'庫(kù)存數(shù)量' 'LABST' 'X' '' '' '' '' '' '',
'庫(kù)存下限' 'L1' 'X' '' 'X' '' '' '' '',
'庫(kù)存上限' 'L2' 'X' '' 'X' '' '' '' '',
'金額' 'JE' 'X' '' '' '' '' '' '',
'庫(kù)存狀態(tài)' 'TEXT' 'X' '' '' '' '' '' '',
'最近更新人' 'CREATEBY' 'X' '' '' '' '' '' '',
'最近更新日期' 'CREATEDATE' 'X' '' '' '' '' '' '',
'最近更新時(shí)間' 'CREATETIME' 'X' '' '' '' '' '' ''
.
ENDFORM.
FORM display_alv_ztmm030.
DATA: ls_layout TYPE lvc_s_layo.
IF gt_data IS NOT INITIAL.
ls_layout-zebra = 'X'.
ls_layout-cwidth_opt = 'X'.
* 調(diào)用ALV function
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid "這里是調(diào)用這個(gè)ALV的程序名
i_callback_pf_status_set = 'PF_STATUS' "設(shè)置ALV狀態(tài)欄的函數(shù)
i_callback_user_command = 'USER_COMMAND' "獲取用戶事件的函數(shù)
is_layout_lvc = ls_layout "顯示的布局
it_fieldcat_lvc = gt_fieldcat_lvc "設(shè)置顯示的字段以及字段的功能
i_save = 'A'
TABLES
t_outtab = gt_data
EXCEPTIONS
program_error = 1.
IF sy-subrc <> 0.
MESSAGE '報(bào)表生成異常,請(qǐng)聯(lián)系系統(tǒng)管理員!' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ELSE.
* 這個(gè)消息用來(lái)顯示我們是不是獲取到了數(shù)據(jù),自己用的時(shí)候把這個(gè)硬代碼換成你需要的TEXT-XXX.
MESSAGE '沒(méi)有獲取到數(shù)據(jù),請(qǐng)重新檢索!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO LIST-PROCESSING.
EXIT.
ENDIF.
ENDFORM.
FORM display_alv.
DATA: ls_layout TYPE lvc_s_layo.
IF gt_data IS NOT INITIAL.
ls_layout-zebra = 'X'.
ls_layout-cwidth_opt = 'X'.
* 調(diào)用ALV function
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid "這里是調(diào)用這個(gè)ALV的程序名
i_callback_pf_status_set = 'PF_STATUS' "設(shè)置ALV狀態(tài)欄的函數(shù)
i_callback_user_command = 'USER_COMMAND' "獲取用戶事件的函數(shù)
is_layout_lvc = ls_layout "顯示的布局
it_fieldcat_lvc = gt_fieldcat_lvc "設(shè)置顯示的字段以及字段的功能
i_save = 'A'
TABLES
t_outtab = gt_data
EXCEPTIONS
program_error = 1.
IF sy-subrc <> 0.
MESSAGE '報(bào)表生成異常,請(qǐng)聯(lián)系系統(tǒng)管理員!' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ELSE.
* 這個(gè)消息用來(lái)顯示我們是不是獲取到了數(shù)據(jù),自己用的時(shí)候把這個(gè)硬代碼換成你需要的TEXT-XXX.
MESSAGE '沒(méi)有獲取到數(shù)據(jù),請(qǐng)重新檢索!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO LIST-PROCESSING.
EXIT.
ENDIF.
ENDFORM.
FORM display_alv2.
DATA: ls_layout TYPE lvc_s_layo.
IF gt_data2 IS NOT INITIAL.
ls_layout-zebra = 'X'.
ls_layout-cwidth_opt = 'X'.
ls_layout-stylefname = 'CELTAB'.
* 調(diào)用ALV function
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid "這里是調(diào)用這個(gè)ALV的程序名
i_callback_pf_status_set = 'PF_STATUS' "設(shè)置ALV狀態(tài)欄的函數(shù)
i_callback_user_command = 'USER_COMMAND' "獲取用戶事件的函數(shù)
is_layout_lvc = ls_layout "顯示的布局
it_fieldcat_lvc = gt_fieldcat_lvc "設(shè)置顯示的字段以及字段的功能
i_save = 'A'
TABLES
t_outtab = gt_data2
EXCEPTIONS
program_error = 1.
IF sy-subrc <> 0.
MESSAGE '報(bào)表生成異常,請(qǐng)聯(lián)系系統(tǒng)管理員!' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ELSE.
* 這個(gè)消息用來(lái)顯示我們是不是獲取到了數(shù)據(jù),自己用的時(shí)候把這個(gè)硬代碼換成你需要的TEXT-XXX.
MESSAGE '沒(méi)有獲取到數(shù)據(jù),請(qǐng)重新檢索!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO LIST-PROCESSING.
EXIT.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_data_for_ztmm030
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data_for_ztmm030 .
SELECT * INTO CORRESPONDING FIELDS OF TABLE @gt_data FROM ztmm030
WHERE ztmm030~matnr IN @so_matnr
AND ztmm030~werks IN @so_werks
AND ztmm030~lgort IN @so_lgort
.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含 ZMM028_PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 包含 ZFI068_PAI
*&---------------------------------------------------------------------*
FORM user_command USING i_ucomm TYPE sy-ucomm
i_wa_selfield TYPE slis_selfield.
DATA:gwa_edit TYPE lvc_s_styl,
git_edit TYPE lvc_t_styl.
DATA lv_length TYPE num10.
DATA lr_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.
CALL METHOD lr_grid->refresh_table_display.
i_wa_selfield-refresh = 'X'.
CASE i_ucomm.
WHEN 'ZSAVE'.
DATA(lt_check) = gt_data.
DELETE lt_check WHERE status <> 'E'.
IF lines( lt_check ) <> 0.
MESSAGE '檢查未通過(guò)' TYPE 'E'.
ENDIF.
* "權(quán)限檢查
* DATA:lv_auth TYPE char.
* lv_auth = ''.
* SELECT * INTO TABLE @DATA(ls_ztmm031) FROM ztmm031 WHERE ztmm031~c1 = @sy-uname.
* IF sy-subrc = 0.
* lv_auth = 'X'.
* ELSE.
** MESSAGE '沒(méi)有權(quán)限,請(qǐng)聯(lián)系系統(tǒng)管理員!' TYPE 'S' DISPLAY LIKE 'E'.
** LEAVE TO LIST-PROCESSING.
** EXIT.
* ENDIF.
*
* IF lv_auth = 'X'.
DATA:lt_ TYPE TABLE OF ztmm030.
MOVE-CORRESPONDING gt_data TO lt_.
MODIFY ztmm030 FROM TABLE lt_.
MESSAGE '保存成功' TYPE 'S'.
* ENDIF.
WHEN 'ZSAVE1'.
DATA:lt_ztmm030 TYPE TABLE OF ztmm030.
DATA:ls_ztmm030 TYPE ztmm030.
LOOP AT gt_data2 INTO gs_data2.
IF gs_data2-l1 = gs_data2-l1_ AND gs_data2-l2 = gs_data2-l2_.
ELSE.
MOVE-CORRESPONDING gs_data2 TO ls_ztmm030.
ls_ztmm030-createby = sy-uname.
ls_ztmm030-createdate = sy-datum.
ls_ztmm030-createtime = sy-uzeit.
APPEND ls_ztmm030 TO lt_ztmm030.
ENDIF.
ENDLOOP.
IF lt_ztmm030 IS NOT INITIAL.
MODIFY ztmm030 FROM TABLE lt_ztmm030.
MESSAGE '保存成功' TYPE 'S'.
ENDIF.
WHEN 'ZSAVE2'.
WHEN 'ZSAL'.
WHEN 'ZALL'.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含 ZMM028_PBO
*&---------------------------------------------------------------------*
FORM pf_status USING lt_extab TYPE slis_t_extab.
REFRESH:lt_extab[]. CLEAR:lt_extab.
IF p_inp = 'X'.
SET TITLEBAR 'ZSTATUS_TITLE'.
"說(shuō)明:需要顯示的按鈕進(jìn)行注釋
* APPEND 'ZSAVE' TO lt_extab.
APPEND 'ZSAVE1' TO lt_extab.
SET PF-STATUS 'ZSTATUS_001' EXCLUDING lt_extab.
ELSEIF p_sel = 'X'.
SET TITLEBAR 'ZSTATUS_TITLE'.
"說(shuō)明:需要顯示的按鈕進(jìn)行注釋
APPEND 'ZSAVE' TO lt_extab.
APPEND 'ZSAVE1' TO lt_extab.
SET PF-STATUS 'ZSTATUS_001' EXCLUDING lt_extab.
ELSE.
SET TITLEBAR 'ZSTATUS_TITLE'.
"說(shuō)明:需要顯示的按鈕進(jìn)行注釋
APPEND 'ZSAVE' TO lt_extab.
SET PF-STATUS 'ZSTATUS_001' EXCLUDING lt_extab.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含 ZMM028_SEL
*&---------------------------------------------------------------------*
TABLES:lips,ztmm030,mard.
SELECTION-SCREEN:BEGIN OF BLOCK b0 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_inp RADIOBUTTON GROUP g1 USER-COMMAND u1 DEFAULT 'X'.
PARAMETERS:p_sel RADIOBUTTON GROUP g1 .
PARAMETERS:p_sel2 RADIOBUTTON GROUP g1 .
PARAMETERS: pa_file TYPE rlgrap-filename ."文件夾上傳
SELECTION-SCREEN SKIP 1.
*
* SELECT-OPTIONS: so_lfgja FOR mard-lfgja.
* SELECT-OPTIONS: so_lfmon FOR mard-lfmon.
SELECT-OPTIONS: so_werks FOR ztmm030-werks.
SELECT-OPTIONS: so_lgort FOR ztmm030-lgort.
SELECT-OPTIONS: so_matnr FOR ztmm030-matnr.
SELECTION-SCREEN:END OF BLOCK b0.
*&---------------------------------------------------------------------*
*& 包含 ZMM028_TOP
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 包含 ZFI068_TOP
*&---------------------------------------------------------------------*
TABLES: sscrfields,vbak,bsis.
TYPE-POOLS: esp1,slis ,icon.
TYPES: BEGIN OF gy_data,
* checked TYPE char1, "勾選框
* status_inc TYPE char10, "狀態(tài)燈
status TYPE char2, "狀態(tài)
message TYPE char255, "消息文本
zindex TYPE i, "序號(hào)
werks TYPE ztmm030-werks, "工廠
lgort TYPE ztmm030-lgort, "存儲(chǔ)地點(diǎn)
matnr TYPE ztmm030-matnr, "物料編號(hào)
l1_old TYPE ztmm030-l1, "庫(kù)存下限(當(dāng)前)
l2_old TYPE ztmm030-l2, "庫(kù)存上限(當(dāng)前)
createby TYPE ztmm030-createby, "最后更新人
createdate TYPE ztmm030-createdate, "最后更新日期
createtime TYPE ztmm030-createtime, "最后更新時(shí)間
l1 TYPE ztmm030-l1, "庫(kù)存下限(未來(lái))
l2 TYPE ztmm030-l2, "庫(kù)存上限(未來(lái))
END OF gy_data.
DATA: gs_data TYPE gy_data,
gt_data TYPE TABLE OF gy_data.
FIELD-SYMBOLS: <fs_data> TYPE gy_data.
TYPES: BEGIN OF gy_data2,
lfgja TYPE mard-lfgja, "年度
lfmon TYPE mard-lfmon, "月份
werks TYPE mard-werks, "工廠
lgort TYPE mard-lgort, "庫(kù)存地點(diǎn)
lgobe TYPE t001l-lgobe, "倉(cāng)儲(chǔ)地點(diǎn)描述
matnr TYPE mard-matnr, "物料
zwlcms TYPE mara-zwlcms, "物料描述
meins TYPE mara-meins, "單位
labst TYPE mard-labst, "庫(kù)存數(shù)量
l1 TYPE ztmm030-l1, "庫(kù)存下限
l2 TYPE ztmm030-l2, "庫(kù)存上限
"je TYPE mbew-verpr, "金額
je TYPE acdoca-tsl, "金額
text TYPE char10, "庫(kù)存狀態(tài)
verpr TYPE mbew-verpr,
peinh TYPE mbew-peinh,
* sobkz TYPE mspr-sobkz, "特殊庫(kù)存
* pspnr TYPE mspr-pspnr, "特殊庫(kù)存編號(hào)
* prlab TYPE mspr-prlab, "庫(kù)存數(shù)量
createby TYPE ztmm030-createby, "最后更新人
createdate TYPE ztmm030-createdate, "最后更新日期
createtime TYPE ztmm030-createtime, "最后更新時(shí)間
f1 TYPE char1,
l1_ TYPE ztmm030-l1, "庫(kù)存下限
l2_ TYPE ztmm030-l2, "庫(kù)存上限
celtab TYPE lvc_t_styl, "控制字段可編輯的參數(shù)
END OF gy_data2.
DATA: gs_data2 TYPE gy_data2,
gt_data2 TYPE TABLE OF gy_data2.
FIELD-SYMBOLS: <fs_data2> TYPE gy_data2.
DATA: gt_fieldcat_lvc TYPE lvc_t_fcat, "ALV:定義一個(gè)先顯示字段的表
gs_fieldcat_lvc LIKE LINE OF gt_fieldcat_lvc. "ALV
二、設(shè)計(jì)邏輯
表名-字段名 |
字段描述 |
說(shuō)明 |
MARD-LFGJA MARD-LFMON |
備注: 1.以當(dāng)前年月為查詢條件 MARD-LFGJA ???= 當(dāng)前年 MARD-LFMON ?= 當(dāng)前月份 2.通用庫(kù)存MARD,庫(kù)存數(shù)量不為0的數(shù)據(jù) 3.只查詢V價(jià)物料 MBEW-MATNR =MSPR/MARD-MATNR MBEW-BWKEY=MSPR/MARD-WERKS MBEW-VPRSV=V的數(shù)據(jù) |
|
MARD-WERKS |
工廠 |
|
MARD-LGORT |
倉(cāng)庫(kù) |
|
T001L-LGOBE |
倉(cāng)儲(chǔ)地點(diǎn)描述 |
MARD-WERKS=T001L-WERKS MARD-LGORT=T001L-LGORT 取T001L-LGOBE |
MARD-MATNR |
物料編碼 |
|
MARA-ZWLCMS |
物料長(zhǎng)描述 |
MARD-MATNR=MARA-MATNR 取MARA-ZWLCMS |
MSPR-SOBKZ |
特殊庫(kù)存 |
|
MSPR-PSPNR |
特殊庫(kù)存編號(hào) |
|
MARA-MEINS |
單位 |
|
MSPR-PRLAB MARD-LABST |
庫(kù)存數(shù)量 |
MSPR-PRLAB≠0 MARD-LABST≠0 |
用戶輸入 |
庫(kù)存下限 |
|
用戶輸入 |
庫(kù)存上限 |
|
庫(kù)存金額 |
MBEW-MATNR =MARD-MATNR MBEW-BWKEY=MARD-WERKS 取到MBEW-VERPR ÷MBEW-PEINH的單價(jià) 再用單價(jià)*所對(duì)應(yīng)的庫(kù)存數(shù)量 |
|
文本顯示 |
庫(kù)存狀態(tài) |
狀態(tài)有四種(超上限、庫(kù)存過(guò)低、庫(kù)存正常、空) 當(dāng)前庫(kù)存數(shù)量與庫(kù)存上下限對(duì)比,無(wú)上下限對(duì)比則為空 高于上限值=“超上限” 介于上下限值中間=“庫(kù)存正?!?/span>文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-854479.html 低于下限值=“庫(kù)存過(guò)低”文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-854479.html |
到了這里,關(guān)于SAP_ABAP_MM_安全庫(kù)存_設(shè)計(jì)方案+實(shí)現(xiàn)代碼(MARD_MBEW )_ALV_行列控制動(dòng)態(tài)編輯的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!