日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ABAP面试

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABAP面试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

    • report
      • 內表
        • 創建內表
        • 獲取內表行數
        • 不用modify直接更新內表
      • 選擇屏幕
        • 屏幕元素創建
          • 1、select-options
          • 2、parameters
          • 3、輸入值的控制
          • 4、選擇屏幕事件流
          • 5、選擇屏幕動態展示
          • 6、選擇屏幕兩個按鈕同一行顯示
    • opensql
          • for all entries in
    • alv
      • function alv
        • fieldcat 字段設置
        • 設置單元格顏色
        • 設置某單元格可編輯
        • layout 布局控制
        • 如何做到單擊跳轉事務
      • GUI狀態欄
    • dialog
    • 常用標準T-CODE
    • 常用bapi
        • bapi_po_create1
        • bapi_po_change
        • bapi_goodsmvt_creaate :
        • BAPI_TRANSACTION_ROLLBACK
        • BAPI_TRANSACTION_COMMIT
        • BAPI_MATERIAL_SAVEDATA 創建物料主數據
        • BAPI_SALESORDER_CREATEFROMDAT2
    • 常用表
    • BDC錄屏
    • 增強
        • 一代增強
          • 查找一代增強的方法
        • 二代增強
          • 查找二代增強的方法
          • 第二代增強主要包括四類:
          • 按照用途分類:
        • 三代增強 badi
          • 查找badi的方法
        • 四代增強
    • RFC函數
        • 防止重復調用
        • 調用日志
        • RFC通訊模式
          • 同步通信
          • 異步通信
    • smartform ----0331:面試
          • 模板與table的區別
          • 模板分頁如何操作
        • smartform打斷點
    • webservice
    • 內存
    • 程序優化
        • 優化程序性能的基本原則
        • 優化程序性能的方法
        • 雙LOOP循環優化
    • 指針
  • 總結

report

內表

創建內表

1、第一種方式

先定義types ,然后再type table of 定義內表

types : begin of <typ_name>, end of <typ_name>. dara : <itab> type table of <typ_name>.

4、第四種方法

引用標準表創建內表

data : <i_tab> type table of mara .

5、第五種方法,

引用標準表并且添加自定義字段創建內表

data : begin of <itab>, include structure mara. data : clr type char4, end of <itab>.

獲取內表行數

通過describe獲得內表行數。

describe table <itab> line n.

不用modify直接更新內表

LOOP AT ASSIGNING FIELD SYMBOL

loop at gt_alv assigning field-symbol(<fs_output>). fs_output-waers = ls_prcd_elements-waers. endloop.

選擇屏幕

屏幕元素創建

1、select-options

對象名稱for參考對象,定義范圍選擇條件

select-options : s_bukrs for bukrs.

? 生成一個含有4個字段的內表: sign option low high

ranges : s_bukrs for bukrs.

sign : 標志位 值為I或者E 意義為option運算符是否取反,I表示包含,E表示排除

option: 運算符 如果high不為空,這可以使用bt(between and) 或者nb(not between)。

2、parameters

對象名稱 type/ like 對象名稱,定義單選條件。

屏幕輸入域顯示參數控制

obligatory : 必輸

no-display: 顯示控制

no-extension : 多行輸入控制

as CheckBox : 創建復選框

visible length vlen : 顯示控制長度

parameters 對象名 as listbox visible length vlen 創建下拉列表

3、輸入值的控制

default : 默認值

lower case 允許輸入小寫字母(sap 屏幕會默認把輸入后的字母轉換為大寫)

matchcode object search_help : 為屏幕對象加上指定的F4幫助對象. se11 定義搜索幫助對象

memory id : 定義select-option 內存參數,可以講屏幕對象輸入的值保存到指定的內在參數中,通過get parameter 方法直接從內存讀取該對象的值。

4、選擇屏幕事件流

load-of-program 程序執行時,自動觸發該事件

initialization 該事件在屏幕未顯示前執行,初始化程序

at selection-screen output 選擇屏幕PBO事件,顯示選擇屏幕之前觸發

at selection-screen 選擇屏幕PAI事件,在選擇屏幕上點擊執行后觸發。

start-of-selection 數據選擇行開始

