子表中合并同类项(简道云开发高阶技能)

楼主
简道云官方指定金牌服务商

前言:

  • 本文是2018-04-05发布在原简道云老社区的第12篇文章,当时简道云还没推出子表重复值合并函数  UNION ( 正式推出该函数是在本文发布的一年以后) ,本文是利用其它的方法解决的子表重复值合并功能,虽然有点复杂,但对于想深入学习简道云的人还是值得了解一下的,所以这次再重新发布出来。
  • 本文是我发布在帆软社区的第12篇文章,以后还有更多(技术类、管理类、理论类),为了不迷失不迷路,【请收藏这个链接集合】,以后所有博客都会汇集于此,敬请期待!

 


 
子表中合并同类项
 

上一篇讲解合并同类项的博客针对的是主表的(点击查看上一篇博客链接),这次的是子表中的合并同类项——即把子表添加的重复值去重。如下图所示:



这个功能用到的地方不少,特别是当做一些比较复杂的应用时,通过这个方法把子表中重复的值预先合并了,方便后面其他功能调用。(目前已知会用到的地方有,与bom表算量表相关的超200种配件的项目核价和报价,快速查看子表重复值情况等)

这个方法在另一篇博客(链接:https://bbs.fanruan.com/forum.php?mod=viewthread&tid=133393&page=1&extra=#pid717087)——如何快速查看子表重复值情况的方法2中已经使用过了,那里主要是为了实现快速查看子表重复的情况,没对该方法详细分析,这里就单独对这个方法做一个详细的介绍。


先来说下解决的思路:在子表当前行提取当前行之前所有子表的值的集合,在这个集合里查找当前行的值,如果查找到就显示为空,查找不到就说明是当前行目前的值是第一次出现,就显示该值。这里的难点是如何在当前行提取当前行之上的所有子表值的集合,如下图示意:




由于可以把子表字段“物品名称”值放进主表单行文本里,如下图:



结合以上两图及子表序号的问题,可以发现实现当前子表内提取之上子表值的集合,只要能做到截取主表字段“物品名称集合”除最后一位余下的左部分即可,比如去除上图中的F即可,于是就可以利用LEFT函数的截取功能。利用LEFT截取时需要考虑的一个问题就是截取位数的问题,上图中值的字符数都是一位,于是就可以结合子表序号实现截取,如下:

LEFT(物品名集合,子表单.子表序号-1)

(其中子表.子表序号实现的方法在盲人妻子的困惑中有详细讲解,这里由于既要考虑到计算量的问题又要避免重复值的问题,所以选择使用当前时间时间戳截取右八位的那种拓展方法,那里有详细分析,这里就不详细累述了,感兴趣的可以点击博客链接查看:

https://bbs.fanruan.com/forum.php?mod=viewthread&tid=133183&page=1&extra=#pid716307

但实际使用中物品名称不可能只有一个字符,而是多种字符数都有可能,那么上面这个LEFT函数截取的位数就不能再是“子表单.子表序号-1”了。物品名称字符数可能不相同,那就通过补位并截取的方式使得物品名称的字符数保持相同,这个思想在盲人妻子的困惑——子表自动编号的问题的博客里的拓展方法里使用过,具体请参见那篇博客后的拓展方法二,这是博客链接  https://bbs.fanruan.com/forum.php?mod=viewthread&tid=133183&page=1&extra=#pid716307

上图中用的是6位0做补位,截取的也是6位,这里考虑到更多可能性,就用10个0补位,LEFT截取的也是10位,函数写法如下所示:


子表单.物品名称补位截取右十位=LEFT(CONCATENATE(子表单.物品名称 ,"0000000000"),10)


再在主表中添加一单行文本控件命名为“子表中物品名称补位并截取后集合”,并把子表中控件“子表单.物品名称补位截取右十位”放进其函数编辑框内。


由于这里是补位并截取10位字符后的,所以当前子表行内提取之前子表值的集合的公式就要改为:LEFT(物品名集合,(子表单.子表序号-1)*10)。


综合以上所有分析,于是建表如下所示:



通过以上就可以实现物品名称该字段值在字段“子表单.提取当前行物品名称之上物品名称集合”中去掉重复值。
表单测试外链:https://jiandaoyun.com/f/5ac5f66d3c76d806cfc5ba11

总结:该方法中最重要的一步就是对物品名的补位并截取,再结合子表序号截取:LEFT(物品名集合,(子表单.子表序号-1)*10),这个方法有点类似于盲人妻子的困惑一文中的补位并截取拓展方法的反向应用,即知道了子表序号后,反向倒推并提取与当前子表行数相对应的。可见在实际开发中,当面对各种复杂情况时,能对过往已知的各种方法举一反三并做到灵活变形是多么重要。



点击查看作者更多博文:
1、盲人妻子的困惑——子表单自动连续编号的问题【发布时间: 2017-07-10】
2、让人又爱又恨的子表单【发布时间: 2020-10-08】
3、4种不同方法解决并发问题——函数触发机制分析【发布时间: 2017-12-05】
4、如何不借助聚合表调用子表单数据——解析一【发布时间: 2018-02-12】
5、如何确保子表添加字段值不出现重复【发布时间: 2018-03-11】
6、快速查看子表重复情况的方法一【发布时间: 2018-03-12】
7、致简道云的一封信!【发布时间: 2018-10-29】
8、快速查看子表重复情况的方法二【发布时间: 2018-03-13】
9、过滤敏感词或符号【发布时间: 2020-10-27】
10、快速准确调取上次采购价的方法【发布时间: 2018-03-18】
11、合并同类项【发布时间: 2018-03-19】


作者简介:【点击查看作者社区主页】

  • 牛中伟
  • 简道云官方连续6年指定定制服务商
  • 利用简道云帮客户实施项目近300个
  • 在原简道云老社区更新发布博客44篇
  • 新老社区博客总阅读量超50万,留言1000余条
  • 其中关于子表单的一篇博客收到用户打赏金额累计超7000元
  • 关注帆软社区我的这个账号,有新博客更新,第一时间收到提醒
  • 感谢大家一路以来的认可和支持,我会再接再厉,分享更多有价值的内容
  • 如有任何简道云方面的问题,欢迎留言区留言或单独私信给我,期待与你的交流



不自谦能力概述:

  • 精通子表单各类复杂用法
  • 谙熟函数特性、及各种函数组合用法
  • 独创利用简道云处理多级BOM的方法
  • 深刻理解进销存系统及进销存思维模型
  • 有一定的文本书写能力,总结复盘能力
  • 较强的抽象思维能力、逻辑思维能力、统筹能力
  • 对陌生行业陌生业务有快速的信息搜集整合和学习消化能力
  • 拥有一整套成熟有效的整理系统需求文档的思想、方法和工具
  • 很多用户感觉一直解决不了的问题在我们这里可能早已不是问题
  • 了解如何制定完善的报表分析计划,并借此洞察项目业务背景和业务痛点。
  • 理解系统与企业管理的关系,对如何在企业顺利推进管理系统落地有丰富经验和独到见解。
  • 有一整套经上百大小项目锤炼过的适合简道云这类低代码工具帮助客户实施项目的流程和方法,确保系统更好实施,更快部署,更高完整度交付,确保系统更符合客户预期,甚至超预期,给客户真正带来价值!

 

懂简道云的冬泳高手,关注我的帆软社区账号,交个朋友!
 



编辑于 2020-11-25 19:51  

分享扩散:
参与人数 +1 F币 +10 理由
云团 + 10 太棒了,给你32个赞,么么哒

查看全部评分

沙发
发表于 2021-1-2 00:30:10
为啥不用UNION(SPLIT(CONCATENATE(子表单字段),','))的组合呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

5回帖数 3关注人数 11828浏览人数
最后回复于:2022-2-23 13:50

返回顶部 返回列表