为什么S/4HANA的销售订单创建会触发生产订单的创建
调用S/4HANA销售订单创建函数SD_SALES_DOCU_MAINTAIN创建一个销售订单时,会触发生产订单的创建。
销售订单的每个行项目对应一个独立的生产订单,SD_SALES_DOCU_MAINTAIN相当于CRM里的CRM_ORDER_MAINTAIN,在LOOP里处理每一个行项目:
观察这个函数内部的调用栈,发现一个subroutine EIGENFERTIGUNG_BEARBEITEN.:
EIGENFERTIGUNG的意思是Own production:
BEARBEITEN的意思是TO EDIT:
在这个增强里,硬编码了通过Production order maintain的函数CO_61_ORDER_EDIT去创建production order的逻辑:
在S/4HANA系统里我们观察到通过函数CO_61_ORDER_EDIT创建的生产订单会自动释放Release:
通过第86行的IF语句的条件检测不难找到原因。
变量PROFILE_TMP的类型为TCO43:
这个scheduling profile的配置在路径Production->Shop Floor Control->Master Data->Define Production Scheduling Profile里:
如下图所示:Automatic Actions标签页里的On Creation->Release勾选中,意思就是Production Order创建后自动释放。
题目这个增强的输入参数很恐怖,长长的一串:
CALL BADI l_badi->BEFORE_UPDATE
EXPORTING
IT_PIINSTRUCTIONVALUE = IT_PIINSTRUCTIONVALUE
IT_PIINSTRUCTION = IT_PIINSTRUCTION
IT_PMPARTNER_OLD = IT_PMPARTNER_OLD
IT_PMPARTNER = IT_PMPARTNER
IT_PRT_ALLOCATION_OLD = IT_PRT_ALLOCATION_OLD
IT_PRT_ALLOCATION = IT_PRT_ALLOCATION
IT_DOCLINK_OLD = IT_DOCLINK_OLD
IT_DOCLINK = IT_DOCLINK
IT_OPR_RELATIONS_OLD = IT_OPR_RELATIONS_OLD
IT_OPR_RELATIONS = IT_OPR_RELATIONS
IT_STATUS_OLD = IT_STATUS_OLD
IT_STATUS = IT_STATUS
IT_PLANNED_ORDER = IT_PLANNED_ORDER
IT_MILESTONE_OLD = IT_MILESTONE_OLD
IT_MILESTONE = IT_MILESTONE
IT_PSTEXT_OLD = IT_PSTEXT_OLD
IT_PSTEXT = IT_PSTEXT
IT_RELATIONSHIP_OLD = IT_RELATIONSHIP_OLD
IT_RELATIONSHIP = IT_RELATIONSHIP
IT_COMPONENT_OLD = IT_COMPONENT_OLD
IT_COMPONENT = IT_COMPONENT
IT_OPERATION_OLD_AFVU = IT_OPERATION_OLD_AFVU
IT_OPERATION_OLD_AFVV = IT_OPERATION_OLD_AFVV
IT_OPERATION_OLD_AFVC = IT_OPERATION_OLD_AFVC
IT_OPERATION = IT_OPERATION
IT_SEQUENCE_OLD = IT_SEQUENCE_OLD
IT_SEQUENCE = IT_SEQUENCE
IT_ITEM_OLD = IT_ITEM_OLD
IT_ITEM = IT_ITEM
IT_HEADER_OLD = IT_HEADER_OLD
IT_HEADER = IT_HEADER.
好在绝大部分内表都是空的。我们就一起来看看非空列表里包含的数据。
IT_STATUS
状态迁移。STAT是SAP系统状态ID,
其描述信息在表TJ02T里能查到。比如I0001状态的四位标识符是CRTD,意思是已创建-Created
INACT栏为X的状态代表该Production Order当前已经从该状态跳转到了其他状态。
上图的意思是该Production Order已经从状态I0001已创建,进入了状态I0002- Released已释放。
IT_COMPONENT
要理解Production Order component这个概念,我们先看一个已经创建好的生产订单。
下图component的意思是为了生产REDUCER_A这个成品,我们需要生产它的组件0010 COVER1, 0020 AXIS和0030 BASE。
那么REDUCER_A和其三个组件运行时的信息,就维护在内表IT_COMPONENT里。
IT_OPERATION
同理,一个生产订单可以包含若干生产工序,比如下图的Manual processing, Maching,Assembly和Testing,对应的系统状态都是REL - Released。
这些工序信息维护在内表IT_OPERATION里
IT_SEQUENCE
该生产订单的前置文档信息,即我们说的文档流 - document flow
IT_ITEM
待生产的成品明细,比如物料主数据ID,待生产数量,单位等。
IT_HEADER
很好理解,生产订单抬头信息:
- 点赞
- 收藏
- 关注作者
评论(0)