欢迎使用内置报表工具
一.准备工作
1.取数来源
如果你是第一次使用内置报表工具,你需要先创建一个数据源
①打开取数来源菜单
②点击 新增按钮
③输入并保存
来源名称 :数据源的名称
取数方式:数据类型
JBDC:连接字符串
用户名密码:连接的数据库的用户密码
2.新建一个临时表
在数据库执行以下SQL代码
CREATE TABLE VI_BBGJ
(
T1 VARCHAR2(400),T2 VARCHAR2(400),T3 VARCHAR2(400),T4 VARCHAR2(400),
T5 VARCHAR2(400),T6 VARCHAR2(400),T7 VARCHAR2(400),T8 VARCHAR2(400),
T9 VARCHAR2(400),T10 VARCHAR2(400),T11 VARCHAR2(400),T12 VARCHAR2(400),
T13 VARCHAR2(400),T14 VARCHAR2(400),T15 VARCHAR2(400),T16 VARCHAR2(400),
T17 VARCHAR2(400),T18 VARCHAR2(400),T19 VARCHAR2(400),T20 VARCHAR2(400)
);
3.新建一个参数视图
在数据库执行以下SQL代码
CREATE VIEW VI_BBCS(K,V,LX,REMARK) AS
SELECT ID,KFMC,1,'库房' FROM IN_STORE
UNION ALL
SELECT ID,ZBMC,2,'账簿' FROM IN_ACCBOOK;
4.新建一个REFCURSORPKG包用于存储过程使用
在数据库执行以下SQL代码,需要用@作为分隔符
CREATE OR REPLACE PACKAGE REFCURSORPKG
as
type tRefCursor is ref cursor ;
end;@
5.新建一个存储过程用于使用
在数据库执行以下SQL代码,需要用@作为分隔符,具体的后面再说
CREATE OR REPLACE PROCEDURE VI_AHBB_PRO
(LX in varchar2,
M1 in varchar2,M2 in varchar2,M3 in varchar2,M4 in varchar2,
M5 in varchar2,M6 in varchar2,M7 in varchar2,M8 in varchar2,
M9 in varchar2,D1 in varchar2,D2 in varchar2,
cur out RefCursorPkg.tRefCursor) as v_sql varchar2(1000);
begin
v_sql:='select t1,t2,t3,t4,t5,t6,t7,t8,t9,t10 from VI_BBGJ';
--------------------------------------------------
IF (LX='1' ) THEN
IF (M1) THEN
delete vi_bbgj_yqy;
insert into vi_bbgj_yqy(t1)
select ZBMC FROM IN_ACCBOOK WHERE KFID=M1;
else
delete vi_bbgj_yqy;
insert into vi_bbgj_yqy(t1,t2)
select '存在参数未设置','参数1:'||NVL(M1,'库房id未填') from dual;
END IF;
END IF;
-------------------------------------------------
open cur for v_sql;
end;@
二.第一个存储过程内置报表
1.新建示例报表定义-第一步(基础设置)
①打开报表定义菜单,点击新建按钮
②填写以下字段:
报表名称:输入报表名称
表头显示英文名:输入T1
表头显示中文名:输入T1
取数方式:选择存储过程
定义取数来源:选择准备阶段创建的数据源
取数逻辑内容:默认填写以下代码
VI_AHBB_PRO(STRING 1,STRING M1,STRING M2,STRING M3,STRING M4,STRING M5,STRING M6,STRING M7,STRING M8,STRING M9,STRING D1,STRING D2,STRING CURSOR)
说明一下,这里的 第一个参数 string 1 就是对应我们设置的存储过程的第一个参数LX。
LX参数代表我要用这个存储过程的第几个报表。
以后自己新建报表时这个字段只需要改第一个1,其他的参数不用改。
虽然参数有很多,但是只用使用本次报表需要带的参数就可以了。
③点击保存按钮
2.新建示例报表定义-第二步(参数设置)
①点击定义条件按钮,打开条件列表
②点击新增按钮
③填写以下字段
字段编码:M1
必须跟“取数逻辑内容”中的需要带的参数一致,本次示例填M1
字段名称:中文的参数名称
排序号:排序号
显示格式:文本型
如果是需要日期框就要选择日期型,目前基本就只使用这2种,,本次示例选文本型
对齐格式:居中
编辑限制长度:100
编辑类型:下拉框
以下为各种类型的使用场景
文本框:手动输入
下拉框:下拉单选
点选框:多选1的情况下(一般不使用)
复选框:复选情况下,这个真没用过(一般不使用)
复选下拉框:下拉情况下进行复选(目前存储过程没办法进行复选,需要等钱杰改)
日期框:选择日期(需要显示格式也选日期型)
日期格式化:一般填yyyy-MM-dd
注意MM是月,mm是分钟
选择项来源方式:SQL查询语句
如果是下拉、下拉复选则需要选择,一般选择SQL查询语句
选择项来源内容:
SELECT K,V FROM VI_BBCS WHERE LX=1 ORDER BY K
内容是下拉选项的备选条件,由于取值名必须为K(实际值)、V(显示值),一般使用一个视图用于参数调用,需要加参数时可以增加一个新的LX的参数,并且不同报表也能复用这个视图作为参数
④点击保存
当你为一个新报表增加条件时,如果已经有另一个报表里面的条件可以用于新报表,可以用以下方法快速复制
打开表 SYS_ADI_ISHOW_FIELD_300 这是专门用来存放条件定义的表
你可以复制一个你看上的条件,同时修改id(取的序列)、CONFIG_NO(报表样式编号)并保存
这样你就快速复制了一个条件到你的新报表了
3.新建示例报表定义-第三步(格式设置)
①点击定义表样按钮
②你会看到一个基础的表样,你可以在上面任意修改数据以外的样式。
③找到表格种你需要生成数据的左上角第一个单元格,记住他的的坐标,比如第三行第1列就是3,1
④保存数据
⑤在填充起始坐标中填写③中记住的坐标
4.预览并修改报表
①点击预览报表查看报表样式
②根据数据内容调整表单格式以达到所需的要求
三.将报表挂在报表中心
①.打开 报表配置 菜单
②.新建报表分类,或者选择一个已有的报表分类
新建时需要选择该分类的报表对哪些角色可见
③点击新增按钮
④写入报表名称
⑤写入链接地址
内置报表链接地址默认为:…/Luckysheet/showDatashow.html?report_code= 并在后面拼上内置报表的报表样式编号
四.公式化内置报表思路
1.以VI_AHBB_PRO存储过程 为基础,在这上面不断新增新的存储过程报表,用LX来区分不同的报表
2.以VI_BBCS视图 为基础,增加一系列基础的参数进行复用以提高写报表的效率
五.一些示例代码及解释
1.基础存储过程框架
CREATE OR REPLACE PROCEDURE VI_AHBB_PRO
(LX in varchar2,
M1 in varchar2,M2 in varchar2,M3 in varchar2,M4 in varchar2,
M5 in varchar2,M6 in varchar2,M7 in varchar2,M8 in varchar2,
M9 in varchar2,d1 in varchar2,d2 in varchar2,cur out RefCursorPkg.tRefCursor) as v_sql varchar2(1000);
begin
v_sql:='select t1,t2,t3,t4,t5,t6,t7,t8,t9,t10 from VI_BBGJ';--默认sql
-----
报表主体
-----
open cur for v_sql;
end;
这个框架就是定义了一个执行sql的存储过程以及多达11个自由参数,
VI_BBGJ表最多能返回 T1 到 T20 一共20 个字段,如果不够就自己再加
默认的sql能避免参数为空造成的执行报错
2.报表主体
这段相当于是一个模块,放入框架中报表主体部分就能作为1个报表
第一行 IF (LX=‘1’) THEN 用于限定为报表1
第二行才开始校验相关参数是不是齐全,不然参数不齐全就执行,等着报错把
可以看到我们查询的方式是将数据插入VI_BBGJ 表,然后用主体的功能将VI_BBGJ 直接查出,这可以减小我们在界面创建报表定义的压力。
DELTE + INSERT 控制 VI_BBGJ 的内容
甚至还可以用update进行二次加工,赞美存储过程的威力
--报表1:申购按科室汇总
IF (LX='1' ) THEN
IF (D2 IS NOT NULL AND D1 IS NOT NULL) THEN
--查询主体
delete VI_BBGJ ;
insert into VI_BBGJ (t1,t2,t3,t4,t5)
SELECT sgksmc,SUM(1),sum(YSJE*10000),sum(DECODE(sgzt,4,1,0)),sum(DECODE(sgzt,4,YSJE*10000,0)) FROM PUR_WZSG A
LEFT JOIN PUR_WZSGS B ON A.ID=B.SGDID
where ZFBZ=0
and to_char(a.SGRQ,'yyyy-mm-dd')>=d1
and to_char(a.SGRQ,'yyyy-mm-dd')<d2
and sgksmc like '%'||m1||'%' GROUP BY sgksmc;
update VI_BBGJ set t6=t2-t4,t7=t3-t5;
--
ELSE
--校验模块
delete VI_BBGJ ;
insert into VI_BBGJ (t1,t2,t3) select '存在参数未设置','参数1:'||NVL(d1,'开始时间未填'),'参数2:'||NVL(d2,'结束时间未填') from dual;
END IF;
END IF;
如果条件存在空则跳转至参数校验,这段代码可以告知使用者哪个参数没有设置。