ABAP程式設計需要注意的小問題

2021-05-27 15:31:13 字數 2064 閱讀 6654

一、select語句中使用for all entries in需要注意的問題

在abap程式設計中,使用for all entries in是必不可少的語句,使用這個語句是先取出一些資料放到乙個內錶中,然後參考這張內錶的資料取出其它的資料,這在abap開發中非常常用,例如:

data: begin of ig_bseg occurs 0,

werks like bseg-werks,

belnr like bseg-belnr,

gjahr like bseg-gjahr,

dmbtr like bseg-dmbtr,

end of ig_mseg.

if not ig_bkpf is initial.

select werks belnr gjahr dmbtr 

into corresponding fields of table ig_bseg

from bseg for all entries in ig_bkpf

where werks = ig_bkpf-werks 

and belnr = ig_bkpf-belnr 

and  gjahr = ig_bkpf-gjahr.

endif.

需要注意以下問題

1、首先,必須要判斷for all entries in後面的內錶是否為空,如果它為空的話,那麼在where條件中的與內錶中字段進行比較的結果全部為真,也就是全部滿足條件,這會導致取出非常多的資料,極大地影響系統的效能。

2、對於上例,按照邏輯分析可以取出某個憑證的所有行專案,但是實際情況會與你預期的不一致,如果某個憑證的多個行專案的dmbtr值是完全一樣的,那麼在內表ig_bseg中你只會得到一行記錄,而不是多行,它自動使用了distinct,或者說刪除了重複的行,這是個非常致命的問題,會導致你的程式邏輯錯誤,而且很難以查詢,解決的辦法就是要保證內錶ig_bseg中取出的資料必須要有主鍵字段,在本例中,需要再新增buzei欄位。

二、自建表和從系統外匯入資料需要注意的問題

1、自建表中建立文字型別的字段(自己建立domain)時,需要注意是否允許字段可以保留文字的大小寫狀態,否則缺省會全部轉換為大寫字母。

2、在某個建立的自建表中,某個欄位的資料元素為matnr(物料編號),型別為char(18),但是匯入的資料的長度只有char(12),比資料庫欄位要短,如果直接匯入,不進行任何處理。

2.1 首先匯入資料肯定不會出現錯誤,但是在使用中會出現問題,例如我通過匯入進去的物料編號找物料描述,是找不到資料的,因為我們匯入物料編號的長度只有12位,而系統標準表中的物料編號前面都是用0補齊18位的,所以我們在匯入資料時,有些字段不能直接寫入資料庫,需要進行一定的處理。

2.2 我們可以呼叫系統的函式來實現補0這個功能。

conversion_exit_alpha_input    對話退出alpha,外部->內部 這個是補0函式

conversion_exit_alpha_output   對話退出alpha,內部->外部 這個是除0函式

函式呼叫非常簡單,如下

call function 'conversion_exit_alpha_input'

exporting

input         = ig_upload-hkont_nis

importing

output        = wa_zdflnis-hkont_nis

三、提高程式執行效率的一些小方法

1、           我們在abap程式中定義的內錶,在我們從資料庫中查詢資料的時候,查詢資料的順序最好可以和內錶定義的順序一樣,這樣可以提高效率的允許效率。

2、           我們在查詢簇表資料的時候,例如bseg表,對於乙個簇表來說,除了主鍵專案外,其他專案都被編輯到乙個長文字專案中,一起儲存在表簇rfblg中的vardata專案中,這就決定了作為簇表的bseg無法再建立鍵值以外的索引(index),而這張表對我們來說,很多報表程式要用到這張表,而如果直接用其他專案的字段查詢bseg表的資料,效率非常的底下,所以我們需要在另外的表中找到bseg的主鍵專案,來加快查詢bseg表的速度。

另外最有效率的方法是改善應用和需求,要使需求合理規範,這才能使效率達到最高化。

socket程式設計需要注意的問題

1.connect tcp sock stream 是連線到服務端,udp sock dgram 是把本地位址埠和服務端的對應起來,並沒有建立連線 connect前也可以用bind 繫結本地位址埠到clientfd,bind的引數是本地位址埠 不使用bind則會自動繫結個 2.如果是udp,則可以不...

android 開發部分需要注意的小問題

android 由於版本的更迭,部分操作需要有一些小改動,通常只在專案開始的時候用一下,時間長了容易忘記,在此做個筆記。目錄 1 android 檔案操作 2 android 相機拍照 3 flutter修改sdk路徑 android 開發中經常需要讀取檔案,除了正常的許可權變更獲取之外還需要在 a...

一,初次接觸html css需要注意的小問題

html最基礎的,入門學習的是標籤,常用的標籤有 定義錨。定義粗體字。單標籤 定義簡單的折行。定義按鈕 push button 定義文件中的節。不贊成使用。定義文字的字型 尺寸和顏色。定義供使用者輸入的 html 表單。定義 html 標題。定義斜體字。定義內聯框架。定義影象。定義輸入控制項。定義段...