ABAP小技巧详解编程语言

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键值对匹配

ABAP小技巧详解编程语言

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->ABAP小技巧详解编程语言->ABAP小技巧详解编程语言->ABAP小技巧详解编程语言

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/17981.html

(0)
上一篇 2021年7月19日 20:42
下一篇 2021年7月19日 20:42

相关推荐

发表回复

登录后才能评论