ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # 报表开发(手机万能报表) ## 一 前言 天力卓越ERP是一款天力卓越公司自主开发的可用户自主编辑二次开发的C/S化web风格的进销存软件,为解决日益增长的用户个性化报表需求,依据客户需求进行相应的报表开发,将二次报表开发功能进行相应的介绍。 ## 二 进入报表二次开发界面 在账套选择界面,按Ctrl+F11在设计界面输入Tlzy.123进入软件 对系统报表进行更改,需在软件客户端目录添加文件 tlzydebug.txt ,重新登录软件(慎用) 打开软件,点击菜单中报表管理,打开自定义报表管理(图2-1) ![](https://box.kancloud.cn/5ab893de8698c67707ed71614f309cfa_1366x728.png) :-: 图2-1 ## 三 正式介绍 在报表开发管理界面点击新增,进入正式的二次报表开发环节 ![](https://box.kancloud.cn/8be8c2cd6c356513c119fc26f4574bc2_1364x463.png) :-: 图3-1 ## 四 总体界面 一区:自定义报表大框架区域,定义报表大属性区域 二区:SQL语句或者存储过程存储区域 三区:入参定义区域(SQL语句和存储过程的入参) ![](https://box.kancloud.cn/bb9e52816d1dcdbe86112097e2e1c6ba_1366x728.png) :-: 图4-1 ## 五 名词解释一(大框架名词) 1. 报表分类:二次报表可归属于相应的界面,要进行报表分类的定义 2. 关联父表:在上级报表中双击某行,可打开目前定义的报表 3. 顺序:二次开发报表在目前报表中显示的顺序 4. 手机端展示:该报表是否可以展示在手机 5. 不使用表格配置:可以进行表格说明项目的配置 6. 报表名称:自定义报表在软件中显示的名称 7. SQL类型:二次报表支持SQL语句及存储过程 ![](https://box.kancloud.cn/8427ac12c7a3080360088bba6a0e12d9_1366x728.png) :-: 图5-1 ## 六 名词解释二(入参名词) 1. 字段名称:入参的参数名称,一般以@开头; 2. 中文名:在报表的条件选择框前显示的该入参的中文名称; 3. 数据类型和参数类型:入参的数据类型以及数据类型的具体划分数据类型分字符型,数值型和日期型; * 字符型的参数类型分可选录入型,选择型,多选型,基础档案 * 数值型的参数类型分可选录入型,选择型,多选型 * 日期型的参数类型分开始日期和普通日期 4. 选择项:参数类型为可选录入型,选择型,多选型的参数的预定义实际入参的定义; * 以‘|’隔开表示不同的选择项。如2017|2018|2019 5. 默认值:传入参数的默认取值,取值顺序:父表传参>默认值传参>软件日期参数; * 默认值支持SQL函数,如:getdate() * 传参到底层单据查询条件:该报表列中必须包含:dju_id和dju_lxing列 6. 条件必选:自定义报表的条件选择必须有值; 7. 父表传参:上级报表双击某行时候,或上级报表所选条件参数,打开自定义报表时候所传参数,父表穿参分为两种,一种是父表的条件参数,以@开头,一种是行参数,取父表该列的名称; 8. 基础档案类型:字符型参数可取到的基础资料内容作为入参; ![](https://box.kancloud.cn/714173e8975d37372cccd82b4850ce16_532x431.png) :-: 图6-1 ## 七 报表二次开发步骤 1. 建立好报表所需要的存储过程或者SQL语句 2. 在二次报表管理系统中进行相关的添加,报表分类,关联父表(可无),报表名称,SQL类型,填写SQL语句或者存储过程名称,添加相应的入参。 3. 重新进入软件,就可以在相关分类下看到本次添加的二次报表 4. 进行表格配置,添加中文名称和标题。 5. 验证数据正确性和完整性。 ## 八 报表二次开发例子 以零售日报表为例,父类报表为零售月报表,下级子类报表为零售单查询 ### 1.建立零售日报表存储过程 ~~~ CREATE PROCEDURE [dbo].[sp_BB_saleDay] ( @org_id varchar(50)='', @p_id varchar(50)='', @c_id varchar(50)='', @s_id varchar(50)='', @d_id varchar(50)='', @e_jsren varchar(50)='', @e_cjren varchar(50)='', @day datetime ) AS SET NOCOUNT ON DECLARE @batchbzhi VARCHAR(255) DECLARE @i INT, @mji FLOAT, @zyrshu INT IF (@org_id<>'') AND (@s_id='') ---门店查询依赖仓库 BEGIN SELECT TOP 1 @s_id=s_id FROM base_org_storage WHERE org_id=@org_id SET @s_id=ISNULL(@s_id, '') END SELECT @mji=SUM(ISNULL(mji, 0.0)), @zyrshu=SUM(ISNULL(zyrshu, 0)) FROM base_storage WHERE @s_id = '' or id = @s_id SELECT @mji=ISNULL(@mji, 0.00), @zyrshu=ISNULL(@zyrshu, 0) BEGIN SELECT dju_id, SUM(-1*crkbzhi*d.sliang) AS xssliang, --数量 SUM(-1*crkbzhi*zhje) AS xssr, --销售金额 SUM(-1*crkbzhi*d.cbje) AS xscb, --销售成本 SUM(CASE WHEN zhje = '0' THEN -1*crkbzhi*d.cbje ELSE 0.0 END) AS zpcbje, --赠品成本金额 SUM(CASE WHEN d.sfglkcun=0 THEN -1*crkbzhi*je ELSE 0.0 END) AS ptspje, --普通商品销售金额 SUM(CASE WHEN d.sfglkcun=1 THEN -1*crkbzhi*je ELSE 0.0 END) AS bglkcspje --不管理库存商品销售金额 INTO #DetailPday FROM v_sale_detail d,v_sale_idx i , base_product p ,base_employee e1 ,base_employee e2,base_organization org , base_client c ,base_storage s --,base_department dp WHERE convert (varchar(10),i.rqi,120)=convert (varchar(10),@day,120) and (@org_id = '' or d.org_id = @org_id) and (@c_id='' OR i.c_id=@c_id) AND (@s_id='' OR d.s_id =@s_id) AND (@p_id='' OR p_id=@p_id) AND (@e_jsren='' OR d.e_jsren =@e_jsren) AND (@e_cjren='' OR d.e_cjren =@e_cjren) AND (@d_id='' OR i.d_id =@d_id) AND d.dju_id = i.id and d.S_ID=s.ID AND i.C_ID=c.ID ANDd.e_jsren=e1.ID AND d.e_cjren =e2.id and --i.d_ID=dp.id AND ----暂时取消部门 d.p_id=p.ID and d.org_id= org.id GROUP BY dju_id ,rqi SELECT [ID], bhao, rqi, dju_lxing,e_jsren, e_cjren, c_id, c_mcheng, ysje,hjyhje, yjje,ssje, a_id INTO #IdxBillDayTemp --------提炼主表 FROM v_sale_idx i WHERE i.ztai='10' and convert (varchar(10),i.rqi,120)=convert (varchar(10),@day,120) SELECT i.*, ISNULL((CASE i.a_id WHEN '-1' THEN '多账户' ELSE a.mcheng END), '' ) AS a_mcheng INTO #IdxBillDay FROM #IdxBillDayTemp i LEFT JOIN Base_Account a ON i.a_id=a.id -----------开始陈列日报表 SELECT i.rqi, dju_id, bhao, dju_lxing, e_jsren, e_cjren, c_id, c_mcheng, a_mcheng, SUM(xssliang) AS xssliang, ---销售数量 SUM(xssr) AS xssr, ---销售收入 SUM(xscb) AS xscb, ---成本 SUM(zpcbje) AS zpcbje, ---赠品成本 SUM(ptspje) AS ptspje, ---普通商品金额 SUM(bglkcspje) AS bglkcspje, ---不管理库存商品金额 (CASE WHEN ISNULL(SUM(xssr), 0.0)=0.0 THEN 0.0 ELSE (ISNULL(SUM(ptspje), 0.0)/ISNULL(SUM(xssr), 0.0))*100 END) AS ptspzb, (CASE WHEN ISNULL(SUM(xssr), 0.0)=0.0 THEN 0.0 ELSE (ISNULL(SUM(bglkcspje), 0.0)/ISNULL(SUM(xssr), 0.0))*100 END) AS bglkcspzb, SUM(hjyhje) AS xsyh, ---销售优惠 SUM(yjje) AS xsysk, ---应收金额 SUM(i.ssje) AS xsssk ---实收金额 FROM #DetailPday d INNER JOIN #IdxBillDay I ON d.dju_id=i.[ID] GROUP BY rqi, dju_id, bhao, dju_lxing, e_jsren, e_cjren, c_id, c_mcheng, a_mcheng ORDER BY rqi, dju_id END EXEC sp_DropTempTable '#DetailPday' EXEC sp_DropTempTable '#IdxBillDayTemp' EXEC sp_DropTempTable '#IdxBillDay' ~~~ ### 2.在自定义报表管理中进行零售日报表的添加 ![](https://box.kancloud.cn/224c72368633102976e7350fd4baf2eb_1094x588.png) :-: 图8-1 * 其中查询日期入参有两种参数可选,一是默认值,取服务器当前日期,二是父表传参,取父表零售月报表的day_列的该行的值。 * 此零售日报表打开两种方式,一种是直接打开,查询日期取默认值,一种是在零售月报表中双击某行打开,查询日期参数取零售月报表该行的day_的值作为查询日期的参数值。 ![](https://box.kancloud.cn/0d559da6d6d982d2b906c553b5ddd7e4_532x431.png) :-: 图8-2 ### 3.进行表格配置(具体详情见表格配置设置) ![](https://box.kancloud.cn/21e67691f5a7611e79cb271352cae505_800x600.png) :-: 图8-3 ### 4.检查数据有无错误,二次报表开发完成