当您为含有行折扣和税区号的采购订单的北美版本的 Microsoft Dynamics NAV 2009 过帐部分发票时,系统将计算全额折扣

应用对象
Dynamics NAV 2009

本文适用于以下国家/地区和语言区域设置的 Microsoft Dynamics NAV。

  • 英语 (加拿大) (en-ca)
  • 英语 (美国) (en-us)
  • 西班牙语 (墨西哥语) (es-mx)
  • 法语 (加拿大) (fr-CA)

症状

假设您在北美版本的 Microsoft Dynamics NAV 2009 中应用了修补程序 983245。 您有一个采购订单,其中包含物料的行折扣和税务区号。 然后你会收到采购订单。 在这种情况下,当您过帐采购订单的部分发票时,系统会错误地计算发票金额的全额折扣。 以下产品中会出现此问题:

  • 北美版 Microsoft Dynamics NAV 2009 R2
  • 北美版本的 Microsoft Dynamics NAV 2009 Service Pack 1

有关修补程序983245的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

983245 在 Microsoft Dynamics NAV 2009 SP1 中过帐具有 100% 行折扣的发票交易时,总帐条目不正确

解决方法

修补程序信息

Microsoft 现在提供了一个受支持的修补程序。 但是,它仅用于更正本文中描述的问题。 仅将其应用于遇到此特定问题的系统。 此修补程序可能会接受额外的测试。 因此,如果你没有受到此问题的严重影响,我们建议你等待下一个 Microsoft Dynamics NAV 2009 Service Pack 或下一个包含此修补程序的 Microsoft Dynamics NAV 版本。

注意 特殊情况下,如果 Microsoft Dynamics 及相关产品的技术支持专家确定某个特定更新能够解决你的问题,则可免收通常情况下收取的电话支持服务费用。 对于相关特定升级无法解决的其他支持问题和事项,将照常收取支持费用。

            
          

安装信息

Microsoft 的编程示例仅用于说明,不做任何明示或暗示的保证。 这包括但不限于特定用途的适销性或适用性的隐含保证。 本文假定你熟悉所演示的编程语言以及用于创建和调试过程的工具。 Microsoft 支持工程师可以帮助解释特定过程的功能,但他们不会修改这些示例以提供新增功能或构建步骤以满足你的特定需要。

注意 在安装此修补程序之前,请确认所有 Microsoft Navision 客户端用户都已注销系统。 这包括Microsoft Navision 应用程序服务 (NAS) 客户端用户。 在实施此修补程序时,您应该是唯一登录的客户端用户。

要实现此修补程序,您必须具有开发人员许可证。

我们建议为“Windows 登录”窗口或“数据库登录”窗口中的用户帐户分配“超级”角色 ID。 如果无法向用户帐户分配“超级”角色 ID,则必须验证用户帐户是否具有以下权限:

  • 要更改的对象的“修改”权限。
  • 对系统对象 ID 5210 对象和系统对象 ID 9015 对象的执行权限。

                
注意:除非必须执行数据修复,否则您不必具有对数据存储的权限。

代码更改

注意 将修补程序应用于生产计算机之前,始终在受控环境中测试代码修补程序。
要解决此问题,请按照下列步骤操作:

  1. 将“Sales-Post”代码单元 (80) 中的 AddSalesTaxLineToSalesTaxCalc 函数中的代码更改如下所示:
    现有代码

    ...
    ROUND(
    "Inv. Discount Amount" * "Qty. to Invoice" / Quantity,
    Currency."Amount Rounding Precision");
    "Quantity (Base)" := "Qty. to Invoice (Base)";
    "Line Amount" := ROUND("Qty. to Invoice" * "Unit Price",Currency."Amount Rounding Precision");
    
    // Delete the following line.
    IF MaxInvQty <> Quantity THEN
    
    "Line Discount Amount" :=
    ROUND("Line Amount" * "Line Discount %" / 100,Currency."Amount Rounding Precision");
    Quantity := "Qty. to Invoice";
    "Line Amount" := "Line Amount" - "Line Discount Amount";
    "Inv. Discount Amount" := "Inv. Disc. Amount to Invoice";
    ...
    

    替换代码

    ...
    ROUND(
    "Inv. Discount Amount" * "Qty. to Invoice" / Quantity,
    Currency."Amount Rounding Precision");
    "Quantity (Base)" := "Qty. to Invoice (Base)";
    "Line Amount" := ROUND("Qty. to Invoice" * "Unit Price",Currency."Amount Rounding Precision");
    
    // Add the following line.
    IF Quantity <> "Qty. to Invoice" THEN
    
    "Line Discount Amount" :=
    ROUND("Line Amount" * "Line Discount %" / 100,Currency."Amount Rounding Precision");
    Quantity := "Qty. to Invoice";
    "Line Amount" := "Line Amount" - "Line Discount Amount";
    "Inv. Discount Amount" := "Inv. Disc. Amount to Invoice";
    ...
    
  2. 将 “Purch.-Post” 代码单元 (90) 中的 AddSalesTaxLineToSalesTaxCalc 函数中的代码更改为如下所示:
    现有代码

    ...
    ROUND(
    "Inv. Discount Amount" * "Qty. to Invoice" / Quantity,
    Currency."Amount Rounding Precision");
    "Quantity (Base)" := "Qty. to Invoice (Base)";
    "Line Amount" := ROUND("Qty. to Invoice" * "Direct Unit Cost",Currency."Amount Rounding Precision");
    
    // Delete the following line. 
    IF MaxInvQty <> Quantity THEN
    
    "Line Discount Amount" :=
    ROUND("Line Amount" * "Line Discount %" / 100,Currency."Amount Rounding Precision");
    Quantity := "Qty. to Invoice";
    "Line Amount" := "Line Amount" - "Line Discount Amount";
    "Inv. Discount Amount" := "Inv. Disc. Amount to Invoice";
    ...
    

    替换代码

    ...
    ROUND(
    "Inv. Discount Amount" * "Qty. to Invoice" / Quantity,
    Currency."Amount Rounding Precision");
    "Quantity (Base)" := "Qty. to Invoice (Base)";
    "Line Amount" := ROUND("Qty. to Invoice" * "Direct Unit Cost",Currency."Amount Rounding Precision");
    
    // Add the following line.
    IF Quantity <> "Qty. to Invoice" THEN
    
    "Line Discount Amount" :=
    ROUND("Line Amount" * "Line Discount %" / 100,Currency."Amount Rounding Precision");
    Quantity := "Qty. to Invoice";
    "Line Amount" := "Line Amount" - "Line Discount Amount";
    "Inv. Discount Amount" := "Inv. Disc. Amount to Invoice";
    ...
    

先决条件

必须安装以下产品之一才能应用此修补程序:

  • 北美版 Microsoft Dynamics NAV 2009 R2
  • 北美版本的 Microsoft Dynamics NAV 2009 Service Pack 1

删除信息

无法删除此修补程序。

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

注意这是一篇由 Microsoft 支持组织直接创建的“快速发布”文章。 本文所包含的信息是按原样提供的,以应对新出现的问题。 由于发布速度较快,这些材料可能包含印刷错误,无需通知即可随时修改。 有关其他注意事项,请参阅使用条款