ALV屏幕捕捉回车及下拉框事件&ALV弹出框回车及下拉框事件
示例展示:
屏幕依据输入的物料编码或下拉框物料编码拍回车自动带出物料描述:

点击弹出框,输入物料编码拍回车带出物料描述,点击确认,更新ALV:


1.创建屏幕9000,用于处理ALV弹出框:

2.针对屏幕9000画屏幕如下:


3.屏幕属性如下:




4.为屏幕9000设置OK_CODE接收屏幕回传值:

5.为屏幕9000设置状态栏,下拉框列表,命令执行:

6.为屏幕1000设置AG1状态栏

7.为屏幕9000设置AG2状态栏(ENTER用于接收弹出框回车事件):

8.全部代码如下:
*&---------------------------------------------------------------------*
*& Report ZTEST2
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST2.
TABLES: vbak,vbap.
TYPE-POOLS: slis.
DATA:t_fieldcat TYPE lvc_t_fcat,
w_fieldcat TYPE lvc_s_fcat,
t_layout TYPE lvc_s_layo.
DATA: gt_event TYPE slis_t_event,
gs_event LIKE LINE OF gt_event.
DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
DATA: stbl TYPE lvc_s_stbl.
DATA: le_row TYPE i,
le_value TYPE c,
le_col TYPE i,
les_row_id TYPE lvc_s_row,
les_col_id TYPE lvc_s_col,
les_row_no TYPE lvc_s_roid.
DATA gv_smart TYPE rs38l_fnam.
DATA: ok_code(3).
TYPES:BEGIN OF ty_result,
vbeln TYPE vbak-vbeln, "so
posnr TYPE vbap-posnr, "项目
ckbox TYPE char1,
matnr TYPE makt-matnr,
dlmatnr TYPE makt-matnr,
maktx TYPE makt-maktx,
dd_handle TYPE int4,
END OF ty_result.
DATA: gt_ddval TYPE lvc_t_drop,
gw_ddval TYPE lvc_s_drop.
DATA:t_result TYPE TABLE OF ty_result.
DATA:w_result TYPE ty_result.
DATA:parvw TYPE C LENGTH 2.
TYPES:BEGIN OF ty_vbakp,
vbeln TYPE vbak-vbeln, "so
posnr TYPE vbap-posnr, "项目
END OF ty_vbakp.
DATA:t_vbakp TYPE TABLE OF ty_vbakp,
w_vbakp TYPE ty_vbakp.
DATA:t_vbpa TYPE STANDARD TABLE OF vbpa,
w_vbpa TYPE vbpa.
DATA:rt_extab TYPE slis_t_extab.
SELECTION-SCREEN:BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:s_vbeln FOR vbak-vbeln.
SELECTION-SCREEN:END OF BLOCK a1.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS handle_modify
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified et_good_cells.
ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
* PERFORM refresh.
* Get the Current Cell
CALL METHOD ref_grid->get_current_cell
IMPORTING
E_ROW = le_row
E_VALUE = le_value
E_COL = le_col
ES_ROW_ID = les_row_id
ES_COL_ID = les_col_id
ES_ROW_NO = les_row_no.
READ TABLE t_result INTO w_result INDEX les_row_id-index.
IF sy-subrc = 0.
SELECT SINGLE maktx INTO w_result-maktx FROM makt WHERE matnr = w_result-matnr OR matnr = w_result-dlmatnr.
MODIFY t_result FROM w_result INDEX les_row_id-index.
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
CALL METHOD ref_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDIF.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS.
START-OF-SELECTION.
*-----------------------获取数据
PERFORM frm_get_data.
*-------------------------处理数据
PERFORM frm_handle_data.
IF t_result IS NOT INITIAL.
PERFORM frm_alv_show.
ELSE.
MESSAGE '没有符合的数据,请重新查询' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
END-OF-SELECTION.
FORM frm_get_data .
SELECT * INTO CORRESPONDING FIELDS OF TABLE t_vbakp UP TO 5 ROWS
FROM vbak
JOIN vbap ON vbak~vbeln = vbap~vbeln
WHERE vbak~vbeln IN s_vbeln.
ENDFORM.
FORM frm_handle_data .
CLEAR w_vbakp.
LOOP AT t_vbakp INTO w_vbakp.
w_result-vbeln = w_vbakp-vbeln.
w_result-posnr = w_vbakp-posnr.
APPEND w_result TO t_result.
CLEAR w_result.
ENDLOOP.
ENDFORM. " FRM_HANDLE_DATA
*------展示ALV
FORM frm_alv_show.
PERFORM frm_init_layout.
PERFORM frm_set_fieldset.
PERFORM create_dropdown_values.
PERFORM frm_set_event.
PERFORM frm_output_alv.
PERFORM f_status USING rt_extab.
ENDFORM.
*------初始化ALV布局,可以自动根据数据长度调整列宽
FORM frm_init_layout.
t_layout-zebra = 'X'.
t_layout-box_fname = 'ckbox'.
ENDFORM.
*------该子程序主要用于设置ALV字段
FORM frm_set_fieldset.
PERFORM frm_init_fieldcat USING 'VBELN' '销售凭证' 'X' '' 10 ''.
PERFORM frm_init_fieldcat USING 'POSNR' '项目' 'X' '' 4 ''.
PERFORM frm_init_fieldcat USING 'MATNR' '物料编码' space 'X' 20 ''.
PERFORM frm_init_fieldcat USING 'DLMATNR' '物料编码' space 'X' 20 'DD_HANDLE'.
PERFORM frm_init_fieldcat USING 'MAKTX' '物料描述' space '' 40 ''.
ENDFORM.
FORM frm_init_fieldcat USING fieldcatname LIKE w_fieldcat-fieldname
seltext LIKE w_fieldcat-scrtext_l
selkey LIKE w_fieldcat-key
edit LIKE w_fieldcat-edit
len LIKE w_fieldcat-outputlen
drdn_field LIKE w_fieldcat-drdn_field.
.
CLEAR w_fieldcat.
w_fieldcat-fieldname = fieldcatname .
w_fieldcat-scrtext_l = seltext.
w_fieldcat-key = selkey.
w_fieldcat-edit = edit.
w_fieldcat-outputlen = len.
w_fieldcat-drdn_field = drdn_field.
APPEND w_fieldcat TO t_fieldcat.
ENDFORM.
FORM frm_output_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'F_STATUS '
i_callback_user_command = 'ALV_USER_COMMAND'
is_layout_lvc = t_layout
it_fieldcat_lvc = t_fieldcat
i_default = 'X'
i_save = 'A'
IT_EVENTS = gt_event
TABLES
t_outtab = t_result
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.
FORM f_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'AG1' EXCLUDING rt_extab.
"frm_platform_o
ENDFORM.
FORM alv_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield
TYPE slis_selfield.
CASE r_ucomm.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE TO SCREEN 0.
WHEN '&IC1'."双击
IF rs_selfield-fieldname = 'VBELN'.
READ TABLE t_result INTO w_result INDEX rs_selfield-tabindex.
SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
CLEAR w_result.
ENDIF.
WHEN 'DIALOG'.
CALL SCREEN 9000 STARTING AT 20 10 ENDING AT 108 20 .
CHECK ok_code EQ 'YES'.
CLEAR ok_code.
PERFORM save_matnr.
ENDCASE.
ENDFORM.
FORM frm_set_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE
= 0
IMPORTING
ET_EVENTS
= gt_event
EXCEPTIONS
LIST_TYPE_WRONG
= 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.
gs_event
-name = 'CALLER_EXIT'. "slis_ev_caller_exit_at_start事件
gs_event
-FORM = 'FM_BUTTON'.
APPEND gs_event TO gt_event .
ENDFORM.
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid
= ref_grid.
*设置Dropdown List事件
CALL METHOD ref_grid->set_drop_down_table
EXPORTING
it_drop_down
= gt_ddval.
* 设置enter事件
CALL METHOD ref_grid->register_edit_event
EXPORTING
i_event_id
= cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error
= 1
OTHERS = 2.
CREATE OBJECT gt_event_receiver.
SET HANDLER gt_event_receiver->handle_modify FOR ref_grid.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BRING_MAKTX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
DATA: p-maktx TYPE makt-maktx,
p
-matnr TYPE makt-matnr.
FORM BRING_MAKTX .
SELECT SINGLE maktx INTO p-maktx From makt WHERE matnr = p-matnr.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module LISTBOX_MATNR OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE LISTBOX_MATNR OUTPUT.
TYPE-POOLS vrm.
DATA: vid TYPE vrm_id VALUE 'P-MATNR',
vlist
TYPE vrm_values,
l_matnr
TYPE mara-matnr,
values
LIKE LINE OF vlist.
CLEAR vlist.
CLEAR values.
SELECT DISTINCT matnr INTO l_matnr FROM mara UP TO 10 ROWS WHERE matnr LIKE 'AA%'.
values
-key = l_matnr.
APPEND values TO vlist.
CLEAR values.
ENDSELECT.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = vid
values
= vlist
EXCEPTIONS
id_illegal_name
= 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE '下拉框出错,请联系管理员!' TYPE 'I' DISPLAY LIKE 'S'.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'AG2'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9000 INPUT.
DATA lv_ok(3).
lv_ok
= ok_code.
CASE lv_ok.
WHEN 'YES' OR '&F1' OR 'CAN'.
LEAVE TO SCREEN 0.
WHEN 'ENT'.
PERFORM bring_maktx.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form SAVE_MATNR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SAVE_MATNR .
LOOP AT t_result INTO w_result WHERE ckbox = 'X'.
w_result
-matnr = p-matnr.
w_result
-dlmatnr = p-matnr.
w_result
-maktx = p-maktx.
MODIFY t_result FROM w_result.
CLEAR w_result.
ENDLOOP.
CLEAR ref_grid.
CLEAR stbl.
stbl
-col = 'X'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid
= ref_grid.
CALL METHOD ref_grid->check_changed_data.
CALL METHOD ref_grid->refresh_table_display
EXPORTING
is_stable
= stbl
i_soft_refresh
= 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_DROPDOWN_VALUES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_DROPDOWN_VALUES .
CLEAR w_result.
DATA: l_line TYPE i VALUE 0,
l_matnr
TYPE makt-matnr.
LOOP AT t_result INTO w_result.
ADD 1 TO l_line.
SELECT DISTINCT matnr INTO l_matnr UP TO 10 ROWS FROM makt WHERE matnr LIKE 'AA%'.
gw_ddval
-handle = l_line.
gw_ddval
-value = l_matnr.
APPEND gw_ddval TO gt_ddval.
ENDSELECT.
CLEAR gw_ddval.
w_result
-dd_handle = l_line.
MODIFY t_result FROM w_result.
CLEAR w_result.
ENDLOOP.
ENDFORM.
9.设置屏幕显示字段名称:

