[SAP ABAP開發技術總結]幾個小問題


以前做項目中遇到的,很多沒來得急記下來,先貼幾個吧

9.   問題

9.1.  ALV自帶導出文件時字段數據末尾被截斷問題

發現有前導0時,導出會被截斷:現發現VBAK-VBELN MARA-MFRNR都有這個問題,可能原因是他們帶有轉換輸出與輸入規則所導致

image085

image086

另一種解決辦法:

image087 image088

9.2.  Smartform Template無法顯示減號后面內容

Smartform中的Template里,如果輸入的變量內容含有減號,則減號后面的內容會被丟掉

image089

問題原因:輸出的內容超出了Template單元格的長度

解決辦法:更改TEMPLATE的長度,或者換成 TABLE

9.3.  Smartform金額或者數量字段顯示不出來

image090

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.  VBFAEKPO聯合查詢問題

由於VBFA-POSNN EKPO-EBELP字段的類型相同,但長度不一樣(VBFA-POSNN6位的數字類型,而EKPO-EBELP5位數字類型,但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'.


免責聲明!

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



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