wenmo8 发布的文章

本文将介绍一些进阶内容,前文: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 REPORTyram_adobe_form_program2.10 
11 **&&~~ Data Objects
12 DATA: gv_fm_name TYPE rs38l_fnam, "FM Name
13 gs_fp_docparams TYPEsfpdocparams,14 gs_fp_outputparams TYPEsfpoutputparams,15 gt_kna1 TYPE STANDARD TABLE OFkna1.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 50ROWS.24 *&---------------------------------------------------------------------*
25 **&&~~ Form Processing: Call Form - Open
26 *27 CALL FUNCTION 'FP_JOB_OPEN'
28 CHANGING
29 ie_outputparams =gs_fp_outputparams30 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_name45 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_docparams58 it_kna1 =gt_kna159 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 *&---------------------------------------------------------------------*

前文:

SAP Adobe Form 教程一 简单示例

SAP Adobe Form 教程二 表

 

原文标题:SAP Adobe Interactive Form Tutorial. Part III. Date Time and Floating Fields

本文链接:https://www.cnblogs.com/hhelibeb/p/15501044.html

准备

首先依然还是创建interface和form。细节见前文。

 

 得到form如下,把参数NAME拖放到context,

 

将 DATE 和 TIME 字段拖放到 Context。 这些是系统生成的变量,

 

 

接着在Layout区域工作。

如何使用floating field?

floating field,即根据绑定打印的字段,具体打印内容取决于运行期间绑定的字段。

前往Layout,

 

插入标准文本字段,

展开/拉伸(如在ms paint中所做的)文本字段边界,以便在其中写文本。

 

输入下面的文本或任何所需的行。但选择一个你想保留为floating field的单词。floating field意味着,它可以打印任何绑定的字段。

My name is NAME, I am SAP Technical consultant. Thank you SAP Yard.

对于本示例,我们希望NAME是动态的。 选择文本(NAME),右键单击它并选择它作为floating field, NAME一词更改为 {TextField}。

 

 https://sapyard.com/wp-content/uploads/2017/01/image15.png

将floating field与我们拖到上下文区域的NAME字段绑定,

 

字段{Text Field}将具有动态长度(从上下文到绑定NAME字段的最大长度)。它将根据输入进行扩展和压缩。名称“Ram”只有3个字符,但名称“Wolfeschlegelsteinhausenbergerdorff”有30多个字符,但{TextField}仍会接受它。毕竟,这是一个floating field。

如何使用日期和时间?

前往Data view,

 

将日期和时间字段拖放到Layout中,

 

通过在选择类型下选择日期模式来更改日期格式,

 

可以在区域设置下通过选择所需的国家/地区来选择基于国家/地区的模式。
我们还可以使用上述针对日期字段的相同步骤来格式化时间。

 

Adobe Form中存在以下系统字段,

 

 

检查,保存和激活。

按F8运行,传入NAME值。

 

接着继续运行,

 

会得到日期时间和包含输入的NAME的文本,

 

 

通过驱动程序调用的话,可以使用以下代码,


1 *======================================================================*
2 *YRAM_ADOBE_FORM_PROGRAM3 *
3 *======================================================================*
4 *Project : SAP Adobe Forms Tutorial *
5 *Author : Ramanjula Naidu DARURU (www.SAPYard.com) *
6 *Description : Driver Program for Printing Floating Field, Date & Time *
7 *======================================================================*
8 REPORTyram_adobe_form_program3.9 
10 *Selection Screen
11 PARAMETERS: p_name TYPEname1.12 
13 **&&~~ Data Objects
14 DATA: gv_fm_name TYPE rs38l_fnam, "FM Name
15 gs_fp_docparams TYPEsfpdocparams,16 gs_fp_outputparams TYPEsfpoutputparams.17 
18 CONSTANTS : gv_form_name TYPE fpname VALUE 'YRAM_ADOBE_FORM3'.19 
20 *======================================================================*
21 *START of Calling the Form
22 *======================================================================*
23 *&---------------------------------------------------------------------*
24 **&&~~ Form Processing: Call Form - Open
25 *26 CALL FUNCTION 'FP_JOB_OPEN'
27 CHANGING
28 ie_outputparams =gs_fp_outputparams29 EXCEPTIONS
30 cancel = 1
31 usage_error = 2
32 system_error = 3
33 internal_error = 4
34 OTHERS = 5.35 IF sy-subrc <> 0.36 "Suitable Error Handling
37 ENDIF.38 *&---------------------------------------------------------------------*
39 **&&~~ Get the Function module name based on Form Name
40 *41 CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
42 EXPORTING
43 i_name =gv_form_name44 IMPORTING
45 e_funcname =gv_fm_name.46 IF sy-subrc <> 0.47 "Suitable Error Handling
48 ENDIF.49 *&---------------------------------------------------------------------*
50 **&&~~ Take the FM name by execuing the form - by using Pattern-
51 **&&~~ call that FM and replace the FM Name by gv_fm_name
52 **&&~~ Call the Generated FM
53 CALL FUNCTION gv_fm_name "'/1BCDWB/SM00000176'
54 EXPORTING
55 /1bcdwb/docparams =gs_fp_docparams56 name =p_name57 EXCEPTIONS
58 usage_error = 1
59 system_error = 2
60 internal_error = 3
61 OTHERS = 4.62 IF sy-subrc <> 0.63 *Implement suitable error handling here
64 ENDIF.65 *&---------------------------------------------------------------------*
66 
67 *&---------------------------------------------------------------------*
68 *&---- Close the spool job
69 CALL FUNCTION 'FP_JOB_CLOSE'
70 EXCEPTIONS
71 usage_error = 1
72 system_error = 2
73 internal_error = 3
74 OTHERS = 4.75 IF sy-subrc <> 0.76 *<error handling>
77 ENDIF.

