`
surfingForRest
  • 浏览: 145554 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

可变列报表打印开发总结

阅读更多
一、业务描述:
如果具有某列的人的值均为零值(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

    这个“水晶报表打印二维码.zip”文件显然包含了关于如何使用水晶报表来生成和打印二维码以及CODE128和AN条形码的相关源码示例。以下是关于这些主题的详细解释: 1. **水晶报表**:水晶报表是由SAP公司开发的一款...

    .NET超强报表打印控件

    报表打印控件是开发工具中的一个组件,它允许程序员在应用程序中集成报表设计和打印功能。用户可以通过拖放方式添加表格、图表、图片等元素,并设置相应的样式和数据源,以生成所需的报表模板。这些控件通常支持多种...

    快速报表开发框架

    通过使用该框架,开发者可以大大减少手动编写代码的工作量,提高开发效率,使报表设计和维护变得更加简单。 在提供的链接中,博主SpringDawn2003分享了关于快速报表开发框架的一些实用经验和技术细节。文章可能涵盖...

    生成可打印报表打印条型码

    综上所述,生成可打印报表打印条形码涉及到的技术点包括条形码编码原理、报表生成工具的使用、Web开发中的前后端交互以及打印设置。"WebSite2"压缩包中的代码可能涵盖了这些方面,通过对代码的学习和研究,可以深入...

    完善的.net报表打印程序

    在.NET框架中,报表打印是一项重要的功能,尤其在企业级应用中,数据的展示和输出是必不可少的环节。本篇文章将详细探讨一个基于VB.NET的完善的报表打印程序,旨在帮助开发者理解和掌握如何在.NET环境中高效地实现...

    JS打印报表控件

    总的来说,JS打印报表控件是Web开发中的一个重要工具,它使得在浏览器环境中实现复杂报表的打印和预览功能变得简单。通过合理的配置和使用,开发者可以提升Web应用的用户体验,满足各种打印需求。

    c# 结合锐浪报表Grid++Report6 实现推送数据打印,代码简单易懂,写了一个案例给大家

    首先,Grid++Report6是锐浪报表提供的一个强大的报表设计和开发工具,它允许开发者在Windows环境下创建复杂、动态的报表,并且提供了丰富的API接口,使得在C#应用中集成报表打印变得简单。通过Grid++Report6,我们...

    报表打印控件fastreport2.5

    FastReport是一款功能强大的报表打印控件,主要用于设计和打印各种复杂的报表。它的版本2.5在业界享有良好的口碑,因为它不仅提供了丰富的功能,而且在易用性方面做得相当出色。这款控件支持C/S(客户端/服务器)...

    vb报表开发工具软件

    综上所述,VB报表开发工具如Grid++Report 6.0 beta是VB程序员的强大助手,它们简化了报表创建过程,提高了开发效率,使得复杂的报表设计变得轻而易举。通过深入学习和熟练掌握这类工具,开发者能够更好地满足项目中...

    netReport.rar_ .netreport_csharp 打印_打印_打印报表_报表

    总结来说,.NET Report结合C#语言,为企业级报表开发提供了强大且灵活的工具。通过熟练掌握其打印和预览功能,开发者可以创建出满足各种需求的高质量报表,提升工作效率,更好地服务于业务决策。对于初次接触或希望...

    用友报表开发工具使用手册

    报表控件保持了UFO的基本特性,诸如三维立体表格式、可变区、组合单元等,同时增加了一些功能并在许多方面都做了所拓展,列表如下: 1) 数据类型支持表样、字符、数值、日期、时间五种数据类型。 2) 支持单元控件的...

    delphi 报表开发组件

    在Delphi编程环境中,报表开发是一项关键任务,用于创建、设计和打印各种复杂的数据报告。FastReport是一款流行的报表开发组件,特别适用于Delphi开发者。它提供了丰富的功能和灵活性,使得在Delphi应用中实现专业...

    Qt报表设计和打印:演示如何利用Qt Widget设计和打印一份报表,演示如何设计和打印Qt Widget的报表

    总结,Qt为报表设计和打印提供了全面的支持。通过自定义QWidget子类,结合Qt的数据模型、布局管理和绘图API,可以创建各种复杂的报表。而QPrinter类和相关的打印机制,则使得打印报表变得简单易行。在实际项目中,...

    ETCELL打印报表控件

    它通过提供高效的报表处理能力和灵活的定制选项,使得在网页或应用程序中实现高质量报表打印变得简单易行。 在“ETCELL控件使用说明.txt”文档中,可能详细介绍了如何集成和使用这个控件。首先,开发者需要将...

    JasperReport+iReport报表开发手册.pdf

    ### JasperReport+iReport 报表开发手册核心知识点详解 #### 一、JasperReport与iReport概述 **JasperReport** 是一款强大的、灵活的报表生成工具,它能够展示丰富的页面内容,并支持将这些内容转换为PDF、HTML或...

    FastReport报表打印显示二维码

    在IT行业中,报表工具是数据可视化和业务报告的关键组成部分,FastReport是一款广泛使用的报表解决方案,尤其在Delphi开发环境中。然而,尽管FastReport提供了丰富的报表设计和打印功能,但默认情况下并不支持直接...

    iReport(java报表开发工具使用教程)

    iReport是一款基于Java的...总结,iReport作为一款强大的Java报表开发工具,不仅简化了报表设计过程,还提供了丰富的功能和灵活性。通过学习和实践,开发者能够创建出满足各种需求的精美报表,提升业务分析和决策效率。

    Delphi7 集成报表打印工具Rave Reports 5.0之初体验

    在IT行业中,报表打印工具是开发企业级应用不可或缺的一部分,特别是在数据可视化和业务流程管理中。Rave Reports作为Delphi7中的一个集成报表系统,为开发者提供了强大的报表设计和打印功能。本文将深入探讨Rave ...

    DireSystemClient.rar_ado.mak_报表 打印

    总结起来,这个压缩包文件可能是一个基于ADO的数据库应用,具备强大的报表生成和自动打印功能。开发人员可能需要了解ADO编程、SQL查询、报表设计以及Makefile的使用等方面的知识,以理解和维护这个系统。对于使用者...

    SAP B1水晶报表使用指南

    **2.3 增强的发布接口:** 改进了与BusinessObjects Enterprise系统的集成能力,使得发布和管理报表变得更加简单。 **2.4 XML和Web服务数据库驱动程序:** 新增了XML和Web服务数据库驱动程序,提高了与不同数据源的...

Global site tag (gtag.js) - Google Analytics