ABAP ALV— F4 帮助 插入 复制 删除 编辑 (源码)

一、功能展示:

1.ALV 展示画面

  1. 插入功能
  2. 复制行功能展示
  3. 删除行功能展示

源代码 (数据均是通过代码添加至内表, 不涉及取数, 所以任何系统均可执行此代码) 

*&---------------------------------------------------------------------*

*& 功能背景 :实取数

*& ->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

猜你喜欢

转载自blog.csdn.net/Pegasus666/article/details/118275727