ABAP面試問題及側重點


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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM