SmartForms 小技巧


1.添加空行,保證每一頁有固定的打印的表格行數

上圖,每頁最多打印13行,數據只有11行,自動添加兩個空行補齊

代碼如下“

 1 "定義變量:
 2 
 3 data: l_blank type i.
 4 
 5 "內表的行數
 6 
 7 describe table <itab> lines l_blank.
 8 
 9 "計算需要的空行
10 
11  l_blank = l_blank mod 13. 
12 
13 if  l_blank > 0.   
14 
15    l_blank = 13 -  l_blank.  "空白行。 
16 
17 endif.
18 
19 clear <wa>. 
20 
21 do  l_blank times.   
22 
23   append <wa> to <itab>.  
24 
25 enddo.

 

2.變量

 

&symbol& (括號中,小寫字母為變量) 

&symbol&  屏蔽從第一位開始的N位

&symbol (n)&       只顯示前N位

&symbol (S)&       忽略正負號

&symbol (<)&       符號在左邊

&symbol (>)&       符號在右邊

&symbol (Z)&       不輸出前導零

&symbol (C)&       空格壓縮

&symbol (.n)&       顯示n 位的小數位

&symbol (T)&       忽略千位分隔符

&symbol (En)&      浮點數的冪指數為n

&symbol (nR)&      n位顯示,居右

&symbol (Ff)&      fill character,用f 填充字段至完整位數顯示

&symbol (I)&       如果該字段是INITIAL,不輸出

&symbol (K)&       禁止系統類型轉換

&'pre-text' symbol 'post-text'&       在字段輸出前后加入文本內容

SET DATE MASK = 'date_mask'    設置日期顯示模版

SET TIME MASK = 'time_mask'        設置時間顯示模版

 

3.Smartform的幾點說明

 

1、使用SFSY-FORMPAGES顯示總頁數的時候,如果頁數大於9,,將會在前10頁顯示成星號。解決辦法:可以添加3ZC,&SFSY-PAGE(3ZC)&/&SFSY-FORMPAGES(3ZC)&,不過可能會出現字體顛倒或者重疊的現象,用一個單獨的窗口來存放顯示頁碼的文本,並且把窗口的類型設置為L(最終窗口)就OK了。

 

2、如果金額或者數量字段顯示不出來的話,可以在“貨幣/數量字段”標簽中指定相應的數據類型。

 

3、Field not outputting more than 255 characters in a loop. This is happening because when you send a string to smartform with length >255 characters then it takes only first 255 characters. I overcomed this problem by splitting the string which was of around 500 char into two and then sending it to smartform as individual vairables and displaying the two variables one after the other in the smartform.

將文本字段拆分成幾個字符變量再連接在一起顯示。

 

4、輸出格式設置說明

Syntax                 說明 

&field+&               對於字符變量設置從何位置顯示數據,如果offset大於字符變量長度時,系統就不會顯示任何數據 

&field()&               設置輸出長度. 

&field(*)&              如果該字段類型是abap數據字典里定義的類型,系統將按照字典定義的長度設置輸出長度 

&field(S)&             禁止輸出符號位 

&field(<)&             符號位顯示在數據的左邊 

&field(.)&              設置顯示小數的位數 

&field(E)&             設置為科學標示法 

&field(T)&              禁止千分位的顯示(適用於: DEC, CURR, INT和QUAN幾種數據類型). 

&field(Z)&              禁止數字前導0的顯示 

&field(I)&               禁止顯示空值 

&field(K)&             禁止類型系統按數據字典定義的轉換函數進行輸出轉換 

&field(R)&             右對齊(只有在定義了輸出長度時才有效) 

&field(F)&              用指定的字符替換左邊的空格. 

&field(L)&              將日期轉換為本地顯示格式,使用JDAT指定的格式 

&field(C)&             該設置效果和ABAP的CONDENSE語句相同.

 

5、Smartform 打印條形碼

先在SE73里定義一個新的BARCODE,注意一定要用新的才可以,舊的是打印不出來的。然后定義一個SMARTFORM的樣式,把你定義的BARCODE放到字符樣式里面去。再做SMARTFORM就可以了,將需要作為條碼的變量的格式選為該BARCODE格式,輸出時會根據變量不同的數據(如物料,批次)得到相應的條碼。

(1).In the transaction se73 , choose a barcode font that suits your requirements (do this by checking the system barcodes radio button)

(2).Click on the Printer barcodes radiobutton and make sure that the barcode you chose in step 1 exists for the device type of your printer.

If you need to create a new barcode font , create it in step1 , and enterthe hex barcode prefix and suffix ( can be obtained from your printer manual) , then in step 2 , define a new z_ device type as a copy of the device type of your printer and assign the system barcode to the printer.

(3). in your layout set , define a character string with the barcode font chosen above in the Bar code field . Format the string that you want to print as a barcode using this character string.

 

6、調試    如果在SMARTFORM中添加了代碼,編輯器是不允許設置斷點的。

一種方法就是,在代碼中加入斷點語句break-point,缺點是,每想設一個斷點,就需要寫一條斷點語句。

另一種方法是,自己加的代碼都會自帶出一個名字的比如‘%CO1’。 Environment -> Function Module Name, he function that generated for this smartforms is ‘/1BCDWB/SF00000227’(自動生成的SMARTFORM程序名) T-code se37 -> /1BCDWB/SF00000227 -> Goto -> Main Program 最后一個INCLUDE是對DEBUG最有用的,雙擊進入,找到 FORM %GLOBAL_INIT。

來自: 

http://blog.csdn.net/linsen831214/article/details/5690690 

 

有些時候使用smartform時,在設計form layout的時候check是不出錯的,但是一旦跑了function, exception就返回了,很讓人郁悶。

今天就遇到了這個問題,在程序中使用smartform打印,點擊“打印預覽”后沒有任何反映,通過debug獲得錯誤信息“參考字段wa-wrbtr在表格中未知”,知道了錯誤源,就好解決了。

在smartform中使用bseg-wrbtr字段時,不能直接&wa-wrbtr&,需要先判斷它是否有值,不然就會出錯

創建定個程序行,代碼如下:

l_wrbtr = wa-wrbtr.  "l_wrbtr 類型為c 或者 string

IF wa-wrbtr IS INITIAL.     CLEAR l_wrbtr.  ENDIF.

 

最后輸出 &l_wrbtr&即可。

雖然解決了,但不能確定是什么原因,可能bseg-wrbtr的類型是CURR的緣故吧。

來自:http://www.cnblogs.com/liaojunbo/archive/2011/09/05/2167097.html 

4.SmartForms 小技巧 

1.使用TABLE在最小高度沒有考慮數據換行時,絕對不要自己在程序里面計算總頁數;

2.使用TABLE切記表頭要勾選在換頁處顯示;

3.使用TABLE切記計算時選擇“總計”、“在循環結束時”只會總計一頁的數據,而不是所有的數據;

4.使用TABLE當你發現調整了最小行高結果行高還是沒變時,看看是不是樣式的問題;

5.所有數字變量后面一般都要加(C),數字靠右,文字靠左,標題很短的話文字之間加個空格,頁計“/”兩邊加空格,美觀;

6.面向前台打印的時候,導入接口沒有要求一般只有打印相關。

 

 

SE38中運行RSCPSETEDITOR,勾掉SMARTFORMS和SAPSCRIPT前面的勾就可以了!
激活后SMARTFORM中的文本編輯器就改為SAP默認的了!


免責聲明!

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



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