ABAP面試
1.簡單的Report包括哪些東西
2.Dialog 邏輯流以及相應的處理內容
3.用過的幾種增強方式:怎么找增強
4.接口和函數的使用,一般遇到自己不會的函數怎么處理
5.關聯查詢:INNER JOIN 與 LEFT JOIN 與 FOR ALL ENTRIES IN各用在什么情況
ABAP基礎:報表,功能,增強,接口,數據處理及性能優化(不管內部還是外部,均需了解)
REPORT:1)數據定義;定義內表,結構,選擇屏幕
2)數據處理;包括屏幕數據檢查,數據查詢,內表數據處理等
3)數據顯示;定義字段目錄,布局,特殊設置,CALL FM(習慣用REUSE_ALV_GRID_DISPLAY_LVC,LVC后期兼容和修改方便,也可以替代OO alv )
DIALOG:這是SAP的精華之一,不懂DIALOG,不入SAP門。
1)PBO;數據顯示前處理,循環數據顯示處理;循環之后無效修改和處理
2)PAI;表行,字段處理,更新表行;事件處理
增強:出口,BADI,隱式(常用的三種);前兩種可以用程序找(下篇文章),也可以找到程序對應的包,然后包里搜;隱式增強就是觸發事件,DEBUG找地方加代碼。
接口:就是查詢,處理。。。都會的
查詢:INNER 和LEFT,right是且與或的關系,確定都有的INNER,不確定有的,LEFT,RIGHT。文本表不建議關聯,適合單獨查。
FOR ALL ENTRIES IN使用前最好對關鍵字排重,非空檢查;內表超過10萬不建議使用。
常規的性能優化:先查,后處理,LOOP下面盡量不用SELECT和LOOP,READ TABLE 要二分法排序;內表查詢確定字段以及順序,CORRESPONDING FIELDS使用時字段不要多。
考的都是基本的東西,考學習面,學習深度,學習能力,以及對SAP的認識和自己的思維邏輯能力
附簡單查詢代碼:憑證明細報表
*&---------------------------------------------------------------------* *& Report ZFIR025 *& *&---------------------------------------------------------------------* *& *&DESC :憑證明細表 * *&AUTHOR: LY *& *&DATE:20160721 *& *& *&CHANGE LIST *& C DEVK901712 2016.07.21 08:11:04 LIYUAN *& C DEVK901869 2016.08.22 15:37:14 LIYUAN 增加本幣金額 *&---------------------------------------------------------------------* REPORT ZFIR025. TABLES:BKPF,BSEG,SKAT. TYPES:BEGIN OF TY_SHOW, MONAT TYPE BKPF-MONAT, BUDAT TYPE BKPF-BUDAT, BELNR TYPE BKPF-BELNR, BUKRS TYPE BKPF-BUKRS, BKTXT TYPE BKPF-BKTXT, GJAHR TYPE BKPF-GJAHR, BLART TYPE BKPF-BLART, WAERS TYPE BKPF-WAERS, USNAM TYPE BKPF-USNAM, AWKEY TYPE BKPF-AWKEY, HKONT TYPE BSEG-HKONT, KUNNR TYPE BSEG-KUNNR, LIFNR TYPE BSEG-LIFNR, KOSTL TYPE BSEG-KOSTL, FKBER TYPE BSEG-FKBER, WRBTR TYPE BSEG-WRBTR, WRBTRS TYPE BSEG-WRBTR, WRBTRH TYPE BSEG-WRBTR, SHKZG TYPE BSEG-SHKZG, MATNR TYPE BSEG-MATNR, XNEGP TYPE BSEG-XNEGP, RSTGR TYPE BSEG-RSTGR, "原因代碼 TXT40 TYPE T053S-TXT40, "原因代碼文本 LTEXT TYPE CSKT-LTEXT, "成本中心文本 DMBTR TYPE BSEG-DMBTR, DMBTRS TYPE BSEG-DMBTR, DMBTRH TYPE BSEG-DMBTR, TXT50 TYPE SKAT-TXT50, GSBER TYPE BSEG-GSBER, END OF TY_SHOW, BEGIN OF TY_T053S, RSTGR TYPE BSEG-RSTGR, "原因代碼 BUKRS TYPE BSEG-BUKRS, "原因代碼 TXT40 TYPE T053S-TXT40, "原因代碼文本 END OF TY_T053S, BEGIN OF TY_CSKT, KOSTL TYPE BSEG-KOSTL, "原因代碼 LTEXT TYPE CSKT-LTEXT, "原因代碼文本 END OF TY_CSKT. DATA:GT_SHOW TYPE TABLE OF TY_SHOW, GW_SHOW LIKE LINE OF GT_SHOW, GT_T053 TYPE TABLE OF TY_T053S, GW_T053 LIKE LINE OF GT_T053, GT_CSKT TYPE TABLE OF TY_CSKT, GW_CSKT LIKE LINE OF GT_CSKT. DATA:GT_FIELDCAT TYPE LVC_T_FCAT. DATA GS_FIELDCAT LIKE LINE OF GT_FIELDCAT. DATA LS_LAYOUT TYPE LVC_S_LAYO. DEFINE APPEND_FIELDCAT . CLEAR GS_FIELDCAT. GS_FIELDCAT-FIELDNAME = &1. GS_FIELDCAT-SCRTEXT_L = &2. GS_FIELDCAT-OUTPUTLEN = &3. GS_FIELDCAT-NO_ZERO = &4. APPEND GS_FIELDCAT TO GT_FIELDCAT. END-OF-DEFINITION. SELECTION-SCREEN:BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS:S_BUKRS FOR BKPF-BUKRS DEFAULT '1000'. SELECT-OPTIONS:S_GJAHR FOR BKPF-GJAHR DEFAULT SY-DATUM+0(4). SELECT-OPTIONS:S_MONAT FOR BKPF-MONAT DEFAULT SY-DATUM+4(2). SELECT-OPTIONS:S_BELNR FOR BKPF-BELNR. SELECT-OPTIONS:S_HKONT FOR BSEG-HKONT. SELECT-OPTIONS:S_KUNNR FOR BSEG-KUNNR. SELECT-OPTIONS:S_LIFNR FOR BSEG-LIFNR. SELECT-OPTIONS:S_KOSTL FOR BSEG-KOSTL. SELECT-OPTIONS:S_BLART FOR BKPF-BLART. SELECT-OPTIONS:S_BUDAT FOR BKPF-BUDAT. SELECT-OPTIONS:S_GSBER FOR BSEG-GSBER. SELECTION-SCREEN END OF BLOCK BLK01. START-OF-SELECTION. PERFORM PRM_GET_DATA. PERFORM PRM_PROCE_DATA. PERFORM PRM_SET_FIELD. PERFORM PRM_SHOW. *&---------------------------------------------------------------------* *& Form PRM_GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_GET_DATA . SELECT BKPF~MONAT" TYPE BKPF-MONAT, BKPF~BUDAT" TYPE BKPF-BUDAT, BKPF~BELNR" TYPE BKPF-BELNR, BKPF~BUKRS" TYPE BKPF-BUKRS, BKPF~BKTXT" TYPE BKPF-BKTXT, BKPF~GJAHR" TYPE BKPF-GJAHR, BKPF~BLART" TYPE BKPF-BLART, BKPF~WAERS" TYPE BKPF-WAERS, BKPF~USNAM" TYPE BKPF-USNAM, BKPF~AWKEY" TYPE BKPF-USNAM, BSEG~HKONT" TYPE BSEG-HKONT, BSEG~KOSTL" TYPE BSEG-HKONT, BSEG~KUNNR" TYPE BSEG-HKONT, BSEG~LIFNR" TYPE BSEG-HKONT, BSEG~FKBER" TYPE BSEG-HKONT, BSEG~WRBTR" TYPE BSEG-WRBTR, BSEG~MATNR" TYPE BSEG-WRBTR, BSEG~SHKZG" TYPE BSEG-WRBTR, BSEG~XNEGP" TYPE BSEG-WRBTR, BSEG~RSTGR" TYPE BSEG-RSTGR, BSEG~DMBTR SKAT~TXT50" TYPE SKAT-TXT50, BSEG~GSBER INTO CORRESPONDING FIELDS OF TABLE GT_SHOW FROM BKPF INNER JOIN BSEG ON BKPF~BUKRS = BSEG~BUKRS AND BKPF~BELNR = BSEG~BELNR INNER JOIN SKAT ON BSEG~HKONT = SKAT~SAKNR AND SKAT~SPRAS = '1' AND SKAT~KTOPL = '1000' WHERE BKPF~BUKRS IN S_BUKRS AND BKPF~GJAHR IN S_GJAHR AND BKPF~MONAT IN S_MONAT AND BKPF~BELNR IN S_BELNR AND BSEG~HKONT IN S_HKONT AND BSEG~KUNNR IN S_KUNNR AND BSEG~LIFNR IN S_LIFNR AND BSEG~KOSTL IN S_KOSTL AND BSEG~GSBER IN S_GSBER AND BKPF~BLART IN S_BLART AND BKPF~BUDAT IN S_BUDAT. IF GT_SHOW[] IS INITIAL. MESSAGE '無結果!' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ELSE. SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_T053 FROM T053S WHERE SPRAS = '1'. SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_CSKT FROM CSKT WHERE SPRAS = '1' AND KOKRS = '1000'. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_PROCE_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_PROCE_DATA . DATA:GS_SHOW LIKE LINE OF GT_SHOW. * SORT GT_SHOW BY BUKRS GJAHR BELNR KUNNR DESCENDING LIFNR DESCENDING." HKONT DESCENDING. LOOP AT GT_SHOW INTO GW_SHOW. * IF GW_SHOW-XNEGP = 'X'. * GW_SHOW-DMBTR = GW_SHOW-DMBTR * -1. * ENDIF. IF GW_SHOW-HKONT = '0002202002' AND GW_SHOW-LIFNR IS INITIAL."應付暫估 帶出供應商 SELECT SINGLE LIFNR INTO GW_SHOW-LIFNR FROM BSEG WHERE BUKRS = GW_SHOW-BUKRS AND BELNR = GW_SHOW-BELNR AND GJAHR = GW_SHOW-GJAHR AND LIFNR <> ''. ENDIF. IF GW_SHOW-HKONT = '0001406001' AND GW_SHOW-KUNNR IS INITIAL."應付暫估 帶出供應商 SELECT SINGLE KUNNR INTO GW_SHOW-KUNNR FROM BSEG WHERE BUKRS = GW_SHOW-BUKRS AND BELNR = GW_SHOW-BELNR AND GJAHR = GW_SHOW-GJAHR AND KUNNR <> ''. ENDIF. IF GW_SHOW-SHKZG = 'S'. IF GW_SHOW-XNEGP = 'X'. GW_SHOW-DMBTRH = GW_SHOW-DMBTR. GW_SHOW-WRBTRH = GW_SHOW-WRBTR. ELSE. GW_SHOW-DMBTRS = GW_SHOW-DMBTR. GW_SHOW-WRBTRS = GW_SHOW-WRBTR. ENDIF. * GW_SHOW-DMBTRS = GW_SHOW-DMBTR. ELSEIF GW_SHOW-SHKZG = 'H'. IF GW_SHOW-XNEGP = 'X'. GW_SHOW-DMBTRS = GW_SHOW-DMBTR * -1. GW_SHOW-WRBTRS = GW_SHOW-WRBTR * -1. ELSE. GW_SHOW-DMBTRH = GW_SHOW-DMBTR * -1. GW_SHOW-WRBTRH = GW_SHOW-WRBTR * -1. ENDIF. GW_SHOW-DMBTR = GW_SHOW-DMBTR * -1. GW_SHOW-WRBTR = GW_SHOW-WRBTR * -1. * GW_SHOW-DMBTRH = GW_SHOW-DMBTR. ENDIF. READ TABLE GT_T053 INTO GW_T053 WITH KEY BUKRS = GW_SHOW-BUKRS RSTGR = GW_SHOW-RSTGR. IF SY-SUBRC = 0. GW_SHOW-TXT40 = GW_T053-TXT40. ENDIF. READ TABLE GT_CSKT INTO GW_CSKT WITH KEY KOSTL = GW_SHOW-KOSTL. IF SY-SUBRC = 0. GW_SHOW-LTEXT = GW_CSKT-LTEXT. ENDIF. MODIFY GT_SHOW FROM GW_SHOW. CLEAR:GW_SHOW. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_SET_FIELD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_SET_FIELD . REFRESH GT_FIELDCAT. LS_LAYOUT-CWIDTH_OPT = 'X'. "優化列寬選項是否設置 LS_LAYOUT-ZEBRA = 'X'. * ls_layout-box_fname = 'SEL'. APPEND_FIELDCAT:'BUKRS' '公司代碼' 4 'X', 'GJAHR' '會計年度' 4 'X', 'MONAT' '會計期間' 2 'X', 'BUDAT' '過賬日期' 10 '', 'BELNR' '憑證編號' 10 'X', 'AWKEY' '憑證參考' 20 'X', 'BKTXT' '摘要' 25 '', 'HKONT' '科目代碼' 10 'X', 'TXT50' '科目名稱' 50 '', 'KUNNR' '客戶編號' 10 '', 'LIFNR' '供應商編號' 10 '', 'FKBER' '功能范圍' 4 '', 'GSBER' '業務范圍' 4 '', 'WAERS' '幣別' 3 '', 'KOSTL' '成本中心' 10 'X', 'LTEXT' '成本中心描述' 40 '', 'MATNR' '物料編碼' 18 'X', 'RSTGR' '原因代碼' 4 '', 'TXT40' '原因代碼描述' 40 '', 'WRBTR' '原幣金額' 16 '', 'WRBTRS' '原幣借方金額' 16 '', 'WRBTRH' '原幣貸方金額' 16 '', 'DMBTR' '本幣金額' 16 '', 'DMBTRS' '本幣借方金額' 16 '', 'DMBTRH' '本幣貸方金額' 16 '', 'USNAM' '制單人' 12 ''. ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_SHOW *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_SHOW . DATA:LV_TITLE TYPE LVC_TITLE. DESCRIBE TABLE GT_SHOW LINES LV_TITLE. CONDENSE LV_TITLE NO-GAPS. CONCATENATE '結果共' LV_TITLE '條目!' INTO LV_TITLE. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING I_CALLBACK_PROGRAM = SY-REPID I_CALLBACK_PF_STATUS_SET = 'PRM_SET_STATUS' I_CALLBACK_USER_COMMAND = 'PRM_USER_COMMAND' IS_LAYOUT_LVC = LS_LAYOUT IT_FIELDCAT_LVC = GT_FIELDCAT[] I_GRID_TITLE = LV_TITLE I_DEFAULT = 'X' I_SAVE = 'A' TABLES T_OUTTAB = GT_SHOW EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. ENDIF. ENDFORM. FORM PRM_SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS 'ZSTAT'. ENDFORM. FORM PRM_USER_COMMAND USING P_UCOMM LIKE SY-UCOMM P_SELFIELD TYPE SLIS_SELFIELD. CHECK P_UCOMM = '&IC1'. READ TABLE GT_SHOW INTO GW_SHOW INDEX P_SELFIELD-TABINDEX. IF SY-SUBRC = 0. SET PARAMETER ID 'BLN' FIELD GW_SHOW-BELNR. SET PARAMETER ID 'BUK' FIELD GW_SHOW-BUKRS. SET PARAMETER ID 'GJR' FIELD GW_SHOW-GJAHR. CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN. ENDIF. ENDFORM.
