复制粘贴即可使用,只需要修改一下几点即可实现ALV报表展示
1.TY_ALV的定义,这是展示的alv的结构
2.选择屏幕
3.PERFORM GET_DATA.的内容,在里面写入报表的取值即可,ALV的展示表是GT_ALV
4.FIELDCAT 报表展示的清单
5.gui状态,不写会导致按钮报错
6.选择屏幕文本
TABLES : BKPF,BSEG.
"定义内表
TYPES:BEGIN OF TY_ALV,
SEL TYPE C ,
BUKRS TYPE BSEG-BUKRS ,
BELNR TYPE BSEG-BELNR ,
GJAHR TYPE BSEG-GJAHR ,
BUZEI TYPE BSEG-BUZEI ,
WRBTR TYPE BSEG-WRBTR ,
HKONT TYPE BSEG-HKONT ,
SHKZG TYPE BSEG-SHKZG ,
MWSKZ TYPE BSEG-MWSKZ .
TYPES END OF TY_ALV.
"定义内表和工作区
DATA:GT_ALV TYPE STANDARD TABLE OF TY_ALV,
GS_ALV TYPE TY_ALV,
GS_LAYOUT TYPE LVC_S_LAYO,
GT_FCAT TYPE LVC_T_FCAT,
GT_EVENTS TYPE SLIS_T_EVENT.
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
S_BUKRS FOR BKPF-BUKRS , "公司代码
S_GJAHR FOR BKPF-GJAHR , "会计年度
S_MONAT FOR BSEG-H_MONAT , "过账期间
S_BLART FOR BKPF-BLART , "凭证类型
S_HKONT FOR BSEG-HKONT . "科目
SELECTION-SCREEN END OF BLOCK BLK1.
**********************************************************************
* INITIALIZATION
**********************************************************************
INITIALIZATION.
**********************************************************************
* AT SELECTION-SCREEN OUTPUT *
**********************************************************************
AT SELECTION-SCREEN OUTPUT.
**********************************************************************
* AT SELECTION-SCREEN.
**********************************************************************
AT SELECTION-SCREEN.
**********************************************************************
* S T A R T O F S E L E C T I O N *
**********************************************************************
START-OF-SELECTION.
PERFORM GET_DATA.
PERFORM PROCESS_DATA.
PERFORM DISPLAY_DATA.
*&---------------------------------------------------------------------*
*& Form FRM_AUTH_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_AUTH_CHECK ."
" AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
" ID 'BUKRS' FIELD S_BUKRS
" ID 'ACTVT' FIELD '03'.
" IF SY-SUBRC <> 0.
" MESSAGE E001(00) WITH '您没有该公司的权限' S_BUKRS.
" ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GET_DATA .
SELECT * FROM BSEG INTO CORRESPONDING FIELDS OF TABLE @GT_ALV UP TO 10 ROWS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM PROCESS_DATA .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM DISPLAY_DATA .
PERFORM FRM_SET_LAYOUT.
PERFORM FRM_SET_EVENT.
PERFORM FRM_SET_FIELDCAT.
PERFORM FRM_DISPLAY_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text alv 布局
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .
CLEAR GS_LAYOUT.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-SEL_MODE = 'A'.
GS_LAYOUT-BOX_FNAME = 'SEL'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .
DATA: LS_FCAT LIKE LINE OF GT_FCAT.
DATA: LV_INDEX TYPE I.
DEFINE MCR_BUILD_FCAT.
lv_index = lv_index + 1.
CLEAR ls_fcat.
ls_fcat-col_pos = lv_index.
ls_fcat-fieldname = &2.
ls_fcat-ref_field = &3.
ls_fcat-ref_table = &4.
ls_fcat-no_out = &5.
ls_fcat-coltext = &6.
ls_fcat-scrtext_l = &6.
ls_fcat-scrtext_m = &6.
ls_fcat-scrtext_s = &6.
IF ls_fcat-fieldname = 'ZNUM'.""改成需要去前导零的字段
ls_fcat-no_zero = 'X'.
ENDIF.
APPEND ls_fcat TO &1.
CLEAR ls_fcat.
END-OF-DEFINITION.
*** ALV1 fieldcat 设置字段
* - 固定字段
MCR_BUILD_FCAT GT_FCAT 'BUKRS ' 'BUKRS ' 'BSEG' '' '公司代码'.
MCR_BUILD_FCAT GT_FCAT 'BELNR ' 'BELNR ' 'BSEG' '' '凭证编号'.
MCR_BUILD_FCAT GT_FCAT 'GJAHR ' 'GJAHR ' 'BSEG' '' '财年'.
MCR_BUILD_FCAT GT_FCAT 'BUZEI ' 'BUZEI ' 'BSEG' '' '行项目'.
MCR_BUILD_FCAT GT_FCAT 'WRBTR ' 'WRBTR ' 'BSEG' '' '金额'.
MCR_BUILD_FCAT GT_FCAT 'HKONT ' 'HKONT ' 'BSEG' '' '科目'.
MCR_BUILD_FCAT GT_FCAT 'SHKZG ' 'SHKZG ' 'BSEG' '' '借贷'.
MCR_BUILD_FCAT GT_FCAT 'MWSKZ ' 'MWSKZ ' 'BSEG' '' '税码'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_EVENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_EVENT.
DATA:LS_EVENT LIKE LINE OF GT_EVENTS.
LS_EVENT-NAME = 'USER_COMMAND' . "用户响应事件
LS_EVENT-FORM = 'FRM_USER_COMMAND'.
APPEND LS_EVENT TO GT_EVENTS.
LS_EVENT-NAME = 'PF_STATUS_SET' . "工具栏事件
LS_EVENT-FORM = 'FRM_SET_STATUS'.
LS_EVENT-NAME = 'DATA_CHANGED' . "修改事件
LS_EVENT-FORM = 'frm_alv_data_changed'.
APPEND LS_EVENT TO GT_EVENTS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .
DATA ls_grid_settings TYPE LVC_S_GLAY .
ls_grid_settings-edt_cll_cb = 'X' .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT_LVC = GS_LAYOUT
IT_FIELDCAT_LVC = GT_FCAT
IT_EVENTS = GT_EVENTS
i_grid_settings = ls_grid_settings
I_CALLBACK_PF_STATUS_SET = 'FRM_SET_STATUS'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
I_SAVE = 'A'
TABLES
T_OUTTAB = GT_ALV
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.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
FORM FRM_SET_STATUS USING P_EXTAB TYPE SLIS_T_EXTAB .
SET PF-STATUS 'STANDARD'.
SET TITLEBAR 'STANDARD'.
ENDFORM.
FORM FRM_USER_COMMAND USING P_UCOMM TYPE SY-UCOMM
P_RS_SELFIELD TYPE SLIS_SELFIELD.
READ TABLE GT_ALV INTO DATA(LS_ALV) INDEX P_RS_SELFIELD-TABINDEX .
CASE P_UCOMM.
WHEN '&DATA_SAVE' . " 保存数据
PERFORM FRM_SAVE_DATA .
ENDCASE.
P_RS_SELFIELD-REFRESH = 'X' . " 当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新
ENDFORM. " frm_alv_user_command
FORM FRM_SAVE_DATA .
LOOP AT GT_ALV INTO DATA(LS_ALV) WHERE SEL = 'X' .
ENDLOOP.
ENDFORM .
form frm_alv_data_changed using p_changed_data type ref to cl_alv_changed_data_protocol.
data: field_name(20),
modified_cells type lvc_s_modi.
data: l_city like spfli-cityto.
field-symbols <field_value>.
loop at p_changed_data->mt_mod_cells into modified_cells . "" where fieldname = 'C'.
READ TABLE GT_ALV INDEX modified_cells-ROW_ID ASSIGNING FIELD-SYMBOL(<FS_ALV>) .
IF SY-SUBRC = 0.
""alv数据变化了,其他字段同步修改
ENDIF.
endloop.
endform.