代码部分:
DATA GO_TIMER TYPE REF TO CL_GUI_TIMER.
*--------------------------------------------------------------------
* CLASS cl_event_receiver DEFINITION
*--------------------------------------------------------------------
*--------------------------------------------------------------------
CLASS CL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
" 声明TOOLBAR事件方法
METHODS HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE.
" 声明USER-COMMAND 事件方法
METHODS HANDLE_COMMAND
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
" ENTE时触发
METHODS HANDLE_ENTE
FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
IMPORTING E_MODIFIED ET_GOOD_CELLS.
METHODS HANDLE_TIMER
FOR EVENT FINISHED OF CL_GUI_TIMER.
PRIVATE SECTION.
ENDCLASS. "CL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER IMPLEMENTATION.
" 实现ENTE 事件方法
METHOD HANDLE_ENTE.
DATA GS_LAYOUT_ALV TYPE LVC_S_LAYO.
DATA LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
PERFORM FOM_REFRESH . "获取描述
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
GS_LAYOUT_ALV-CWIDTH_OPT = 'X'. "优化列宽
CALL METHOD GO_ALV_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = GS_LAYOUT_ALV.
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING
CONTROL = GO_ALV_GRID.
CALL METHOD CL_GUI_CFW=>FLUSH.
*
CALL METHOD GO_TIMER->RUN "必须重新激活定时器
EXCEPTIONS
OTHERS = 9.
ENDMETHOD. "HANDLE_MODIFY
METHOD HANDLE_TIMER.
*--------------------------------------------------------------------
CALL METHOD CL_GUI_CFW=>DISPATCH.
CALL METHOD GO_ALV_GRID->CHECK_CHANGED_DATA.
*--------------------------------------------------------------------
DATA GS_LAYOUT_ALV TYPE LVC_S_LAYO.
DATA LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
PERFORM FOM_REFRESH . "获取银行科目描述
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
GS_LAYOUT_ALV-CWIDTH_OPT = 'X'. "优化列宽
CALL METHOD GO_ALV_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = GS_LAYOUT_ALV.
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING
CONTROL = GO_ALV_GRID.
CALL METHOD CL_GUI_CFW=>FLUSH.
CALL METHOD GO_TIMER->RUN "重新激活定时器
EXCEPTIONS
OTHERS = 9.
ENDMETHOD. "handle_timer
ENDCLASS. "cl_event_receiver IMPLEMENTATION
DATA L_FCAT_CACHE TYPE LVC_T_FCAT.
DATA WA_LAYOUT_CACHE TYPE LVC_S_LAYO.
DATA WA_FIELD TYPE LVC_S_FCAT.
DATA LO_EVENT TYPE REF TO CL_EVENT_RECEIVER.
CREATE OBJECT LO_CONTAINER
EXPORTING
CONTAINER_NAME = 'CONT01'.
CREATE OBJECT GO_ALV_GRID
EXPORTING
I_PARENT = LO_CONTAINER.
DEFINE FILL_FIELD.
wa_field-fieldname = &1.
wa_field-coltext = &2.
IF wa_field-fieldname = 'FSFNS'
OR wa_field-fieldname = 'AFLAG'
.
wa_field-checkbox = 'X'.
wa_field-edit = 'X'.
ENDIF.
IF wa_field-fieldname = 'UMSKZ'
OR wa_field-fieldname = 'WRBYS'
OR wa_field-fieldname = 'SAKYH'
OR wa_field-fieldname = 'WRBXX'
OR wa_field-fieldname = 'GZDAT'
.
wa_field-edit = 'X'.
ENDIF.
IF wa_field-fieldname = 'GZDAT'.
wa_field-ref_table = 'VBAK'.
wa_field-ref_field = 'ERDAT'.
ENDIF.
IF wa_field-fieldname = 'SAKYH'.
wa_field-ref_table = 'SKA1'.
wa_field-ref_field = 'SAKNR'.
ENDIF.
IF wa_field-fieldname = 'WRBYS'
OR wa_field-fieldname = 'WRBXX'.
wa_field-ref_table = 'BSEG'.
wa_field-REF_FIELD = 'WRBTR'.
ENDIF.
*BSEG-WRBTR
APPEND wa_field TO l_fcat_cache .
CLEAR wa_field.
END-OF-DEFINITION.
FILL_FIELD :
'AFLAG' '选择',
'BUKRS_VF' '公司代码',
'KUNNR' '客户',
'NAME1' '客户名称',
'VBELN' '销售订单',
'WAERK' '货币',
'UMSKZ' 'SGL标志',
'SKONT' '预收科目',
'WRBYS' '预收款',
'SAKYH' '银行科目',
'TXT20' '银行科目描述',
'FSFNS' '是否缴税',
'WRBXX' '销项税',
'SAKXX' '销项税科目',
'RACQT' '其他应收科目',
'GZDAT' '过账日期',
'GJAHR' '会计年度',
'ZKJQJ' '期间',
'BELNR' '会计凭证号码'.
* 设置enter事件
CALL METHOD GO_ALV_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
EXCEPTIONS
ERROR = 1
OTHERS = 2.
CREATE OBJECT LO_EVENT.
SET HANDLER LO_EVENT->HANDLE_TOOLBAR FOR GO_ALV_GRID.
SET HANDLER LO_EVENT->HANDLE_COMMAND FOR GO_ALV_GRID.
SET HANDLER LO_EVENT->HANDLE_ENTE FOR GO_ALV_GRID.
* SET HANDLER LO_EVENT->HANDLE_DATA_CHANGED FOR GO_ALV_GRID.
CREATE OBJECT GO_TIMER
EXCEPTIONS
OTHERS = 9.
SET HANDLER LO_EVENT->HANDLE_TIMER FOR GO_TIMER.
GO_TIMER->INTERVAL = 3. "设置间隔为3秒
CALL METHOD GO_TIMER->RUN
EXCEPTIONS
OTHERS = 9.
WA_LAYOUT_CACHE-CWIDTH_OPT = 'X'. "优化列宽
CALL METHOD GO_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = WA_LAYOUT_CACHE
CHANGING
IT_FIELDCATALOG = L_FCAT_CACHE
IT_OUTTAB = GT_DATA[].
PS:
1.定时刷新相当于对屏幕上不属于alv的部分触发PAI,这样前台写入的数据会随着定时刷新儿失效,加入上面红字标注的代码处理之后便可解决问题。
2.如果在ALV中设置了很多事件则要在对应的方法中调用
CALL METHOD GO_TIMER->RUN "重新激活定时器
EXCEPTIONS
OTHERS = 9.
用以重新激活定时器。
3.橙色部分为此功能的主要代码
效果展示:
本程序中用以实现输入银行科目后随即带出其描述,无需回车等操作。