ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SAP生产订单全流程:创建、下达、发料、报工、入库与冲销

SAP生产订单全流程:创建、下达、发料、报工、入库与冲销 1. 先把业务跑通生产订单在整个链条里的位置做SAP PP的人都有一个共识生产订单是整套制造业务的承重墙。物料需求计划跑出来的是计划订单采购负责把原材料买回来SD负责把成品卖出去但真正把料、工、费三者绑在一起、并让财务能看到一笔笔实际成本的只有生产订单。我见过不少刚入行的顾问MRP、BOM、工艺路线都能讲一到CO11N报工、261发料就开始含糊原因很简单——他没有把创建-下达-发料-报工-入库当成一条完整的业务链去理解而是当成五个孤立的事务码在背。这篇文章我就按这条主线把每一步在干什么、系统在背后改了什么数据、以及最容易被忽略的反向流程一次讲透。需要提前说明的是标题里的SAP生产订单默认指的是离散制造里的生产订单Production Order事务码以CO开头如果是流程行业用的流程订单Process Order主体逻辑一致但确认用COR6N、工序界面略有差异配置点也不同。本文以离散制造为主涉及差异的地方我会单独标出来。另外这篇内容适合三类人看刚接手PP模块、需要把流程串起来的新手做运维支持、天天处理订单不能发料报工报不进去这类单据问题的顾问以及需要理解成本来源的FICO同事。你不需要把每个配置点都背下来但这条主线的顺序和数据流向必须刻在脑子里因为90%的生产订单报错根源都在顺序上。1.1 为什么SAP非要把生产做成一张订单很多从轻量ERP转过来的人会问为什么不能直接在生产工单上打个勾就算完事因为SAP的设计逻辑是一切可归集的对象都要有一个成本载体。生产订单本质上就是一个临时的成本归集容器BOM告诉你理论上要投多少料工艺路线和作业价格告诉你理论上要投多少工时这两者算出来的是计划成本而261实际发了多少料、CO11N实际报了多少工时构成实际成本。两个数字一碰差异就出来了——是料用超了还是工时超了还是价格涨了系统能一层层往下拆。理解这一点你就能想明白后面很多看起来多余的操作。比如为什么要下达才能发料因为未下达的订单还处于可自由修改的状态BOM可能还要调、数量可能还要改如果这时就允许投料一旦订单结构变了账就乱了。再比如为什么要有TECO技术完成因为订单只要还挂在系统里是已下达财务就认为它还在生产中月底就要给它算在制品WIP。TECO就是告诉系统这批活儿干完了别再算WIP了把差异结掉。这些都是围绕成本口径设计的不是流程洁癖。1.2 创建订单之前必须落地的四类主数据订单创建失败八成不是CO01的问题是主数据没准备好。我习惯按下面这个顺序自查主数据关键事务码在订单里的作用最常见的坑物料主数据成品MM01提供MRP视图、工作调度、会计视图MRP类型没维护跑不出计划订单会计视图没维护报错物料未评估BOMCS01决定组件清单和用量有效期没覆盖订单日期替代BOM选择ID没配工艺路线/定额工艺路线CA01/CA11决定工序、工作中心、标准工时工作中心没维护成本中心报工时算不出作业价格工作中心CR01提供产能、作业类型、公式作业类型没在KP26里维护价格成本为0这四样缺一样订单要么建不出来要么建出来是空壳——没有组件、没有工序、成本算出来是零。我个人的习惯是拿到一个新工厂先用CS03随便挑一个成品把BOM展开看一眼再用CA03看一眼工艺路线最后开MD04看这个物料的毛需求跑得对不对。这三步花十分钟能省掉后面两小时的排错。1.3 订单类型与编号范围看起来是配置实际影响操作订单类型Order Type是整个生产订单的控制中枢事务码OPJH旧称OPJH/OPJQ一带里能看到它挂了十几个参数文件。对日常操作影响最大的有三个。第一个是编号范围。订单号是内部给号还是外部给号决定了你在CO01界面能不能手动输订单号。有些企业的车间习惯用自己的工单号那就要配外部给号同时注意号码段的宽度输错长度直接报号码不在区间内。第二个是可用性检查。订单类型上挂了检查规则Checking Rule再配合物料主数据的检查组Checking Group决定了下达时系统检查哪些库存、是硬性报错还是给个警告。很多人遇到下达时提示缺料但还能下或者死活下不了就是这里配的。第三个是结算参数文件和结果分析码。前者决定订单结算到哪个成本对象通常是CO-PA或者差异科目后者决定在制品怎么算。这两个是FICO和PP的交界地带出问题通常表现为月底结算报错未找到结算规则。提示生产订单一旦创建订单类型是改不了的。如果你的项目需要试制订单和量产订单走不同流程比如试制不结算差异务必在蓝图阶段就把订单类型设计好后期改起来要迁移数据。2. 创建与下达CO01、CO40、CO41到底该怎么选创建订单有三种典型路径选哪条取决于你的生产模式。**手工创建CO01**适合单件、小批量、非标定制订单数量少、手工补单多**计划订单转换CO40单个、CO41集中**适合走MRP的批量生产这是最标准的制造业姿势按销售订单创建CO08适合项目型/按单设计ETO的场景订单和销售订单强绑定。还有无物料订单CO07主要用于维修、返工这类没有独立物料编码的活儿。我见过不少现场为了图省事明明跑了MRP却还在用CO01手工开单结果就是计划订单和实际订单两套数据并存MRP的净需求算不准库存一直虚高。这不是操作问题是模式问题。如果你的产线是重复性大批量其实还可以考虑重复制造REM事务码MFBF报工但那是另一条技术路线本文不展开。2.1 CO01手工建单哪些字段必须一次填对打开CO01界面看着简单但有几个字段一旦填错后面全是麻烦。物料 工厂是订单的根填完之后系统会去带BOM和工艺路线。这里有个细节如果同一物料在同一个工厂有多条有效的工艺路线系统会弹任务清单选择让你挑一条不弹的话就是自动选了。如果发现带出来的工序不对别急着改工序先回去看CA03里的有效期和用途Task List Usage。订单数量填的是要生产的成品数量注意基数是物料的基本计量单位。如果BOM里的组件用量是按100件成品算的你填1000件系统会自动按10倍展开。开始/结束日期会由排产自动倒推但手工建单时最好自己填一下基本开始日期和基本完成日期让它触发排产。日期填反了系统会警告但很多人直接回车跳过最后MRP算出来的交货期是错的。订单类型在保存前还可以改保存后就不能改了这是最后一个后悔的机会。保存后系统给出订单号和状态CRTD已创建。此时订单是可修改状态BOM、工序、日期、数量都能调。但在CRTD状态下261发料和101收货都会被系统拒绝提示订单未下达。这不是配置问题是系统的硬性逻辑。2.2 CO40/CO41转换计划订单MRP跑完之后的一步MD01/MD02/MD03跑出计划订单存在PLAF表之后用CO40单个转换或者CO41集中转换输入工厂和物料范围把它转成生产订单。转换的时候系统做几件事把计划订单的数量、日期、BOM、工艺路线带到生产订单里回填计划订单的状态然后生成订单号。这里有两个实操点值得说。一是转换前先检查计划订单的日期。计划订单的日期是MRP根据提前期倒推的如果提前期In-house Production Time维护得不合理转出来的生产订单开始日期可能已经在过去导致排产全部告急。我处理过的项目里物料主数据MRP2视图的提前期被随手填了个1天结果所有订单都要立即开工车间天天救火。二是集中转换后一定要抽检。CO41一次性转几百张单里面但凡有几张因为缺BOM、缺工艺路线变成了空壳订单你不点进去看是发现不了的。我的做法是转完之后用COOIS按订单类型创建日期拉一张清单重点看是否缺少组件这列。2.3 下达Release这个动作到底改变了什么下达CO02 → 功能 → 下达或者CO05/COHV批量下达是整条流程的分水岭。从系统角度看它做的不只是改一个状态而是三件事第一把系统状态从CRTD改成REL状态码I0002写进JEST表。这个状态是硬检查发料、报工、收货三件事都要求订单处于REL。第二释放订单的预留。订单创建时组件的需求以非释放的预留形式存在RESB表下达后预留进入可用状态MRP在算毛需求时才会把它当真实占用。这也是为什么未下达的订单在MD04里看起来不算数。第三触发可用性检查。检查规则会判断组件库存够不够不够的话订单会带上MSCK物料短缺状态。注意缺料状态不会阻止下达也不会阻止发料除非你配了硬性检查它只是给你一个预警。很多现场以为缺料状态不能开干其实只是提示。注意已下达REL的订单SAP标准功能里没有撤销下达的按钮。如果你发现订单下错了正确的做法不是找按钮而是先冲销所有已发生的业务发料、报工、收货再打删除标记重建。TECO技术完成是可以撤销的这点后面会讲别把两者搞混。2.4 可用性检查与缺件清单别等发料时才发现没料每天上班第一件事很多计划员会打开MD07库存需求清单集中显示输入工厂和物料范围一次性看所有物料的库存/需求缺口。这个事务码比MD04单个查高效得多尤其是物料多的时候一屏就能把红字缺料挑出来。再配合两个工具CO09做单个物料的可用性检查CO24拉缺件清单Missing Parts List它会直接告诉你哪张订单缺哪个组件、缺多少。我习惯每周一早上跑一次CO24把缺料订单导出来发给采购比等到车间领料时才发现缺料要主动得多。这里有个容易被忽略的细节可用性检查的检查范围受订单类型、物料主数据的检查组、以及检查规则共同影响。有时候明明库存够系统还是报缺料多半是因为检查范围只看了某个特定的库存地点比如只检查车间线边库而实物在别的库位。这种情况下要么改检查规则要么调库存地点别硬压着系统走。3. 发料与报工把物料和工时变成成本订单下达之后车间就可以开工了。这一步的核心动作有两个261发料和CO11N报工。前者把原材料从库存转到订单成本上后者把人工/机器工时转成成本。这两个动作做对了订单的实际成本才有意义。3.1 261发料的三种打开方式发料最标准的做法是MIGO移动类型选261然后输入生产订单号系统会把订单剩余需要发料的组件清单带出来。除此之外还有两条路径一是MB1A 261这是老事务码功能是MIGO的子集但胜在快很多老人还在用二是CO27拣配清单它不直接过账而是生成一张该领哪些料、领多少的清单交给仓库按单备料仓库再用MIGO集中过账。第三种是MB25查预留先看订单的预留清单和已发数量确认哪些还没发。发料时系统的动作是借 生产成本-直接材料贷 原材料同时把金额写进订单的实际成本COEP表。所以发料金额的准确与否直接决定订单的材料差异。这里最常见的两个问题一是物料价格是移动平均价采购价格波动大导致同一张订单不同批次的发料单价不同二是BOM用量给的是理论值实际投料超了BOM多出来的部分如果还用261发就会形成用量差异——这是正常现象不用慌差异就是在结算时体现的。实操心得261发料时界面上有个库存确定的勾或者说系统自动做库存确定它会按工厂的库存确定规则决定从哪个库存地点、哪个批次扣账。如果发现扣错了库位或者批次先别怪操作员手快去检查一下库存确定的配置OMB2/OMM1一带。批次管理的物料更要小心261带批次发出后如果批次错了后续追溯到客户就会断链。3.2 报工CO11N字段逐项拆解CO11N是单个报工界面CO12是集中报工日常用得最多的是CO11N。界面看着字段不多但每一个都直接影响成本我逐个说。订单号 工序号确定报哪道工序。如果订单有多道工序只报其中一道系统会更新那道工序的确认数量。产量Yield to be confirmed这道工序合格完成了多少件。这是系统用来推算后续工序可用数量的依据。废品Scrap quantity要注意区分工序废品和订单废品。工序废品只影响这道工序的产出订单废品会直接减少订单的总可用产出。我们做过的项目中车间把可返修的不良品直接报成废品结果成品入库数量对不上改回去很麻烦。返工数量Rework报了返工系统会要求后续再有一道确认去把它收尾。实际工时/作业数量这是成本的关键。每个工序会带出若干作业类型比如人工工时、机器工时你需要填每个作业类型的实际确认数量。系统拿这个数量乘以成本中心在KP26里维护的作业价格算出订单的实际加工成本。确认类型部分确认Partial还是最终确认Final。最终确认一旦保存工序状态变成CNF同时会触发自动收货如果配了和里程碑开票如果和SD联动。这一步是不可逆的除非用CO13取消。过账日期报工的日期决定成本落在哪个会计期间。月底最后一天报工和次月第一天报工成本归属完全不一样。这是月结期间最容易起争执的地方我的建议是月结期间把报工过账日期锁住和财务约定一个截止时间点。3.3 反冲与自动收货省事的地方也是藏坑的地方反冲Backflush是指报工时系统自动把组件按BOM用量扣账操作员不用单独去做261。这个功能在重复性、大批量生产里能省下大量工时。它的开关在几个地方组件的物料主数据MRP4视图有反冲标识订单组件行上会继承这个标识也可以逐行手工勾另外工序的控制码比如PP01/PP02/PP03里也有相关设置。自动收货是指报工时系统自动生成101把成品收进库存。它由控制码里的自动收货标识决定同时OPK4确认参数里可以设默认值。反冲自动收货组合起来操作员只做一件事——输个数量点保存系统自动完成扣料入库效率极高。但这里有两个坑必须说清楚。第一个坑是反冲失败。反冲扣料的时候如果库存不够、批次过期、序列号没维护货物移动不会成功但报工本身是过了的。结果就是报工成功、扣料失败两条数据脱节。这些失败的记录进AFFW表需要到COGI事务码里去处理可以单条处理也可以点后台处理批量重试。如果你发现订单实际成本里材料费明显偏低第一件事就是查COGI有没有积压的失败记录。我见过一个项目上线第一个月COGI积压了两千多条没人管月底成本全乱套了。第二个坑是重复扣料。如果反冲已经自动扣了料操作员不放心又手工做了一次261就变成双重投料材料成本虚高。这个错误在月结做成本分析时才被发现回溯起来非常痛苦。防范的办法是反冲物料的组件行上明确标注同时在培训时反复强调勾了反冲的料不要去MIGO里再发一次。3.4 报工之后成本雏形和差异的雏形一个订单报工完实际成本基本上就成型了成本构成数据来源事务码直接材料261/反冲的实际发料金额MIGO、COGI直接人工作业类型人工的确认数量 × 作业价格CO11N、KP26机器/制造费用作业类型机器确认数量 × 作业价格CO11N、KP26外协加工费采购订单收货541/542MIGO间接费用成本核算单里的间接费用率KKF6N想看订单的实时成本用KKBC_ORD订单成本分析或者KOB1实际成本行项目最直观。KKBC_ORD能把计划/实际/差异并排显示我排查成本异常基本都从这里入手先看材料差异大不大再看作业务差异最后往下钻到具体行项目。4. 入库、技术完成与结算订单的收尾动作生产干完了成品要入库订单要收尾。这一段是PP和FICO耦合最紧的地方也是月结时最容易卡住的环节。4.1 101入库的几个细节入库用MIGO移动类型101输入生产订单号系统会带出可收货数量一般是订单剩余未入库数量。过账后的会计影响是借 库存商品贷 生产成本-产出同时订单收到一笔贷方冲减实际成本。几个细节收货数量可以超订单数量只要没超出物料主数据里的超额交货容差。有些现场会利用这一点解决多生产了几件的问题但财务上多出来的部分处理起来麻烦建议能改订单数量就改订单数量别靠容差硬收。质检库存。如果成品启用了QM101收货时会进入质检库存要等QM的UD使用决策事务码QA32做完才转到非限制库存。这时候订单可能已经收货完成但库存还不可用计划和销售要提前知道这个时间差。序列号管理。序列号物料在101时要维护序列号可以用自动生成也可以手工输。这里要特别注意反向流程里取消入库102时序列号需要被释放否则这批序列号会一直挂在订单上后续无法重复使用。如果同一个序列号要重复使用比如返修后重新入库必须先把102处理干净。批次管理。101入库通常会生成新批次如果是自动批次批次的特性如生产日期、有效期来自订单。批次和序列号一样反向操作时要注意状态。4.2 状态流转什么时候能做什么一张表说清这张表是我自己整理后打印贴在工位上的比翻文档快得多。系统状态状态码含义允许的关键操作禁止的操作CRTDI0001已创建改BOM/工序/日期/数量、可用性检查261发料、CO11N报工、101收货RELI0002已下达261/131发料、CO11N报工、101收货大幅改BOM需特殊处理PCNFI0003部分确认继续报工、继续发料、收货-CNFI0004已确认继续发料、入库-PDLVI0005部分交货继续入库-DLVI0006已交货结算差异-TECOI0007技术完成结算、成本分析、取消冲销新的发料/报工/收货CLSD-已关闭仅查询结算DLFL-删除标记仅查询所有业务操作LKD-锁定仅查询所有业务操作想直接查订单当前状态可以SE16N看JEST表对象号从AUFK.OBJNR取只筛INACT为空的记录就是当前有效状态。 快速查订单状态先从AUFK拿到对象号 SELECT SINGLE objnr FROM aufk INTO DATA(lv_objnr) WHERE aufnr lv_aufnr. 再查JEST里的活动状态 SELECT stat FROM jest INTO TABLE DATA(lt_stat) WHERE objnr lv_objnr AND inact space.状态码I0001、I0002这类对应的文本存在TJ02表里想看得更友好一点TJ02T里有各语言的状态描述。4.3 TECO、CLSD与月结结算**TECO技术完成**是告诉系统这批活干完了。它的意义有两个一是停止订单继续接收新的发料和收货二是让财务开始给订单做最终结算不再算在制品。操作上用CO02打开订单功能 → 限制处理 → 技术完成。批量的话用COHV。TECO是可以撤销的CO02 → 功能 → 撤销技术完成。但撤销之前要确认没有财务已经结算过否则会报订单已结算之类的问题。**CLSD关闭**比TECO更彻底关闭之后连结算都不允许了一般是财务结完账、确认这个订单生命周期结束后才做的。实务中我不建议轻易用CLSD因为一旦关闭想重新打开要走特殊处理而且系统会有一堆前置检查比如WIP必须为0、差异必须结清。很多项目干脆就不关闭让订单停在TECO状态只是定期归档。结算KO88单个、CO88集中、KO8G批量是月结的固定动作。逻辑是这样的如果订单已经TECO或DLVKO88把订单归集的实际成本与贷方入库的产出金额之差结转到差异科目或CO-PA如果订单还没完工没有TECO也没有DLV则计算方法要把未完工部分算成在制品WIP事务码KKAO算WIPKO88再做结算。顺序不能反先KKAO再KO88反了就会报WIP没算。提示结算报未找到结算规则是最常见的月结问题。根因一般是订单类型的结算参数文件没配或者物料主数据/订单上的结算接收方成本中心、CO-PA、订单本身没维护。用KOB1或者CO02里头的结算规则页签看一下缺什么补什么。5. 反向流程顺序错了前面全白干反向流程是这篇文章里我最想重点讲的部分因为它是现场问题的高发区也是最考验顾问对流程理解深度的地方。核心原则只有一条后做的先冲先做的后冲也就是标准的后进先出LIFO。为什么因为每一步操作都在系统里留下了相互依赖的数据。成品已经入库了才能发货给客户料已经发了才能报工报工了才能入库。你要退回某个中间状态就必须把所有建立在它之上的操作全部撤掉否则数据就会出现逻辑矛盾——比如库存已经是负数或者成本记录和实物对不上。5.1 正确的冲销顺序假设一张订单已经走完了全程发料→报工→入库→部分发货给客户现在发现这批货有问题要全部推倒重来正确的顺序是先冲销对客户的发货如果是SD发货用VL09取消交货单过账再用102冲销成品的入库用CO13取消报工如果报工时带了自动收货取消报工会同时冲销自动收货用262把已经发出去的原材料退回库存清理预留、打删除标记或者重建订单。如果只做到第2步就停手订单状态会停留在已交货或者部分交货后续想TECO是TECO不掉的因为系统认为还有业务没冲干净。我遇到过最典型的一个案例车间发现某批成品有质量问题直接做了102把货退回来但没有取消报工。结果订单的实际成本里工时还是按原来的数量算的工时成本虚高而产出已经被冲掉了订单出现巨大差异。财务一查最后还得补做CO13。5.2 取消入库102和按凭证冲销取消入库有两条路MIGO 102输入生产订单号系统带出可冲销的收货数量适合有明确订单号的场景。MBST按物料凭证号冲销适合手上只有凭证号、不知道对应哪张订单的情况比如从MB51查出来的。MBST的好处是可以一次选多张凭证批量冲坏处是对MIGO产生的凭证有时候会有一些限制具体看版本。102过账之后会计上是借 生产成本-产出贷 库存商品正好和101反向。库存减少订单成本回加。取消入库的两个注意事项第一如果成品已经发货给客户SD已过账要先做VL09取消交货否则库存不够102会报库存不足或者出现负库存。SAP标准是允许负库存的如果配置允许但那是运营灾难的开始别依赖它。第二如果101入库时生成了批次或序列号102之后批次和序列号的状态要检查。序列号是否被释放、批次是否还能被重新使用直接关系到后续能不能再次入库。5.3 取消报工CO13的联动效应CO13取消报工输入你要取消的那条确认记录可以从CO14里查确认号。系统会把确认数量清掉工序状态回退到未确认。关键在于自动收货的联动如果当初报工时通过控制码触发了自动101那么CO13取消报工时系统会同时尝试冲销那笔101。如果那笔101已经被手工102冲销过了CO13就会报错提示找不到对应的货物移动记录。这时候的处理办法是在CO13界面里把冲销货物移动的勾去掉只取消确认本身然后再手工核对库存。这个逻辑听起来绕但只要记住一句话就通了哪一步产生的货物移动就该由哪一步去冲销。不要交叉操作不要手工替系统补一刀。还有一个容易被忽视的点CO13取消报工不会自动冲回作业类型的成本。如果订单已经做了成本核算KKF6N或者已经月结取消报工后要重新跑一次成本核算让订单的实际成本刷新。否则成本报表和实际数据会对不上。5.4 退料262、预留清理与订单删除归档262退料是261的反向。原料没领完或者多领了用MIGO 262退回库存会计上冲回材料成本。这里有个小细节262退料的数量不能超过该订单261已发料的数量系统会做校验。如果确实需要退更多比如从其他订单调剂的那就不是262了是库存调拨的业务别混用。预留清理订单如果被打删除标记或者TECO未消耗的预留要处理掉不然MRP会一直认为这些料被占用导致计划失真。可以逐单用MB22改预留把数量改成0或打最终发料标记也可以用程序批量处理。订单删除分两步先打删除标记DLFL事务码CO02 → 功能 → 删除标记也可以用CO78或SARA归档处理批量。打了删除标记的订单不能再做任何业务但数据还在系统里。真正从数据库消失要等归档——用CO78生产订单归档或者SARA里的归档对象PP_ORDER。归档之后AUFK/AFKO这些表里的记录才会清掉。实操心得我个人的建议是除非数据量真的很大否则不要急着归档。删除标记就够了留着数据做追溯成本分析、质量追溯都用得上。归档前一定要确认财务那边结过账、审计留档需求满足有些企业审计要求保留7年归档早了反而麻烦。5.5 关于撤销下达这件反直觉的事最后专门说一下这个高频疑问。很多新人第一反应是订单下错了能不能撤销下达答案是SAP标准功能没有撤销下达。REL这个系统状态一旦打上只能通过删除标记让订单失效或者走开发定制的程序去强制清状态。我不建议走定制那条路因为清掉状态后订单的预留、可用性检查都会处于不一致状态隐患很大。正确的处理姿势是评估一下订单上有没有已发生的业务。如果什么都没有直接打删除标记重新建一张如果有发料或报工先冲销干净再打删除标记重建。这个过程虽然笨但数据是干净的。我在项目上见过有人为了图快用SQL直接更新JEST表把REL抹掉后面MRP算出来的数字全是错的代价远大于重建一张单。6. 常见问题排查速查表与踩坑经验这一节按报错类型分类都是我在现场真金白银踩出来的。6.1 状态类报错报错信息根本原因解决方向订单 xxx 未下达尝试对CRTD订单做261/101CO02下达订单如已下错先删标记重建业务处理不可能因为订单已技术完成订单已TECO尝试新发料/收货CO02撤销技术完成做完业务再TECO订单 xxx 已标记删除订单打过删除标记先取消删除标记需权限再处理业务输入订单状态不允许此功能订单被锁定LKDCO02检查锁定状态并解锁状态类报错的特点是一眼能看出来处理也相对直接。麻烦的是下面这类。6.2 数量、批次与序列号类报错库存不足最常见的三个原因——库存确实不够查MMBE/MB52、批次错误查MCHB、库存地点错误库存确定扣了别的库位。我一般先开MB52按物料库存地点看实际可用量再回头看订单要求的组件和数量对不对。序列号 xxx 已存在/不可用多半是之前102冲销时序列号没释放或者序列号被其他订单占用。用IQ09查序列号状态必要时先做序列号的调整过账。批次确定失败批次管理的物料如果在261时没找到可用批次通常是批次还没入库、批次已过期、或者批次的状态是受限使用。查MSC3N看批次主数据。收货数量超过容差101收货数量超出了物料主数据或订单类型上设置的超额容差。要么改小数量要么调容差不推荐要么在订单上追加数量。6.3 成本与结算类报错订单未计算在制品KO88之前没跑KKAO。先KKAO再KO88这个顺序是死的。未找到结算规则结算参数文件、结算接收方缺失。CO02里看结算规则页签或者检查订单类型的结算参数文件配置。订单计划成本为0多半是成本核算没跑KKF6N或者BOM/工艺路线的成本没算进去。也可能是作业价格没维护KP26。排查顺序KKF6N重算 → 看KKBC_ORD → 看KOB1。6.4 我常用的事务码和底表清单事务码速查分类事务码用途订单管理CO01/CO02/CO03创建/修改/显示生产订单CO40/CO41计划订单单个/集中转换COOIS订单信息系统批量查询和导出COHV订单批量处理下达/TECO/删除标记CO24缺件清单物料移动MIGO261/262/101/102统一入口MB1A/MB31老事务码按移动类型直接过账MBST按物料凭证冲销COGI自动反冲失败的处理池报工CO11N/CO12单个/集中确认CO13/CO14取消确认/显示确认成本KKF6N订单成本核算/重算KKBC_ORD订单成本分析KOB1实际成本行项目KO88/CO88/KO8G结算/集中/批量KKAO计算在制品查询分析MD04/MD07库存需求清单/集中显示MMBE/MB52/MB51库存总览/库存清单/物料凭证清单SE16N查底表底表速查表名内容AUFK订单主数据对象号、订单类型、系统状态引用AFKO订单抬头排产、确认相关字段AFPO订单行项目数量、交货状态AFVC / AFVV工序/工序的数量与日期RESB预留与组件需求AFRU确认报工记录AFFW报工中失败的货物移动对应COGIAUFM订单的货物移动汇总MSEG / MKPF物料凭证行项目 / 抬头JEST / TJ02 / TJ02T对象状态 / 状态定义 / 状态文本COEP成本行项目PLAF计划订单6.5 几条不带出处但真管用的经验第一条报工日期和过账日期一定要和财务对齐口径。我参与过一个项目车间习惯在早上补录前一天的报工过账日期用的是当天。结果每个月的最后一天财务在结账车间还在补报前一天的工时成本跑到下个月去了。后来我们约定月结期间报工的过账日期由系统默认带出操作员不允许手工改问题就解决了。第二条COGI的错误记录要每天清不能攒。攒到月底一堆失败记录里混着库存不足、批次无效、序列号冲突各种原因排查成本是指数上升的。我建议把它列成车间的日清工作早上第一件事先跑COGI。第三条反向流程一定要写进操作规范不能靠人记。冲销顺序这种事老员工凭经验能记住新人一问三不知。我一般会在项目上线时整理一张反向操作检查清单贴在车间电脑旁边处理顺序一行行打勾谁都不会漏。 批量创建生产订单的BAPI骨架用于接口或批处理场景 DATA: ls_orderdata TYPE bapi_pp_order_create, ls_return TYPE bapiret2, lv_order TYPE bapi_order_key-order_number. ls_orderdata-material FG-1001. ls_orderdata-plant 1000. ls_orderdata-order_type PP01. ls_orderdata-total_quantity 100. ls_orderdata-basic_start_date sy-datum. ls_orderdata-basic_end_date sy-datum 7. CALL FUNCTION BAPI_PRODORD_CREATE EXPORTING order_data ls_orderdata IMPORTING return ls_return order_number lv_order. IF ls_return-type CA EA. 处理错误记录日志 ELSE. 需要下达的话再调 BAPI_PRODORD_RELEASE CALL FUNCTION BAPI_TRANSACTION_COMMIT EXPORTING wait X. ENDIF.接口场景下报工用BAPI_PRODORDCONF_CREATE_TT按时间票确认这个函数的参数比较绕重点是构造好工序号、产量、作业类型和实际工时这几块。开发做之前建议先用CO11N手工跑一遍把系统实际写了AFRU里哪些字段抓出来再对着字段构造BAPI能省掉大量试错时间。最后再分享一个我自己排查问题的固定套路任何生产订单的异常我都按**状态 → 数量 → 库存 → 成本**四步走。先看JEST里的状态对不对再看订单数量和实际发生的数量是否匹配然后看库存是否足够且扣对了地方最后用KKBC_ORD看成本是否合理。这四步走完90%的问题都能定位到具体环节比漫无目的地翻文档快得多。
返回列表