由于项目中遇到费用PR(科目分配K)使用BAPI_PO_CREATE1转多资产PO(科目分配组A并设置多个资产),系统会根据PR单个科目分配属性将PO中多数量分配强行调整为单个科目分配,结果出现多个资产只保留一个,并数量汇总。
以下是通过对代码分析的逻辑过程
由knt表的条目确认最终的科目分配数据,以下是KNT内表数据来源逻辑 | ||
步骤 层级 | 函数\子例程\类 | 说明 |
1 | BAPI_PO_CREATE1 | 主函数 |
2 | perform process_po | 1步骤子例程 |
3 | CALL METHOD ch_po->if_flush_transport_mm~start( cht_models ) | 2步骤调用类 |
4 | CALL METHOD super->if_flush_transport_mm~start | 3步骤调用类 |
5 | CALL METHOD me->flush_data | 4步骤调用类 |
6 | CALL FUNCTION 'MEPO_DOC_PROCESS' | 5步骤调用函数 |
7 | PERFORM fluss_setzen | 6步骤子例程 |
8 | CALL FUNCTION 'MEPO_DOC_ITEM_PROCESS' | 7步骤调用函数 |
9 | PERFORM item_process(saplmepo) | 8步骤子例程 |
10 | PERFORM item_process_main | 9例程子例程,lt_ekkn内表存放1步骤中的资产分类 |
11 | PERFORM mepo_item_fill_copy_accounts | 10步骤子例程 |
12 | CALL FUNCTION 'MEREQS_EBAN_LOOKUP' | 11步骤函数,通过PR+ITEM获取科目分配明细,这里lt_ekkn结果只会返回一条(单一科目设置),再对T_EKKN(返回表)打删除标记,并将lt_ekkn插入 |
13 | PERFORM mepo_accountings_process | 10步骤子例程,这里最终设置knt内容 |
结论:使用BAPI PR转PO,是强制要求科目分配保持一致,即PR是单个科目设置PO也只会有一个科目,如果PR有多科目设置,如两个,PO是三个也会按PR来
增强方案
在 FORM mepo_item_fill_copy_accounts 开头插入隐式增强,对特定的PR类型进行处理,使程序不会进入步骤12(即是按无PR转PO的方式进行处理)
ENHANCEMENT 1 ZIM_MM_PR_CONV_PO_01. "active version
BREAK SAPIV.
"解决使用BAPI PR转PO时,PR挂成本中心,转PO挂多个资产会导致PO只能挂一个资产,并且数量汇总 ivan 2022.11.03
IF REBAN-BSART = 'ZGPS' OR REBAN-BSART = 'FYNB'.
CLEAR reban-knttp.
ENDIF.
ENDENHANCEMENT.
备注
此方案是否有其他影响暂时未知,此增强在修改PO时也会进入。