SAP消息号M7037在工厂5000中,请记账到当前期间2022/12

本文介绍了一个在11月账期进行过账操作时遇到的问题及解决方法。问题表现为尝试过账到11月时报错,原因是11月账期未被勾选为运行状态。解决方案是通过使用事务代码MMRV来处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想过账到11月报错上图错误,因11月账期未勾选运行记账

解决方法:事务代码MMRV

 

 

<think>我们之前讨论了如何在保存生产版本时自动触发CK11N(成本估算)。现在用户进一步询问如何自动发布成本估算结果(即调用CK24)。自动发布标准价是成本核算周期的关键步骤,通常在CK11N计算后执行。但标准SAP同样不提供保存生产版本时直接触发CK24的功能,因此仍需通过增强实现。###配置目标在保存生产版本后,系统自动执行以下步骤:1.调用CK11N计算物料的成本估算(基于生产版本中的BOM和工艺路线)。2.调用CK24发布该成本估算结果,将计算出的标准价更新为物料的当前标准价(S价)。###配置方法:通过BADI增强实现核心思路:在原有触发CK11N的BADI增强中,扩展代码以调用CK24的发布功能。注意,CK24的发布操作涉及物料账期检查、评估变式等控制因素,需谨慎处理。####步骤1:确认原有BADI实现(用于CK11N)参考之前配置,假设已实现BADI`PRODUCTION_VERSION`(或类似BADI)的`AFTER_SAVE`方法,其中包含CK11N调用代码。现在需要在该方法中添加CK24调用逻辑。####步骤2:扩展BADI代码以调用CK24CK24的发布操作可通过函数模块`CKMF_CK24`或`CKMV_CK24`实现。以下是增强代码示例(伪代码,需ABAP开发):```abapMETHODif_ex_badi_prod_version~after_save.DATA:lv_matnrTYPEmatnr,"物料lv_werksTYPEwerks_d,"工厂lv_stlanTYPEstlan,"BOM用途lv_plnnrTYPEplnnr,"工艺路线组lt_ckmlkephTYPETABLEOFckmlkeph,"成本估算结果表lv_kalkaTYPEkalka,"成本核算变式(如PPC1)lv_bdatjTYPEbdatj,"会计年度lv_poperTYPEpoper,"期间lv_errorTYPEc."错误标志"1.获取生产版本数据lv_matnr=im_prod_version-matnr.lv_werks=im_prod_version-werks.lv_stlan=im_prod_version-stlan.lv_plnnr=im_prod_version-plnnr."2.调用CK11N(示例函数,实际需用后台函数)CALLFUNCTION'CK_F_CALCULATE_MATERIAL_COST'EXPORTINGmatnr=lv_matnrwerks=lv_werksstlan=lv_stlanplnnr=lv_plnnrEXCEPTIONSerror=1OTHERS=2.IFsy-subrc<>0."错误处理MESSAGEIDsy-msgidTYPE'E'NUMBERsy-msgnoWITHsy-msgv1sy-msgv2sy-msgv3sy-msgv4.RETURN.ENDIF."3.获取最近的成本估算结果(确定会计期间和核算变式)"注意:需根据业务逻辑确定要发布的估算版本SELECTSINGLEkalka,bdatj,poperFROMckmlkephINTO(lv_kalka,lv_bdatj,lv_poper)WHEREmatnr=lv_matnrANDwerks=lv_werksANDkkzst='X'"标记为最新估算ORDERBYbdatjDESCENDING,poperDESCENDING.IFsy-subrc<>0."未找到估算记录MESSAGEe398(00)WITH'Nocostestimatefoundformaterial'lv_matnr.RETURN.ENDIF."4.调用CK24发布函数"设置发布参数DATA(ls_ck24_params)=VALUEckmv_cp1a(matnr=lv_matnrwerks=lv_werkskalka=lv_kalkabdatj=lv_bdatjpoper=lv_popervrgng='0000'"发布操作标识testlauf=space"非测试模式(实际发布)).CALLFUNCTION'CKMV_CK24'EXPORTINGi_ck24_params=ls_ck24_paramsIMPORTINGe_error=lv_errorTABLESt_ckmlkeph=lt_ckmlkeph."返回发布结果IFlv_error='X'."发布失败:从lt_ckmlkeph提取错误消息LOOPATlt_ckmlkephASSIGNINGFIELD-SYMBOL(<fs>)WHEREmsgtyCA'EA'.MESSAGEID<fs>-msgidTYPE<fs>-msgtyNUMBER<fs>-msgnoWITH<fs>-msgv1<fs>-msgv2<fs>-msgv3<fs>-msgv4.ENDLOOP.ENDIF.ENDMETHOD.```####关键代码说明:1.**CK11N调用**:使用函数`CK_F_CALCULATE_MATERIAL_COST`(示例)执行成本估算。实际开发中可能需要更精确的函数(如`CK_F_MATERIAL_COST_ESTIMATE`)。2.**获取最新估算**:从表`CKMLKEPH`(成本估算结果表)读取最近一次估算的会计年度(`bdatj`)和期间(`poper`)。字段`KKZST='X'`表示该估算为最新状态[^1]。3.**CK24发布**:-函数`CKMV_CK24`用于发布成本估算。-参数`testlauf`设置为空(即实际执行发布)。-发布前需确保:-物料账期已打开(事务码`MMPV`/`MMRV`确认)[^1]。-估算结果未锁定(如无其他用户正在修改)。4.**错误处理**:若发布失败(`e_error='X'`),从返回表`t_ckmlkeph`解析错误消息。####步骤3:配置前置条件-**物料分类账激活**:在S/4HANA中必须激活物料分类账(事务码`OMX1`),否则无法发布多货币标准价[^1][^2]。-**评估变式**:确保成本核算变式(如PPC1)已配置(事务码`OKKN`),且包含正确的成本组件结构[^2]。-**账期管理**:自动发布前需确保目标会计期间已打开(通过`MMPV`打开新期间)。若账期未开,CK24会失败(错误消息如“Periodnotopen”)[^1]。####步骤4:测试与部署1.**测试场景**:-创建或修改生产版本(事务码`C223`)。-保存后检查:-通过CK13N查看成本估算是否生成。-通过MM03查看物料成本视图2,确认标准价是否更新为发布值(状态从“将来价格”变为“当前价格”)[^1]。2.**权限要求**:执行用户需有权限:-操作CK11N和CK24(成本会计角色)。-访问增强开发对象(如BADI)。3.**性能考虑**:CK24发布可能耗时,建议:-仅当生产版本中BOM或工艺路线变更时触发(通过增强逻辑判断变更)。-避免高频调用(如批量保存生产版本时改用后台作业)。###注意事项-**标准价修改限制**:物料标准价通常一个月只能修改一次(受物料分类账控制)。若当月已发布过价格,再次调用CK24会失败[^1]。-**业务范围一致性**:CK24发布时,系统自动生成会计凭证(调整库存价值)。需确保物料评估类关联的成本中心,其业务范围与库存/损益科目一致,否则报错[^1]。-**替代方案**:若增强不可行,可考虑:-使用后台作业定期执行CK24(如每天夜间),但实时性差。-通过工作流关联生产版本审批后触发CK24。###总结通过扩展生产版本保存的BADI增强,在CK11N后调用CK24发布函数,可实现自动发布标准价。核心步骤包括:获取估算结果、调用CK24函数、处理账期和错误。此配置需ABAP开发支持,且务必测试账期和权限控制。###相关问题1.如何确保CK24自动发布时物料账期已正确打开?2.SAP中物料标准价发布(CK24)的会计凭证是如何生成的?3.生产版本变更时如何仅当BOM或工艺路线修改才触发成本估算?4.在S/4HANA中,物料分类账如何影响标准成本的多次发布?[^1]:CK11N发布产品的标准成本(一般都是发布每个月第一天的标准成本)...发布完之后,成本2里的价格会从将来变到当前...在CK24的时候,因为库存的价值会发生变化,系统会产生物料价值和损益科目的一个借贷行...发布的前提是物料账期已经打开了(通过MMRV进行查看)。[^2]:在产品成本控制中,成本构成结构决定如何更新材料成本核算的结果...成本构成结构根据成本构成(例如材料成本、内部活动、外部活动和间接费用)对每种物料的成本进行分组。</think>### SAP生产版本保存时自动发布成本估算结果(调用CK24)的配置方法 在SAP中实现生产版本保存时自动发布成本估算结果(CK24),需要在原有自动触发CK11N的增强基础上扩展代码逻辑。以下是具体配置步骤: --- ### 核心配置步骤 #### 1. **扩展原有BADI实现(在CK11N后调用CK24)** 在原有生产版本保存的BADI增强中(如`PRODUCTION_VERSION`),添加CK24发布逻辑: ```abap METHOD if_ex_badi_prod_version~after_save. " 1. 先执行CK11N(原有逻辑) CALL FUNCTION 'CK_F_CALCULATE_MATERIAL_COST' EXPORTING matnr = lv_matnr werks = lv_werks EXCEPTIONS error = 1. IF sy-subrc = 0. " 2. 获取最新成本估算版本 SELECT SINGLE kadky, bdatj, poper FROM ckmlkeph INTO (@DATA(lv_kadky), @DATA(lv_bdatj), @DATA(lv_poper)) WHERE matnr = @lv_matnr AND werks = @lv_werks AND kkzst = 'X' " 最新估算标记 ORDER BY bdatj DESCENDING, poper DESCENDING. " 3. 调用CK24发布函数 DATA(lt_keys) = VALUE ckml_mat_obj( ( matnr = lv_matnr werks = lv_werks kadky = lv_kadky ) ). CALL FUNCTION 'CKML_M_FULL_CK24' EXPORTING i_testlauf = abap_false " 实际发布 i_no_dialog = abap_true " 后台模式 TABLES t_keys = lt_keys EXCEPTIONS error = 1. ENDIF. ENDMETHOD. ``` **关键点说明**: - 使用函数`CKML_M_FULL_CK24`实现后台发布[^1] - `kadky`是成本估算的唯一标识符,需从表`CKMLKEPH`获取 - `i_testlauf = abap_false`确保实际执行发布操作 #### 2. **账期检查增强(必要前提)** 在发布前强制检查物料账期状态: ```abap " 检查账期是否开启 CALL FUNCTION 'MMPV_CHECK_PERIOD' EXPORTING i_tcode = 'CK24' " 事务码 i_werks = lv_werks " 工厂 i_bdatj = lv_bdatj " 会计年度 i_poper = lv_poper " 期间 EXCEPTIONS error = 1. IF sy-subrc <> 0. " 自动开启账期(需授权) CALL FUNCTION 'MMPV_OPEN_PERIOD' EXPORTING i_werks = lv_werks i_bdatj = lv_bdatj i_poper = lv_poper. ENDIF. ``` #### 3. **配置发布参数** 通过事务码维护必要参数: | 事务码 | 配置内容 | 说明 | |--------|----------|------| | `OKKN` | 评估变式(如PPC1) | 定义成本组件结构[^2] | | `OMX1` | 激活物料分类账 | 多货币评估必备[^1] | | `OBYC` | 自动记账配置 | 确保CK24的会计凭证正确生成 | #### 4. **错误处理机制** ```abap " 捕获CK24错误消息 CALL FUNCTION 'CK_F_MESSAGES_GET' IMPORTING et_messages = lt_errors. IF lt_errors IS NOT INITIAL. " 记录错误日志(事务码SLG1) CALL FUNCTION 'BAL_LOG_MSG_ADD' EXPORTING i_msgty = 'E' i_msgid = 'CK' i_msgno = '466'. ENDIF. ``` --- ### 关键注意事项 1. **账期控制**: - 必须确保目标会计期间已通过`MMPV`打开 - 标准价每月只能修改一次(物料分类账限制)[^1] 2. **业务范围一致性**: - 物料评估类关联的成本中心业务范围必须与库存科目一致 - 不一致会导致CK24报错(通过`OBYC`配置调整)[^1] 3. **权限要求**: - 用户需有权限:`CK24`发布权限 + 账期操作权限(MMPV) - 建议创建专用服务账执行自动发布 4. **性能优化**: ```abap " 仅当成本估算变更时发布 IF im_prod_version-aedat > im_prod_version-last_costing_date. " 执行CK24发布 ENDIF. ``` --- ### 测试流程 1. **创建生产版本**(事务码`C223`) 2. **检查日志**: - 通过`CK13N`查看成本估算状态 - 通过`MM03`→"会计1"视图确认标准价更新 3. **验证凭证**: - 使用`MB51`检查物料凭证 - 通过`FB03`查看CK24生成的会计凭证 > **注意**:成功发布后,物料主数据的"成本核算2"视图中,价格状态会从**将来价格**变为**当前价格**[^1]。 --- ### 替代方案:工作流触发 如果不允许ABAP增强,可通过工作流实现: ```mermaid sequenceDiagram 生产版本保存 ->> 事件触发器: 生成事件MATPRODVER_CHANGED 事件触发器 ->> 工作流引擎: 启动工作流WS00000123 工作流引擎 ->> 成本核算模块: 异步调用CK11N 成本核算模块 ->> 工作流引擎: 返回估算结果 工作流引擎 ->> 发布模块: 调用CK24(后台模式) 发布模块 ->> 工作流引擎: 返回发布状态 ``` 配置路径:事务码`SWDD`定义工作流,触发事件`MATPRODVER_CHANGED` --- ### 常见错误处理 | 错误代码 | 原因 | 解决方案 | |---------|------|---------| | CK466 | 成本组件结构错误 | 检查`OKKN`配置[^2] | | M8753 | 账期未开启 | 执行`MMPV`打开期间 | | CK240 | 业务范围冲突 | 调整`OBYC`自动记账规则 | | CK050 | 标准价已存在 | 检查是否当月已发布过价格 | [^1]: 在月底,流程是先打开物料账期,然后再进行发布标准价格的操作。发布完之后,成本2里的价格会从将来变到当前。系统会通过评估类自动取到一个成本中心,取到成本中心的业务范围必须和借贷方对应的业务范围相同。 [^2]: 在产品成本控制中,成本构成结构决定如何更新材料成本核算的结果。成本构成结构根据成本构成(例如材料成本、内部活动、外部活动和间接费用)对每种物料的成本进行分组。 --- ### 相关问题 1. 如何通过工作流实现CK24的审批后自动发布? 2. 物料分类账未激活时,自动发布标准价会有什么限制? 3. 在跨公司代码场景下,如何配置CK24的自动发布? 4. 如何通过CDS View监控生产版本变更触发的成本发布记录?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值