典型的ALV-GRID report

本文介绍了一个使用ABAP编程语言创建的ALV-GRID报表示例。该报表展示了如何从BKPF和BSEG表中选择数据,并通过ALV-GRID展示凭证抬头及行项目详情。此外,还演示了如何通过双击凭证号调用FB03事务代码查看详细凭证。

好久没有写ABAP代码了。今天想复习一下最常用的ALV-GRID报表,于是随便写了一个报表。
第一层显示凭证抬头,第二层显示行项目,第三层直接调用FB03显示凭证。关键是复习一下ALV的一些语法。

*&---------------------------------------------------------------------*
*& Report ZTEST2009 *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

REPORT ZTEST2009 .

TABLES: bkpf, bseg.

TYPE-POOLS: slis.

DATA: gt_bkpf LIKE TABLE OF bkpf WITH HEADER LINE,
gt_bseg LIKE TABLE OF bseg WITH HEADER LINE,
gt_detail LIKE TABLE OF bseg WITH HEADER LINE.

*ALV data declarations
data: fieldcatalog TYPE slis_t_fieldcat_alv with header line,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE slis_layout_alv,
gd_repid LIKE sy-repid,
gt_events TYPE slis_t_event,
gd_prntparams TYPE slis_print_alv.

data: subfieldcatalog TYPE slis_t_fieldcat_alv with header line.

PARAMETERS: p_bukrs LIKE bkpf-bukrs,
p_gjahr LIKE bkpf-gjahr,
p_blart LIKE bkpf-blart.

SELECT-OPTIONS: s_budat FOR bkpf-budat.

START-OF-SELECTION.
PERFORM data_retrieval.
PERFORM build_fieldcatalog.
PERFORM build_layout.
PERFORM display_alv_report.
*&---------------------------------------------------------------------*
*& Form data_retrieval
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM data_retrieval .
SELECT * FROM bkpf INTO TABLE gt_bkpf WHERE bukrs EQ p_bukrs
AND gjahr EQ p_gjahr
AND blart EQ p_blart
AND budat IN s_budat.

SELECT * FROM bseg INTO TABLE gt_bseg FOR ALL ENTRIES IN gt_bkpf
WHERE bukrs EQ gt_bkpf-bukrs
AND belnr EQ gt_bkpf-belnr
AND gjahr EQ gt_bkpf-gjahr.
ENDFORM. " data_retrieval
*&---------------------------------------------------------------------*
*& Form build_fieldcatalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_fieldcatalog .
fieldcatalog-fieldname = 'BUKRS'.
fieldcatalog-seltext_m = '公司代码'.
fieldcatalog-col_pos = 0.
fieldcatalog-outputlen = 4.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'BELNR'.
fieldcatalog-seltext_m = '会计凭证号码'.
fieldcatalog-col_pos = 1.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'GJAHR'.
fieldcatalog-seltext_m = '会计年度'.
fieldcatalog-col_pos = 2.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'BLART'.
fieldcatalog-seltext_m = '凭证类型'.
fieldcatalog-col_pos = 3.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.
ENDFORM. " build_fieldcatalog
*&---------------------------------------------------------------------*
*& Form build_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_layout .
gd_layout-no_input = 'X'.
gd_layout-colwidth_optimize = 'X'.
gd_layout-zebra = 'X'.
gd_layout-no_vline = 'X'.
ENDFORM. " build_layout
*&---------------------------------------------------------------------*
*& Form display_alv_report
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_alv_report .
gd_repid = sy-repid.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = gd_repid
i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM
i_callback_user_command = 'USER_COMMAND'
* i_grid_title = outtext
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
* it_special_groups = gd_tabgroup
it_events = gt_events
is_print = gd_prntparams
i_save = 'X'
* is_variant = z_template
tables
t_outtab = gt_bkpf
exceptions
program_error = 1
others = 2.
if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
ENDFORM. " display_alv_report
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
clear: gt_detail.
refresh: gt_detail.