end-of-selection數據選擇行結束

top-of-page 頁眉控制

end-of-page 頁腳控制

at line-selection 行選擇控制,用戶選擇或者雙擊某行是觸發

at user-command 用戶交互控制,用戶選擇某個GUI功能是觸發

5、選擇屏幕動態展示

拿沖銷和過賬舉例子

先設置過賬和沖銷兩個單選按鈕 RADIOBUTTON r1 / r2 按鈕需要分配user-command 屬性

然后給需要動態顯示的項設置不同的組 MODIF ID md1/md2

在選擇屏幕的pbo事件中 判斷screen-group1 = ‘md1’ screen-active = ‘0’. 就把md1下所有項都隱藏掉了

IF r_cancel = 'X'.LOOP AT SCREEN.IF screen-group1 = 'MD1'.screen-active = '0'.ENDIF.MODIFY SCREEN.ENDLOOP.ELSEIF r_run = 'X'.LOOP AT SCREEN.IF screen-group1 = 'MD2' .screen-active = '0'.ENDIF.MODIFY SCREEN.ENDLOOP.ENDIF.
6、選擇屏幕兩個按鈕同一行顯示

comment xx(Y): 、 這條語句的作用是講該語句后面的第一個screen element 定位在這一行的XX位置,長度為y

selection-screen begin of line.selection-screen comment(10) for field but1.selection-screen comment(15) for field but1. selection-screen end of line。

opensql

inner 和left,right 是且與或的關系

1、不要使用select * ,會占用大量abap 內存

2、 不要使用select distinct 使用 sort + delete adjacent duplicates

3、不要使用嵌套select 。。。 endselect。

4、確定只查詢一條數據時,應用select single

5、需要統計時,可以使用sql+聚合函數

6、盡可能的使用abap sort 排序 不使用order by

7、使用二分法查詢內表數據速度

read table itab with key binary search.
for all entries in

1、in 條件所在內表不能為空(空值相當于沒有任何條件,會取出所有數據)

2、in條件內表數據大于5000時不建議使用,一定要使用盡量每次使用3000,循環方式

3、該語句會自動去重,相當于distinct ,使用時盡量帶出主鍵

alv

alv 是 abap list view 是abap報表顯示工具,它把內表中的內容以設定的格式顯示出來,并且可以添加自定義的功能,比如打印出來

alv 分為兩種 function alv 和oo alv

function alv

reuse_alv_grid_displary 網格展示 (常用)

reuse_alv_list_displary 列表展示

類型池slis

fieldcat 字段設置

gs_field type slis_t_fieldcat_alv

wa_field type slis_fieldcat_alv

常用的field設置

wa_field-fieldname :內表字段名稱

? seltext : 展示名稱 (seltext_l 長 seltext_m 中 seltext_s 短)

? du-sum : 總計列值

? edit : 可編輯

? just : 對齊 R L C

? emphasize 設置列顏色 使用4位字符代表顏色

? 首位C(color)

? 二位1-7數字代表顏色 3黃色,5綠色 6紅色

? 三位 1/0 代表反轉顏色啟用

? 四位 1/0 增強顏色啟用

設置單元格顏色

內標準含有字段

color TYPE LVC_S_scol.

設置某單元格可編輯

FIELD_STYLE TYPE LVC_T_STYL, " 為結果內表添加設置編輯狀態所需的字段

DATA STYLELIN TYPE LVC_S_STYL.

STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 循環內表設置為不可編輯狀態

DATA: BEGIN OF ITAB OCCURS 0,ZQRFH_ICON TYPE STRING,ZLDATE TYPE ZLDATE,ZLUSR TYPE ZLUSR,K TYPE STRING,FIELD_STYLE TYPE LVC_T_STYL, " 為內表添加設置編輯狀態所需的字段 END OF ITAB.S_FIELDCAT-FIELDNAME = 'ZBQFS'. " 設置列可編輯S_FIELDCAT-EDIT = 'X'.APPEND S_FIELDCAT TO T_FIELDCAT.DATA STYLELIN TYPE LVC_S_STYL.LOOP AT ITAB.IF ITAB-ZXMDM = 'D' OR ITAB-ZXMDM = 'F' OR ITAB-ZXMDM = 'H'.STYLELIN-FIELDNAME = 'ZBQFS'. " 需要編輯的列名STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 設置為不可編輯狀態APPEND STYLELIN TO ITAB-FIELD_STYLE.CLEAR STYLELIN.MODIFY ITAB.ENDIF.endloop.

