ABAP 編程技術小點

   ABAP 編程中,有很多小的技術點,不一定每一個都記得,要用到的時候到處找,現在整理了一部分,編程的時候遇到不記得的,可以過來掃一眼,看看這裏有木有。


一.* 檢索客戶端文件路徑
CALL FUNCTION 'WS_FILENAME_GET'(上傳文件用)

效果圖:


二.* 從路徑文件名中分離出路徑

  CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'

三.* 檢查路徑是否存在

  CALL FUNCTION 'WS_QUERY'

四.* 若爲後臺程序,檢查是否有其他job執行

SELECTCOUNT(*)
INTO L_NUM
FROM TBTCO
WHERE JOBNAME = 'ZCV2OC000010'
AND STATUS  = 'R'.

* 檢查前一個JOB是否這行結束
IF L_NUM <> 1 AND SY-BATCH = 'X' .
*   前一個JOB執行沒有結束
   V_LOGSTR = '
前一個JOB仍在執行,當先JOB被取消'.
EXIT.
ENDIF.


註釋SY-BATCH作用:如果ABAP程序在後臺運行,爲'x',否則爲空。

五.* 上傳文件(程序以SY-BATCH 判斷是前臺還是後臺)

1.SY-BATCH = SPACE.前臺,從本地獲取文件:

    (服務其上文件接收失敗等情況時)

  使用CALL FUNCTION 'WS_UPLOAD'

2.SY-BATCH = ‘X’.後臺抓取文件:

     首先:確認後臺已上傳文件:

CALL FUNCTION 'DB6_DIAG_LIST_DIRECTORY'

獲得表BTCXPM:從外部程序到調用程序的日誌消息;從該表中可以獲取文件名稱。

六. * 設置TAB鍵(用於上傳的文件或下載的文件內容分隔符)

CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.

CONSTANTS:

C_TAB TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.


利用TAB分割文件

SPLIT WA_UPLOAD AT C_TAB
INTO
......


七.* 日期有效性檢查

CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'

八.* 判斷是不是時間

  CALL FUNCTION 'TIME_CHECK_PLAUSIBILITY'

九.* 檢查並轉換字符至數字

CALL FUNCTION 'RKD_CHECK_PACKED'

* 數據庫操作

1.> MOVE-CORRESPONDING WA_DEALER TO ZCSD0003(工作區).


   完整版:

   TABLES :ZCOC00070.

   CLEAR ZCOC00070.
   ZCOC00070-WERKS = WA_LGORT-WERKS.
   ZCOC00070-LGORT = WA_LGORT-LGORT.
   ZCOC00070-AUDAT = SY-DATUM.
*  將該記錄插入至狀態控制表中。
   INSERT ZCOC00070.


2.> UPDATE ZCSD0003
       SET   ZMMSTATUS = '2'                "當前記錄狀態 - 完成
              VBELN    = L_VBELN            "銷售憑證編號
              POSNR    = WA_SALES_B-POSNR
      WHERE  ZFIDEALNO = WA_SALES_B-ZFIDEALNO.  "DEALER接口數據編號


  3.>UPDATE ZCOC00020.(單條記錄)


十一. * MOVE-CORRESPONDING

  MOVE-CORRESPONDING 用於將一個結構中的數據賦予另一個結構中的對應字段,只

                     能存一行數據。

  MOVE-CORRESPONDING WA_ATO WA_B.




十二. * 生成銷售憑證(生成SO)-BAPI函數

  CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'

十三. * 有條件的LOOP

LOOP AT I_SALES_B INTO WA_SALES_B
   WHERE  KUNNR  = L_IN_KUNNR         "客戶
    AND   WERKS  = L_IN_WERKS         "工廠
    AND   SPART  = L_IN_SPART.        "部門


十四. * 有條件的READ

  READ TABLE ITAB_MATNR INTO WA_MATNR WITH KEY WERKS = V_WERKS
                                               LGORT = V_LGORT
                                           MATNR = WA_PROCESS_D-MATNR.