前文:

SAP Adobe Form 教程一 简单示例

SAP Adobe Form 教程二 表

SAP Adobe Form 教程三 日期,时间,floating field

 

本文链接:https://www.cnblogs.com/hhelibeb/p/15503859.html

原文标题:SAP Adobe Interactive Form Tutorial. Part IV. Dynamically Hide and Display Fields using Javascript in Adobe Form Based on Conditions

 

条件(IF-ENDIF、CASE、WHILE 等)是常见的程序组成部分。

例如,客户的所有员工都必须在他们从办公室打印的表单签名中将时区打印为GMT–6。 因此,98% 的客户将使用 GMT–6 小时作为他们的时间,但会有2%的用户居住在另一个州,他们将时间作为 GMT–7小时。 所以对于那些特定的用户,你需要放置特殊的逻辑,让他们的签名显示 GMT – 7。这里你必须处理条件并根据条件打印值。

(译注:严格来说,逻辑处理和输出混合在一起是不合适的,但这里我们只关注实现的过程)


假设,在您的驱动程序中,您已经确定了员工所在的时区,并且根据他们的工作地点设置了标志 v_regular_employee = ‘X’ 或空白。

IF v_regular_employee =abap_true.
v_time_sign
= 'GMT - 6'.ELSEIF v_regular_employee =abap_false.
v_time_sign
= 'GMT - 7'.ENDIF.

前文:

SAP Adobe Form 教程一 简单示例

SAP Adobe Form 教程二 表

SAP Adobe Form 教程三 日期,时间,floating field

SAP Adobe Form 教程四 动态隐藏和显示字段

 

原文标题:SAP Adobe Interactive Form Tutorial. Part V. Images, Graphics and Logo in Adobe Forms

本文链接:https://www.cnblogs.com/hhelibeb/p/15512978.html

前提:需要通过SE78上传图片。

 

上传完成后,请检查确认图片已经在系统中存在,

 

 

创建interface。

事务代码SFP,

 

 在interface中添加一个IV_LOGO参数,类型为XSTRING,

 

 

创建form,

 

拖放参数IV_LOGO到Context,

 

 

在Context的YRAM_ADOBE_FORM5右击,并且选择create->graphic.

 

 

下一步很重要:把Graphic type从Graphic Reference改为Graphic content。

 

 

 

输入字段名IV_LOGO,选择MIME TYPE为‘IMAGE/BMP’.

 

保存,并前往Layout的Data View标签页。拖放Graphic到layout。

 

可以根据需要拉伸或压缩图片。可能需要删除图片标题,即默认图像字段文本。

 

出于演示目的,我在图片下方添加了另一个文本元素。

检查、保存和激活。

带有图形和表单界面的Layout已经完成。 注意到了吗,我们的Layout中有两个元素。图片字段和图形内容。 相当于变量名和实际内容。

调用adobe form的驱动程序,

