【转】SMARTFORMS 强制换行

本文介绍了使用SmartForms进行打印时的一些技巧,包括通过Windows确保表头和表尾始终出现在每一页,利用代码控制强制分页,统计合计数的方法,并提供了一些实用的小技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天做了一个表单的打印又多了解了些smartforms。

1.window的用处

如果一个smartforms要求任何时候都要打印表头表尾可以用table实现,但是table分页的时候根据之前的测试会有点小问题。这个时候可以表头表尾用windows,里面用一个模板。(这个时候通常是套打,把上边距和左边距弄好)这样表头和表尾就会固定好。而且只要有新的一页表头和表尾都会出现。

2.强制分页

套打要求如果超过11行则强制分页这是如何做到了?可以在smartforms里写代码去控制。首先当然要有一个统计行数的变量在全局定义里定义。如下图:

 

那每打印一行还要统计打印的行数,就要写代码控制了。在loop下可以插入代码,写上

G_CURRENTLINES = G_CURRENTLINES + 1.
G_PAGINATION = G_CURRENTLINES MOD 11.
就可以达到效果。但是注意里面输入参数要输入G_CURRENTLINES和G_PAGINATION否则会报错,这里不知道为什么这么麻烦。然后再加上一个判断如果G_PAGINATION为0则进行分页。如下图,创建一个”可选的”.

 

其实就是一个判断,在条件里面加上G_PAGINATION为0的判断条件。

 

条件为真时加上分页的命令即可。如下图,注意勾上转到新页。

 

3.统计合计数

统计合计数当然也是先自定义一个变量来实现的,然后在遍历的时候进行累加,换页的时候清零。不过我却发现,如果有换页的时候合计数都是0!想了以后明白了,因为新建的window在模板的结点后,smartforms执行顺序是从上到下依次执行的,如果有分页,分页时因为清空了变量,所以又分页的情况下合计数都是0.所以求合计数的时候都再新建一个变量,用它来统计合计数。

4.小技巧

4.1 smartforms在word2007里有时没显示格式,要按Ctr+Shift+Alt+S.就会出现格式的选择。
4.2 上边距 + window.高度 <= 纸张.高度
4.3 有时字体设置太大,或者一列的宽度较小会造成自动换行!如果把高度设置的低点的话,这时又不能自动换行,会把字符串截断的。

 

转自:http://blog.youkuaiyun.com/donkey2004112103/archive/2009/04/23/4105316.aspx