layout 布局控制

gs_layout type slis_layout_alv

常用layout設置

gs_layout-colwidth_optimize = ‘X’ 自動設置列寬

? coltab_fieldname = ‘CELLCOLOR’ 設置某個字段值顯示顏色

? info_fieldname = ‘CLR’ 設置行顯示顏色 ,CLR為結果內表里的字段

? zebra = ‘X’ 設置斑馬線條顯示顏色

? box_fieldname = ‘XH’ alv 選中行 ,XH為結果內表里的字段

call function ’REUSE_ALV_GRID_DISPLAY‘

exporting

i_callback_program = g_repid

? is_layout = gs_layout

? it_fieldcat = gs_fieldcat

? it_sort = lt_sort : 排序

i_save = ’A‘ 生成布局

? i_callback_pf_status_set = ‘FRM_ALV_PF_STATUS’ : gui狀態

? i_callback_user_command = ‘FRM_ALV_USER_COMMAND’ : 用戶pai事件

tables

? t_outtab = it_out[]

it_sort-fieldname = ‘’ 設置需要排序的字段名

it_sort-up = ‘X’ 設置升序

或者

it_sort-down = ‘X’ 設置降序

如何做到單擊跳轉事務

1、首先在fieldcat中設置hotspot = ’X‘

2、然后再user_command事件中加入

case r_ucomm

wuth ‘&IC1’

? set parameter id ‘GJR’ p_gjahr. 設置參數

? call transaction ‘MM03’ and skip firsy screen.調用mm03事務碼

GUI狀態欄

隱藏gui狀態欄按鈕: excluding

DATA : lt_exfcode TYPE TABLE OF sy-ucomm.IF p_aqkcsq <> 'X'.append 'SAVE' to lt_exfcode.ENDIF.SET PF-STATUS 'STANDARD' EXCLUDING lt_exfcode.

dialog

對話框事件和邏輯流

調用時首先觸發PBO->子屏幕PBO,然后顯示屏幕,在屏幕上點擊按鈕后,觸發PAI事件->子屏幕PAI,觸發結束后又會執行PBO->子屏幕PBO

字段輸入事件

ON INPUT:指定某子工程只在給定字段具有非初始化值時才被調用。

ON REQUEST:當屏幕中文本輸入字段的值發生變化

會觸發該程序所定義的子程序。該事件適合于屏幕中所有字段值的變化時檢查更新。

CHAIN-INPUT | CHAIN-REQUEST :該語法可以同時控制屏幕中多個字段的輸入事件。

屏幕退出事件

module exit at exit-command。

leave to screen 0.

常用標準T-CODE

me21n : 創建采購訂單

me22n : 更改采購訂單

me23n : 查看采購訂單

me41 : 創建詢價

mir4 : 查看發票信息

mm03 : 查看物料主數據

cs03 : 查看bom

mb52 : 批量查詢庫存

mb51 : 查看物料移動記錄

mb03 : 查詢物料憑證

常用bapi

bapi_po_create1

: 創建采購訂單

bapi_po_change

: 更改采購訂單

bapi_goodsmvt_creaate :

物料移動,創建物料憑證

call function 'BAPI_GOODSMVT_CREATE'exportinggoodsmvt_header = '' 抬頭goodsmvt_code = '' 移動貨物代碼 importinggoodsmvt_headret = '' 返回包含憑證編號和憑證日期的結構 tablegoodsmvt_items = '' 明細數據return = '' 返回值

GOODSMVT_CODE就控制了對應哪個事物碼的功能,下面給出該參數的值和對應的事務碼:

01 MB01 : 采購訂單收貨
02 MB31 : 訂單收貨
03 MB1A : 發貨過賬
04 MB1B : 轉移過賬
05 MB1C : 投料
06 MB11 :
07 MB04

數據存放在表T158G 中。

