业务背景
1.当用户做一些比较重要的操作时需要弹出一个窗口,让用户进行确认。
2.或者进行操作时,需要填写重要信息。
实例
1.确认弹窗代码
"弹出确认框
DATA:lv_yn TYPE STRING.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
titel = '重要提示'
textline1 = '你确定要这个么?'
cancel_display = 'X' "space 不显示cancel按钮,'X'是显示取消按钮
IMPORTING
answer = lv_yn. "确定= J 否=N 取消 = A
WRITE :lv_yn.
确认弹窗效果
2.填写弹窗代码(函数版)
"弹出可以填写字段的函数方法
DATA : lt_sval TYPE TABLE OF sval,
ls_sval LIKE LINE OF lt_sval.
DATA:l_returncode TYPE string .
"物料
CLEAR ls_sval .
ls_sval-tabname = 'MARA' . "表名
ls_sval-fieldname = 'MATNR' . "字段名
ls_sval-field_obl = 'X' . "是否为必填
APPEND ls_sval TO lt_sval.
"过账日期
CLEAR ls_sval .
ls_sval-tabname = 'BKPF' . "表名
ls_sval-fieldname = 'BUDAT' . "字段名
ls_sval-field_obl = 'X' . "是否为必填
APPEND ls_sval TO lt_sval.
"如果是金额的话要把参考表和参考字段也写进来,然后隐藏,不然金额的输入框是不能输入的
CLEAR ls_sval .
ls_sval-tabname = 'BSIS'.
ls_sval-fieldname = 'WRBTR'.
APPEND ls_sval TO lt_sval.
"货币
CLEAR ls_sval .
ls_sval-tabname = 'BSIS'.
ls_sval-fieldname = 'WAERS'.
ls_sval-field_attr = '04'. "隐藏货币字段
APPEND ls_sval TO lt_sval.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
* NO_VALUE_CHECK = ' '
popup_title = '请填写'
* START_COLUMN = '5'
* START_ROW = '5'
IMPORTING
returncode = l_returncode
TABLES
fields = lt_sval
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
cl_demo_output=>display( lt_sval )."要获取填写的数据直接读取这个表就好了
填写弹窗效果
3.可填写弹窗代码(画屏幕版)
功能比较强大(还可以做其他的东东),但是也比较复杂。
"画屏幕的弹窗
*定义屏幕字段
TYPES:BEGIN OF ty_9000,
matnr TYPE bseg-matnr,
budat TYPE bkpf-budat,
END OF ty_9000.
DATA:gs_9000 TYPE ty_9000.
CALL SCREEN '9000' STARTING AT 20 5 "
ENDING AT 100 16.
MODULE status_9000 OUTPUT.
SET PF-STATUS '9000'.
SET TITLEBAR '我画的弹窗'.
ENDMODULE.
MODULE user_command_9000 INPUT.
CASE sy-ucomm.
WHEN 'OK'.
IF gs_9000-matnr IS INITIAL OR gs_9000-budat IS INITIAL.
MESSAGE '请先填写数据' TYPE 'E' DISPLAY LIKE 'S'.
ELSE.
"获取填写的信息
WRITE:/ gs_9000-matnr.
WRITE:/ gs_9000-budat .
ENDIF.
WHEN 'CANC'.
CLEAR gs_9000.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
9000屏幕的布局
9000元素清单
确认的功能码:OK
取消的功能码:CANC
另外,画屏幕添加搜索帮助的小技巧,可能条目键值选 2会自动带出搜索帮助。
9000屏幕的逻辑流
9000屏幕的GUI状态(创建就好了,没有啥特殊的)
上面这些设置完毕才有最后的效果:
好了,分享使我快乐,我是寒武青锋。