找回密码
 立即注册

QQ登录

只需一步,快速开始

qq525566534
中级会员   /  发表于:2021-5-23 11:34  /   查看:10815  /  回复:37
本帖最后由 Crystal.Li 于 2021-5-24 17:09 编辑

我们一个订单里面有好几种产品,每种产品设计了一个报表,所以订单打印需要实现套打
[size=0.83em]
image.png404996947.png (95.95 KB, 下载次数: 0)
下载附件
[color=rgb(153, 153, 153) !important]昨天 10:00 上传




这是一个订单里面三种产品的三个报表,请问如何把三个报表的内容合并到一个进行接着打印,而不是一个报表一个报表打印?

37 个回复

倒序浏览
James.Lv讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2021-5-24 09:51:15
沙发
您好,您这个需求可以这样实现,设计一个新的报表,然后使用子报表组件,将您所有产品的报表合并进来。

然后给报表设计一个参数,参数为产品,您选择订单,然后把该订单对应的产品传进来,然后把子报表显示属性设置为表达式根据参数进行显示或者隐藏。这样就可以实现您的需求,不过这样做有一个可能需要注意的,如果您的产品特别多,可能会稍微影响一点速度。
您具体评估衡量一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
qq525566534
中级会员   /  发表于:2021-5-24 16:58:53
板凳
本帖最后由 qq525566534 于 2021-5-24 17:11 编辑
James.Lv 发表于 2021-5-24 09:51
您好,您这个需求可以这样实现,设计一个新的报表,然后使用子报表组件,将您所有产品的报表合并进来。

...

每个订单的产品种类不固定,这种方法适合产品固定的.我再说清楚一下我的需求,就是我们一个主订单下面有好几个子订单,每个子订单都有自己设计好的报表模板了,如果有3个子订单,就需要在每个子订单的报表上点打印,需要点3次打印三份!  实际上客户需要在纸张上连续打印1份,不知道我说明白了吗
回复 使用道具 举报
James.Lv讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2021-5-24 18:08:43
地板
qq525566534 发表于 2021-5-24 16:58
每个订单的产品种类不固定,这种方法适合产品固定的.我再说清楚一下我的需求,就是我们一个主订单下面有好 ...

明白,我理解您的意思,我的回答就是解决您这个需求的,我的意思是你设计一个报表,把你所有的子订单模板都加上,然后根据参数来控制哪些显示,哪些不显示,也就是说,比如参数传递的是1,2,3,那我这个报表里面就显示子报表1,2,3,剩下的5,6,7,8,,,,等等都设置成隐藏,每个子报表的显示隐藏都是根据参数来进行判断的,这是我上面提供的一种方案
除此之外,也还有另外一种方式,就是你在后台代码生成一份动态的主报表,这个报表里面嵌套多少个子报表是根据您的程序以及数据进行控制生成。
回复 使用道具 举报
qq525566534
中级会员   /  发表于:2021-8-20 09:49:51
5#
James.Lv 发表于 2021-5-24 18:08
明白,我理解您的意思,我的回答就是解决您这个需求的,我的意思是你设计一个报表,把你所有的子订单模板 ...

后面这种方法适合我,请给个arjs动态拼接多个报表到一张纸上的实例好吗
回复 使用道具 举报
James.Lv讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2021-8-20 10:20:38
6#
qq525566534 发表于 2021-8-20 09:49
后面这种方法适合我,请给个arjs动态拼接多个报表到一张纸上的实例好吗

可以参考附件这个示例

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
qq525566534
中级会员   /  发表于:2021-8-28 14:19:15
7#
本帖最后由 qq525566534 于 2021-8-28 14:42 编辑

