SourceDocumentAmount 对象未初始化

SourceDocumentAmount object not initialized

未能初始化SMBIOS 未能初始化socialclub_Ax

在Dynamcis ax 2012 采购订单过账发票的时候,经常会出现这个错误提示,当然也听说有的是创建订单的时候遇到的,遇到这种问题也是最烦人的问题,想去找到问题原因更是难上加难,根据过往的经验,把解决这个问题的办法总结一下。

  1. 检查一下财务分配
    通过采购订单窗口上采购订单行区域的 财务 -> 分摊金额 打开财务分配的窗口
    如果订单上财务分配没有问题的话,纠正 按钮是灰的,如果存在问题,这个按钮是可用的,点击一下纠正,系统会自动重新进行账务相关计算。
    通常如果是由于修改了系统科目配置,原有订单的科目分摊不会自动更新,造成的过账失败,往往可以用这种办法解决,尤其是修改了科目结构的时候,这个方法更是必不可少。
    现在去尝试一下过账吧,如果成功了,恭喜你,你是个幸运的宝宝。
  2. 未能初始化SMBIOS 未能初始化socialclub_未能初始化SMBIOS_02

  3. 检查相关数据的完整性
    由于Ax系统通常都会做很多个性化开发,再加上总有一些特殊情况,会导致系统出现一些异常,一些同步更新或创建的关联数据会由于种种原因丢失。
    找到异常的采购订单,到表浏览器里查看相关的字段:SourceDocumentHeader , SourceDocumentLine
    到相应的表里去查看对应的记录是否存在
    如果不存在说明发生了异常,手工修复一下。
    这种情况我暂时没遇到,是看到别人遇到的,基本应该可以解决问题。
  4. 更改系统标准代码
    如果前面两种方法都无法解决问题,只能出大招了。
    这个错误属于系统Bug,据说微软已经出了补丁可以修复, KB4011348 有条件的宝宝可以去官方lifecycle上下载安装,具体的安装方法就不再细说了。
    没条件的宝宝就自己动手丰衣足食吧。
    classes -> AccountingDistributionProcessor -> isMonetaryAmountFullyMatching
    把系统原有的那一行注释掉,改成新的代码。
//originalAmount = matchedDistributionSourceDocLineItem.parmSourceDocumentAmountMap().lookup(monetaryAmountToCheckMatching).parmAmount();
if(!matcheddistributionsourcedoclineitem.parmSourceDocumentAmountMap().empty())
{
    originalAmount = matchedDistributionSourceDocLineItem.parmsourcedocumentamountmap().lookup(monetaryAmountToCheckMatching).parmamount();
}

修改代码有风险,能不做还是不要做的好,有没有什么不良后果,暂时未知,请慎用。

如有其他问题,欢迎交流提出。

未能初始化SMBIOS 未能初始化socialclub_Dynamics_03