业务背景:
OA与 SAP对接,要获取SAP的单价。初步测试时, 年月+物料+工厂+评估类 测试OK .
进一步测试时,OA传给SAP 只有年月+物料, 没有工厂 ,OA想批量获取价格。
然后双方就开始争执了。
** 对于SAP来讲,价格一定是在工厂维度的,如果没有工厂,取数会非常容易出错。
** **对于OA来讲,他需要的所有工厂的价格,而不是单一工厂。**
**其实呢,这个问题很好解决,双方开发都可以解决,只是不太愿意。
但凡业务顾问懂点ABAP知识,这个问题就非常轻松解决, ** **那就是循环(LOOP AT)** **。
**
** 啥是循环,我们从业务上分析。 **
**(一)** ABAP是没错的,你没有工厂,整个价格取数 很容易出错 。
**(二)** 既然工厂是必填的,我们是否可以 一个工厂一个工厂 取数, 然后合并 到一起呢?
**答案是肯定的** ,这就是前面讲的循环(每个开发非常熟悉,也就是上图中的LOOP AT ).
**(三)** 既然这么简单,为啥还会出争执呢? 存在即合理 。
首先ABAP顾问有个 **惯性思维** ,价格一定在工厂维度(说实在的没有工厂,FS也不太好写),没进一步思考。
其次,从OA开发上讲, ** 你给我全部就好了,我不需要再加工。再说了,我 ** 压根也不知道你有几个工厂。 ** **
**(四)** 问题解决。SAP把公司所有工厂传给OA,然后,OA去循环工厂,逐个工厂获取价格,最后合并。
获取工厂方法太简单了,你加个 DISTINCT (去重) 就好了。这个反而比你直接从工厂底表取更好(可能存在有工厂没交易的情况)
**注:** 你有没考虑过,循环工厂思路为啥没在FS里写清楚,而是要让双方开发去PK呢?
因为我们写FS不可能100%完美,一般都是边测边改。比如工厂,一开始没考虑到OA **会** ** 传 ** 空白 ** 值 **
(OA需要所有工厂价格),所以FS里也没写这块。后来有问题了,不是说你设必填就完事了。而要像前面那样,双方沟通。
** 小贴士:
** 循环也可以放在ABAP里。
2、如果OA传过来工厂有值,就把那一条放到T_weks (相当于表里只有一条,也就循环一次)
3、如果OA传过来工厂为空,就取MARD-werks , 去重复后放到 T_weks。
** 也就是说,无论你传值过来是单条还是为空,首先变成 T_weks 表,然后循环得到数据,再合并。 **
** 你一旦懂些ABAP开发,写FS就合理多了,也不用跟ABAP顾问掰扯了。 ** **
**
** **