CASE r_ucomm. "Condition on command executed
WHEN '&IC1'. "Double Click
IF rs_selfield-fieldname = 'BELNR'.
READ TABLE gt_bkpf INDEX rs_selfield-tabindex.
LOOP AT gt_bseg WHERE belnr EQ gt_bkpf-belnr.
APPEND gt_bseg TO gt_detail.
ENDLOOP.
IF subfieldcatalog[] is initial.
PERFORM build_subfieldcatalog.
ENDIF.
PERFORM display_sub_alv_report TABLES gt_detail.
ENDIF.
ENDCASE.

ENDFORM. " USER_COMMAND
*&---------------------------------------------------------------------*
*& Form build_subfieldcatalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_subfieldcatalog .
subfieldcatalog-fieldname = 'BUKRS'.
subfieldcatalog-seltext_m = '公司代码'.
subfieldcatalog-col_pos = 0.
subfieldcatalog-outputlen = 4.
subfieldcatalog-emphasize = 'X'.
subfieldcatalog-key = 'X'.
append subfieldcatalog to subfieldcatalog.
clear subfieldcatalog.

subfieldcatalog-fieldname = 'BELNR'.
subfieldcatalog-seltext_m = '会计凭证号码'.
subfieldcatalog-col_pos = 1.
subfieldcatalog-no_zero = 'X'.
append subfieldcatalog to subfieldcatalog.
clear subfieldcatalog.

subfieldcatalog-fieldname = 'GJAHR'.
subfieldcatalog-seltext_m = '会计年度'.
subfieldcatalog-col_pos = 2.
append subfieldcatalog to subfieldcatalog.
clear subfieldcatalog.

subfieldcatalog-fieldname = 'BLART'.
subfieldcatalog-seltext_m = '凭证类型'.
subfieldcatalog-col_pos = 3.
append subfieldcatalog to subfieldcatalog.
clear subfieldcatalog.

subfieldcatalog-fieldname = 'BUZEI'.
subfieldcatalog-seltext_m = '凭证行项目'.
subfieldcatalog-col_pos = 4.
append subfieldcatalog to subfieldcatalog.
clear subfieldcatalog.

subfieldcatalog-fieldname = 'AUGDT'.
subfieldcatalog-seltext_m = '清帐日期'.
subfieldcatalog-col_pos = 5.
append subfieldcatalog to subfieldcatalog.
clear subfieldcatalog.

subfieldcatalog-fieldname = 'DMBTR'.
subfieldcatalog-seltext_m = '本位币金额'.
subfieldcatalog-col_pos = 6.
* subfieldcatalog-do_sum = 'X'.
append subfieldcatalog to subfieldcatalog.
clear subfieldcatalog.

ENDFORM. " build_subfieldcatalog
*&---------------------------------------------------------------------*
*& Form display_sub_alv_report
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_BSEG text
*----------------------------------------------------------------------*
FORM display_sub_alv_report TABLES p_lt_bseg STRUCTURE bseg.

call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = gd_repid
* i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM
i_callback_user_command = 'SUB_USER_COMMAND'
* i_grid_title = outtext
is_layout = gd_layout
it_fieldcat = subfieldcatalog[]
* it_special_groups = gd_tabgroup
it_events = gt_events
is_print = gd_prntparams
i_save = 'X'
* is_variant = z_template
tables
t_outtab = p_lt_bseg
exceptions
program_error = 1
others = 2.
if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
ENDFORM. " display_sub_alv_report
*-------------------------------------------------------------------*
* Form TOP-OF-PAGE *
*-------------------------------------------------------------------*
* ALV Report Header *
*-------------------------------------------------------------------*
Form top-of-page.
*ALV Header declarations
data: t_header type slis_t_listheader,
wa_header type slis_listheader,
t_line like wa_header-info,
ld_lines type i,
ld_linesc(10) type c.

* Title
wa_header-typ = 'H'.
wa_header-info = 'BKPF Table Report'.
append wa_header to t_header.
clear wa_header.

