#MM 物料凭证没有产生相应的会计凭证, 为什么呢? 怎么预防。

本文探讨了SAP系统中物料凭证与会计凭证过账时可能出现的不一致问题,包括物料凭证缺失对应的财务凭证,或反之。分析了在用户出口(User-exit)及BAdI中不当代码导致的问题,并介绍了SAPLUW机制的重要性。通过理解SAPnote 1776835,用户可以避免因非标准COMMITWORK或ROLLBACK引发的数据不一致。

在物料凭证过账(入出库处理,物料转储处理)时,如果产生了相应借贷金额的变化,系统会自动产生相应的会计凭证。

有许多用户发现系统中有时会出现物料凭证产生了会计凭证没有产生,或者是相反会计凭证产生了物料凭证却丢失了的现象。在物料分类总帐被启用的情况下,系统会报错C+048,相关物料的入出库移动因为此错误而不能进行。由此会对业务产生巨大影响,如重要物料不能移动,月结年结不能做之类。更甚者由此产生的MM和FI之间的巨大差异会成为审计的焦点。

 

在此对于此现象产生的可能原因,以及如何避免此现象发生的注意事项进行了如下的总结。

 

  • 在物料凭证过账中经常被使用到的User-exit以及BAdI
    • 物料凭证丢失相应的财务凭证
    • 财务凭证丢失相应的物料凭证
    • 检查机制
  • SAP notes

 

在物料凭证过账中经常被使用到的User-exit以及BAdI

物料凭证过账中,有很多需求是进行企业内部自定义的一些过账前的检查,BAdI MB_DOCUMENT_BADI
(method MB_DOCUMENT_BEFORE_UPDATE)和User-exit  EXIT_SAPLMBMB_001(include ZXMBCU01 
/ enhancement component MB_CF001)是经常被使用到的。如果在这些用户出口中写入了不恰当的代码,
就会造成表题中所描述的现象。下面给出了一些不恰当的代码示例:

 

  • COMMIT WORK
  • FROM MEMORY
  • Remote Function Call (CALL FUNCTION .. DESTINATION)
  • Own updates on the document or stock tables (for example, an update on the table MBEW, MARD, MSEG)
  • Unlocking data (for example, by DEQUEUE_ALL)
  • ROLLBACK WORK
  • MESSAGE TYPE ‘A’
  • Calling a dialog box (POPUP_TO_CONFIRM, for example)

摘选自SAP note 92550

 

  • 物料凭证丢失相应的财务凭证

        这里引入一个SAP LUW的概念。LUW是Unit Logical Unit of Work的缩写,通常有Database LUWs
        和SAP LUWs的区别。 通俗的理解就是SAP为了在多个对话屏幕之间保证数据一致性
       (只有保存操作成功一个事务代码才算完成),在Database LUW的基础上所进行的一种设计。
        而SAP LUW的技术手段之一就是使用CALL FUNCTION… IN UPDATE TASK将所有要更新的
        内容封装并登记起来,由COMMIT WORK触发一并在更新进程(update work process)上执行。
        ABAPHELP文档中有更为详细的的介绍与解释。

 

        BAdI MB_DOCUMENT_BADI就是在起到这样作用的Function Module MB_UPDATE_TASK
        后被调用到的,因此如果在此BAdI implementation中写入COMMIT WORK这样的命令,
        将直接破坏SAP LUW的构成。

        2-9-2015 5-36-17 PM.png

        因为在此时物料凭证相关的更新任务已经被登记到系统中,等待COMMIT WORK从而写入数据表,
        而会计凭证相关的更新任务还没有被系统登记。 如在BAdI 中写入COMMIT WORK,那一旦在会计
        更新处理中出现了异常,SAP LUW将不能完整地ROLL BACK。

        物料凭证方:

          Call function ‘A’ in update task.

          Call function ‘B’ in update task.

       
        BAdI  MB_DOCUMENT_BADI (method MB_DOCUMENT_BEFORE_UPDATE)
        写入COMMIT WORK -> 物料凭证的更新被触发,数据表MKPF/MSEG会被更新。

      

        会计凭证方:

        Call function ‘C’ in update task.

        Call function ‘D’ in update task. 
         ->假设在此阶段发生了更新异常,系统将只能ROLL BACK到前次COMMIT WORK后的状态,
            由此产生了会计凭证未更新而物料凭证被更新的情况

 

        仍然有用户会有问题,为什么这个问题不是一直发生,以前不都用得好好的?因为此现象只在FI这边
        更新异常出错,
