公司最近总有同事说SAP 自带的auto search 不好用。明明客户付款就是对应该客户名下的open items 从前到后几个billing。为什么总是凑不出来?
说到凑数,我立马想起ExcelHome 上有一个川香凑数,使用VBA递归剪枝技术,快速从一堆数据中凑出目标值。但川香凑数为了效率,需要先按照金额排序。因此无法使用。
于是最近几天我一直在想是否能用VBA 写一套凑数的逻辑,让银行回款核销更自动化一些。做财务的都知道,我们要清账的时候,不是随便凑一个组合就可以。而是按照一定的内在逻辑清账,比如按照欠款从前到后原则,相同订单或者相同发票一起清账等等。
目前的思路是,先不跳发票(Billing)的凑数,如果凑到就作为要清账的组合,如果没有凑出,则允许跳1张发票。仍然是凑出就作为清账组合,否则就继续允许跳2次,每次跳1张。按照一样的逻辑,后面还有跳1次2张发票。跳2次,1次1张发票1次2张发票,跳2次,1次2张发票1次1张发票。以及最后跳2次每次2张发票。
一开始为了尽可能匹配出组合,弄了上面6个逻辑。的确很多只要有正确方案的都凑出来了。但引起了下面2个问题。
1,有一些可能本来就不应该凑出结果的,给凑出了结果。
2,有了多个凑数方案,如何选择最优方案?这个问题我用前后权重和组合个数等作为衡量因子。计算了一个分数。最后选择分数最优的。
后面经过同事们的实践,发现为了保证准确率,还是不要弄那么多逻辑。最后只选择了 不跳,只允许跳1张。避免了凑出不该凑出的。也省去了多个方案的选择问题。
原来的自动只是自动执行F-28。而真正的清账时依靠SAP自身的auto seach。现在,SAP 的自动清账才真正是自动清账。自动率提高了很多。