一、业务描述:
如果具有某列的人的值均为零值(NUMBER型)或空(字符型),又或者不具有此列,那么打印报表的时候该列不显示,换一种说法就是:打列出的列都至少有一个员工在此项有值。
二、现状:
1、需要根据用户权限范围内的“业务单位”,去关联“集合 ID”,而SETID下是预打印列值的“全集”。
三、实现时技术难点:
1、所有列值与员工在实际表中,都是一项列值一条数据,造成不能一次查库就能取到所有需打印的列。
2、列名先于列值打印,那么在出列值前需确定需打印的所有列名,并且,打印列值时需要和列名对应上。
3、一个员工的某一项按时间分段后可有多条,例如,某月1号到15号一条,16号到月最后一天又一条。
4、因多次查库,可能效率不会太好,但由于业务上要求于此,此没办法提升。
四、具体实现:
1、确定需打印的列名:写SQL,用SUM、GROUP来统计具体需打印出的列名,并按顺序保存打印项的CODE。
2、用步骤1的CODE,按顺序取相应项的值,然后放在二维ARRAY里,同时可用另外一个二维数组按样式存数据,然后打印出来,具体代码如下:
rem 根据给定支持元素PIN_NUM,查询员工支持元素;
For &i = 1 To &arrOutPinNum.Len
rem 查询支持元素值;
&arr2ReturnPin = &oGpUtility.GetEmplSupportVar(&outEmplid, &outEmplRcd, &arrOutPinNum [&i], &dtPrdBgn, &dtPrdEnd);
If &arr2ReturnPin.Len < 1 Then /*说明不包含此支持元素,存入空值*/
&arr2Pin.Push(CreateArrayAny(" "));
Else /*不为空,存入返回的支持元素值*/
For &i1 = 1 To &arr2ReturnPin.Len
If &arr2ReturnPin [&i1][2] = "Y" Then /*支持元素为字符型*/
&arrTmpPin.Push(&arr2ReturnPin [&i1][1]);
End-If;
If &arr2ReturnPin [&i1][4] = "Y" Then /*支持元素为数值型*/
&arrTmpPin.Push(&arr2ReturnPin [&i1][3]);
End-If;
End-For;
rem 统计同一员工同一支持变量多次出现时的最大数,供后续设置输出样式用(主要针对同一员工同一支持元素时间上有分段的情况);
If All(&arrTmpPin) And
&arrTmpPin.Len > &longestCount Then /*始终保存最大值*/
&longestCount = &arrTmpPin.Len;
End-If;
rem 保存当前支持元素结果;
&arr2Pin.Push(&arrTmpPin);
REM 清空临时ARRAY,以备下次使用;
&arrTmpPin = CreateArrayAny();
End-If;
End-For;
rem 构造返回的支持元素排列样式;
Local number &j, &k, &l, &m; /*循环变量*/
Local array of any &arrTmpGetPin = CreateArrayAny(); /*构造支持元素输出样式临时ARRAY*/
For &j = 1 To &arr2Pin.Len
If &arr2Pin [&j].Len < 1 Then /*如果为空,则不包含此支持元素,存入&longestCount个空*/
For &k = 1 To &longestCount
&arrTmpGetPin.Push(" ");
End-For;
Else
For &l = 1 To &arr2Pin [&j].Len /*如果不为空,那么取出所有包含的支持元素(主要处理同一员工同一支持元素分段的情况)*/
&arrTmpGetPin.Push(&arr2Pin [&j][&l]);
End-For;
If &arr2Pin [&j].Len < &longestCount Then
For &m = &arr2Pin [&j].Len + 1 To &longestCount /*其他单元格设置为空*/
&arrTmpGetPin.Push(" ");
End-For;
End-If;
End-If;
rem 保存当前支持元素;
&arr2PinRslt.Push(&arrTmpGetPin);
REM 清空,以便下条使用;
&arrTmpGetPin = CreateArrayAny();
End-For;
/*填充结果数据*/
Local number &j1, &j2;
For &j2 = 1 To &longestCount
&fileout.WriteLine("<tr>");
&oReport.WriteCellData(&fileout, &BUSINESS_DESCRSHORT, "30");
&oReport.WriteCellData(&fileout, &outDeptid, "30");
&oReport.WriteCellData(&fileout, &outDeptDescr, "30");
&oReport.WriteCellData(&fileout, &outEmplid, "30");
&oReport.WriteCellData(&fileout, &outEmplRcd, "30");
&oReport.WriteCellData(&fileout, &outEmplName, "30");
&oReport.WriteCellData(&fileout, &outGpPayGroup, "30");
&oReport.WriteCellData(&fileout, &outGroupDescr, "30");
For &j1 = 1 To &arr2PinRslt.Len
&oReport.WriteCellData(&fileout, &arr2PinRslt [&j1][&j2], "30");
End-For;
&fileout.WriteLine("</tr>");
End-For;
员工所具有的列项图示:
最终打印结果图示:
查询期间ID:2011/01,故截止到2010/12/31的无效,没有出现在结果中。
关于结果布局开发的时候,由于时间分段+员工可能有多个元素都分段,那么显示的行如何搞?
员工显示的总条数由分段最多的支持元素决定,其他分段支持元素,尽量拼在一条显示,拼不下就拼在下一条。
- 大小: 5.4 KB
- 大小: 16.6 KB
分享到:
相关推荐
这个“水晶报表打印二维码.zip”文件显然包含了关于如何使用水晶报表来生成和打印二维码以及CODE128和AN条形码的相关源码示例。以下是关于这些主题的详细解释: 1. **水晶报表**:水晶报表是由SAP公司开发的一款...
报表打印控件是开发工具中的一个组件,它允许程序员在应用程序中集成报表设计和打印功能。用户可以通过拖放方式添加表格、图表、图片等元素,并设置相应的样式和数据源,以生成所需的报表模板。这些控件通常支持多种...
通过使用该框架,开发者可以大大减少手动编写代码的工作量,提高开发效率,使报表设计和维护变得更加简单。 在提供的链接中,博主SpringDawn2003分享了关于快速报表开发框架的一些实用经验和技术细节。文章可能涵盖...
综上所述,生成可打印报表打印条形码涉及到的技术点包括条形码编码原理、报表生成工具的使用、Web开发中的前后端交互以及打印设置。"WebSite2"压缩包中的代码可能涵盖了这些方面,通过对代码的学习和研究,可以深入...
在.NET框架中,报表打印是一项重要的功能,尤其在企业级应用中,数据的展示和输出是必不可少的环节。本篇文章将详细探讨一个基于VB.NET的完善的报表打印程序,旨在帮助开发者理解和掌握如何在.NET环境中高效地实现...
总的来说,JS打印报表控件是Web开发中的一个重要工具,它使得在浏览器环境中实现复杂报表的打印和预览功能变得简单。通过合理的配置和使用,开发者可以提升Web应用的用户体验,满足各种打印需求。
首先,Grid++Report6是锐浪报表提供的一个强大的报表设计和开发工具,它允许开发者在Windows环境下创建复杂、动态的报表,并且提供了丰富的API接口,使得在C#应用中集成报表打印变得简单。通过Grid++Report6,我们...
FastReport是一款功能强大的报表打印控件,主要用于设计和打印各种复杂的报表。它的版本2.5在业界享有良好的口碑,因为它不仅提供了丰富的功能,而且在易用性方面做得相当出色。这款控件支持C/S(客户端/服务器)...
综上所述,VB报表开发工具如Grid++Report 6.0 beta是VB程序员的强大助手,它们简化了报表创建过程,提高了开发效率,使得复杂的报表设计变得轻而易举。通过深入学习和熟练掌握这类工具,开发者能够更好地满足项目中...
总结来说,.NET Report结合C#语言,为企业级报表开发提供了强大且灵活的工具。通过熟练掌握其打印和预览功能,开发者可以创建出满足各种需求的高质量报表,提升工作效率,更好地服务于业务决策。对于初次接触或希望...
报表控件保持了UFO的基本特性,诸如三维立体表格式、可变区、组合单元等,同时增加了一些功能并在许多方面都做了所拓展,列表如下: 1) 数据类型支持表样、字符、数值、日期、时间五种数据类型。 2) 支持单元控件的...
在Delphi编程环境中,报表开发是一项关键任务,用于创建、设计和打印各种复杂的数据报告。FastReport是一款流行的报表开发组件,特别适用于Delphi开发者。它提供了丰富的功能和灵活性,使得在Delphi应用中实现专业...
总结,Qt为报表设计和打印提供了全面的支持。通过自定义QWidget子类,结合Qt的数据模型、布局管理和绘图API,可以创建各种复杂的报表。而QPrinter类和相关的打印机制,则使得打印报表变得简单易行。在实际项目中,...
它通过提供高效的报表处理能力和灵活的定制选项,使得在网页或应用程序中实现高质量报表打印变得简单易行。 在“ETCELL控件使用说明.txt”文档中,可能详细介绍了如何集成和使用这个控件。首先,开发者需要将...
### JasperReport+iReport 报表开发手册核心知识点详解 #### 一、JasperReport与iReport概述 **JasperReport** 是一款强大的、灵活的报表生成工具,它能够展示丰富的页面内容,并支持将这些内容转换为PDF、HTML或...
在IT行业中,报表工具是数据可视化和业务报告的关键组成部分,FastReport是一款广泛使用的报表解决方案,尤其在Delphi开发环境中。然而,尽管FastReport提供了丰富的报表设计和打印功能,但默认情况下并不支持直接...
**JimuReport 积木报表 v1.6.6** 是一个开源的报表设计工具,专为快速构建灵活多变的报表而设计。这个版本的更新可能包含性能优化、新功能添加以及对已有特性的改进。它允许用户通过拖拽方式来设计报表,非常适合...
iReport是一款基于Java的...总结,iReport作为一款强大的Java报表开发工具,不仅简化了报表设计过程,还提供了丰富的功能和灵活性。通过学习和实践,开发者能够创建出满足各种需求的精美报表,提升业务分析和决策效率。
在IT行业中,报表打印工具是开发企业级应用不可或缺的一部分,特别是在数据可视化和业务流程管理中。Rave Reports作为Delphi7中的一个集成报表系统,为开发者提供了强大的报表设计和打印功能。本文将深入探讨Rave ...
总结起来,这个压缩包文件可能是一个基于ADO的数据库应用,具备强大的报表生成和自动打印功能。开发人员可能需要了解ADO编程、SQL查询、报表设计以及Makefile的使用等方面的知识,以理解和维护这个系统。对于使用者...