BAPI_TRANSACTION_ROLLBACK

BAPI_TRANSACTION_COMMIT

BAPI_MATERIAL_SAVEDATA 創建物料主數據

BAPI_SALESORDER_CREATEFROMDAT2

創建銷售訂單

LOGIC_SWITCH-PRICING = ‘G'

A 復制價格組件和重新確定等級
B 執行新的定價
C 復制手工定價因素且重新確定其它因素
D 復制不變的定價因素
E 采用價格組件和固定值
F 復制價格元素,調整價值與固定
G 復制不變定價因素且重定稅款
H 重新確定運費條件
J 重新確定確認的采購凈價格/價值(KNTYP=D)
K 采納價格組件和重新確定稅收
M 復制價格要素,轉換值
N 傳輸定價組件未更改, 新成本
O 重新確定變式條件(KNTYP=0)
Q 重新確定計算條件(KNTYP=Q)
R 應用價格部分和獎金條件
U 重新確定貴重金屬條件(KNTYP=U)
S 裝運&借方 (IBU HiTec)

常用表

1、MARA: 常規物料數據

2、MARC: 物料的工廠數據

3、MAKT: 物料描述

9、LFA1: 供應商主數據(一般數據)

10、LFB1: 供應商主數據(公司代碼)

23、KNA1: 客戶主數據(一般數據)

24、KNB1: 客戶主數據(公司代碼)

14、EKKO: 采購訂單抬頭

15、EKPO: 采購訂單行項目

16、MKPF:物料憑證抬頭

17、MSEG : 物料憑證行項目

BDC錄屏

CALL TRANSACTION ‘ME41’ USING bdcdata

* OPTIONS FROM BDCOPT

? MESSAGES INTO bdcmsg

? UPDATE ‘S’

? MODE lv_mode. .MODE ‘N’ . "顯示模式:A ;N 后臺 ;E

增強

常用增強:出口 userexit badi ,隱式增強 ;前兩種可以用程序找,也可以找到程序對應的包,然后包里搜索;隱式增強就是觸發事件,需要debug在標準程序里找地方加代碼

一代增強

基于源代碼的增強

第一代增強基于源代碼,是SAP系統提供一個空代碼的子過程,在這個子過程中用戶可以添加自己的代碼。

這類增強需要修改SAP標準代碼,他們發布時都是空的,集中在一些文件名倒數第二個字符為Z的包含過程中,由于實在標準程序中,所以所有程序的全局數據都可以使用,而且系統升級時會被覆蓋掉。所以一般不用此類增強。

查找一代增強的方法

1、在主程序中查找倒數第二個字符為Z的包含程序

2、在程序中搜索userexit_開頭的子程序

二代增強

基于函數模塊的增強

用增強管理smod和增強編輯cmod 維護。在標準程序中,使用call customer-function 'XXX’調用函數模塊,

查找二代增強的方法

所以可以通過在程序中搜索customer-function來查找二代增強,第二代增強函數名構成是exit_ 程序名_‘XXX’ (XXX是call function中的編號)。

針對數據表的增強出口是“CL”打頭的結構,這些結構將以.include結構的形式包含到相應的數據表中,用戶可以通過向這些結構中添加字段從而達到對數據表字段的增加。

第二代增強主要包括四類:

函數增強:E.Ehancement Exits(函數增強) : 這些出口以exit_程序名 _‘編號’ ,可以在se37中查看,也可以在數據字典TFDIR中查詢Exit_開頭的函數。

GUI增強:C.GUI codes : 用于區域菜單和工具欄菜單的增強

屏幕增強 : S.Subscreens : 用于子屏幕設計增強

表結構增強 : include structure : 用于表結構的增強

按照用途分類:

功能模塊出口(Function Module exits) : 在SAP標準事務中添加業務邏輯,一般用于驗證標準事務中的字段

屏幕出口(Screen Exits) : 定義自己的子屏幕或激活屏蔽標準事務中的菜單項

關鍵字出口(keyword exits) : 在

三代增強 badi

se18 創建及維護badi對象

se19 維護badi實例,badi功能的實現

1、先創建增強點

2、在增強點元素定義標簽創建badi

