一、功能展示:
1.ALV 展示画面
- 插入功能
- 复制行功能展示
- 删除行功能展示
二、源代码 (数据均是通过代码添加至内表, 不涉及取数, 所以任何系统均可执行此代码) 。
*&---------------------------------------------------------------------*
*& 功能背景 :实现取数
*& ->ALV 显 示
*& ->ALV 可编辑(新增,修改, 删除,F4帮助)
*& -> 保存至自建表( demo省略数据 检查步骤)
*&
*&---------------------------------------------------------------------*
REPORTZALV_DEMO0. 3
* 类 型池
TYPE-POOL:SSLIS.
* 在 这个类未真正定 义之前 暂时定义 ,供其他 类或者变量参照定 义(如 row-30 ) CLASSLCL_EVENT_RECEIVEDREFINITION DEFERRE.D
* 常量定 义
* 类 型定义
TYPES: BEGIN OF TYP_EDIT ,
MANDT TYPE MAND,T " 客户端
PERNR TYPE PERSN,O" 人员号
NACHN TYPE NACH,N " 姓
ZSEX TYPE CHAR,2 " 性别
SCORE TYPE CHAR,5 " 分数
END OF TYP_EDIT.
* 变 量定义
DATA: GT_FCAT TYPELVC_T_FCA,T
GS_FCAT TYPELVC_S_FCA,T
GT_F4 TYPELVC_T_F4,
GS_F4 TYPELVC_S_F4,
GS_EVENT TYPESLIS_ALV_EVEN,T
GT_EVENT TYPESLIS_T_EVENT,
GS_LAYOUT TYPELVC_S_LAY,O
GS_GLAY TYPELVC_S_GLA.Y
DATA: EVENT_RECEIVERTYPE REF TOLCL_EVENT_RECEIV,ER
GO_GRID TYPE REF TOCL_GUI_ALV_GRI.D " ALV List Viewer
DATA: BEGIN OF GS_DATA,
PERNR TYPE PERSN,O" 人员号
NACHN TYPE NACH,N " 姓
ZSEX TYPE CHAR,2 " 性别
SCORE TYPE CHAR,5 " 分数
SEL ( 1), "被显 示的内表,添加一个 专 用字段
END OFGS_DAT,A
GT_DATA LIKE STANDARD TABLE OFGS_DAT.A
DATA: BEGIN OF GS_F4VALU,E
GESCH TYPE GESC,H
ZTEXT TYPE TEXT,
END OFGS_F4VALU,E
GT_F4VALUE LIKE TABLE OF GS_F4VALU.E
*&---------------------------------------------------------------------*
*& CLASS LCL_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
CLASSLCL_EVENT_RECEIVEDREFINITION. " 定义
PUBLIC SECTION.
METHOD: S
HANDLE_F4 FOR EVENTONF4OF CL_GUI_ALV_GRID
IMPORTINGE_FIELDNAME
E_FIELDVALUE
ES_ROW_NO
ER_EVENT_DATA
ET_BAD_CELLS
E_DISPLAY .
ENDCLAS.S
*&---------------------------------------------------------------------*
*& CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*&---------------------------------------------------------------------*
CLASSLCL_EVENT_RECEIVEIRMPLEMENTATIO.N" 实施
METHODHANDLE_F.4
PERFORMF_F4_HELPUSING E_FIELDNAME
ES_ROW_NO.
ER_EVENT_DATA-> M_EVENT_HANDLE=D'x' .
PERFORMREFRESH_TABLE_A.LV
ENDMETHO. D
ENDCLAS.S
INITIALIZATION .
AT SELECTION-SCREE. N
START-OF-SELECTIO.N
" 获取数据
PERFORMFRM_GET_DA.TA
PERFORMFRM_SHOW_DA. TA
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORMFRM_GET_DAT.A
* SELECT pernr nachn FROM pa0002 INTO CORRESPONDING FIELDS OF TABLE gt_dat a
* WHERE begda LE sy-datum AND endda GE sy-datum.
GS_DATA- PERNR= '10000001' .
GS_DATA- NACHN= ' 王' .
APPENDGS_DATATO GT_DAT.A
CLEARGS_F4VALU.E
GS_F4VALUE- GESCH= 1.
GS_F4VALUE- ZTEXT = ' 男 ' .
APPENDGS_F4VALUETO GT_F4VALU.E
CLEARGS_F4VALU.E
GS_F4VALUE- GESCH= 2.
GS_F4VALUE- ZTEXT = ' 女 ' .
APPENDGS_F4VALUETO GT_F4VALU.E
ENDFOR.M " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------* FORMFRM_SHOW_DAT. A
DEFINE %%FCA. T
CLEARgs_fcat .
gs_fcat - fieldname = &1.
gs_fcat - scrtext_l = &2.
gs_fcat - KEY = &3.
gs_fcat - edit = &4.
IF &1 = 'ZSEX' .
gs_fcat - f4availabl = 'X' .
ENDIF.
APPENDgs_fcat TO gt_fcat .
END-OF-DEFINITION.
%%FCAT: 'PERNR' ' 人员编 号' 'X' 'X' ,
'NACHN' ' 姓名 ' 'X' 'X' ,
'ZSEX' ' 性别 ' '' 'X' ,
'SCORE' ' 分数 ' '' 'X' .
DATA: LS_LAYOUTTYPELVC_S_LAY.O
LS_LAYOUT- ZEBRA= ABAP_TRU.E
LS_LAYOUT- CWIDTH_OPT= ABAP_TRU.E
LS_LAYOUT- BOX_FNAM=E 'SEL' . "指定 这个字段 为 【选择块 】
GS_EVENT- NAME= 'CALLER_EXIT'.
GS_EVENT- FORM= 'F_CALLER_EXIT'.
APPENDGS_EVENTTO GT_EVEN.T
GS_GLAY- EDT_CLL_CB= 'X' .
CALL FUNCTION'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY- CPROG
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET' I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
IS_LAYOUT_LVC = LS_LAYOUT
IT_FIELDCAT_LVC = GT_FCAT
IT_EVENTS = GT_EVENT
I_GRID_SETTINGS = GS_GLAY
TABLES
T_OUTTAB = GT_DAT.A
ENDFOR.M " FRM_SHOW_DATA
FORMF_CALLER_EXITUSINGE_GRID TYPESLIS_DATA_CALLER_EX.IT
GS_F4- FIELDNAME= 'ZSEX' .
GS_F4- REGISTER= 'X' .
INSERT GS_F4INTO TABLE GT_F4.
CALL FUNCTION'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = GO_GRID.
CREATEOBJECT EVENT_RECEIV.ER
SET HANDLEREVENT_RECEIVE->RHANDLE_F4FORGO_GRI.D
CALL METHODGO_GRI-D> REGISTER_F4_FOR_FIELDS
EXPORTING
IT_F4 = GT_F4[] .
ENDFOR.M
FORMF_F4_HELPUSING E_FIELDNAMETYPELVC_FNAME ES_ROW_TNYOPELVC_S_ROID.
DATA: LT_DDSHRETVATLYPE STANDARD TABLE ODFDSHRETV,AL
LS_DDSHRETVAL TYPEDDSHRETVA. L
CHECKE_FIELDNAME= 'ZSEX' .
REFRESHLT_DDSHRETV.AL
CALL FUNCTION'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'ZSEX' " Name of return field in FIELD_TAB
DYNPPROG = SY- REPID
DYNPNR = SY- DYNNR
DYNPROFIELD = 'ZTEXT' " Name of screen field for value return
VALUE_ORG = 'S'
CALLBACK_PROGRAM= SY- REPID
TABLES
VALUE_TAB = GT_F4VALUE
RETURN_TAB = LT_DDSHRETVAL
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY- SUBRC= 0 ANDLT_DDSHRETVAILS NOT INITIAL .
CLEARLS_DDSHRETV.AL
READ TABLELT_DDSHRETVAILNTO LS_DDSHRETVAILNDEX 1.
IF LS_DDSHRETV-AFLIELDVAL IS NOT INITIAL .
CLEARGS_DAT.A
READ TABLEGT_DATAINTO GS_DATAINDEX ES_ROW_N- ROOW_ID. GS_DATA - ZSEX = LS_DDSHRETV-AFLIELDVAL.
MODIFYGT_DATAFROMGS_DATAINDEX ES_ROW_N- ROOW_ID
TRANSPORTINGZSEX. ENDIF.
ENDIF.
ENDFOR.M
FORMREFRESH_TABLE_AL.V
DATA: LS_STBL TYPELVC_S_STB.L
LS_STBL - ROW= 'X' . "
LS_STBL - COL = 'X' .
CALL METHODGO_GRI-D> REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LS_STBL.
ENDFOR.M
FORMPF_STATUS_SETUSINGRT_EXTABTYPESLIS_T_EXTAB.
SET PF-STATUS'STANDARD_001.'
ENDFOR.M
*&---------------------------------------------------------------------*
*& Form FRM_ALV_USER_COMMAND *&---------------------------------------------------------------------*
*& user_command功能实现
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORMFRM_USER_COMMANUDSING UCOMM TYPESY- UCOMM
SELFIELD TYPESLIS_SELFIELD.
DATA: LR_GRIDTYPE REF TOCL_GUI_ALV_GRI.D
DATA: L_ANSWERTYPECHAR.1
DATA: LS_LAYOUTTYPELVC_S_LAY.O
DATALT_EDIT TYPE TABLE OFTYP_EDIT.
DATALS_EDIT TYPE TYP_EDIT.
LS_LAYOUT- ZEBRA= ABAP_TRU.E
LS_LAYOUT- CWIDTH_OPT= ABAP_TRU.E
LS_LAYOUT- BOX_FNAM=E 'SEL' . "指定 这个字段 为 【选择块 】
SELFIELD - REFRESH= 'X' .
CALL FUNCTION'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LR_GRID.
LR_GRID-> CHECK_CHANGED_D(A).TA "refresh alv
* LR_GRID->REFRESH_TABLE_DISPLAY( ). "refresh alv
CASEUCOM.M
WHEN'F03' OR 'F15' .
LEAVE PROGRA. M
* LEAVE LIST-PROCESSING. " 返回选择屏幕
WHEN'F12' .
LEAVE PROGRA. M " 退出程序
WHEN'&INSERT' . " 双击事件
CLEARGS_DAT.A
INSERT GS_DATAINTO GT_DATAINDEX 1. CLEARGS_DAT.A
SELFIELD - REFRESH= 'X' .
WHEN'©'.
READ TABLEGT_DATAWITH KEY SEL = 'X' INTO GS_DAT.A
IF SY- TABIX = 1.
ENDIF.
IF SY- SUBRC= 0.
APPENDGS_DATATO GT_DATA. CLEARGS_DAT.A
ELSE.
MESSAGE' 请选择 复制行 ' TYPE'S' DISPLAY LIKE 'E' .
ENDIF.
WHEN'&DELETE'.
DELETEGT_DATAINDEX SELFIELD- TABINDEX. WHEN'SAVE' .
LOOP ATGT_DATAINTO GS_DAT.A
MOVE-CORRESPONDGINSG_DATATO LS_EDIT.
LS_EDIT - MANDT= SY- MAND.T
APPENDLS_EDIT TO LT_EDIT.
CLEAR: GS_DAT,ALS_EDIT.
ENDLOO.P
DELETE FROMZALV_EDIT.
INSERT ZALV_EDIT FROM TABLELT_EDIT.
IF SY- SUBRC= 0.
COMMIT WOR. K
MESSAGE' 保存成功 ' TYPE'S' .
ELSE.
ROLLBACK WO.RK
MESSAGE' 保存失 败 ' TYPE'S' DISPLAY LIKE 'E' .
ENDIF.
WHEN OTHE.RS
* LR_GRID->SET_FRONTEND_LAYOUT( LS_LAYOUT ).
* LR_GRID->REFRESH_TABLE_DISPLAY( ). "refresh alv
ENDCAS.E
ENDFOR.M