本文將介紹一些進階內容,前文:SAP Adobe Form 教程一 簡單示例
方法和對比
使用表對象(Table Object)創建表
優點:
它簡單易行。 當我們只有很少的字段單行時,我們可以使用它。
designer知道你正在使用表格。 designer允許選擇行或列,同時調整列的大小。
有選項允許可以在每頁上重復表格標題。
缺點:
如果我們停用context中的字段,則在form中任何地方需要時都將難以使用。 例如在腳本編輯器中(有一些條件打印等)。
很難處理嵌套表。
打印非標准表格時存在限制。
使用SubForm Method創建表
什么是SubForm?
SubForm是form的一部分,用於組織不同的元素,如輸入字段、表格、呈現正文頁面文本,很少用於主頁面。
換句話說,Subform 只不過是一組元素。如果我們要在布局上組的某些元素,我們可以使用subform,並將元素們包裝進去。
優點:
在布置表格時,subform為我們提供了更大的靈活性。
打印多行表格時,subform更有用
可以重新排列subform中的單元格(打印我們想要的任何地方)
打印嵌套表時,它非常有用。
沒有什么缺點,實際上在內部,表對象被作為subform結構處理。 如果在Designer中查看模板的XML源代碼,可以確認這一點。
如果希望在分頁的情況下重復標題,必須使用“Overflow Leaders”(Table Object是復選框)。 我們需要在對象面板的“分頁”選項卡上設置它們。
因此,根據我們想要實現的目標,我們可能必須使用subform而不是table object。但對於標准表,建議直接使用表table object。遵循KIS策略(Keep It Simple)。
步驟
共同步驟
首先構建兩種方法都需要的interface。
事務:SFP。
輸入接口名稱並創建(對於Adobe Form,interface是必需的)。
讓我們添加我們自己的自定義參數名稱。 選擇Form Interface下的Import選項(左側),然后按Create按鈕(右側)添加一個Importing Parameter
導入參數 IT_KNA1 的類型為CCRCTT_KNA1。CCRCTT_KNA1是KNA1的表類型。 在 Adobe Form的interface/function module中,需要使用表類型參數將表格數據從程序傳遞到form(Tables參數已過時)。
保存、檢查、激活interface。
回到事務SFP,創建form。
提供之前創建的描述和interface名稱,保存。
將 IT_KNA1從之前創建的Interface拖到 Context。
1,用Table Object創建表
反激活不需要打印的字段。選中它們,
右鍵選擇deactivate。
結果如下,
只有6個激活字段。
前往layout標簽,
插入文本變量,作為標題。
按需填入文本,
按上圖右下角修改字體。如果沒看到字體欄的話,按下圖添加,
前往Palettes -> Font。
接着前往Data view。
選擇 IT_KNA1,將其拖放到layout中。
可以通過拖放選項調整列的高度或寬度。 如果你想非常精確,也可以在右邊的屬性中調整寬度和高度。
保存,檢查和激活form。
請注意:如果 IT_KNA1 表中的數據超過1頁大小,則不會流到下一頁。 如果想查看所有數據,必須確保以下兩項。
subform必須是Flowed,
選擇 IT_KNA1 並選中“Allow Page Breaks within Content”復選框。
執行驅動程序:YRAM_ADOBE_FORM_PROGRAM2。 。輸出將顯示包含客戶主數據的表。