3、然后在菜單中的“接口" 創建接口 ,并且維護方法和參數。

4、然后就可以創建BADI實施

調用方法

method baid~方法名. endmethod.

創建的badi可以在程序中直接調用

badi1 type ref to zbadi_test_F01. 參照接口對象 badi2 type ref of zbadi_test001_class. 參照實施類.
查找badi的方法

通過SE24,輸入CL_EXITHANDLER,然后在方法GET_INSTANCE中設置斷點,然后運行事務代碼判斷 exit_name的值

四代增強

RFC函數

1、任何一個abap程序都可以調用一個遠程調用函數,使用語句:CALL FUNCTION …DESTINATION. sm59 創建abap鏈接

無論是in update task 還是in background task的函數。

都是遇到了commit work語句之后才調用的,

如果沒有commit work,

函數不會被觸發。

防止重復調用

未有答案

調用日志

未有答案

RFC通訊模式

DESTINATION

同步通信
異步通信

smartform ----0331:面試

模板與table的區別

1、table可以動態添加行,數據輸出時會根據列寬自動換行,可以固定列寬,但是默認情況下控制不了行高,如果想要模板一樣固定行高,需要將table的無換頁屬性打鉤

2、模板是靜態的,固定列寬,行高,當輸出數據過長時會自動截斷,通常用于靜態表單開發,模板與loop嵌套使用,可以實現固定行高,列寬的表單表單開發。

模板分頁如何操作

首先創建一個loop循環

然后創建一個可選邏輯流,用于判斷變量值是否需要分頁,判斷條件結果為true

smartform打斷點

可以在程序行里面輸入 斷點語句 break-point

webservice

公司結構 FI SD MM PP basia

內存

EXPORT p1 FROM ekko-submi TO MEMORY ID ‘ZXRMM04’.放入內存

IMport p1 from ekko-submi from memory id ‘’ 從內存中讀取

程序優化

優化程序性能的基本原則

1、減少對數據庫的訪問

訪問數據庫會消耗非常多的時間,頻繁的訪問數據庫,對程序性能的影響是顯而易見的。

2、減少循環次數

循環會增加CPU的負載。雖然每次循環執行的時間比較短,但是隨著循環的次數增加,累計的處理時間就很長

3、減少網絡往返傳輸的數據量

網絡傳輸也很明顯的影響程序的執行時間。數據量越大,網絡延遲的時間就會很明顯

優化程序性能的方法

1、確定影響程序性能的主要原因

要解決問題,就要先確定問題出在哪里

2、通過內表處理減少對數據庫的訪問

? 2.1、使用select。。。into table 一次性的把要處理的數據讀入到內表中進行處理

? 2.2、如果表字段很多的情況下,盡量不要使用select * 返回所以字段值,只返回指定的字段值,

? 盡量避免CORRESPONDING。因為CORRESPONDING存在系統內部存在隱式操作,影響性能。

  • 檢查元素名稱匹配;
  • 檢查元素類型匹配;
  • 元素類型轉換。

? 2.3、盡量在where語句中使用索引字段限定數據的范圍,索引字段按順序排列。

  • where 語句中盡量使用 = 、IN
  • 控制使用>、<、>=、<=、between and
  • 避免使用<> 、 like、not like

? 2.4、如果要取一批數據的最大值,最小值,平均數、總數,可以使用select+聚合函數來取值,而不是將數據取到內表中再進行處理。

? 2.5、如果確定返回只有一條記錄,使用select single 或者select 。。up to 1 rows讀取記錄

? 2.6、使用for all entries 減少批量條件下對數據庫的訪問次數,條件內表需要根據結合條件排序并刪除重復數據,并判斷不能為空。

? 2.7、需要排序是,不要使用order by進行排序,應當用sort操作內表排序

? 2.8、更新\插入\刪除數據表數據時,盡量使用內表一次更新。

雙LOOP循環優化

指針

此方法 標準程序可以獲得任何字段

ASSIGN (‘(SAPMV45A)VBAK-AUART’) TO <LS_AUART>. "獲取訂單類型

總結

記錄 提升 有問題還請大姑們指出

總結

以上是生活随笔為你收集整理的ABAP面试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。