ABAP 编程中,有很多小的技术点,不一定每一个都记得,要用到的时候到处找,现在整理了一部分,编程的时候遇到不记得的,可以过来扫一眼,看看这里有木有。
效果图:
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
CALL FUNCTION 'WS_QUERY'
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',否则为空。
1.SY-BATCH = SPACE.前台,从本地获取文件:
(服务其上文件接收失败等情况时):
使用CALL FUNCTION 'WS_UPLOAD'
2.SY-BATCH = ‘X’.后台抓取文件:
首先:确认后台已上传文件:
CALL FUNCTION 'DB6_DIAG_LIST_DIRECTORY'
获得表BTCXPM:从外部程序到调用程序的日志消息;从该表中可以获取文件名称。
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 WA_ATO WA_B.
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
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 TABLE ITAB_MATNR INTO WA_MATNR WITH KEY WERKS = V_WERKS
LGORT = V_LGORT
MATNR = WA_PROCESS_D-MATNR.
(来源:尤妮佳程序ZCV2OC000080(代理商欠品处理) Line: 490, 537)
1000选择屏幕:AT SELECTION-SCREENON VALUE-REQUEST FOR P_FNAME.
自建屏幕-逻辑流中:MODULE VBFA_CTL_MARK ON REQUEST.
--设置整个程序共用MESSAGE:REPORT ZCV2OC000080 MESSAGE-IDZOC01.
--消息的种类: A:弹出对话框,终止
E:红感叹号
I:information的弹出框
S:打钩,成功
W:警告,在1000的START-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 WA_MATNR INTO ITAB_MATNR.
CALL FUNCTION 'FIMA_DATE_CREATE'
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
Check .... 可加条件,不符合条件则跳出程序或当前循环进入下一条(在循环中时),
符合条件则继续。
Continue. 不可加条件,跳出当前循环,进入下一条。
EXIT. 不可加条件,跳出循环。
Return 不管有没有循环,直接跳出FORM。
返回代码程序:LEAVE PROGRAM.
返回上级屏幕:
START-OF-SELECTION. ->LEAVE LIST-PROCESSING
AT SELECTION-SCREEN.-> LEAVE TO SCREEN 1000.(需指定屏幕号)
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.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
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 Line:578)
AT NEW F .
F是内表的一个字段,当f字段或者f字段左边的字段内容发生变化时该事件后面的语句都会执行。
SORT RANGES BY LINENO. (LINENO 是 RANGES中的第一个字段)
LOOPAT RANGES.
AT NEW LINENO.“RANGES中LINENO 字段(某个值)第一次出现时:
REFRESH ARANGE.
ENDAT.
CLEAR: ARANGE.
MOVE-CORRESPONDING RANGES TO ARANGE.
APPEND ARANGE.
AT END OF LINENO.“RANGES中LINENO 字段(某个值)最后一次出现时:
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 VBELN
FROM VBAK [UP TO n ROWS]
INTO WA_VBELN “临时变量 [UP TO n ROWS]
WHERE ...
DELETEADJACENT DUPLICATES FROM I_VBELN
COMPARING VBELV VBTYP.
功能:删除临近,相同VBELV VBTYP的行
注意:使用该语句前要先按VBELV VBTYP排序。