1 *&---------------------------------------------------------------------* 2 *======================================================================* 3 * YRAM_ADOBE_FORM_PROGRAM2 * 4 *======================================================================* 5 * Project : SAP Adobe Forms Tutorial * 6 * Author : Ramanjula Naidu DARURU (www.SAPYard.com) * 7 * Description : Driver Program for Printing the Customer data * 8 *======================================================================* 9 REPORT yram_adobe_form_program2. 10 11 **&&~~ Data Objects 12 DATA: gv_fm_name TYPE rs38l_fnam, " FM Name 13 gs_fp_docparams TYPE sfpdocparams, 14 gs_fp_outputparams TYPE sfpoutputparams, 15 gt_kna1 TYPE STANDARD TABLE OF kna1. 16 17 CONSTANTS : gv_form_name TYPE fpname VALUE 'YRAM_ADOBE_FORM2'. 18 19 *======================================================================* 20 * START of TREATMENT * 21 *======================================================================* 22 START-OF-SELECTION. 23 SELECT * FROM kna1 INTO TABLE gt_kna1 UP TO 50 ROWS. 24 *&---------------------------------------------------------------------* 25 **&&~~ Form Processing: Call Form - Open 26 * 27 CALL FUNCTION 'FP_JOB_OPEN' 28 CHANGING 29 ie_outputparams = gs_fp_outputparams 30 EXCEPTIONS 31 cancel = 1 32 usage_error = 2 33 system_error = 3 34 internal_error = 4 35 OTHERS = 5. 36 IF sy-subrc <> 0. 37 " Suitable Error Handling 38 ENDIF. 39 *&---------------------------------------------------------------------* 40 **&&~~ Get the Function module name based on Form Name 41 * 42 CALL FUNCTION 'FP_FUNCTION_MODULE_NAME' 43 EXPORTING 44 i_name = gv_form_name 45 IMPORTING 46 e_funcname = gv_fm_name. 47 IF sy-subrc <> 0. 48 " Suitable Error Handling 49 ENDIF. 50 *&---------------------------------------------------------------------* 51 **&&~~ Take the FM name by execuing the form - by using Pattern- 52 **&&~~ call that FM and replace the FM Name by gv_fm_name 53 * 54 **&&~~ Call the Generated FM 55 CALL FUNCTION gv_fm_name "'/1BCDWB/SM00000176' 56 EXPORTING 57 /1bcdwb/docparams = gs_fp_docparams 58 it_kna1 = gt_kna1 59 EXCEPTIONS 60 usage_error = 1 61 system_error = 2 62 internal_error = 3 63 OTHERS = 4. 64 IF sy-subrc <> 0. 65 * Implement suitable error handling here 66 ENDIF. 67 *&---------------------------------------------------------------------* 68 **&&~~ Form Processing: Call Form - Open 69 * 70 CALL FUNCTION 'FP_JOB_CLOSE'. 71 IF sy-subrc <> 0. 72 * Implement suitable error handling here 73 ENDIF. 74 *&---------------------------------------------------------------------* 75 *&---- Close the spool job 76 CALL FUNCTION 'FP_JOB_CLOSE' 77 EXCEPTIONS 78 usage_error = 1 79 system_error = 2 80 internal_error = 3 81 OTHERS = 4. 82 IF sy-subrc <> 0. 83 * <error handling> 84 ENDIF. 85 *&---------------------------------------------------------------------*
2,用Sub Form創建表
通過使用此方法,我們可以以任意順序顯示字段,並以多行顯示字段。
前往layout,
默認情況下,每個form都有Master Page和Body Page(無標題Subform)(page1)。
在簡單場景中,可以使用Master Page來打印標題數據和用Body Page來打印行項目數據。
內容區域用於打印Body Page中的數據。 我們可以更改Master Page中內容區域的長度或寬度。
我們將標題放在Master Page中。
提示:在開發過程中,如果想查看form的基本輸出,只需單擊Preview PDF選項卡。
前往design view。
要打印表數據,Subform必須是FLOWED。
這是非常重要的一步。 我們需要插入Subform。
可以在layout選項卡中更改窗口的高度或寬度。 也可以拖動和調整。
Subform可用作標題。 請注意Untitled SubForm已在左側重命名為 Header。
將表頭內容更改為Flowed,將Flow directio 更改為Western text,這樣字段將並排顯示。
選擇標題subform,nsert -> 0 – Standard -> Text field。
需要更改文本字段的屬性以獲得更好的顯示和外觀。
選擇 TextField1,將外觀從Sunken box改為Solid box。
將位置從改為left改為none,
值類型從用戶輸入改為只讀,
邊框純色,
復用TextField1。
在標題sub from復制粘貼TextField1。(在本例中需要粘貼4次,因為我們要顯示5個字段)
修改字段名,
傳給它們固定值,
全部字段都改一下,
這樣就完成了標題的創建。下面是item數據。
再創建一個Subform並將其命名為 Items。
將items subform內容更改為Flowed,並將Flow direction更改為Western text,以便並排顯示字段。
復制五個字段 Customer No、Country、Name、Street 和 Telephone 並粘貼到 items subform下。
刪除所有字段的默認值。
將數據內表,即 IT_KNA1 綁定到 Items subform。
(綁定是Adobe Form中非常重要的一部分,要確保數據綁定正確)
綁定字段:
CustomerNo to KUNNR,
Country —— LAND1,
Name —— NAME1,
Street —— STRAS,
Telephone —— TELF1.
必須勾選Repeat Subform for each data item。
運行驅動程序:YRAM_ADOBE_FORM_PROGRAM2.(程序見上文)
輸出應該方法1是一樣的。