(來源:尤妮佳程序ZCV2OC000080代理商欠品處理 Line 490, 537




十五. * 設置REQUEST幫助。

1000選擇屏幕:AT SELECTION-SCREENON VALUE-REQUEST FOR P_FNAME.


自建屏幕-邏輯流中:MODULE VBFA_CTL_MARK ON REQUEST.



十六. * MESSAGE

 --設置整個程序共用MESSAGE:REPORT  ZCV2OC000080  MESSAGE-IDZOC01.


 --消息的種類: A:彈出對話框,終止

                                   E紅感嘆號

                                   Iinformation的彈出框

                                   S打鉤,成功

                                  W:警告,在1000START-OF-SELECTION下,會和E的一樣

                              黃色:DISPLAY LIKE'W'.

                                  X :平時運行錯誤


 --正確使用MESSAGE:

1.> MESSAGE I001 WITH V_LOGSTR.(程序開頭已定義消息類,I:彈出消息框)  

         MESSAGE V_MESSAGE TYPE 'I' DISPLAY LIKE 'E'.

        (彈出錯誤消息框)

2.> MESSAGE S001 WITH V_LOGSTR DISPLAYLIKE 'E'.

     (START-OF-SELECTION.下:避免屏幕功能置灰,即不中斷)


3.> MESSAGE TEXT-M01 TYPE 'S'. (自定義消息內容)


4.> MESSAGE I001 WITH SY-REPIDINTO V_LOGSTR.

 (MESSAGE內容寫入變量)


十七. * 拼接字符。

CONCATENATE WA_LGORT-WERKS '/' WA_LGORT-LGORT INTO V_LOGSTR.


十八. * 數據加鎖-鎖表,解鎖。

CALL FUNCTION 'ENQUEUE_EZCOC00070'


CALL FUNCTION 'DEQUEUE_EZCOC00070'

十九. * 查詢內表中有條件的單條記錄。

READ TABLE ITAB_MATNR INTO WA_MATNR WITH KEY AUDAT = SY-DATUM
                                               MATNR = WA_DATA_D-MATNR
                                               WERKS = V_WERKS
                                               LGORT = V_LGORT.

二十. * 聚集附加-COLLECT語句

相同關鍵字的數據行不重複出現,非關鍵字段(數字類型)進行累加。

COLLECT WA_MATNR INTO ITAB_MATNR.


二十一. * 取上個月的第一天或最後一天

 CALL FUNCTION 'FIMA_DATE_CREATE'


二十二. * Ranges

 RANGES:
   S_WERKS  FOR T001W-WERKS.

 S_WERKS-SIGN   = 'I'.

 S_WERKS-OPTION = 'EQ'.
 S_WERKS-LOW    = 'XXX'.
 APPENDS_WERKS.

二十三. * 查詢,插入同一個內表

SELECT B~VBELN          "訂單號
      B~MATNR          
"物料
      B~KBMENG AS QTY    "
數量
INTO TABLE ITAB_UNCLEAR_TEMP


SELECT B~VBELN          "訂單號
      B~MATNR          
"物料
      B~KBMENG AS QTY    "
數量
APPENDING TABLE ITAB_UNCLEAR_TEMP


二十四. * CHECKCONTINUERETURNEXIT

Check .... 可加條件,不符合條件則跳出程序或當前循環進入下一條(在循環中時),

符合條件則繼續。

Continue. 不可加條件,跳出當前循環,進入下一條。

EXIT.      不可加條件,跳出循環。

Return     不管有沒有循環,直接跳出FORM。



二十五. * 返回--上級屏幕,初始屏幕等。

返回代碼程序:LEAVE PROGRAM.


返回上級屏幕:

  START-OF-SELECTION. ->LEAVE LIST-PROCESSING

  AT SELECTION-SCREEN.-> LEAVE TO SCREEN 1000.(需指定屏幕號)


二十六. * LOOP 中的MODIFY

  MODIFY ITAB_DATA_D  FROM WA_PROCESS_D INDEX L_INDEX_D.

                                                             (L_INDEX_D=SY-TABIX


  MODIFY ITAB_H FROM WA_H  INDEX L_INDEX_H TRANSPORTING DO_FLG.


二十七. * 格式化銷售訂單號-BAPI函數


  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


二十八. * 修改訂單-BAPI函數

  CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

二十九. * COMMIT WORK ,ROLLBACK WORK

  COMMIT WORK AND WAIT .
  WAIT UP TO 3 SECONDS.

  ROLLBACK WORK.

三十. * 彈出對話框

  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'


  CALL FUNCTION 'POPUP_TO_CONFIRM'

(來源:尤妮佳程序ZDIVAP_E03_01  Line578

三十一. * AT NEW / AT END OF。。。   ENDAT.

        AT FIRST/LAST 。。。 ENDAT.


AT  NEW  F .

F是內表的一個字段,當f字段或者f字段左邊的字段內容發生變化時該事件後面的語句都會執行。


SORT RANGES BY LINENO.  (LINENO RANGES中的第一個字段)

LOOPAT RANGES.


 AT NEW LINENO.RANGESLINENO 字段(某個值)第一次出現時:
   REFRESH ARANGE.
 ENDAT.
 CLEAR: ARANGE.
 MOVE-CORRESPONDING RANGES TO ARANGE.
 APPEND ARANGE.

 AT END OF LINENO.RANGESLINENO 字段(某個值)最後一次出現時:
   PERFORM FILL_CONTENT USING RANGES-LINENO.
 ENDAT.

ENDLOOP.


SORT GT_INITIAL_NUM BY NUM. (NUM 該內表中的第一個字段)

LOOP AT GT_INITIAL_NUM.

 GT_DATA-ZERO_01 = GT_DATA-ZERO_01 + GT_INITIAL_NUM-ZERO_01.

 AT END OF NUM.
   PERFORM F_FILL_CELL USING GT_INITIAL_NUM-NUM 8  GT_DATA-ZERO_01.
   CLEAR GT_DATA.
 ENDAT.

ENDLOOP.


三十二.  * SELECT SINGLE( 放入臨時變量,可避

          EndSelect. 不過要確保是單條記錄)

          UP TO n ROWS    限制取最上面 n 條記錄)

SELECT SINGLE VBELN  

      FROM VBAK   [UP TO n ROWS]

      INTO WA_VBELN     “臨時變量   [UP TO n ROWS]

      WHERE ...



三十三.  * DELETEADJACENT DUPLICATES FROM <table>


DELETEADJACENT DUPLICATES FROM I_VBELN

COMPARING VBELV VBTYP.

功能:刪除臨近相同VBELV VBTYP的行

注意:使用該語句前要先按VBELV VBTYP排序。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章