ABAP 编程中,有很多小的技术点,不一定每一个都记得,要用到的时候到处找,现在整理了一部分,编程的时候遇到不记得的,可以过来扫一眼,看看这里有木有。


一.* 检索客户端文件路径
CALL FUNCTION 'WS_FILENAME_GET'(上传文件用)

效果图:

183202833.png


二.* 从路径文件名中分离出路径

  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排序。