最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

TIPTOP_TOPGP生成二维码(支持DM码),水晶报表打印二维码

水晶报表 bron1984 5130浏览

先下载资料包。文后有资源包下载!!

  • 在配置系统环境之前先建一张表。用来存资料:tc_txt_file,压缩包里面有sch文件。

先将tc_txt_file.sch表在数据库中建好。比如用p_zta或者打开数据库复制粘贴来建立。

  • 将ldap.jar 、qrcode-zxing-jdk1.6.jar、dmcode.jar上传到tiptop/ds4gl2/bin/javaad/jar

(这个适用于jkd1.6的zxing包来之不易,我的大洋啊!!另外ldap.jar包在本例中是无用的)

  • 修改环境变量CLASSPATH 位置是/u1/topprod/tiptop/bin/tiptop_env

运行:vi /u1/topprod/tiptop/bin/tiptop_env进行编辑,随便找位置加入下面语句。如果已经存在CLASSPATH语句,即按”:加路径”的格式拼到后面就行。

CLASSPATH=$TOP/ds4gl2/bin/javaad/jar/ldap.jar:$TOP/ds4gl2/bin/javaad/jar/qrcode-zxing-jdk1.6.jar:$TOP/ds4gl2/bin/javaad/jar/dmcode.jar;export CLASSPATH

这个环境配置类似于咱们WINDOWS系统弄配置JAVA环境Path一般组合环境变量

  • 刷新环境变量 #source /u1/topprod/tiptop/bin/tiptop_env

  • 将ccl_get_encode.4gl上传至 /u1/topprod/topcust/clib/4gl

此处如果编辑不成功。那么退出ERP重新进来再尝试。如果还不行或者出现什么奇怪的闪退现象,可以考虑重启ERP服务器!!!

  • 编译ccl_get_encode.4gl之后在需要生成二维码图片的程序中p_link中链接ccl_get_encode调用生成图片的函数,比如本例子中是csfr103

程序中调用:

  • 在水晶报表的xml文件中加入大数据对象(l_qrcode为4GL传的图片变量名称)

<xs:element name=”l_qrcode” type=”xs:base64Binary” minOccurs=”0″ />

报表中当正常字段拖出来用就行

显示:

为方便复制代码,下面是代码举例,其中标黄的是重点代码:

FUNCTION encode_print()
DEFINE l_sql STRING
DEFINE l_format STRING
DEFINE l_format_i LIKE type_file.num15_3
DEFINE l_i LIKE type_file.num5
DEFINE l_k LIKE type_file.num5
DEFINE l_j LIKE type_file.num5
DEFINE l_m LIKE type_file.num5
DEFINE l_sfc02 LIKE sfc_file.sfc02
DEFINE l_str LIKE type_file.chr200
DEFINE l_qrcodeid LIKE type_file.chr20
DEFINE l_qrcode LIKE type_file.blob
DEFINE l_day LIKE type_file.chr6

IF cl_null(tm.inp) THEN
    CALL cl_err("不可为空!","",1)
    RETURN
END IF

CALL cl_del_data(l_table)

LET g_sql = "INSERT INTO ",g_cr_db_str CLIPPED,l_table CLIPPED," VALUES(?,?,?,?,?, ?,?,?)"

PREPARE insert_prep FROM g_sql

IF STATUS THEN
    CALL cl_err('insert_prep:',status,1) EXIT PROGRAM
END IF

LET l_j = 0
LET l_k = 0

IF g_inf.sfb08 > g_inf.tc_obe03 OR g_inf.sfb08 = g_inf.tc_obe03 THEN
    LET l_format_i = g_inf.sfb08 / g_inf.tc_obe03
    LET l_format = l_format_i
    LET l_i = l_format.subString(1,l_format.getIndexof('.',1))
    LET l_j = l_i
    LET l_m = g_inf.sfb08 MOD g_inf.tc_obe03
ELSE
    LET l_m = g_inf.sfb08
    LET l_j = 1
END IF

LET l_sfc02 = g_inf.sfc02[2,9]

SELECT to_char(g_today,'YYMMDD') INTO l_day FROM dual

LET l_str = g_inf.ima133,'620083',l_day,l_sfc02

CALL ccl_get_dmcode(70,70,l_str,'N') RETURNING l_qrcodeid

LOCATE l_qrcode IN MEMORY

SELECT tc_txt04 INTO l_qrcode FROM tc_txt_file WHERE tc_txt01 = l_qrcodeid

FOR l_k = 1 TO l_j
    EXECUTE insert_prep USING g_inf.ima133,tm.inp,g_inf.tc_obe17,l_sfc02,g_inf.day,g_inf.tc_obe03, l_qrcode,l_str
END FOR

IF l_m > 0 THEN
    EXECUTE insert_prep USING g_inf.ima133,tm.inp,g_inf.tc_obe17,l_sfc02,g_inf.day,l_m, l_qrcode,l_str
END IF

FREE l_qrcode

LET g_sql = "SELECT * FROM ",g_cr_db_str CLIPPED,l_table CLIPPED

CALL cl_prt_cs3('csft005','csft005',g_sql,"")

END FUNCTION

后续补充,在代码里面,有几个地方要注意的:

1、l_qrcode 也是要插入到报表字段里面去的。所以假如你是要显示一个 物料编号 的二维码,那么你需要一个存在 物料编码 的字段,同时也需要一个l_qrcode的字段。l_qrcode 格式如下:

#ima01t 就是存入l_qrcode 值的。
【但是,但是,但是,ima01t.type_file.blob 这类型字段不能放在第一位,如下程序就会说转换不了】
LET g_sql =" ima01t.type_file.blob,rvv31.rvv_file.rvv31,rvv031.rvv_file.rvv031,",
 " ima021.ima_file.ima021,tc_aab03.tc_aab_file.tc_aab03, ",
 " faf02.faf_file.faf02"

正确的:
LET g_sql =" rvv31.rvv_file.rvv31,ima01t.type_file.blob,rvv031.rvv_file.rvv031,",
 " ima021.ima_file.ima021,tc_aab03.tc_aab_file.tc_aab03, ",
 " faf02.faf_file.faf02"
 #ima01t 就是存入l_qrcode 值的。
 
 sr字段却是不用填的,不能定义一个 sr RECORD ima01t like type_file.blob  做了就报错,不知道为啥。
只能直接在insert into的时候用l_qrcode 字段就行,本来还想着用sr.ima01t的

2、注意 LOCATE l_qrcode IN MEMORY   和   FREE l_qrcode  不能漏

 

资源包下载<TIPTOP_TOPGP生成二维码(支持DM码).rar>

链接:https://pan.baidu.com/s/1h0eqvsGDK1oEuDi5JMlQjA
提取码:3b4m

结尾语:感谢方案提供者:我是TT-风

转载请注明:赫非域 » TIPTOP_TOPGP生成二维码(支持DM码),水晶报表打印二维码