实验了下不行,显示这个错误
这是我模拟你给的代码:
                        // 1. 生成一个空的主报表对象
                        var mainRpt = JSON.parse('{"definition":{"Name":"Report","Width":"2pt","Layers":[{"Name":"default"}],"CustomProperties":[{"Name":"DisplayType","Value":"Page"},{"Name":"SizeType","Value":"Default"},{"Name":"PaperOrientation","Value":"Portrait"}],"Page":{"PageWidth":"8.5in","PageHeight":"11in","RightMargin":"1in","LeftMargin":"1in","TopMargin":"1in","BottomMargin":"1in","Columns":1,"ColumnSpacing":"0in"},"Body":{"Height":"2pt"}}}');

                        // 2. 循环处理需要拼接的报表到containerItems集合中
                        rpts.forEach(async (subreport, index) =>
                        {
                            //3.初始化一个容器给该子报表
                            var containerTemplate01 = JSON.parse(JSON.stringify(containerTemplate));

                            //4.第index个子报表的json内容加载
                            var subreportItem = JSON.parse((subreport.Json));

                             //5.参数传递
                            if (!subreportItem.Parameters) subreportItem.Parameters = [];
                            try
                            {
                                subreportItem.Parameters["ids"].Value = orderIDs;
                            }
                            catch
                            {
                                let mainParameter = JSON.parse(JSON.stringify(reportparameter));
                                mainParameter.Name = 'ids';
                                mainParameter.Value = orderIDs;
                                subreportItem.Parameters.push(mainParameter);
                            }
                            try
                            {
                                subreportItem.Parameters["token"].Value = token;
                            }
                            catch
                            {
                                let mainParameter = JSON.parse(JSON.stringify(reportparameter));
                                mainParameter.Name = 'token';
                                mainParameter.Value = token;
                                subreportItem.Parameters.push(mainParameter);
                            }


                            //组织子报表的json对象,并装入容器对象中,利用容器的PageBreak属性解决分页问题
                            subreportItem.ReportName = "Subreport" + index;//指定子报表控件的 ReportName属性。
                            subreportItem.Name = "Subreport" + index;//设置子报表的名称
                            //subreportItem.Top = topPosition + "cm";

                            containerTemplate01.Name = "Container" + index;
                            containerTemplate01.ReportItems.push(subreportItem);
                            containerTemplate01.Top = topPosition + "cm";
                            if (index == rpts.length - 1)
                                containerTemplate01.PageBreak = "";
                            containerItems.push(containerTemplate01);

                            if (index = 0)
                                topPosition = 0;
                            else
                                topPosition = topPosition + 5;
                        });

                        // 7. 拼接子报表到一个空的主报表mainRpt中
                        if (!mainRpt.definition.Body.ReportItems) mainRpt.definition.Body.ReportItems = [];
                        mainRpt.definition.Body.ReportItems.length = 0;
                        mainRpt.definition.Body.ReportItems.push(...containerItems);

                        viewer.open(mainRpt);

//这是打印出的主报表内容


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Crystal.Li讲师达人认证 悬赏达人认证
论坛元老   /  发表于:2021-8-30 14:00:16
8#
您好,这个报错建议您那边先调试看一下,
这个demo是没问题的,您调试一下具体是什么文件的报错,具体是哪一行的报错~
回复 使用道具 举报
qq525566534
中级会员   /  发表于:2021-8-30 17:15:05
9#
Crystal.Li 发表于 2021-8-30 14:00
您好,这个报错建议您那边先调试看一下,
这个demo是没问题的,您调试一下具体是什么文件的报错,具体是哪 ...

就是因为你们没错,我模仿的你们代码有错肯定是了,所以才让你给指导下那里有问题
回复 使用道具 举报
Crystal.Li讲师达人认证 悬赏达人认证
论坛元老   /  发表于:2021-8-30 17:54:10
10#
qq525566534 发表于 2021-8-30 17:15
就是因为你们没错,我模仿的你们代码有错肯定是了,所以才让你给指导下那里有问题

您好,
这个报错,浏览器控制台显示具体是哪个文件报错?通过你的代码和简单的一个截图报错看不出来具体的原因。所以才建议您调试,看具体是哪一步有问题,才能找到问题原因。

如果您不会调试,可以提供一个demo,我们帮您调试,或者您可以找您公司的其他技术人员帮您调试看一下。
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部