12 条回帖
03、设置【行号】为变化项,然后开始他的表演。把临时的总金额带进去。因为总金额只能允许它赋值一次,否则他就无法实现依次累减的效果。注意条件:【本表单.临时金额 = "" 并且 本表单.临时金额 = 常量.空】 04、到了累减这一步,临时编号起到很大的作用,设置了这个条件后,极大的限制了它去更新所有的数据,只让它更新我们目前操作的数据。 05、上面的操作已经减去了一次的金额,所以我们现在要把它减去的金额返回给分摊金额。我这里设置了一个IF语句,把全部需要判断的条件都融合在一起了。 条件:【if( 本表单.临时金额 >= 0 , 本表单.明细.金额 , if( 本表单.临时金额 < 0 并且 本表单.临时金额 + 本表单.明细.金额 > 0, 本表单.临时金额 + 本表单.明细.金额 ,0))】 |
+10
本帖最后由 dong 于 2017-5-26 18:20 编辑 【if( 本表单.临时金额 >= 0 , 本表单.明细.金额 , if( 本表单.临时金额 < 0 并且 本表单.临时金额 + 本表单.明细.金额 > 0, 本表单.临时金额 + 本表单.明细.金额 ,0))】 这里补充一下对此IF语句的说明:我们每一次减去了此单位所需要分配的金额后就开始判断赋值,判断条件就是判断现在的临时金额的值到底是【大于0】的还是【小于0】的,如果大于等于0,我们就把它自己所需要的金额返回给他,如果小于零并且还有一个条件就是,它如果为负数后,加上原来的金额后,成了正数,说明它分配后还剩下这么多钱,我们就直接把这剩下的返还给他,也就是公式中的【本表单.临时金额 + 本表单.明细.金额】,这个公式他们相加是可能大于0的,所以它大于0了我们就赋值它为【本表单.临时金额 + 本表单.明细.金额】,如果算出来还是负数,那就说明已经没有剩余的金额可以分配了,剩下的就全部赋值0. |
+10
本帖最后由 dong 于 2017-5-26 17:17 编辑 经验心得:这个简单的金额分摊,很考验人的思维方式,而且很抽象,我前期也是卡死在这里一天,最后才领悟当中的原理。 我们需要提取总金额,然后还要依次计算,依次赋值。 总结以下几点: 01、这个分摊给我的教训就是 我们要正确的设置填表公式中所有赋值操作中的顺序关系(卡死在这半天才醒过来),填表公式当中赋值的顺序,非常重要。一个完美的公式,可能会因为移动了一个顺序,而导致奔溃,所以程序走下去的先后关系非常重要,思路一定要清晰。 02、关于明细数据源的操作方式,如果没有对【显示窗口】打勾,默认是把数据源当中所有的数据都执行一边操作,这也就是为什么,对总金额设置好的值变化,总金额只变化了一次却能够让行号和临时编号变化多次的原理。这也是为什么这个要放在第一步来做的原因。 OK,完结,等有时间更新下其他的思路和其他的做法,这个做法相对较简单,不过也已足够对金额进行分摊的操作了。 |
+10
本帖最后由 dong 于 2017-5-26 18:12 编辑 现在分享另外一个思路,原理是一摸一样的,看看有没有能看到这个帖子,照着这个思路做一下。 我们先提取出 总金额,然后直接开始判断并且赋值,赋值后又把分摊金额提取出来,然后算出还有多少可以用来分摊的临时总金额,然后一直这样循环,还是原来的套路,用行号变化,不同的地方就是多了一个数据项,已总结金额。需要注意到以下3点:01、数据源的使用 02、填表公式中赋值的顺序 03、对公式中的判断、匹配条件、执行条件的设置 撸主过几天在发一个更简单实现这个分摊的方式 |
+10