以前做項目中遇到的,很多沒來得急記下來,先貼幾個吧
9. 問題
9.1. ALV自帶導出文件時字段數據末尾被截斷問題
發現有前導0時,導出會被截斷:現發現VBAK-VBELN 與 MARA-MFRNR都有這個問題,可能原因是他們帶有轉換輸出與輸入規則所導致
另一種解決辦法:
9.2. Smartform 中Template無法顯示減號后面內容
在Smartform中的Template里,如果輸入的變量內容含有減號,則減號后面的內容會被丟掉
問題原因:輸出的內容超出了Template單元格的長度
解決辦法:更改TEMPLATE的長度,或者換成 TABLE
9.3. Smartform金額或者數量字段顯示不出來
9.4. 更新數據庫表時,工作區或內表的結構需參考數據庫表來定義
使用使用MODIFY更新數據庫表時,工作區或內表的行結構與數據庫表結構中各字段聲明順序要相同,否則更新會錯位,該內表最好參照數據庫詞典結構類型來聲明,這樣就不會有問題。
9.5. DELETE ADJACENT DUPLICATES…去重復
DELETE ADJACENT DUPLICATES FROM <itab> [COMPARING<f1><f2> ... | ALL FIELDS]
注,在未使用COMPARING 選項時,要刪除重復數據之前,一定要按照內表關鍵字聲明的順序來進行排序,才能刪除重復數據,否則不會刪除掉;如果指定了COMPARING 選項,則需要根據指定的比較字段順序進行排序(如COMPARING <F1><F2>時,則需要sort by <F1><F2>,而不能是sort by <F2><F1>),才能刪除所有重復數據
9.6. Text使用Excel打開亂碼問題
如果使用GUI_DOWNLOAD函數下載文本文件,或者是發送郵件的附件,在英文XP操作系統中使用英文Excel軟件打開時,請使用 UTF-16LE 編碼,否則可能出現亂碼情況。
data: l_codepage(4) type n .
data: l_encoding(20).
"根據編碼名獲取對應的CodePage
callfunction'SCP_CODEPAGE_BY_EXTERNAL_NAME'
EXPORTING
external_name = 'UTF-16LE'
IMPORTING
sap_codepage = l_codepage.
l_encoding = l_codepage.
data: convout type ref to cl_abap_conv_out_ce.
convout = cl_abap_conv_out_ce=>create( encoding = l_encoding ).
convout->write( data = lv_content )."將字符按照l_encoding編碼格式轉換為X類型(二進制)
xstr = convout->get_buffer( ).
"在碼流最前面加上編碼信息,該編碼由文本編輯軟件在打開文件時使用
concatenate cl_abap_char_utilities=>byte_order_mark_little
xstr into xstr in byte mode.
9.7. VBFA與EKPO聯合查詢問題
由於VBFA-POSNN 與 EKPO-EBELP字段的類型相同,但長度不一樣(VBFA-POSNN是6位的數字類型,而EKPO-EBELP為5位數字類型,但VBAP-POSNR行項目號是6位數字類型,不會出現此類問題),所以它們不能進行關聯查詢,相似的還有VBFA- POSNV也是6位的。下面這個關聯查詢是查不出數據的,只能分兩次查詢:
SELECT SINGLE vbeln posnn txz01 menge
INTO (it_result-ebeln, it_result-ebelp, it_result-txz01 , it_result-menge_2)
FROM vbfa AS v INNER JOIN ekpo AS e ON v~vbeln = e~ebeln AND v~posnn = e~ebelp AND e~knttp = 'E'"Where條件是根據銷售單查找前置單據——采購單,V為采購單憑證類型
WHERE vbelv = it_result-vbeln AND posnv = it_result-posnr AND vbtyp_n = 'V'.
HNTTP:采購憑證中的帳戶設置類型,E——生產/銷售所需物料的采購
分成兩個可以正常查詢:
SELECT SINGLE vbeln posnn
INTO (it_result-ebeln, it_result-ebelp)
FROM vbfa AS v"Where條件是:先根據銷售單查找到前置采購單的單號與行項目號
WHERE vbelv = it_result-vbeln AND posnv = it_result-posnr AND vbtyp_n = 'V'.
SELECT SINGLE txz01 menge
INTO (it_result-txz01, it_result-menge_2)
FROM ekpo"Where條件是:再根據前面查出來的采購單號與行項目號,查出EKPO其他詳細信息
WHERE ebeln = it_result-ebeln AND ebelp = it_result-ebelp AND knttp = 'E'.