Smartform 的一个局限性:在smartforms中,字符串字段的输出长度限制为最多 255 个字符
这意味着,每当我们想在 Smartforms 中传递并显示动态文本参数(例如,STRING 类型)时,文本都会在前 255 个字符后被截断。在这篇博客中,我将与大家分享我解决这个问题的小技巧。方法很简单,如果 255 是限制,我们只需将文本拆分成多个长度为 255 的片段,然后附加到表单中即可。为此,我们将找到以下两个问题的答案:
1.如何将文本正确拆分到字段长度为255个字符的内部表中?
嗯,这个问题的解决方案只是基本的数学。
//首先我们需要一个TCHAR255类型的 itab//然后我们继续计算,令:
a = strlen(输入文本)
b = floor(a/255)
c = a MOD 255
位置 = 0
做 b 次。 //附加到itab
input_text+pos(255) //
位置 += 255;
ENDDO。//将余数附加到itab
输入文本+位置(c)
我们可能希望将上述逻辑包装到功能模块中,以便在智能表单中与许多文本元素一起重复使用它。
2. 如何将分割后的文本正确附加到Smartforms?
我们将按如下方式构建我们的智能表单:程序行后跟一个循环,循环下方是我们的文本元素。
![[forms]smartforms打印传值超过255个字符,导致打印截断,如何处理?](https://community.sap.com/legacyfs/online/storage/blog_attachments/2013/07/img1_243082.png)
我们需要全局变量:
GT_TEXT TYPE TCHAR255,
GV_TEXT TYPE CHAR 255将 GT_TEXT itab 循环到 GV_TEXT,我们将显示每个循环的 GV_TEXT。
![[forms]smartforms打印传值超过255个字符,导致打印截断,如何处理?](https://community.sap.com/legacyfs/online/storage/blog_attachments/2013/07/img2_243086.png)
请记住直接选择“开始”选项作为“附加” ,因为我们希望以正确的格式显示全文。
![[forms]smartforms打印传值超过255个字符,导致打印截断,如何处理?](https://community.sap.com/legacyfs/online/storage/blog_attachments/2013/07/img3_243088.png)
转换代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
function z_split_string. *"----------------------------------------------------------------------* "*"Local Interface:*" IMPORTING REFERENCE(I_STR) TYPE STRING *" EXPORTING*" REFERENCE(ET_STR) TYPE TCHAR255 *"----------------------------------------------------------------------*" data: lv_len type i, "String Length lv_rmd type i, "Remainder of String Length / 255 lv_pos type i, "String position lv_fct type i, "Integer: Roundown(String Length/255) lv_pfct type p length 4 decimals 2.*---Get length of input string lv_len = strlen( i_str ).*---Split string into itab of field length 255 char if lv_len < 255. append i_str to et_str. else. lv_rmd = lv_len mod 255. lv_pfct = floor( lv_len / 255 ). lv_fct = lv_pfct. do lv_fct times. append i_str+lv_pos(255) to et_str. lv_pos = lv_pos + 255. enddo. "Append string remainder append i_str+lv_pos(lv_rmd) to et_str. endif. endfunction. |
网站给的代码稍微改造下,把i_str换成你要截取拼接的字段
实现效果
![[forms]smartforms打印传值超过255个字符,导致打印截断,如何处理?](https://www.sapcode.net/wp-content/uploads/2025/05/PixPin_2025-05-15_14-14-38.png)