先看看结果:
通过两张数据库表来实现,销售订单表,销售订单商品及劳务明细表。
销售订单新增、编辑、保存、删除时,同时影响这两张表内的数据。
这两张表是个整体,缺了谁都不行。
关键知识点:1,关系型字段;2,子表格/子表单;3,触发器。
一,列表销售订单,如下图:
未选择销售订单时的界面:
选择某销售订单时的界面:
二,添加销售订单,如下图:
三,编辑销售订单,如下图:
四,查看销售订单,如下图:
实现步骤:
第一步:建表,建字段,如下图:
建两个表:销售订单表,销售订单商品及劳务明细表
建销售订单表的字段:
建销售订单商品及劳务明细表的字段
要点:
(两个表,行业称之为单据头和单据体;也有称表单和明细、主表和从表、父表和子表…)
1,单据头和单据体分开建表;
2,分开建表后,在单据头表内增加一个“一对多”关系字段,如下图:
3,注意其他的关系字段:单据头上的客户、销售员;单据体上的商品及劳务;
4,(重要说明!)本次设计的销售订单,尚有众多业务需求未满足,但不影响本贴的分享目的,比如:
销售的业绩统计里,可能需要“销售分组”;
销售价格可能需要控制;
销售员或销售组的可销范围可能需要控制;
销售订单明细(表体)里的计量单位,要考虑多计量单位,否则无法面向企业业务;
销售订单明细(表体)里的税种、税率、计法,要考虑情况挺多,否则无法面向企业业务;
销售订单状态、变更…
…
第二步:建列表区块,如下图:
要点:
1,图中是两个列表区块,上面是表头表的区块;下面是“表体表”的区块;
2,上部的表头列表区块主动“连接数据区块”下部的表体列表区块,实现选择上部时,下部出现表体明细;
3,“用两个列表区块”是不对的!实属无奈,Nocobase 目前无法在一个列表区块内实现多层列表;
第三步:建区块,实现订单新增/订单编辑,如下图:
要点:
1,添加区块 和 编辑区块 可以共用一个表单模板;
2,(重要!)以表头表即销售订单表为主视角,建立表单区块;
3,表单区块内的一对多关系字段“商品与劳务明细”,其字段组件要改为子表格,如下图:
4,针对这个“子表格”,继续配置其字段。
5,一对多关系字段“商品与劳务明细”的字段组件,除了选择子表格外,还可以选择“子表单”,结果如下图:
6,用哪个?子表单?子表格?答案是:
极少数场景下,子表单是更适合的;
99%场景下应该用子表格,但 nocobase 子表格的能力需要补充。
第四步:修缮。
1,将表体的一些数字汇总到表头,如下图:
配置方法,如下图:
2,销售订单编辑时,如果在子表格内删行,实际只是清空了外键,并没有真正的删除数据行,会导致这一行明细数据成为“孤行”,必须解决,如下图:
会造成如下图的孤行:
官方的解释是:
设计功能“允许增加已有数据”,如下图:
实际上,这个说法并不坚固,原因有:
1,至少应该是可以选择真删除还是假删除,因为,绝大多数场景下的表体脱离表头是无意义的;
2,当设置关系字段的删除关系为 cascade 时,删除销售订单会删除所有子表格明细行,这与编辑时删除单行的表现(假删除)不一致。
解决方案:
暂时只能通过在数据库表上增加触发器解决。(工作流能力欠缺,无法实现。)
(触发器知识略,需要请私联。)
主要内容如上,下占一楼总结下 Nocobase 在这一块的相关的能力欠缺。