ALV屏幕捕捉回车及下拉框事件&ALV弹出框回车及下拉框事件的更多相关文章
- 手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法
手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法 最近碰到Android微信内置浏览H5页面,因为其中的文本输入框(input)放置在靠近页面的中下方,点击文本框以后,则输入框会被弹出的手机 ...
- 经验总结:WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法
经验总结:WebBrowser自动点击弹出提示框alert.弹出对话框confirm.屏蔽弹出框.屏蔽弹出脚本错误的解决办法 网上有好多解决方法,可是不一定好使,本人经过多次试验,针对WebBrows ...
- 解决win10 cmd运行python弹出windows应用商店下python应用程序
方法一: 1.我一开始下载完python后,忘记下载到哪个位置,在win10底下输入框搜索python,点击打开文件所在位置,所在位置是python快捷键的位置,直接复制进行环境配置 配置完环境变量后 ...
- 原生Js_实现简单的下拉折叠菜单(添加弹出动画效果)
用javascript实现简单的下拉折叠菜单效果 实现步骤 (a)获得各操作的dom对象: (b)在所有菜单按钮对象上添加单击事件: (c)设置所有菜单按钮样式为空,并将当前按钮的样式设置为“acti ...
- phoenixframe自己主动化測试平台对div弹出框(如弹出的div登陆框)的处理
package org.phoenix.cases; import java.util.LinkedList; import org.phoenix.action.WebElementActionPr ...
- WPF弹出带蒙板的消息框
效果图 思路 拿到父级窗体的内容,放入一个容器里,再在容器里放入一个半透明层.将整个容器赋给父级窗体的内容. 关闭时反向操作. 代码 消息窗弹出时 /// <summary> /// 弹出 ...
- form WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法
针对WebBrowser控件中自动点击弹出框及禁用脚本提示问题得到如下几种实际情况的解决办法,绝对管用. 1.屏蔽弹出错误脚本 将WebBrowser控件ScriptErrorsSuppressed设 ...
- vant - 弹框 【Popup 弹出层】【DatetimePicker 时间选择】
[HelloWorld.vue] <template> <div class="hello"> <van-row class="m-head ...
- [转]让程序不触发 Vista/Win7下应用程序兼容性助手弹出 .
原文地址 http://blog.csdn.net/maxuhuiabc/article/details/6081874 在Vista/Win7下 运行一个 exe 应用程序后,系统经常弹出 兼容性助 ...
随机推荐
- Python汉诺塔
import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): return len(self.it ...
- jQuery添加删除
//代码 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <titl ...
- 2019 ICPC南昌邀请赛 网络赛 K. MORE XOR
说明 \(\oplus x\)为累异或 $ x^{\oplus(a)}$为异或幂 题意&解法 题库链接 $ f(l,r)=\oplus_{i=l}^{r} a[i]$ $ g(l,r)=\ ...
- python自动化测试常用断言的使用方法
自动化测试中寻找元素并进行操作,如果在元素好找的情况下,大家就可以较熟练地编写用例脚本了,但光进行操作可能还不够,有时候也需要对预期结果进行判断. 下面介绍几个常用断言的使用方法,可以一定程度上帮助大 ...
- UML与软件建模:第一次作业(用例图绘制)
一.小结 用例图是UML用于描述软件功能的图形.用例图包括用例.参与者及其关系,用例图也可以包括注释和结束. 用例图的要素: (1)参与者,即与用例存在交互关系的系统外部实体; (2)用例,用来描述个 ...
- php无限极分类的实现
//指定根层级的树状图 function generateTree($list, $root = 0, $pk = 'id', $pid = 'pid', $child = '_child') { $ ...
- Django的认证系统和Django admin的简单使用
Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...
- 博客编辑器Open Live Writer的安装以及配置
下载安装包 访问官网 http://openlivewriter.org/ 或者微软商店 https://www.microsoft.com/en-us/p/open-live-writer/9n ...
- springBoot 随笔(二)
此文为springBoot 结合 thymeleaf ,解析后台接口数据展示到html页面 基于 springBoot(一)工程. 1/ 引用 thymeleaf 组件依赖 <!-- depen ...
- raid卡的结构示意图
raid卡的结构示意图,取自<大话存储>第124页 ROM:一般用FLash芯片做ROM,存放着初始化RAID卡必须的代码以及实现RAID功能所需的代码; XOR芯片:专门用来做RAID ...