Smartforms 打印固定大小二维码

作者:ABAP老白 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Basis, Data Engineering, 开发, 数据工程, 系统管理
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图

众所周知, Smartforms 打印QR二维码的大小跟打印内容和Module Size有关,在 Module Size固定的前提下,

二维码包含的内容越多,二维码尺寸就越大,有时候为了排版美观,想让Smartforms打印的二维码不论内容多少二维码一样大小,应该怎么做呢?

二维码在扫描的时候会忽略前面所有的空格,根据这个特性,我们可以在打印内容前面补充空格,达到有效字符不变而二维码尺寸变大的效果。

又因为Smartforms传递变量的最大长度为255,所以如果打印内容如果超过255,则需要多个变量来传值,使用SO10创建的文本把多个变量合并到一起。SAP内核使用的QR二维码生成器有个BUG,在长度超过1000左右字符的时候,性能会极度变差,基本就打印不出来了,所以打印内容最好是限制在1000以内,这样使用4个变量就可以传递1000长度了。

具体做法如下:

首先SE73 定义 二维码 , Mode设置为U,其他两个可以默认 或者根据实际情况更改。

Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图

定义Style,利用Left Margin和Space Before来精确定义二维码位置,这个值可能需要多次调试才能做到位置合适。

Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图

事务码SO10定义文本

Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图

Smartforms定义如下

Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
FORM split_qrstr USING VALUE(pv_qrstr) pv_qrlen CHANGING qr01 qr02 qr03 qr04. DATA: lv_xlen TYPE i, lv_xstr TYPE xstring. CHECK pv_qrstr NE ''. CALL FUNCTION 'SCMS_STRING_TO_XSTRING' EXPORTING text = pv_qrstr encoding = '4110' IMPORTING buffer = lv_xstr EXCEPTIONS failed = 1      OTHERS   = 2. lv_xlen = xstrlen( lv_xstr ). DO pv_qrlen - lv_xlen TIMES. pv_qrstr = ` ` && pv_qrstr. ENDDO.

qr01 = pv_qrstr. IF qr01 = ''. qr01+247 = '\BIN:20\'. SHIFT pv_qrstr BY 248 PLACES. ELSE. SHIFT pv_qrstr BY 255 PLACES. ENDIF.

IF pv_qrstr IS NOT INITIAL. qr02 = pv_qrstr. IF qr02 = ''. qr02+247 = '\BIN:20\'. SHIFT pv_qrstr BY 248 PLACES. ELSE. SHIFT pv_qrstr BY 255 PLACES. ENDIF. ENDIF. IF pv_qrstr IS NOT INITIAL. qr03 = pv_qrstr. IF qr03 = ''. qr03+247 = '\BIN:20\'. SHIFT pv_qrstr BY 248 PLACES. ELSE. SHIFT pv_qrstr BY 255 PLACES. ENDIF. ENDIF. IF pv_qrstr IS NOT INITIAL. qr04 = pv_qrstr. IF qr04 = ''. qr04+247 = '\BIN:20\'. ENDIF. ENDIF.ENDFORM.

打印测试程序:

PARAMETERS p_str TYPE string.PARAMETERS p_len TYPE i.

AT SELECTION-SCREEN OUTPUT. %_p_str_%_app_%-text = '打印内容'. %_p_len_%_app_%-text = '最小长度'.

CALL FUNCTION '/1BCDWB/SF00000012' EXPORTING qrstr = p_str qrlen = p_len.

效果:

Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图

打印内容改长:

Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图

完美实现!

Smartforms 打印固定大小二维码 - 封面图
Smartforms 打印固定大小二维码 - 封面图
ABAP老白

关于作者:ABAP老白

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「Smartforms打印固定大小二维码.md」整理生成,仅用于内部技术分享与学习交流。