`
surfingForRest
  • 浏览: 142505 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    二维条码报表系统

    开发环境:WINDOWS98 SYMBOL LS4804识读枪 ,打印设备:CANON 4650 HP:4500 如有问题,请联系fuyingke@163.com 备注:以上选择了两个具有代表性的应用实例。税务申报和车辆管理,其实,条码技术主要的用途...

    ExcelQuicker 报表最佳解决方案

    更为重要的是,通过对Excel VBA接口的二次封装,使其开发变得更加简便、易懂。并且结合实际应用,为开发人员提供了更为简便的开发途经,使得Excel报表的开发易如反掌,并且,将Excel报表具有的更多的功能呈现出来。...

    强大的工业图形平台

    图形单元具有多种可变属性,线条的颜色、类型、宽度、箭头;背景的颜色、网纹;文字框的字型、字号、颜色、下划线类型、四边的类型、文字横向、纵向的对齐方式。编辑能力包括移动、剪贴、拷贝、粘贴、删除、层次、...

    KiteReport_20210515115933.rar

    可在预览时对生成的报表进行修改后再打印. l 方便强大的可视化设计工具。您通过简单的托拽和设置就可以制作普通的报表。 l 报表采用C#在.Net 2.0 上开发。 l 报表的数据源可以使用所有的.Net数据类型,如...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例011 可调整按钮位置的工具栏   cc实例012 浮动工具栏   cc实例013 根据表中数据动态生成工具栏   cc实例014 具有提示功能的工具栏   1.4 状态栏应用实例   cc实例015 带进度条的状态栏   ...

    ezcell(100%Java 报表工具库)

    14.单元格线,滚动条,行头,列头显示可选. 15.支持公式定义,公式定义采用?作标记,如?sum(A1:B1)。 16.数字格式可自由定义,如 12345678, 可自动化为 12,345,678.00 。 17.丰富的页脚页眉属性。具有以上3,4...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    cc实例011 可调整按钮位置的工具栏 cc实例012 浮动工具栏 cc实例 013 根据表中数据动态生成工具栏 cc实例014 具有提示功能的工具栏 1.4 状态栏应用实例 cc实例015 带进度条的状态栏 cc 实例016 动画...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例011 可调整按钮位置的工具栏   cc实例012 浮动工具栏   cc实例013 根据表中数据动态生成工具栏   cc实例014 具有提示功能的工具栏   1.4 状态栏应用实例   cc实例015 带进度条的状态栏   ...

    Delphi5开发人员指南

    10.5.1 打印分栏报表 270 10.5.2 放弃打印进程 275 10.5.3 打印信封 275 10.5.4 抽象打印 276 10.5.5 一个简单的打印预览程序 285 10.6 其他打印任务 286 10.6.1 TDeviceMode结构 286 10.6.2 设置打印份数 288 ...

    Delphi开发范例宝典目录

    实例039 不可移动的窗体 49 实例040 设置窗体在屏幕中的位置 50 实例041 始终在最上面的窗体 51 1.12 设置窗体大小 52 实例042 限制窗体大小 52 实例043 获取桌面大小 53 实例044 组件大小随窗体的改变...

    VC对话框内嵌EXCEL的控件示例源码

    VC写程序,最头疼的便是报表打印,虽然有各种报表控件可使用,但大多数是收费的,要吗不好用,或是兼容性低,或是与EXCEL不能互通,既然OFFICE中的EXCEL己是日常表格的大哥,何不在VC中直接使用EXCEL呢,但因受安全...

    Visual C++程序开发范例宝典(光盘) 第四部分

    10.9 其他格式报表打印 实例304 将DataGrid表格中的查询结果输出到Excel中 实例305 利用Word打印 实例306 利用Excel打印 10.10 控制打印 实例307 打印超长字符串自动换行 实例308 批量打印文档 实例309 实现...

    Visual C++程序开发范例宝典(光盘) 第八部分

    10.9 其他格式报表打印 实例304 将DataGrid表格中的查询结果输出到Excel中 实例305 利用Word打印 实例306 利用Excel打印 10.10 控制打印 实例307 打印超长字符串自动换行 实例308 批量打印文档 实例309 实现...

    Report machine 2.4

    - 报表增加选项(布缩放边框宽度),可以防止表格线变粗;; - Printer单元作了大量修改,Windows2000下支持自定义纸张. v1.1 - 对DataManger作了大量修改,现支持各种数据存取控件(直接支持BDE,ADO,IBX,...

    Delphi程序开发范例宝典(第3版).正解的

    共分19章,内容包括窗体与界面设计、控件应用、数据处理技术、图形技术、多媒体技术、文件系统、操作系统与window相关程序、注册表、数据库技术、sql查询相关技术、打印与报表技术、图表技术、硬件相关开发技术、...

    Visual C++ 程序开发范例宝典光盘源码 (第二版) 3/7

    第1章 窗体与界面设计  ...第10章 打印与报表技术  第11章 硬件相关开发技术  第12章 网络开发技术  第13章 Web编程  第14章 加密、安全与软件注册  第15章 实用工具  附录 技术要点对应实例位置

Global site tag (gtag.js) - Google Analytics