在 Microsoft Dynamics GP 中打印历史库存状态报告时出现“除以零”错误

本文提供了在 Microsoft Dynamics GP 中打印历史股票状态报告时发生的错误的解决方案。

适用于: Microsoft Dynamics GP
原始 KB 数: 3210333

现象

在 Microsoft Dynamics GP 中打印历史股票状态报告(HSSR),将收到以下错误消息:

未经处理的脚本异常
脚本 - 数据区域
EXCEPTION_CLASS_SCRIPT_DIVIDE_BY_ZERO
SCRIPT_CMD_DIV

原因

此问题通常是由IV30300表中某种类型的数据损坏引起的。 下面是最常见的原因:

原因 1:IV30300中的特定文档类型缺少事务源

解决方法

通过 Microsoft Dynamics GP 发布的每个文档都应具有与之关联的事务源。 由于发布中断或集成/自定义问题,此值可能缺失。 使用以下脚本标识具有空白事务源的任何文档。 列出的所有这些文档类型都应具有事务源。 如果没有事务源,则需要修复或删除记录。

  1. 针对 SQL Server Management Studio 中的公司数据库运行以下语句,以识别具有以下条件的事务:

    SELECT * FROM IV30300 WHERE TRXSORCE = '' and doctype in (1, 2, 3, 4, 5, 6, 7) 
    
  2. 如果使用上述脚本返回任何文档,请对以下清单表列出的文档编号运行 select 语句(IV30300、SEE30303、IV10200、IV10201)。 调查损坏的位置,或者它是否仅在IV30300表中。 它可能是损坏的记录,也可能部分更新。 必须调查返回的每个行,并确定如何继续修复。 如果可以将其删除,建议根据DEX_ROW_ID将其删除。

    例如:

    DELETE IV30300 WHERE DEX_ROW_ID = XXX
    

在上面的 select 语句中查看数据时,通常有两行与一行。 需要删除缺少事务源的损坏记录。

原因 2:DECPLCUR 和 DECPLQTY 字段中拥有无效值(为 0)的特定文档类型

解决方法

注意

DECPLCUR 字段引用捕获的货币小数位数,字段 DECPLQTY 引用项的捕获数量小数位。 对于所有有效的事务,应填入一个值。

针对 SQL Server Management Studio 中的公司数据库运行以下语句,以识别具有以下条件的事务:

Select * from IV30300 where (DECPLQTY = 0 or DECPLCUR = 0) and doctype in (1, 2, 3, 4, 5, 6, 7) 

如果发现具有 0 小数位数的文档,则需要对其进行调查。 使用 SQL 查询分析器更正损坏的事务,并将字段更新为相应的值。

IV30300中的小数位数值如下所示:

表中的值 GP 中显示的值(实际值)
1 0
2 1
3 2
4 3
5 4
6 5

更新语句的示例:

UPDATE IV30300 set DECPLQTY = 3 WHERE DEX_ROW_ID = XXX

如果结果都是旧事务,并且你希望删除损坏的事务的历史记录,则可以通过在 Microsoft Dynamics GP 菜单上选择“工具”,然后选择“实用工具>。

详细信息

如果来自原因 1 或 2 的脚本未返回任何结果,请通过按项目编号打印历史股票状态报告来专注于确定问题项。 使用范围缩小项编号。 从较小的范围开始,并按字母顺序确定问题项。 例如,输入以字母 A 到 D 开头的一系列项目。打印该范围并查看是否收到错误。 在确定有问题的项之前,不要继续按字母顺序。 确定项目后,获取该项目的IV30300表的结果并开始调查。

如果仍然找不到问题项或文档,请运行 SQL 探查器跟踪并捕获错误。 请确保错误仍留在屏幕上(不要选择超出错误范围),然后停止追踪。 通常,在跟踪结束时,应会看到导致错误的文档编号,并且可以从那里进行调查。 如果清理该项后仍收到错误,请创建新的跟踪,并查看它是否找到了另一笔有问题的交易。

可能的解决方法:

另一个选项是尝试在报表选项中,使用或不使用 GL 发布日期进行打印,以查看哪种方式有效。 在调查问题并识别问题时,它可能会提供打印报表的选项。