当前位置: 首页 > news >正文

单据类报表的制作

在银行、财务、销售等系统中,常常会看到这样一类报表,它们一般是从原来的手工报表年代沿袭而来,需要打印在固定大小的纸张上,有着固定的样式要求。具体的形式包括各种登记本册和单据等。

在没有报表工具之前,这类报表大部分使用 Excel 进行制作,费时费力还不易维护,每次都独自加班到很晚(一首凉凉送给自己)。今天,我要带一带新的节奏,展现一下神操作来制作这类单据报表。

这次我们拿公积金单据来进行具体操作演示。下图就是公积金管理中心为各单位提供的缴纳单据,一般要求单据的每一页上方都有单位信息,中间填写单位工作人员的具体公积金缴纳明细,最下面是合计和签章信息。一个手工年代的怀旧特点是,每页只显示 7 条数据,多了填到下一页,一页不够 7 行也要补上空行,而且要和纸质单据格式大小完全对应上:

单据报表效果图

好吧,为了按时下班,让我们用润乾报表赶紧开始吧:

首先,根据效果图绘制报表样式和框架,如下图:
单据报表框架图
【实用小技巧】因为单据类报表基本都需要打印在固定格式的单据上,也就是俗称的“套打”,所以在设计报表的时候就需要根据实际的单据来设计。具体做法是:用扫描仪扫描单据图片,然后把图片调好大小,设置为报表背景图(报表属性–> 其他–> 背景图),这样就可以比着图片的边框来调整报表的单元格。

接着,设计固定数据区域:

根据业务需求,要求第 1 行到第 8 行、第 11 行到 14 行的内容每页都显示,那么我们需要通过行属性设置实现此效果:

1-8 行需要设计为分组表头。11 行到 14 行设置为报表尾。

设置完后如下图所示:
单据报表行属性设置图
然后,明细数据关联计算

业务要求按照流水号分组显示明细,所以我们添加上对应单元格表达式,并做数据关联
单据报表数据关联配置图
其中,

A1:=hnszgrkhdjqc.group(流水号; 流水号:1),合并单元格后前八行数据都跟随流水号动态取数显示记录,D4、D5 单元格如需从数据集取数,直接用取值表达式即可
B9:=hnszgrkhdjqc.select(id),并设置左主格为 A1,表示跟随流水号动态取数
C9:=&B9,并设置左主格为 B9,为序号实现方式的固定用法
D9 之后的单元格表达式我们可以直接使用取值表达式,即:数据集. 字段名称
最后,完美实现空行效果

实现每页固定显示 7 条明细数据,且不足 7 行时进行行补足,这需要分成两步:
单据报表补足空行设置图
1. 补足空行:

我们在第 10 行位置插入一行,编辑补足空行表达式 C10:=to((hnszgrkhdjqc.count()%7)+1,7),根据记录数判断是否补足,这里是需要跟随流水号进行判断的,所以需要设置 A10 的左主格为 A1。

特殊的,当记录数够 7 行的时候,也会进行扩展,这个时候需要将多余扩展行隐藏掉,具体实现方法如下图所示(利用隐藏行表达式):

隐藏行设置图

2. 对于每页固定 7 行的效果,我们可以通过行后分页 + 按纸分页效果实现:
<1> 在报表属性–》分页中设置为按纸分页,纸张大小根据实际业务需求进行设置
<2> 在 C10 单元格右侧单元格属性中找到“行后分页”属性配置,并增加表达式:if(D1%7==0,TRUE,FALSE),表示如果分组内的数据记录数能被 7 整除,那么就隐藏,否则就显示扩展后的数据

imagepng

好了,一个完美的单据类报表就完成了,我们来回顾一下其中遇到的问题和解决的技巧:

1. 每页的固定表头表尾显示

【技巧】设置行属性为分组表头和报表尾

2. 补足空白行,保证每页固定条数明细数据

【技巧】使用 to() 函数和动态隐藏行实现补足空白行,使用行后分页功能实现固定行数分页效果

至此,单据类报表制作就完成了,我们仅仅使用了润乾报表的左主格和行后分页功能就做好了单据报表,这一波操作 6 不 6?神马银行汇款单、开户单、仓库出入库单·····都 so easy,快来加入润乾大家庭,从此和加班 say byebye。


详情链接:http://c.raqsoft.com.cn/article/1533021830656?r=gxy

相关文章:

  • Spring Boot(1)
  • mac终端常用命令
  • ELK 使用小技巧(第 2 期)
  • Workbook导出excel封装的工具类
  • 勒索病毒防范方案-有韩立刚老师总结的非常规手段
  • js导出excel文件
  • Java枚举比较用equals还是==
  • vue两个组件间值的传递或修改方式
  • 如何在国内构建一个硅谷级的高效技术团队?
  • C#中的结构体与类的区别 (转载)
  • 如何用纯 CSS 创作一个记事本翻页动画
  • SpringBoot整合Angular应用第三弹-渲染RestAPI数据
  • CentOS从零开始部署Nodejs项目
  • d6
  • Jeff Bean谈Flink与流式处理的5大新发现
  • 分享的文章《人生如棋》
  • 【剑指offer】让抽象问题具体化
  • angular2开源库收集
  • CSS 提示工具(Tooltip)
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ES6之路之模块详解
  • HTML5新特性总结
  • JavaScript设计模式与开发实践系列之策略模式
  • Netty源码解析1-Buffer
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • rc-form之最单纯情况
  • React中的“虫洞”——Context
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue小说阅读器(仿追书神器)
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 我的面试准备过程--容器(更新中)
  • #13 yum、编译安装与sed命令的使用
  • (二)WCF的Binding模型
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (学习日记)2024.01.09
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .Net 垃圾回收机制原理(二)
  • .NET 中创建支持集合初始化器的类型
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .Net下的签名与混淆
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @property @synthesize @dynamic 及相关属性作用探究
  • []error LNK2001: unresolved external symbol _m
  • [2544]最短路 (两种算法)(HDU)
  • [AutoSar NVM] 存储架构
  • [BZOJ1008][HNOI2008]越狱
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例