为什么S/4HANA的销售订单创建会触发生产订单的创建

举报
汪子熙 发表于 2022/01/14 21:54:31 2022/01/14
【摘要】 调用S/4HANA销售订单创建函数SD_SALES_DOCU_MAINTAIN创建一个销售订单时,会触发生产订单的创建。销售订单的每个行项目对应一个独立的生产订单,SD_SALES_DOCU_MAINTAIN相当于CRM里的CRM_ORDER_MAINTAIN,在LOOP里处理每一个行项目:观察这个函数内部的调用栈,发现一个subroutine EIGENFERTIGUNG_BEARBEIT...

调用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

很好理解,生产订单抬头信息:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。