快速查看子表重复情况的方法二(简道云开发拓展技能)

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

前言:

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




 

快速查看子表重复情况的方法二


接上一篇介绍快速查看子表重复情况的方法(点击查看该博客链接),这里再介绍一种,上一种用到了聚合表,这一种直接在当前表单里用函数组合也能实现。不过有些复杂,如果不是万不得已,比如聚合表不够用了,建议最好不要用,为了实现这个小功能要耽误不少时间,不值当。这里之所以还介绍它主要是想和大家一起探讨一下简道云开发的无限可能,有些功能不是做不了而是可能你还没找到。另外,这里用到的一个思想在别的功能需求里也需要用的到,待以后有机会单独拎出细讲。

一、如下图建表




二、主表控件函数如描述信息处所示,子表控件函数如下:




子表单1.子表序号=(SEARCH(子表单1.当前时间时间戳截取右8位,当前时间时间戳截取右8位集合)-1)/8+1

子表单1.当前时间时间戳截取右8位=IF(LEN(子表单1.下拉框)>0,RIGHT(TEXT(TIMESTAMP(SYSTIME())),8),"")

子表单1.下拉框补位再截取右8位=RIGHT(CONCATENATE("0000000",子表单1.下拉框),8)

子表单1.提取当前下拉框之上下拉框的集合=LEFT(下拉框补位截取8位集合,(子表单1.子表序号-1)*8)

子表单1.出现重复的下拉框返回空值=IF(SEARCH(子表单1.下拉框,子表单1.提取当前下拉框之上下拉框的集合)>0,"",子表单1.下拉框)

子表单1.当前下拉框的个数=COUNTIF(SPLIT(下拉框集合,","),子表单1.下拉框)

子表单1.提取重复值下拉框的第一个=IF(子表单1.当前下拉框的个数>1,子表单1.出现重复的下拉框返回空值,"")

子表单1.重复下拉框加逗号=IF(AND(子表单1.当前下拉框的个数>1,LEN(子表单1.提取重复值下拉框的第一个)>0),CONCATENATE(子表单1.提取重复值下拉框的第一个,","),"")

子表单1.重复下拉框加逗号=IF(LEN(子表单1.提取重复值下拉框的第一个)>0,TRIM(CONCATENATE(IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[0],1,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[1],2,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[2],3,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[3],4,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[4],5,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[5],6,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[6],7,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[7],8,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[8],9,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[9],10,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[10],11,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[11],12,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[12],13,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[13],14,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[14],15,""),",")),"")


先看下表单测试外链:https://jiandaoyun.com/f/5aa63cb8864d94594fa1d405


三、测试过表单外链,接下来分析这种设置的实现路径。

1、针对第一个子表,先实现子表自动排序的功能,方法在别的文章里详细分析过:



2、再对下拉框补位再截取右8位写函数:RIGHT(CONCATENATE("0000000",子表单1.下拉框),8),如下图:





这个方法在做子表单自动排序的方法拓展里也用到过,不过这里用它实现的目的不一样。

3、对“提取当前下拉框之上下拉框的集合”控件写函数,如下:






这一步是整个方法的关键,通过对:LEFT(下拉框补位截取8位集合,(子表单1.子表序号-1)*8)
的分析发现,通过此函数可以让控件“子表单1.提取当前下拉框之上下拉框的集合”时刻提取当前子表下拉框之上所有下拉框补位再截取右8位控件值的集合。测试效果图如下:




为什么说这是关键一步?其实在介绍第一种方法的时候,就发现了处理这个问题的一个难点是:查找哪些子表出现了重复比较简单,把他们提取出来也比较简单,但每次查找和提取都是对每行子表同时执行,最后得出的结果依然是所有重复值都混到了一起,但如果通过这一步实现了可以在当前子表行内控件里提取之上所有子表下拉框值集合的效果,那就可以单独通过查找当前子表下拉框的方式确定当前子表下拉框值是不是第一个出现重复的,出现重复的下拉框返回空值,查不到的说明还未出现重复。

4、通过第3步的分析,可以如下图设置:




通过这一步就可以使得控件“出现重复的下拉框返回空值”控件里始终只显示下拉框值不重复的值和出现重复的值的第一个,后面重复的不出现。

5、再通过当前下拉框在整体下拉框中出现的次数,就可以提取重复的下拉框了,如下图。其中控件“当前下拉框的个数”在整体下拉框汇总出现的次数在上一种方法中介绍过了,不清楚的可以翻看上一篇博客。

6、此时已提取到了重复的下拉框,再通过如下设置在自表里提取相应的重复值所在子表行数,由于子表最多只能添加200行,且函数编辑框可输入超过6万行函数,所以此复杂函数是可以实现的,这里由于是介绍方法,就只写了15行子表的容量。如下:


子表单1.重复下拉框加逗号=

IF(LEN(子表单1.提取重复值下拉框的第一个)>0,TRIM(CONCATENATE(IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[0],1,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[1],2,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[2],3,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[3],4,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[4],5,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[5],6,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[6],7,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[7],8,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[8],9,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[9],10,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[10],11,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[11],12,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[12],13,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[13],14,"")," ",IF(子表单1.提取重复值下拉框的第一个==SPLIT(下拉框集合,",")[14],15,""),",")),"")

 

 


到这一步,重复下拉框的值及其相应行数都提取出来了,剩下的事情就比较简单了,后面的就不再累述了。如果不明白的可以随时联系作者沟通交流。

测试外链:https://jiandaoyun.com/f/5aa63cb8864d94594fa1d405



点击查看作者更多博文:
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】


 

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

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



不自谦能力概述:

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

 



 

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

 



编辑于 2020-12-2 18:28  

分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0回帖数 1关注人数 12922浏览人数
最后回复于:2020-10-21 21:34

返回顶部 返回列表