* Date
wa_header-typ = 'S'.
wa_header-key = 'Date: '.
CONCATENATE sy-datum+6(2) '.'
sy-datum+4(2) '.'
sy-datum(4) INTO wa_header-info. "todays date
append wa_header to t_header.
clear: wa_header.

* Total No. of Records Selected
describe table gt_bkpf lines ld_lines.
ld_linesc = ld_lines.
concatenate 'Total No. of Records Selected: ' ld_linesc
into t_line separated by space.
wa_header-typ = 'A'.
wa_header-info = t_line.
append wa_header to t_header.
clear: wa_header, t_line.

call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = t_header.
* i_logo = 'Z_LOGO'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SUB_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'.
IF RS_SELFIELD-FIELDNAME = 'BELNR'.
SET PARAMETER ID 'BUK' FIELD p_bukrs.
READ TABLE gt_detail INDEX rs_selfield-tabindex.
SET PARAMETER ID 'GJR' FIELD gt_detail-gjahr.
SET PARAMETER ID 'BLN' FIELD gt_detail-belnr.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.

ENDFORM. " SUB_USER_COMMAND

*&---------------------------------------------------------------------* *& Report ZMMR_048 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT zmmr_049. TABLES:ztmm038,mkpf,ztmm060. TYPES : BEGIN OF ty_wafer_scrap_alv, sel TYPE c, "选择 BYE001593 20250409 message TYPE bapi_msg, status TYPE icon_d, mblnr TYPE ztmm038-mblnr, zeile TYPE ztmm038-zeile, matnr TYPE ztmm038-matnr, werks TYPE ztmm038-werks, lgort TYPE ztmm038-lgort, menge TYPE ztmm038-menge, licha TYPE c LENGTH 15, bwart TYPE ztmm038-bwart, charg TYPE ztmm038-charg, lotid TYPE ztmm038-lotid, kostl TYPE ztmm038-kostl, bldat TYPE ztmm038-bldat, mtsnr TYPE ztmm038-mtsnr, budat TYPE mkpf-budat, mblnr_ll TYPE matdoc-mblnr, "领料单凭证 zeile_ll TYPE matdoc-zeile, "领料单凭证行号 mblnr_sh TYPE matdoc-mblnr, zeile_sh TYPE matdoc-zeile, ebeln TYPE matdoc-ebeln, "采购订单号 ebelp TYPE matdoc-ebelp, "采购订单行号 is_development TYPE ztmm038-is_development, is_development_c TYPE c LENGTH 1, zbfjylb TYPE ztmm038-zbfjylb, "报废晶圆类别 BY E000548 20240814 ddtext TYPE dd07v-ddtext, "报废晶圆类别文本 BY E000548 20240904 zxmbm TYPE ztmm038-zxmbm, "项目编码 BY E000548 20240814 zeqid TYPE ztmm038-zeqid, "EQ ID BY E000548 20240814 zmatnr TYPE ztmm038-zmatnr, "Meterial P/N BY E000548 20240814 is_billed TYPE ztmm038-is_billed, is_sbxm TYPE ztmm038-is_sbxm, "申报项目 BY E001593 20250408 belnr TYPE rseg-belnr, "发票凭证 BY E001593 20250512 lgpla TYPE ztmm038-lgpla, "架位 BYE001593 20250512 menge_bf_cz TYPE ztmm060-menge, "除帐数量 BYE001593 20250724 END OF ty_wafer_scrap_alv. DATA:gt_wafer_scrap_alv TYPE TABLE OF ty_wafer_scrap_alv, gs_wafer_scrap_alv TYPE ty_wafer_scrap_alv. DATA: gt_fieldcat TYPE lvc_t_fcat, "字段目录 gs_fieldcat LIKE LINE OF gt_fieldcat, gs_layout TYPE lvc_s_layo. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS: s_werks FOR ztmm038-werks, s_matnr FOR ztmm038-matnr, s_mblnr FOR ztmm038-mblnr, s_lotid FOR ztmm038-lotid, s_licha FOR ztmm038-licha, s_bldat FOR ztmm038-bldat, s_mtsnr FOR ztmm038-mtsnr, s_zbflb FOR ztmm038-zbfjylb, s_zxmbm FOR ztmm038-zxmbm, s_budat FOR mkpf-budat. PARAMETERS p_is_de TYPE ztmm038-is_development AS CHECKBOX. PARAMETERS p_billed TYPE c AS CHECKBOX. PARAMETERS p_sbxm TYPE c AS CHECKBOX. "申报项目 BYE001593 20250408 SELECTION-SCREEN:END OF BLOCK b1. INITIALIZATION. AT SELECTION-SCREEN OUTPUT. AT SELECTION-SCREEN. START-OF-SELECTION. PERFORM frm_get_wafer_scrap_data. END-OF-SELECTION. PERFORM frm_alv_display. *&---------------------------------------------------------------------* *& Form FRM_GET_RAW_MATERIALS_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_get_wafer_scrap_data. DATA:lv_menge_bf_cz TYPE ztmm060-menge. "BYE001593 20250427 新增除帐数量 SELECT mblnr zeile matnr werks lgort menge licha bwart charg lotid kostl bldat mtsnr lgpla zscrap_type budat is_development"是否研发 zbfjylb " 报废晶圆类别 BY E000548 20240814 zxmbm " 项目编码 BY E000548 20240814 zeqid " EQ ID BY E000548 20240814 zmatnr " Meterial P/N BY E000548 20240814 is_billed is_sbxm "申报项目 BYE001593 20250408 lgpla "架位 BYE001593 20250512 INTO CORRESPONDING FIELDS OF TABLE gt_wafer_scrap_alv FROM zv_mm_030 AS a WHERE werks IN s_werks AND matnr IN s_matnr AND mblnr IN s_mblnr AND lotid IN s_lotid AND licha IN s_licha AND bldat IN s_bldat AND mtsnr IN s_mtsnr AND budat IN s_budat AND zbfjylb IN s_zbflb AND zxmbm IN s_zxmbm. IF gt_wafer_scrap_alv IS NOT INITIAL. SELECT matnr, werks, charg, licha INTO TABLE @DATA(lt_mcha) FROM mcha FOR ALL ENTRIES IN @gt_wafer_scrap_alv WHERE matnr = @gt_wafer_scrap_alv-matnr AND licha = @gt_wafer_scrap_alv-licha. SORT lt_mcha BY matnr charg DESCENDING. LOOP AT gt_wafer_scrap_alv INTO gs_wafer_scrap_alv. READ TABLE lt_mcha INTO DATA(ls_mcha) WITH KEY matnr = gs_wafer_scrap_alv-matnr licha = gs_wafer_scrap_alv-licha. IF sy-subrc = 0. gs_wafer_scrap_alv-charg = ls_mcha-charg. ELSE. gs_wafer_scrap_alv-charg = ''. ENDIF. MODIFY gt_wafer_scrap_alv FROM gs_wafer_scrap_alv. ENDLOOP. SELECT key1, key2, key3, key4, key5, key6, mblnr, mjahr, zeile, matnr, charg, ebeln, ebelp, bwart, aufnr, budat, cputm INTO TABLE @DATA(lt_matdoc) FROM matdoc FOR ALL ENTRIES IN @gt_wafer_scrap_alv WHERE matnr = @gt_wafer_scrap_alv-matnr AND charg = @gt_wafer_scrap_alv-charg AND ( bwart = '101' OR bwart = '561' OR bwart = 'Z11' OR bwart = '501') AND charg <> ''. "收货 101 561 501 Z11(100N) "领料 201 261 SORT lt_matdoc BY matnr charg bwart budat DESCENDING. IF lt_matdoc IS NOT INITIAL. SELECT * INTO TABLE @DATA(lt_rseg) FROM rseg FOR ALL ENTRIES IN @lt_matdoc WHERE lfbnr = @lt_matdoc-mblnr AND lfgja = @lt_matdoc-mjahr AND lfpos = @lt_matdoc-zeile. ENDIF. SELECT key1, key2, key3, key4, key5, key6, mblnr, mjahr, zeile, matnr, charg, ebeln, ebelp, bwart, aufnr, budat, cputm INTO TABLE @DATA(lt_matdoc_ll) FROM matdoc FOR ALL ENTRIES IN @gt_wafer_scrap_alv WHERE matnr = @gt_wafer_scrap_alv-matnr AND charg = @gt_wafer_scrap_alv-charg AND ( bwart = '201' OR bwart = '261') AND charg <> ''. SORT lt_matdoc_ll BY matnr charg budat DESCENDING cputm DESCENDING. SELECT domvalue_l, ddtext INTO TABLE @DATA(lt_dd07v) FROM dd07v WHERE domname = 'ZDBFJYLB' . SELECT "BYE001593 20250724 新增除帐数量 * INTO TABLE @DATA(lt_ztmm060) FROM ztmm060 FOR ALL ENTRIES IN @gt_wafer_scrap_alv WHERE matnr = @gt_wafer_scrap_alv-matnr AND charg = @gt_wafer_scrap_alv-charg AND lotid = @gt_wafer_scrap_alv-lotid. IF lt_ztmm060 IS NOT INITIAL. DATA(lt_ztmm060_middle) = lt_ztmm060. SORT lt_ztmm060_middle BY mblnr charg. DELETE ADJACENT DUPLICATES FROM lt_ztmm060_middle COMPARING mblnr charg. SELECT * INTO TABLE @DATA(lt_matdoc_cancelled) FROM matdoc FOR ALL ENTRIES IN @lt_ztmm060_middle WHERE mblnr = @lt_ztmm060_middle-mblnr AND cancelled = 'X'. ENDIF. ENDIF. LOOP AT gt_wafer_scrap_alv INTO gs_wafer_scrap_alv. READ TABLE lt_matdoc INTO DATA(ls_matdoc_101) WITH KEY matnr = gs_wafer_scrap_alv-matnr charg = gs_wafer_scrap_alv-charg bwart = '101'. IF sy-subrc = 0. gs_wafer_scrap_alv-mblnr_sh = ls_matdoc_101-mblnr. "收货凭证 gs_wafer_scrap_alv-zeile_sh = ls_matdoc_101-zeile. "收货凭证行项目 gs_wafer_scrap_alv-ebeln = ls_matdoc_101-ebeln. "采购订单号 gs_wafer_scrap_alv-ebelp = ls_matdoc_101-ebelp. "采购订单行号 READ TABLE lt_rseg INTO DATA(ls_rseg) WITH KEY lfbnr = ls_matdoc_101-mblnr lfgja = ls_matdoc_101-mjahr lfpos = ls_matdoc_101-zeile. IF sy-subrc = 0. gs_wafer_scrap_alv-belnr = ls_rseg-belnr. " ENDIF. ENDIF. READ TABLE lt_matdoc INTO DATA(ls_matdoc_561) WITH KEY matnr = gs_wafer_scrap_alv-matnr charg = gs_wafer_scrap_alv-charg bwart = '561'. IF sy-subrc = 0. gs_wafer_scrap_alv-mblnr_sh = ls_matdoc_561-mblnr. "收货凭证 gs_wafer_scrap_alv-zeile_sh = ls_matdoc_561-zeile. "收货凭证行项目 ENDIF. READ TABLE lt_matdoc INTO DATA(ls_matdoc_501) WITH KEY matnr = gs_wafer_scrap_alv-matnr charg = gs_wafer_scrap_alv-charg bwart = '501'. IF sy-subrc = 0. gs_wafer_scrap_alv-mblnr_sh = ls_matdoc_501-mblnr. "收货凭证 gs_wafer_scrap_alv-zeile_sh = ls_matdoc_501-zeile. "收货凭证行项目 ENDIF. READ TABLE lt_matdoc INTO DATA(ls_matdoc_z11) WITH KEY matnr = gs_wafer_scrap_alv-matnr charg = gs_wafer_scrap_alv-charg bwart = 'Z11'. IF sy-subrc = 0. gs_wafer_scrap_alv-mblnr_sh = ls_matdoc_z11-mblnr. "收货凭证 gs_wafer_scrap_alv-zeile_sh = ls_matdoc_z11-zeile. "收货凭证行项目 ENDIF. READ TABLE lt_matdoc_ll INTO DATA(ls_matdoc_ll) WITH KEY matnr = gs_wafer_scrap_alv-matnr charg = gs_wafer_scrap_alv-charg. IF sy-subrc = 0. gs_wafer_scrap_alv-mblnr_ll = ls_matdoc_ll-mblnr. "领料单凭证 gs_wafer_scrap_alv-zeile_ll = ls_matdoc_ll-zeile. "领料单凭证行项目 ENDIF. READ TABLE lt_dd07v INTO DATA(ls_dd07v) WITH KEY domvalue_l = gs_wafer_scrap_alv-zbfjylb . IF sy-subrc = 0. gs_wafer_scrap_alv-ddtext = ls_dd07v-ddtext. "报废晶圆类别描述 BY E000548 20240904 ENDIF. CLEAR lv_menge_bf_cz. "BYE001593 20250724 新增除帐数量 IF gs_wafer_scrap_alv-is_billed = 'X'. " 已经被手动填已除帐的,默认全部数量都除完,填充报废库存数量 E001593 20250811 lv_menge_bf_cz = gs_wafer_scrap_alv-menge. ELSE. LOOP AT lt_ztmm060 INTO DATA(ls_ztmm060) WHERE matnr = gs_wafer_scrap_alv-matnr AND charg = gs_wafer_scrap_alv-charg AND lotid = gs_wafer_scrap_alv-lotid. READ TABLE lt_matdoc_cancelled INTO DATA(ls_matdoc_cancelled) WITH KEY mblnr = ls_ztmm060-mblnr . IF sy-subrc <> 0. lv_menge_bf_cz = lv_menge_bf_cz + ls_ztmm060-menge. ENDIF. ENDLOOP. ENDIF. gs_wafer_scrap_alv-menge_bf_cz = lv_menge_bf_cz. IF gs_wafer_scrap_alv-zbfjylb <> '' AND gs_wafer_scrap_alv-zbfjylb <> 'Z'."报废晶圆类别不为空且不是Z其他时,是否研发填写X BY E000548 20240814 gs_wafer_scrap_alv-is_development = 'X'. ENDIF. MODIFY gt_wafer_scrap_alv FROM gs_wafer_scrap_alv. ENDLOOP. IF p_is_de IS NOT INITIAL. "勾选研发选项时,删除研发字段为空的数据 DELETE gt_wafer_scrap_alv WHERE is_development = '' . ENDIF. IF p_billed IS INITIAL. DELETE gt_wafer_scrap_alv WHERE menge_bf_cz <> '' . "bye001593 20250724 ENDIF. IF p_sbxm IS NOT INITIAL. DELETE gt_wafer_scrap_alv WHERE is_sbxm = '' . ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_ALV_DISPLAY *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_alv_display . PERFORM frm_field_set. gs_layout-zebra = 'X'. * gs_layout-info_fname = 'CLR'. * gs_layout-box_fname = 'BOX'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = * I_BUFFER_ACTIVE = i_callback_program = sy-repid i_callback_pf_status_set = 'FRM_STATUS_SET' i_callback_user_command = 'FRM_SAVESBXM' "申报项目 BYE001593 20250409 * I_CALLBACK_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_END_OF_LIST = ' ' * I_STRUCTURE_NAME = * I_BACKGROUND_ID = ' ' * I_GRID_TITLE = * I_GRID_SETTINGS = is_layout_lvc = gs_layout * it_fieldcat_lvc = gt_fieldcat_raw_materials it_fieldcat_lvc = gt_fieldcat * IT_EXCLUDING = * IT_SPECIAL_GROUPS_LVC = * IT_SORT_LVC = * IT_FILTER_LVC = * IT_HYPERLINK = * IS_SEL_HIDE = * I_DEFAULT = 'X' i_save = 'A' * is_variant = gs_alv_variant * IMPORTING * e_exit_caused_by_caller = * es_exit_caused_by_user = TABLES t_outtab = gt_wafer_scrap_alv EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_STATUS_SET *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->PT_EXTAB text *----------------------------------------------------------------------* FORM frm_status_set USING pt_extab TYPE slis_t_extab. SET PF-STATUS 'ZSTUTAS'. ENDFORM. " FORM frm_savesbxm USING r_ucomm LIKE sy-ucomm "申报项目 BYE001593 20250409 rs_selfield TYPE slis_selfield. DATA: lr_grid TYPE REF TO cl_gui_alv_grid. DATA l_tabix LIKE sy-tabix. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = lr_grid. CALL METHOD lr_grid->check_changed_data. rs_selfield-refresh = 'X'. rs_selfield-row_stable = 'X'. rs_selfield-col_stable = 'X'. . CASE r_ucomm. WHEN 'BACK'. LEAVE TO SCREEN 0. WHEN 'EXIT'. LEAVE PROGRAM. WHEN 'ZALL'. "全选 BYE001593 20250409 gs_wafer_scrap_alv-sel = 'X'. MODIFY gt_wafer_scrap_alv FROM gs_wafer_scrap_alv TRANSPORTING sel WHERE sel IS INITIAL. WHEN 'ZDISALL'. "取消全选 BYE001593 20250409 gs_wafer_scrap_alv-sel = ''. MODIFY gt_wafer_scrap_alv FROM gs_wafer_scrap_alv TRANSPORTING sel WHERE sel IS NOT INITIAL. WHEN '&ZSAV'. PERFORM frm_save_sbxm. WHEN 'ZXMQX'. "全选项目 BYE001593 20250512 gs_wafer_scrap_alv-is_sbxm = 'X'. MODIFY gt_wafer_scrap_alv FROM gs_wafer_scrap_alv TRANSPORTING is_sbxm WHERE is_sbxm IS INITIAL. WHEN 'ZDISXM'. "取消项目 BYE001593 20250512 gs_wafer_scrap_alv-is_sbxm = ''. MODIFY gt_wafer_scrap_alv FROM gs_wafer_scrap_alv TRANSPORTING is_sbxm WHERE is_sbxm IS NOT INITIAL. WHEN OTHERS. ENDCASE. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_SAVE_SBXM *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_save_sbxm. "更新底表申报项目数据 BYE001593 20250409 LOOP AT gt_wafer_scrap_alv INTO gs_wafer_scrap_alv WHERE sel = 'X'. UPDATE ztmm038 SET is_sbxm = gs_wafer_scrap_alv-is_sbxm lgpla = gs_wafer_scrap_alv-lgpla WHERE mblnr = gs_wafer_scrap_alv-mblnr AND "增加架位 BYE001593 20250512 zeile = gs_wafer_scrap_alv-zeile. IF sy-subrc = 0. COMMIT WORK. gs_wafer_scrap_alv-message = '保存成功!'. gs_wafer_scrap_alv-status = icon_green_light. ELSE. ROLLBACK WORK. gs_wafer_scrap_alv-message = '保存失败!'. gs_wafer_scrap_alv-status = icon_red_light. ENDIF. MODIFY gt_wafer_scrap_alv FROM gs_wafer_scrap_alv. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_FIELD_SET *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_field_set . CLEAR gt_fieldcat. DEFINE fieldcatset. CLEAR gs_fieldcat. gs_fieldcat-fieldname = &1. "字段名称 gs_fieldcat-coltext = &2. "字段显示名称 gs_fieldcat-ref_table = &3. "参考表 gs_fieldcat-ref_field = &4. "参考字段 gs_fieldcat-edit = &5. "是否可编辑 gs_fieldcat-checkbox = &6. "是否可编辑 gs_fieldcat-outputlen = &7. "是否可编辑 gs_fieldcat-emphasize = &8. APPEND gs_fieldcat TO gt_fieldcat. END-OF-DEFINITION. fieldcatset 'SEL' 'SELECT' '' '' 'X' 'X' '8' ''. fieldcatset 'STATUS' '状态' '' '' '' '' '5' ''. fieldcatset 'MESSAGE' '消息' '' '' '' '' '8' ''. fieldcatset 'MBLNR' '报废凭证' '' '' '' '' '10' ''. fieldcatset 'ZEILE' '报废凭证行项目' '' '' '' '' '10' ''. fieldcatset 'MATNR' '物料' 'ZTMM038' 'MATNR' '' '' '11' ''. fieldcatset 'WERKS' '工厂' 'ZTMM038' 'WERKS' '' '' '4' ''. fieldcatset 'LGORT' '库存地点' 'ZTMM038' 'LGORT' '' '' '7' ''. fieldcatset 'MENGE' '数量' 'ZTMM038' 'MENGE' '' '' '8' ''. fieldcatset 'LICHA' '供应商批次' 'ZTMM038' 'LICHA' '' '' '15' ''. fieldcatset 'BWART' '移动类型' 'ZTMM038' 'BWART' '' '' '8' ''. fieldcatset 'CHARG' '批次' 'ZTMM038' 'CHARG' '' '' '12' ''. fieldcatset 'LOTID' 'LOT ID' 'ZTMM038' 'LOTID' '' '' '15' ''. fieldcatset 'KOSTL' '成本中心' 'ZTMM038' 'KOSTL' '' '' '8' ''. fieldcatset 'IS_SBXM' '申报项目' 'ZTMM038' 'IS_SBXM' 'X' 'X' '10' ''. fieldcatset 'BLDAT' 'OA流程创建日期' '' '' '' '' '12' ''. fieldcatset 'MTSNR' 'OA流程号' '' '' '' '' '12' ''. fieldcatset 'BUDAT' '过账日期' '' '' '' '' '10' ''. fieldcatset 'MBLNR_LL' '领料凭证' '' '' '' '' '10' ''. fieldcatset 'ZEILE_LL' '领料凭证行项目' '' '' '' '' '13' ''. fieldcatset 'EBELN' '采购订单号' 'MATDOC' 'EBELN' '' '' '10' ''. fieldcatset 'EBELP' '采购订单行号' 'MATDOC' 'EBELP' '' '' '10' ''. fieldcatset 'MBLNR_SH' '收货凭证' '' '' '' '' '10' ''. fieldcatset 'ZEILE_SH' '收货凭证行项目' '' '' '' '' '10' ''. fieldcatset 'IS_DEVELOPMENT' '新工艺设备材料' '' '' '' '' '10' ''. fieldcatset 'ZBFJYLB' '报废晶圆类别' 'ZTMM038' 'ZBFJYLB' '' '' '5' ''. fieldcatset 'DDTEXT' '报废晶圆类别文本' 'DD07V' 'DDTEXT' '' '' '15' ''. fieldcatset 'ZXMBM' '项目编码' 'ZTMM038' 'ZXMBM' '' '' '10' ''. fieldcatset 'ZEQID' 'EQ ID' 'ZTMM038' 'ZEQID' '' '' '10' ''. fieldcatset 'ZMATNR' 'Meterial P/N' 'ZTMM038' 'ZMATNR' '' '' '10' ''. * fieldcatset 'IS_BILLED' '已除账' 'ZTMM038' 'IS_BILLED' '' '' '10' ''. fieldcatset 'BELNR' '发票校验凭证' 'RSEG' 'BELNR' '' '' '10' ''. fieldcatset 'LGPLA' '架位' 'ZTMM038' 'LGPLA' 'X' '' '10' ''. fieldcatset 'menge_bf_cz' '除帐数量' '' '' '' '' '10' ''. ENDFORM.把这段代码里更改表并保存的有关逻辑提取出来
最新发布
12-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值