1 *&---------------------------------------------------------------------*
2 *======================================================================*
3 *YRAM_ADOBE_FORM_PROGRAM5 *
4 *======================================================================*
5 *Project : SAP Adobe Forms Tutorial *
6 *Author : Ramanjula Naidu DARURU (www.SAPYard.com) *
7 *Description : Printing a logo in the adobe form *
8 *======================================================================*
9 REPORTyram_adobe_form_program5.10 
11 *======================================================================*
12 *Selection Screen
13 *======================================================================*
14 PARAMETERS : p_logo TYPE rstxt-tdname.15 *======================================================================*
16 *Data Objects
17 *======================================================================*
18 
19 DATA: gv_fm_name TYPE rs38l_fnam, "FM Name
20 gs_fp_docparams TYPEsfpdocparams,21 gs_fp_outputparams TYPEsfpoutputparams,22 gv_name TYPEtdobname,23 gv_logo TYPExstring ,24 gv_bmp TYPExstring.25 *======================================================================*
26 *Constants
27 *======================================================================*
28 CONSTANTS : gc_btype TYPE tdbtype VALUE 'BCOL',29 gc_id TYPE tdidgr VALUE 'BMAP',30 gc_object TYPE tdobjectgr VALUE 'GRAPHICS',31 gv_form_name TYPE fpname VALUE 'YRAM_ADOBE_FORM5'.32 
33 *======================================================================*
34 *START of Calling the Form
35 *======================================================================*
36 *&---------------------------------------------------------------------*
37 **&&~~ Form Processing: Call Form - Open
38 *39 CALL FUNCTION 'FP_JOB_OPEN'
40 CHANGING
41 ie_outputparams =gs_fp_outputparams42 EXCEPTIONS
43 cancel = 1
44 usage_error = 2
45 system_error = 3
46 internal_error = 4
47 OTHERS = 5.48 IF sy-subrc <> 0.49 "Suitable Error Handling
50 ENDIF.51 *&---------------------------------------------------------------------*
52 **&&~~ Get the Function module name based on Form Name
53 *54 CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
55 EXPORTING
56 i_name =gv_form_name57 IMPORTING
58 e_funcname =gv_fm_name.59 IF sy-subrc <> 0.60 "Suitable Error Handling
61 ENDIF.62 
63 *Passing the logo name
64 gv_name =p_logo.65 
66 *Get the image/logo graphic information
67 CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp68 EXPORTING
69 p_object = gc_object "GRAPHICS
70 p_name = gv_name "Name of the Logo
71 p_id = gc_id "BMAP
72 p_btype = gc_btype "BCOL for color, 'BMON' for Black & White
73 RECEIVING74 p_bmp =gv_bmp75 EXCEPTIONS
76 not_found = 1
77 internal_error = 2
78 OTHERS = 3.79 
80 gv_logo =gv_bmp.81 
82 *&---------------------------------------------------------------------*
83 **&&~~ Take the FM name by execuing the form - by using Pattern-
84 **&&~~ call that FM and replace the FM Name by gv_fm_name
85 **&&~~ Call the Generated FM
86 CALL FUNCTIONgv_fm_name87 EXPORTING
88 /1bcdwb/docparams =gs_fp_docparams89 *iv_name = p_name
90 *iv_flag = p_flag
91 iv_logo =gv_logo92 EXCEPTIONS
93 usage_error = 1
94 system_error = 2
95 internal_error = 3
96 OTHERS = 4.97 IF sy-subrc <> 0.98 *Implement suitable error handling here
99 ENDIF.100 *&---------------------------------------------------------------------*
101 
102 *&---------------------------------------------------------------------*
103 *&---- Close the spool job
104 CALL FUNCTION 'FP_JOB_CLOSE'
105 EXCEPTIONS
106 usage_error = 1
107 system_error = 2
108 internal_error = 3
109 OTHERS = 4.110 IF sy-subrc <> 0.666666 *<error handling>
112 ENDIF.

前文:

SAP Adobe Form 教程一 简单示例

SAP Adobe Form 教程二 表

SAP Adobe Form 教程三 日期,时间,floating field

SAP Adobe Form 教程四 动态隐藏和显示字段

SAP Adobe Form 教程五 图片

 

Adobe Form中可选的文本类型分为3种,如下图,

 

1. Text Module

可以在事务Smartforms中创建Text Module。它是全局文本。我们可以在Smartform和Adobe Form中使用它。


2. Include text

又叫Standard Texts,通过事务代码SO10创建,它也是全局文本,可以在Smartform和Adobe Form中使用。和Text Module的区别在于,Text Module只能用于Smartform和Adobe Form,Include text还可以在script中使用。


3. Dynamic text

Dynamic text支持输出类型为TSFTEXT的内表,它的结构包含TDFORMAT和TDLINE这两个字段。处理过长文本的话应该会对它很熟悉,

 

本文链接:https://www.cnblogs.com/hhelibeb/p/15516120.html

参考:

SAP Adobe Interactive Form Tutorial. Part IX. Displaying Dynamic Text in Adobe Forms

the difference between Standard Text and text module