知識點

1.RANGES:
    RANGES :  ra_ebeln  FOR  ekpo -  ebeln  .
   SELECT  ebeln
   
  INTO  CORRESPONDING  FIELDS OF TABLE  lt_ebeln
   
  FROM  ztfc_mm030_his
   
  WHERE  pltyp  =  'Z' 
     
  AND  ebeln <>  '' . 
 
  IF  s_ebeln[]  IS NOT INITIAL  .
   
  DELETE  lt_ebeln  WHERE  ebeln  NOT IN  s_ebeln . 
 
  ENDIF .

 
  IF  lt_ebeln[]  IS NOT INITIAL  .
   
  LOOP AT  lt_ebeln .
     
  CLEAR  ra_ebeln .
      ra_ebeln
-  sign  =  'I'  .
      ra_ebeln
-  option  =  'EQ'  .
      ra_ebeln
-  low  =  lt_ebeln - ebeln . 
     
  APPEND  ra_ebeln .
   
  ENDLOOP  .
 
  ENDIF .
2. 自定義下拉菜單
PARAMETER :  p_lfart  ( 2 )  TYPE C AS  LISTBOX VISIBLE LENGTH  25  OBLIGATORY  DEFAULT  'Q3'  .
PARAMETER :  p_conf  ( 2 )  TYPE C AS  LISTBOX VISIBLE LENGTH  15  OBLIGATORY  DEFAULT  'P1'  .
 
AT SELECTION-SCREEN OUTPUT  .
 
  CLEAR :  list1  , value . 
 
  REFRESH  list1[] . 

 
  value - key  =  'P1' . 
 
  value - text  =  '已經審覈' . 
 
  APPEND value TO  list1  .
 
  value - key  =  'P2' . 
 
  value - text  =  '未審覈' . 
 
  APPEND value TO  list1  .
 
  value - key  =  'P3' . 
 
  value - text  =  '所有' . 
 
  APPEND value TO  list1  .

* &設置 
 
  CALL FUNCTION  'VRM_SET_VALUES'
   
  EXPORTING 
     
  id      =  'P_CONF'
      values
  =  list1 .

* &設置單據的類型 
 
  CLEAR :  list2  , value . 
 
  REFRESH  list2[] . 
 
  value - key  =  'Q1' . 
 
  value - text  =  '調價換吊牌入庫(成本改變)'  .
 
  APPEND value TO  list2  .
 
  value - key  =  'Q2' . 
 
  value - text  =  '調價換吊牌出庫(成本改變)'  .
 
  APPEND value TO  list2  .
 
  value - key  =  'Q3' . 
 
  value - text  =  '所有' . 
 
  APPEND value TO  list2  .
* &設置 填充下拉菜單
 
  CALL FUNCTION  'VRM_SET_VALUES'
   
  EXPORTING 
     
  id      =  'P_LFART'
      values
  =  list2 .
3.定義選擇屏幕行數據
 
SELECTION-SCREEN BEGIN OF LINE  .
 
  SELECTION-SCREEN COMMENT  1 ( 10  )  comm3  . 
 
  SELECTION-SCREEN POSITION  33  .
 
  "PARAMETERS: p_werks LIKE marc-werks  OBLIGATORY. 
 
  PARAMETERS :  p_werks  LIKE  mseg -  werks  OBLIGATORY .
 
  SELECTION-SCREEN COMMENT  52 ( 10  )  comm4  . 
 
  "PARAMETERS: p_lgort LIKE mard-lgort OBLIGATORY. 
 
  PARAMETERS :  p_lgort  LIKE  mseg -  lgort OBLIGATORY .
SELECTION-SCREEN END OF LINE  .
AT SELECTION-SCREEN OUTPUT  .
  comm3
  =  '地點:' . 
  comm4
  =  '庫存地點:' .
4.屏幕選擇動做下的檢查動做
AT SELECTION-SCREEN  .
*在執行或者回車的時候,檢查必輸字段 
  
IF  SY -  UCOMM  'ONLI'  OR  SY -  UCOMM  ''  .  
    