整个事务代码不能完整地 ROLLBACK 时才会发生。 可能因为后台配置的改变或者是
        系统在运用中数据的改变(number range 重复了之类)而产生了FI更新的错误,
才会发生此现象。
        两次COMMIT WORK如果都成功的话,用户是观察不到此现象的。

     

 

  • 财务凭证丢失相应的物料凭证

        类似的,如果在BAdI或者User exit中写入了ROLL BACK的命令,那么

        物料凭证方:

          Call function ‘A’ in update task.

          Call function ‘B’ in update task.

       
        BAdI  MB_DOCUMENT_BADI (method MB_DOCUMENT_BEFORE_UPDATE)写入ROLLBACK
        -> 物料凭证的更新被取消

      

        会计凭证方:

        Call function ‘C’ in update task.

        Call function ‘D’ in update task.

 

        标准的COMMIT WORK被执行,却只有会计凭证将会得到更新

 

  • 检查机制
    因为此问题经常产生,而且一旦大批量发生的话修正非常繁琐,业务影响非常之大,SAP发行了Note 1776835
    一旦系统检测到非标准的COMMIT WORK或者是ROLLBACK 的命令,将丢出中断信息(dump)
    而终止整个事务代码的进行。在ST22 dump的详细信息中,用户可以看到非标准COMMIT WORK是
    在何处被执行的,从而修改代码,避免此类问题的发生。
    因此对于系统版本不够高的用户,推荐使用SNOTE将此Note导入系统中,以免发生
    丢失会计凭证的现象。总之用户的自开发应遵循SAP LUW,避免引起不必要的不整合的现象。

 

SAP notes

      

关于MMFI整合性问题,SAP有许多官方的Note进行说明与解释

 

  • Note 968812 MM-FI Differences caused by ROLLBACK or COMMIT
  • Note 92550  Stock inconsistency due to customer enhancement (exit, BAdI)
  • Note 1284654  Caution with implementations of the BAdI: MB_DOCUMENT_BADI
### SAP中物料分类账生成的会计凭证处理方式 在SAP系统中,物料分类账(Material Ledger)用于记录和管理物料的成本变化及其对应的财务影响。当涉及物料成本差异科目时,其借贷情况主要取决于具体的业务场景以及配置设置。 #### 物料分类账生成会计凭证的方式 物料分类账的主要功能之一是在月末结算过程中生成相应会计凭证。这些凭证通常包括但不限于以下几种: - **在制品结算凭证**:反映生产订单完成后的成品入库及对应成本分配的情况[^1]。 - **差异结算凭证**:针对实际成本与标准成本之间的偏差进行调整并生成凭证。 - **外部结算凭证**:适用于采购收货或销售发货等操作中的价格差异核算。 - **物料分类账结算凭证**:基于物料的实际成本变动,在月末生成汇总性的会计凭证以更新总账数据[^2]。 对于物料分类账而言,它不仅跟踪每种物料的历史单价,还支持多币种评估机制。这意味着即使在同一公司代码下也可以根据不同需求采用不同货币单位来计算库存价值。因此,在执行月末结算期间,系统会依据设定好的规则自动生成必要的会计分录以便同步到FI模块当中去。 #### 材料成本差异科目的借贷处理方法 材料成本差异是指由于市场价格波动或其他因素引起的标准成本同实际发生成本之间存在的差额部分。这种差异会在特定条件下通过专门设立的相关账户来进行管理和平衡。具体来说: - 当发生正向差异(即实际成本高于标准成本),该笔交易会被记作借方增加;反之,则作为贷方减少处理。 以下是简化版的Python伪代码展示如何模拟这一逻辑流程: ```python def generate_accounting_entry(actual_cost, standard_cost): difference = actual_cost - standard_cost if difference > 0: debit_material_variance(difference) # 正向差异计入借方 credit_inventory_adjustment(difference) elif difference < 0: credit_material_variance(abs(difference)) # 负向差异计入贷方 debit_inventory_adjustment(abs(difference)) return "Accounting entry generated successfully." ``` 此函数接收两个参数——`actual_cost`(实际发生的成本数值) 和 `standard_cost`(先定义的标准成本),然后根据两者间的差距决定是否需要创建新的会计条目,并指定正确的方向 (借/贷).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值