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