<think>我们正在讨论如何将SAP Smartforms换为Base64编码。根据用户的问题,我们需要将SAP Smartforms的内容(可能是XML或其他格式)换为Base64字符串。在SAP系统中,Smartforms可以以XML格式导出,然后我们可以将其换为Base64。 步骤: 1. 获取Smartform的XML内容:首先,我们需要将Smartform导出为XML格式。在SAP中,可以使用事务代码SMARTFORMS或SFP打开Smartform,然后通过菜单“实用程序”->“下载”来下载XML格式的Smartform。但是,用户需要批量处理,因此可能需要一个程序来自动完成。 2. 将XML内容换为Base64:在SAP ABAP中,可以使用内置函数`SCMS_BASE64_ENCODE_STR`或`SCMS_BASE64_ENCODE`将字符串换为Base64编码。 然而,用户提到批量下载,因此我们需要编写一个ABAP程序来批量处理多个Smartforms。 程序思路: - 选择多个Smartform(例如,通过选择屏幕输入一个范围)。 - 循环遍历每个Smartform名称,调用函数`FP_GET_FORMTEXT`来获取Smartform的XML字符串。 - 将获取的XML字符串换为Base64编码。 - 将Base64编码的结果保存到文件或内表中,以便后续下载或使用。 注意:函数`FP_GET_FORMTEXT`可以获取Smartform的XML源。但是,请注意此函数可能需要Smartform的名称和语言(默认为英文)。 引用:在之前的引用中,用户提到了批量下载SAPSCRIPTFORM,这启发我们编写批量程序。类似地,我们可以为Smartforms编写一个批量下载并换为Base64的程序。 因此,我们可以提供一个ABAP程序示例,该程序能够批量处理Smartforms并将其换为Base64编码。 程序示例: ```abap REPORT zsmartform_to_base64. TYPES: BEGIN OF ty_smartform, formname TYPE fpname, xml TYPE xstring, base64 TYPE string, END OF ty_smartform. DATA: lt_smartforms TYPE TABLE OF ty_smartform, ls_smartform TYPE ty_smartform. DATA: lv_xml_string TYPE string, lv_xml_xstr TYPE xstring. * 选择屏幕,允许用户输入多个Smartform名称 SELECT-OPTIONS: s_form FOR ls_smartform-formname. START-OF-SELECTION. LOOP AT s_form INTO DATA(ls_form). ls_smartform-formname = ls_form-low. " 获取Smartform的XML内容(作为XString) CALL FUNCTION 'FP_GET_FORMTEXT' EXPORTING i_formname = ls_smartform-formname i_language = sy-langu " 当前语言 IMPORTING e_formtext = lv_xml_xstr EXCEPTIONS form_not_found = 1 no_text_available = 2 OTHERS = 3. IF sy-subrc = 0. " 将XString换为Base64字符串 CALL FUNCTION 'SCMS_BASE64_ENCODE' EXPORTING input = lv_xml_xstr IMPORTING output = ls_smartform-base64 EXCEPTIONS failed = 1 OTHERS = 2. IF sy-subrc = 0. ls_smartform-xml = lv_xml_xstr. APPEND ls_smartform TO lt_smartforms. ENDIF. ENDIF. ENDLOOP. " 现在lt_smartforms表中包含了每个Smartform的Base64编码字符串 " 可以输出到屏幕或下载到文件 " 示例:输出到屏幕 LOOP AT lt_smartforms INTO ls_smartform. WRITE: / 'Smartform:', ls_smartform-formname, 'Base64:', ls_smartform-base64(50), '...'. ENDLOOP. ``` 注意:上述程序仅为示例,实际应用中可能需要处理异常和优化。另外,Base64字符串可能很长,输出到屏幕可能只显示前部分。 如果用户需要将Base64字符串保存为文件,可以使用ABAP的文件操作函数(例如`GUI_DOWNLOAD`)将每个Smartform的Base64字符串保存为单独的文件。 相关问题: §§相关问题§§ 1. 如何将Base64编码的字符串换回SAP Smartform? 2. 除了Base64编码,还有其他方式可以备份SAP Smartforms吗? 3. 如何批量上传Base64编码的Smartforms到SAP系统?</think>### 如何将 SAP Smartforms 换为 Base64 编码 在 SAP 系统中,将 Smartforms 换为 Base64 编码的核心步骤是通过 ABAP 程序读取 Smartform 的 XML 源文件,再使用 Base64 编码函数处理。以下是具体实现方法: --- #### **步骤 1:获取 Smartform 的 XML 内容** Smartforms 在 SAP 中存储为 XML 格式。使用函数 `FP_GET_FORMTEXT` 获取 XML 源: ```abap DATA: lv_formname TYPE fpname, " Smartform 名称 lv_xstring TYPE xstring. " XML 二进制数据 CALL FUNCTION 'FP_GET_FORMTEXT' EXPORTING i_formname = lv_formname " 例如 'ZMY_SMARTFORM' IMPORTING e_formtext = lv_xstring. " 输出 XML 的二进制格式 ``` --- #### **步骤 2:将 XML 换为 Base64 编码** 使用 SAP 标准函数 `SCMS_BASE64_ENCODE` 进行编码: ```abap DATA: lv_base64 TYPE string. CALL FUNCTION 'SCMS_BASE64_ENCODE' EXPORTING input = lv_xstring " 输入的 XML 二进制数据 IMPORTING output = lv_base64 " 输出的 Base64 字符串 EXCEPTIONS failed = 1. ``` --- #### **步骤 3:批量处理(可选扩展)** 若需批量下载多个 Smartforms,参考以下程序结构: ```abap TYPES: ty_formnames TYPE TABLE OF fpname. DATA: lt_forms TYPE ty_formnames, lv_base64_tab TYPE TABLE OF string. " 填充需处理的 Smartform 名称列表 lt_forms = VALUE #( ( 'FORM1' ) ( 'FORM2' ) ). LOOP AT lt_forms INTO lv_formname. CALL FUNCTION 'FP_GET_FORMTEXT' EXPORTING i_formname = lv_formname IMPORTING e_formtext = lv_xstring. CALL FUNCTION 'SCMS_BASE64_ENCODE' EXPORTING input = lv_xstring IMPORTING output = lv_base64. APPEND lv_base64 TO lv_base64_tab. " 存储结果 ENDLOOP. ``` --- #### **关键说明** 1. **函数作用**: - `FP_GET_FORMTEXT`:获取 Smartform 的原始 XML 数据(二进制格式)。 - `SCMS_BASE64_ENCODE`:将二进制数据换为 Base64 字符串。 2. **输出结果**: - `lv_base64` 变量包含可直接使用的 Base64 编码字符串,可用于: - 存储到数据库 - 通过 HTTP 接口传输 - 生成可下载文件 3. **注意事项**: - 确保用户有权限访问目标 Smartforms。 - 若需解码,使用函数 `SCMS_BASE64_DECODE` 反向操作。 > **提示**:此方法同样适用于 **SAP Script Forms**,只需替换为函数 `READ_FORM` 获取内容[^1]。 --- ### 相关问题 1. 如何将 Base64 编码的 Smartform 还原到 SAP 系统? 2. 能否通过 ABAP 直接生成 Smartform 的 PDF 并换为 Base64? 3. SAP Smartforms 与 Adobe Forms 在编码处理上有何区别? [^1]: 参考批量下载 SAP 对象的实现思路,但需改用 Smartforms 专用函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值