大型ERP系统必不可少的通用性功能:自定义单据
「自定义单据」功能相对比较独立,应用场景也很广泛,可以在ERP、电商平台、内容管理、表单收集等多种类型的软件系统中通用。本文重点介绍了「自定义单据」功能的设计,与大家分享!
B端企业客户的管理模式大都极具个性化,尤其是报表和单据的格式最为复杂多样。因此,大多数ERP软件厂商都会选择开发「自定义单据」和「自定义报表」服务程序,来应对客户多变的业务需求。
一、为什么要做「自定义单据」功能
- 从业务属性上划分,单据的种类有财务单据、物流单据等等;
- 从业务功能上划分,财务单据又包括报销单、借款单、还款单等;
- 报销单根据报销类型,又可以细化到差旅费报销单、办公费报销单等;
- 同样地,差旅费报销单又有市内交通费、外埠交通费之分;
- 外埠交通费还可以细分到飞机票、火车票、汽车票……
总之,B端客户的需求只有你想不到的,没有业务方做不出来的。
这些分类与划分代表一家企业对于自身业务的管理细度。以财务管理为例,有的企业只细化到报销单,留给员工很灵活的费用报销空间,这样可以赋予下级单位自主性,快速响应突发事件。
有的企业可能会细分到费用类型,按照报销人的级别控制可报销的金额,这样可以大幅减少管理费用的浪费。
但作为乙方的软件企业,不可能为每一家客户都单独做一个定制版本,这样不仅不利于后期维护升级,还容易造成自身版本管理的混乱。
因此,「自定义单据」与系统的公共数据管理和系统安全一样,作为一项使用频率较高的基础管理模块,需要纳入产品升级规划中。
二、「自定义单据」具体要实现什么
- 实现用户自定义单据界面:如单据页面中内容的格式与显示方式。
- 实现对各类单据的操作功能,如增、删、改、查、导出打印等。
- 实现各业务部门之间的数据共享:如填写报销单时,实时反馈是否超出当期可用预算;在填写还款单时,能够选择前置借款单;同时也包含对于信息的提取(如发票的OCR识别、扫码识别;系统初始化时对历史单据台账的批量导入)。
- 实现根据员工权限限制功能操作和数据访问:某些单据页面、操作功能对没有权限的用户屏蔽,如仓管部门只能设计出库单、入库单,不能设计合同和物流单据。
三、「自定义单据」的业务流程
如图所示:
(1)管理员
管理员或软件实施人员根据企业需求,配置某项业务流程中所需的业务单据(如报销单、借款单、还款单等),以及单据包含的信息(单据属性、流程定义、入口定义、字段信息、功能键按钮等);
(2)开发人员
- 开发人员根据业务需求,在数据库中定义存储单据页面数据字段的表结构;
- 当管理员使用「自定义单据应用程序」对单据页面进行增删改查等操作时,实际上是对字段信息(页面标识、文本框、单选框、附件上传、功能键按钮等)进行相应的操作。
(3)普通用户
- 系统应用程序和「自定义单据应用程序」会同时部署在同一台服务器上;
- 当普通用户登录系统后,系统会通过识别用户角色和拥有权限来限制对单据页面的操作和数据访问;「自定义单据应用程序」也会实时监控用户通过浏览器发送的请求;
- 当服务器接收到用户请求后,服务器会向数据库转达这一请求,从而读取并将数据库中相关单据及页面信息实时反馈到浏览器(用户终端);
- 此外,系统应用程序还可以内置一系列有效性校验规则,当用户输入信息与数据类型不符,或输入信息不满足预设条件时,能够弹出错误提示帮助用户改正。
四、「自定义单据」的功能框架与界面草图
1. 权限管理和系统管理
- 权限管理主要指:根据用户权限对功能操作和数据访问进行限制,常见的方式有隐藏菜单、隐藏按钮、字段屏蔽等;
- 系统管理主要指:对系统的日常维护。如数据的导入导出接口、日志更新、数据库同步等;
以上两部分一般都沿用系统原有设计,此处不再展开介绍。
2. 提示信息管理
- 用户在进行实际操作时可能会违反系统操作规范,也可能遇到系统本身出错的情况,因此需要为用户提供错误信息提示,以便帮助用户更正操作;
- 该部分设计工作因产品而异,大型ERP产品会以接口的形式,把错误信息提示的编辑功能放在前端,管理员可以自定义信息提示;小型ERP一般都是写死在系统;
- 不过是哪种情况,产品经理都需要把给予提示的内容整理出来,说明何种情况下需要提示,提示什么内容,给予何种引导(最好以表格的形式来整理,看起来比较清晰)。
3. 单据模板设计
单据模板设计是「自定义单据」功能最重要的部分,决定了用户在前端会看到什么,如何操作。如下图所示:
「单据模板设计」一共分为三部分,也可以说是由三个页面(或弹窗)组成:
1)列表页
首先是列表页,通过该页面,用户可以查询并看到已设计的单据模板;同时该页面还为用户提供了「新增」「编辑」「删除」等操作按钮。
需要注意:
- 虽然提供删除按钮,但是已经生效过的单据模板是不可以删除的,可以通过取消对所有用户的授权来达到废弃单据的目的;
- 在编辑已生效单据时,只可以增加字段,不可以删除字段;可通过字段维护页面的“隐藏字段”来达到“删除”的目的。
2)单据模板设计页面
单据模板设计页面可以直接放在菜单栏,也可以做成弹窗的样式隐藏在「列表页」之后。该页面主要包含五个部分:
- 模板定义:模板属性(单据名称、单据类别、单据首位、页面地址等);流程定义(单据的审批流程);入口定义(通过哪个菜单或按钮可以访问单据页面)。
- 字段维护:即单据内包含的字段名称(含控件类型、占位规格、校验规则等);提供增、删、改、排序等操作;点击“编辑”,跳转至字段维护的详情页。
- 组件维护:即包含多个字段的组件维护,提供“新增”“展开”等交互按钮;例如一张报销单可能包含多笔费用,而管理员并不知道每个报销人会报几笔,因此需要提供一个“新增”的按钮,报销人可以自行选择新增几笔费用(一笔费用由多个字段组成)。
- 字段查询:一张单据可能包含很多字段,因此需要提供一个简单的查询功能。
- 单据预览:可以放置在操作界面的右侧,也可以提供“预览”按钮,方便用户随时查看自己设计的单据外观。
3)字段/组件/功能按钮维护页面
该页面包含的信息相对比较琐碎,因为涉及到数据库设计,非技术出身的产品可能搞不定。建议提前跟开发沟通设计思路,待数据库设计初步完成后再进行具体的界面设计。
关于界面草图中具体名词的解释,本文不再赘述。大概可以理解设计思路即可,具体情况要视业务需求而定。
字段维护
组件维护
功能按钮维护
作者:产品路漫漫;微信公众号:产品路漫漫
本文由 @产品路漫漫 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议
您好,请问原型文件能分享一下吗,有偿。
请问下:自定义表单,是一个表单对应一个数据库表,还是所有的表单都是一个数据库表?
其实我没太明白你定义的“数据库表”是啥意思,是单张表,还是有父子关系的组表(实体表?)……跑题的话再接着讨论哈~
1、文章说的自定义表单,其实应该是“自定义表单模板”,一般只能由管理员来设置,所以应该有两个概念“表单”和“表单模板”;
2、如果把表单模板的设计看做“数据库设计”,那么这张“表”应当由多张“子表”组成,比如定义单据类别的表、定义数据处理类别的表、定义功能按钮的表、定义字段的表等等,这些“子表”共同组成一张大表,可以给它命名为“页面表”;
3、经过管理员编辑的“页面表”及其“子表”,就是前端所说的“单据模板”;
4、普通用户在填单据时,选中一张“单据模板”填写信息,数据库会分别将该用户填写的信息记录在“页面表”和它下面的“子表”中(不是只记录在单张表里)。
5、最后就是为单据列表或查询按钮赋值,分别返回所需的数据。
我就是在想,最后填写完表单后数据是怎么存储的。之前看过一个比较老的方案。每涉及一个自定义的表单,就会在数据库中创建一张表来记录别人提交的数据。但是我又感觉这种方案会不停在数据库中建表,感觉不优雅。所以有此一问