IF  s_class[]  IS INITIAL  .  
      
MESSAGE  E000  ( ZRT01  WITH  '類別不能爲空'  .  
    
ENDIF  .  
    
IF  s_zbzcat -  low >  'Q3'  OR  s_zbzcat  - high >  'Q3'  .
      
MESSAGE  E000  ( ZRT01  WITH  '請選擇正確的業務類型'  .  
    
ENDIF  .  
  
ENDIF  .
5.初始化屏幕字段爲只顯示
AT SELECTION-SCREEN OUTPUT  .  
* &將屏幕字段設置爲只顯示 
  
LOOP AT SCREEN  .
    
IF screen  -  name  'P_KLART'  .
      
screen  -  input  0  .
    
ENDIF  .  
    
MODIFY SCREEN  .  
  
ENDLOOP  .
6. 根據屏幕選擇不一樣,動態實現搜索幫助的變化
*----------------------------------------------------------------------* 
* 定義選擇屏幕 
*----------------------------------------------------------------------* 
SELECTION-SCREEN BEGIN OF BLOCK  bl2  With FRAME TITLE text -  002 .
 
  PARAMETERS   r1  RADIOBUTTON  GROUP  rg1  DEFAULT  'X'  USER-COMMAND  chg  ,    "大類 
               r2
  RADIOBUTTON  GROUP  rg1  .               "中類
SELECTION-SCREEN END OF  BLOCK  bl2 .

SELECTION-SCREEN BEGIN OF BLOCK  b1   WITH FRAME  TITLE text -  001  .
 
  SELECT-OPTIONS :  s_laeda  FOR  ztfc_mm015b -  laeda .
 
  PARAMETERS :      p_klart  LIKE    rmclre -  klart  AS  LISTBOX VISIBLE LENGTH  15  DEFAULT  '026'  .
 
  SELECT-OPTIONS :  s_class  FOR  klah -  class  . "rmclre-class ."MATCHCODE OBJECT CLASC.
 
  SELECT-OPTIONS :  s_zbzcat  FOR  ztfc_mm015b -  zbzcat ,
                  s_zlifnr
  FOR  ztfc_mm015b  - zlifnr . 
SELECTION-SCREEN END OF BLOCK  b1 .

*----------------------------------------------------------------------* 
* 選擇屏幕設置 
*----------------------------------------------------------------------* 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR  s_class - low  .
 
  PERFORM  FRM_GET_KOSTL . 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR  s_class - high  .
 
  PERFORM  FRM_GET_KOSTL . 
*&代碼實現搜索幫助
FORM  FRM_GET_KOSTL  . 
* &定義搜索幫助的條目,有助於用戶選擇 
 
  TYPES :  BEGIN OF  values ,
         
  class LIKE  klah - class  ,
          klart
  LIKE  klah - klart  ,
          artxt
  LIKE  tclat - artxt  ,
          klagr
  LIKE  klah - klagr  ,
          ktext
  LIKE  tclgt - ktext  ,
        
  END OF  values .

 
  DATA :  progname     TYPE  sy -  repid ,              "程序名稱
        dynnum     
  TYPE  sy  - dynnr ,              "屏幕編號 
        values_tab 
  TYPE TABLE OF  values ,
        l_klagr    
  LIKE  klah  - klagr . 

 
  IF  r1  =  'X' .
    l_klagr
  =  'Z040' .
 
  ELSE .
    l_klagr
  =  'Z050' .
 
  ENDIF .
 
  SELECT  a ~  class  a ~  klart a ~ klagr b  ~ ktext  c  ~ artxt
   
  INTO  CORRESPONDING  FIELDS OF TABLE  values_tab
   
  FROM  klah  AS  a
   
  LEFT JOIN  tclgt  AS  b
                   
  ON  a  ~ klagr  =  b ~ klagr
                   
  AND  b  ~ spras  =  '1'
   
  LEFT JOIN  tclat  AS c
                   
  ON  a  ~ klart  =  c ~ klart
                  
  AND c ~  spras  =  '1' 
   
  WHERE  a ~ klart  =  p_klart
     
  AND  a ~ klagr  =  l_klagr . 

* 賦值,獲取程序名稱和屏幕號 
  progname
  =  sy -  repid .
  dynnum
  =  sy -  dynnr .
* 生成指定內容的搜索幫助 
 
  CALL FUNCTION  'F4IF_INT_TABLE_VALUE_REQUEST'
     
  EXPORTING 
           retfield   
  =  'CLASS'            "內表字段 
           dynpprog   
  =  progname
           dynpnr     
  =  dynnum
           dynprofield
  =  'KLAH-CLASS'       "屏幕待輸出字段,須要有前綴字段 
           value_org  
  =  'S' 
     
  TABLES 
           value_tab  
  =  values_tab         "從這個內表中獲取 
     
  EXCEPTIONS 
           parameter_error
  =  1 
           no_values_found
  =  2 
          
  others  =  3 . 
      
  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 .                     " FRM_GET_KOSTL
 
*動態實現ALV的字段,控制可編輯狀態,長度和字段描述等
7. FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .
     DATA ls_fcat type lvc_s_fcat .
     CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
          EXPORTING
               i_structure_name = 'SFLIGHT'
               CHANGING
               ct_fieldcat = pt_fieldcat[]
               EXCEPTIONS
               inconsistent_interface = 1
               program_error = 2
               OTHERS = 3.
               IF sy-subrc <> 0.
               *--Exception handling
               ENDIF.
     LOOP AT pt_fieldcat INTO ls_fcat .
          CASE pt_fieldcat-fieldname .
               WHEN 'CARRID' .
                    ls_fcat-outpulen = '10' .
                    ls_fcat-coltext = 'Airline Carrier ID' . "控制字段描述
                    MODIFY pt_fieldcat FROM ls_fcat .
               WHEN 'PAYMENTSUM' .
                    ls_fcat-no_out = 'X' .
                    MODIFY pt_fieldcat FROM ls_fcat .
          ENDCASE .
     ENDLOOP .
ENDFORM .
 
8.  有時候咱們須要使用到數據的排序.這個能夠經過填充參考結構LVC_T_SORT建立的內表來實現,   
     這個內表中包含了排序的標準.能夠傳遞給set_table_for_first_display這個方法的IT_SORT參數來初始化一個排序.
PS:FORM prepare_sort_table CHANGING pt_sort TYPE lvc_t_sort .
     DATA ls_sort TYPE lvc_s_sort .
     ls_sort-spos = '1' .
     ls_sort-fieldname = 'CARRID' .
     ls_sort-up = 'X' . "A to Z
     ls_sort-down = space .
     APPEND ls_sort TO pt_sort .
     ls_sort-spos = '2' .
     ls_sort-fieldname = 'SEATSOCC' .
     ls_sort-up = space .
     ls_sort-down = 'X' . "Z to A
     APPEND ls_sort TO pt_sort .
      ENDFORM. " prepare_sort_table
 
9.    調用函數: CALL FUNCTION  'REUSE_ALV_FIELDCATALOG_MERGE' 後對結構的處理方式
CHANGE:
   READ TABLE  it_fields  ASSIGNING  <wa_fields>  WITH KEY  fieldname  =  'VBELN' .
 
  IF  sy -  subrc  =  0  .
    <wa_fields>
-  col_pos  =  '4'  .
 
  ENDIF .
 
  READ TABLE  it_fields  ASSIGNING  <wa_fields>  WITH KEY  fieldname  =  'ZCKYL'  .
 
  IF  sy -  subrc  =  0  .
    <wa_fields>
-  col_pos  =  '15'  .
 
  ENDIF .
 
  READ TABLE  it_fields  ASSIGNING  <wa_fields>  WITH KEY  fieldname  =  'ZZSTA'  .
 
  IF  sy -  subrc  =  0  .
    <wa_fields>
-  col_pos  =  '15'  .
 
  ENDIF .
DELETE:
   DELETE  it_fields  WHERE  fieldname  =  'SEL'  OR  fieldname  =  'DEL'  OR  fieldname  =  'GROUP' 
   
  OR  fieldname  =  'TABIX' . " or fieldname = 'MEINS'. 
CHANGE:
   LOOP AT  it_fields . 
    l_tabix
  =  sy - tabix  .
   
  CASE  it_fields - fieldname  .
     
  WHEN  'ICON'   "調整ICON屬性
        it_fields
-  icon  =  'X'  .
        it_fields
-  col_pos  =  1  .
*調整描述的位置. 
     
  WHEN   'NAME1' .
        it_fields
-  col_pos  =  6  .
     
  WHEN  'MAKTX' .
        it_fields
-  col_pos  =  7  .
     
  WHEN  'QRSL' .    "修改確認數量字段屬性,可編輯 
        it_fields
-  edit  =  'X'  .
     
  WHEN  'CYSL' .
        it_fields
-  col_pos  =  15  .
   
  ENDCASE  .
    IT_FIELDS
-  QFIELDNAME  =  ''  .
   
  MODIFY  it_fields  INDEX  sy  - tabix  . 
 
  ENDLOOP .

10. 使用ls_variant來實現區分同一個程序中的不一樣ALV,這樣在設置佈局時就不會相互影響了。
   DATA :  ls_variant  TYPE  disvariant    "用來定義每一個ALV的變式指針
  ls_variant - report  =  sy - repid  .
  ls_variant
- handle  =  '0001' .
  lc_glay
- edt_cll_cb  =  'X' .
 
11.設置ALV選擇屏幕的下拉菜單,這樣就設置了多個值。
   DATA :  BEGIN OF  LT_CLINT , 
   CLINT
  LIKE  KLAH - CLINT  ,
   
  CLASS LIKE  KLAH - CLASS  ,
    KSCHL
  LIKE  SWOR - KSCHL  ,
  
  END OF  LT_CLINT . 

 
  SELECT DISTINCT  KLAH ~ CLINT KLAH  ~ CLASS  SWOR  ~ KSCHL  INTO  CORRESPONDING  FIELDS OF  LT_CLINT
   
  FROM  KLAH
    INNER
  JOIN  SWOR  ON  SWOR  ~ CLINT  =  KLAH ~ CLINT
   
  WHERE  KLAH ~ KLART  =  'Z04'
   
  AND  KLAH ~ KLAGR  =  'TP99'
   
  AND  SWOR ~ SPRAS  =  SY -  LANGU .
   
  VALUE  - KEY  =  LT_CLINT - CLASS  .
   
  VALUE  - TEXT  =  LT_CLINT - KSCHL  .
   
  APPEND VALUE TO  LIST .
   
  CLEAR VALUE  .
 
  ENDSELECT .

 
  CALL FUNCTION  'VRM_SET_VALUES'
   
  EXPORTING 
     
  ID      =  'P_CLINT'
      VALUES
  =  LIST .
 
12.隱藏掉ALV尾部的0的方法:
方法一:給數值加上單位。
     
 
方法二:設置小數位數爲0.
       it_fields - decimals_out  =  '0'
 
方法三:若是沒有結構,則使用參考字段的屬性。
*   &20130905_zfr 給數量字段加上關聯單位,避免顯示小數位後的0
  READ TABLE  t_fieldcat  ASSIGNING  <w_fieldcat>  WITH KEY  fieldname  =  'FKLMG' .
  IF  sy -  subrc  =  0  .
    <w_fieldcat> -  qfieldname  =  'MEINS'  .
  ENDIF .
* &實現將單位的字母轉爲中文
  READ TABLE  t_fieldcat  ASSIGNING  <w_fieldcat>  WITH KEY  fieldname  =  'MEINS' .
  IF  sy -  subrc  =  0  .
    <w_fieldcat> -  qfieldname  =  'UNIT'  .
  ENDIF .
若是是金額,按單位保存小數位數: 
fieldcatalog-cfieldname = 內表中的單位字段
數量求和按單位分開:fieldcat-QFIELDNAME = 內表-單位
相關文章
相關標籤/搜索