1.在ALV添加check选中后值不变化
data:o_alv type REF TO cl_gui_alv_grid.
在user_command下
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = o_alv.
CALL METHOD o_alv->check_changed_data
* IMPORTING
* e_valid =
* CHANGING
* c_refresh = 'X'
即可解决
2.字符串替换
DATA: lv_str type string value '123,456,789.000'.
REPLACE ALL OCCURRENCES OF ',' IN lv_str WITH space.
3.跳转事务携带参数
1.如果是选择屏幕无法通过SET PARAMETER携带参数则用SUBMIT
SUBMIT pp_pick_list VIA SELECTION-SCREEN "停留屏幕
WITH s_matnr IN lr_matnr
WITH s_aufnr IN lr_aufnr AND RETURN. "返回后回到现在的页面
2.直接通过Call Transction
CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
4.下拉函数
1、在POV事件里设置
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'KEY' "指明内表那一列作为值
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_LIST' "将内表显示在屏幕字段
value_org = 'S' "C表示cell,S表示structure
multiple_choice = '' "多项选择,用于SELECT-OPTIONS
display = '' "C则只能显示,不能选择
callback_program = sy-repid
TABLES
value_tab = lt_list
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
2、在FORM里设置
DATA :LIST TYPE VRM_VALUES , "list box的值列表
VALUE LIKE LINE OF LIST . "list box的结构
VALUE-KEY = '01'.
VALUE-TEXT = '修改'.
APPEND VALUE TO LIST .
VALUE-KEY = '02'.
VALUE-TEXT = '显示'.
APPEND VALUE TO LIST .
"调用函数展示
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'P_CZ'
VALUES = LIST.
5.快捷增加去除前导零
"增加前导0
DATA: ls_matnr TYPE matnr VALUE '15000042'.
DATA(ls_in_matnr) = |{ ls_matnr ALPHA = IN }|.
WRITE: ls_in_matnr. "示例结果:000000000015000042
"删除前导0
DATA: gs_matnr TYPE matnr VALUE '000000000015000042'.
DATA(gs_out_matnr) = |{ gs_matnr ALPHA = OUT }|.
WRITE:/ gs_out_matnr. "示例结果:15000042
6.增加进度提示
DO 1000 TIMES.
LV_PERCENTAGE = sy-index / 1000.
DATA(lv_temp) = | { sy-index } / 1000 '正在处理,耐心等候' |.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = LV_PERCENTAGE
text = lv_temp.
ENDDO.
7.F4搜索帮助
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'VTEXT' "将内表哪一列数据取出
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'GV_VTEXT' "显示在哪个控件上
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = lt_f4 "数据内表
return_tab = lt_return
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
Dialog:
PROCESS ON VALUE-REQUEST.
FIELD GV_ZDBDH MODULE F4_HELP_ZDBDH.
8.Dialog下拉框
DATA lt_values TYPE vrm_values WITH HEADER LINE.
CLEAR lt_values.
lt_values-key = 'A'.
lt_values-text = '销售部'.
APPEND lt_values.
CLEAR lt_values.
lt_values-key = 'B'.
lt_values-text = '市场部'.
APPEND lt_values.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'GV_DROPDOWN' "dialog控件名
values = lt_values[]
EXCEPTIONS
id_illegal_name = 1
OTHERS = 2.
9.编号自增长
T-CODE:SNRO
间隔:
编号长度域:NUMC10
% 警告:99.0
定制:
缓冲:无缓冲
Function
DATA: LV_NUMBER TYPE I.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '02' "编号
object = 'YTEST001' "对象名称
QUANTITY = '1'
IMPORTING
NUMBER = LV_NUMBER
EXCEPTIONS
INTERVAL_NOT_FOUND = 1
NUMBER_RANGE_NOT_INTERN = 2
OBJECT_NOT_FOUND = 3
QUANTITY_IS_0 = 4
QUANTITY_IS_NOT_1 = 5
INTERVAL_OVERFLOW = 6
BUFFER_OVERFLOW = 7
OTHERS = 8
10.生产订单的状态
表:TJ02
关联状态表:JEST
11.连续打印
LV_CONTROL_PARAMETERS TYPE SSFCTRLOP
在循环打印中
AT FIRST.
LV_CONTROL_PARAMETERS-NO_CLOSE = 'X'.
ENDAT.
AT LAST.
LV_CONTROL_PARAMETERS-NO_CLOSE = SPACE.
ENDAT.
在循环最后
LV_CONTROL_PARAMETERS-NO_OPEN = 'X'.
12.MODULE STATUS排除状态栏
DATA:fcodes TYPE TABLE OF fcode .
CLEAR fcodes .
IF rb_sea EQ 'X' .
APPEND 'CHANGE' TO fcodes .
ELSEIF rb_mod EQ 'X' .
APPEND 'DELETE' TO fcodes .
ELSEIF rb_del EQ 'X' .
APPEND 'CHANGE' TO fcodes .
ENDIF .
"添加EXCLUDING排除按钮
SET PF-STATUS 'STATUS_0100' EXCLUDING fcodes .
SET TITLEBAR 'TITLE0100'.
13.退出标准程序回到初始页(例如VA02删除销售订单不允许,回到VA02页面)
LEAVE TO TRANSACTION SY-TCODE.
14.通过编号找到描述表
找到对应的域元素
点进去
点击值范围
点击值表
点击头部转到->文本表
15.F9找增强
CALL CUSTOMER-FUNCTION
CALL BADI
GET BADI
CALL METHOD
一代增强:在程序的子例程里,以UserExit开头的程序
二代增强:通过Customer-Function调用,以Exit_程序名_xxx 命名
在表里MODSAP里通过出口函数找增强名称
三代增强:通过Call Badi打断点来查找,或者在类CL_EXITHANDLER里的get_instance方法打断点
16.标准类找BADI
CL_EXITHANDLER=>GET INSTANCE
17.获取ALV筛选后的数据
DATA: lc_grid TYPE REF TO cl_gui_alv_grid,
lv_FIDX TYPE lvc_t_fidx.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lc_grid.
CALL METHOD lc_grid->check_changed_data.
"获取被筛选掉的数据索引内表
CALL METHOD lc_grid->get_filtered_entries
IMPORTING
et_filtered_entries = lv_FIDX.
20.打开GUI键值对匹配
21.数据批量导出Excel,乱行
假设导出10W行数据
在第98000行乱行
则需要重新导出 index:98000 - 100000
不然数据会缺少
22.多条错误信息提示框显示
DATA: gt_error TYPE esp1_message_tab_type,
gs_error LIKE LINE OF gt_error.
MSGID:消息号 例如 ZMM
MSGTY:消息类型 例如 E
MSGNO:消息号 例如 009
MSGV1:消息1
MSGV2:消息2
MSGV3:消息3
MSGV4:消息4
LINENO :显示序号
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = gt_error.
23.在生产机和测试机修改代码(慎用)
DATA:BEGIN OF itab OCCURS 0,
line(200) TYPE c, "如果代码中某行大于了200个字符,请重新设定值,
END OF itab.
PARAMETERS: progname(120). "程序名称
READ REPORT progname INTO itab. "把指定的程序读取到内表
EDITOR-CALL FOR itab. "对内表数据进行修改(即代码进入编辑状态)
INSERT REPORT progname FROM itab."把修改后的程序插回sap
24.F4IF_INT_TABLE_VALUE_REQUEST不显示值
原因:数据源里的字段不能用C,需要参考数据元素
25.SmartForms语言翻译
SE63->->
->
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/17981.html