ABAP 开发的那些小技巧 Tips&Tricks

217 阅读3分钟

在对话框程序中的选择屏幕添加图标

要在选择屏幕中添加图标,其中包括参数:

在参数的选择文本中或选择选项(select-option)中写入 @01@

或选择选项:

您可以使用 01、02、03,依此类推,以获取不同的不同图标。

在运行时更改参数的名称

这是在运行时更改参数的很酷的技巧:

在特定时间或单击参数标签将更改...

SELECTION-SCREEN BEGIN OF BLOCK b1.  
PARAMETERS : rd1 RADIOBUTTON GROUP g1 USER-COMMAND abc DEFAULT 'X',  
             rd2 RADIOBUTTON GROUP g1.  
  
SELECTION-SCREEN: BEGIN OF LINE.  
  
SELECTION-SCREEN: COMMENT 1(50) text_003.   " (text_003 will holds the name)  
PARAMETERS  p_matnr TYPE matnr .  
SELECTION-SCREEN: END   OF LINE.  
SELECTION-SCREEN END OF BLOCK b1.  
  
*To change the name on click of radio button  
  
AT SELECTION-SCREEN OUTPUT.  
  IF rd1 = 'X'.  
    text_003 = 'Matnr'.  
  ELSEIF rd2 = 'X'.  
    text_003 = 'Material Number'.  
  ENDIF.

图片.png

实际开发中遇到的解决方式:

代码如下:

**----------------------------------------------------------------------*
*& 选择屏幕部分
SELECTION-SCREEN FUNCTION KEY 1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text002.

SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS: p1 TYPE c RADIOBUTTON GROUP rb1 USER-COMMAND uc DEFAULT 'X'.
SELECTION-SCREEN: COMMENT (30) FOR FIELD p1.

PARAMETERS: p2 TYPE c RADIOBUTTON GROUP rb1.
SELECTION-SCREEN: COMMENT (30) FOR FIELD p2.
SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text001.

SELECT-OPTIONS:
     s_pbom FOR zmmt076-zcompocode MODIF ID ty1, " Component Code
     s_fbom FOR zmmt077-zforpegcode MODIF ID ty2," Forecast Pegging Code
     so_sku FOR mara-zmatsku, " SKU
     s_zbrand FOR mara-zbrand , " Brand
     s_zrange FOR mara-zrange, " Range
     s_zprod FOR mara-zprod, " Product
     s_zprgrp FOR mara-zprdgrp, " Product Group
     s_series FOR mara-zseries_int, " Internal Series
     s_erdat FOR zmmt076-erdat, " Update Date
     s_bismt FOR zmmt076-zbismt, " Old Material No.
     s_crdat FOR zmmt076-erdat. " Sales Order Created Date
SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.
     text001 = 'Selection'.
     text002 = 'PBOM/FBOM'.
     s_crdat-low = '20200101'. 
     s_crdat-high = sy-datum.
     s_crdat-sign = 'I'.
     s_crdat-option = 'BT'.
     APPEND s_crdat.
     CLEAR s_crdat.

AT SELECTION-SCREEN OUTPUT.
 LOOP AT SCREEN.
     CASE screen-group1.
         WHEN 'TY1'.
             IF p1 = 'X'.
                 screen-active = '1'.
             ELSE.
                 screen-active = '0'.
             ENDIF.
         WHEN 'TY2'.
             IF p2 IS INITIAL.
                 screen-active = '0'.
             ELSE.
                 screen-active = '1'.
             ENDIF.
     ENDCASE.
     MODIFY SCREEN.
 ENDLOOP.

显示效果如下:

图片.png

Describe 方法的替代

我们可以在不使用 DESCRIBE 语句的情况下计算内表的行:

count = lines(itab)

动态 SQL 语句

动态创建选择查询语句的技巧:

SELECT (<fs_fields>)
 FROM (<fs_tabname>)
 APPENDING TABLE <fs_itab>
 WHERE (wa_tab) .
[every variable should be of character type]

显示 ALV 的最简单方式

使用此代码显示 ALV 的最简单和最短方法:

DATA: gr_table TYPE REF TO cl_salv_table.

CALL METHOD cl_salv_table=>factory
     IMPORTING
         r_salv_table = gr_table
     CHANGING
         t_table = itab. " internal table having data to display

gr_table->display( ).

运行阻塞的 T-Code

Tcodes 被中断...不是一个大问题。这是运行任何 T-code 的两种方法:

  1. RS_HDSYS_CALL_TC_VARIANT: RS_HDSYS_CALL_TC_VARIANT 并使用参数进行权限检查
  2. 在报表中使用如下的代码:
DATA: l_tcode TYPE sytcode.  

PARAMETERS: p_tcode TYPE sy-tcode.  
  
START-OF-SELECTION.  
  
  SELECT SINGLE tcode FROM tstc  
    INTO l_tcode  
    WHERE tcode = p_tcode.  
  IF sy-subrc = 0.  
    CALL TRANSACTION p_tcode.  
  ELSE.  
    MESSAGE 'TCODE not found.' TYPE 'I'.  
  ENDIF.

显示弹出窗口

使用 method th_popup 函数来显示弹出框或消息提示。

CALL FUNCTION 'POPUP_TO_CONFIRM'  
    EXPORTING  
      text_question  = '确定删除?'  
    IMPORTING  
      answer         = lv_answer  
*       TABLES  
*     PARAMETER      =  
    EXCEPTIONS  
      text_not_found = 1  
      OTHERS         = 2.  
  CHECK lv_answer = '1'.

报表中创建日志

这是在 ABAP 中创建日志显示的代码:

CREATE OBJECT lc_app_log  
    EXCEPTIONS  
      log_header_inconsistent = 1  
      OTHERS                  = 2.  
      
*Error messages  

  LOOP AT i_msg_log INTO wa_msg_log.  
    lw_msg = wa_msg_log-message.  
    lw_msgty = wa_msg_log-msgtyp.  
    
    CALL METHOD lc_app_log->add_msg_free_text  
      EXPORTING  
        im_msg    = lw_msg  
        im_msgty  = lw_msgty  
      EXCEPTIONS  
        msg_error = 1  
        OTHERS    = 2.  
    IF NOT sy-subrc IS INITIAL.  
      RETURN.  
    ENDIF.  
    CLEAR wa_msg_log.  
  ENDLOOP.  
  
  lc_app_log->display_log( ).

用字符串查找报表

我们可以通过使用报表输入任何程序中编写的字符串来找到报表:RS_ABAP_SOURCE_SCAN

在不按 CTRL+C 或 CTRL+V 的情况下复制任何行

使用 CTRL+D 来复制任何一行,通常在更新代码时使用,将原有的逻辑注释,复制当前行的代码,重新写新的业务逻辑代码

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情