在“选择银行交易”中协调支票簿时,“差异必须为零,然后才能协调此支票簿”错误
本文提供了一个解决方法,指出在 Microsoft dynamics GP 中协调 Select Bank Transactions 中的支票簿时,差异显示为零。
适用于: Microsoft Dynamics GP、Microsoft Dynamics SL 银行对帐
原始 KB 数: 851301
现象
在 Microsoft Dynamics GP 的 Select Bank Transactions 中协调支票簿时,差异显示为零,但会收到以下错误消息:
差异必须为零,然后才能协调此 checkbook。
原因
这是由小数差异引起的。 “ 选择银行交易 ”窗口将仅显示为分配给相应支票簿的货币 ID 设置的十进制位数。 例如,如果支票簿分配有两个小数位数的货币 ID,则“选择银行交易”窗口中仅显示两个小数位。 但是,SQL 表中的记录最多存储一个数量字段的五个小数位数,因此,如果 SQL 表中任何记录的剩余小数位数中存在数量,则可能会出现此问题,并且可能会导致小数差异。 如果记录导入到 Microsoft Dynamics GP 中,其小数位数大于设置货币 ID 的金额,则通常会发生这种情况。
重要
不支持以这种方式导入数据。 本文是帮助你修复数据的指南,因为我们无法在支持案例中为不支持的条件提供数据修复。
解决方法
使用以下步骤检查小数位数的小数位数的记录,并使用下面的脚本来解析它:
开始Microsoft SQL Server Management Studio,然后选择“ 新建查询 ”按钮以打开查询窗口。
对公司数据库执行以下脚本,以确定是否存在具有非零第三位、第四位或第五位小数位数值的记录:
注意
如果 checkbook 的货币有 2 个小数,则每行的脚本中的“3”将检查分数的第三个位置。 因此,如果货币具有 3 个小数位数,请将脚本调整为“4”,依此调整。
select 'CM20200' AS 'TABLE',DEX_ROW_ID,ClrdAmt,TRXAMNT,ORIGAMT,Checkbook_Amount,* from CM20200 where right(ClrdAmt,3)<>0 or right(TRXAMNT,3)<>0 or right(ORIGAMT,3)<>0 or right(Checkbook_Amount,3)<>0 select 'CM20400' AS 'TABLE',DEX_ROW_ID,DEBITAMT,CRDTAMNT,* from CM20400 where right(DEBITAMT,3)<>0 or right(CRDTAMNT,3)<>0 select 'CM20500' AS 'TABLE',DEX_ROW_ID,StmntBal,CUTOFFBAL,ClrePayAmt,ClrdDepAmt,Cleared_Difference,OUTPAYTOT,OUTDEPTOT,IINADJTOT,DECADJTOT,ASOFBAL, * from CM20500 where right(StmntBal,3)<>0 or right(CUTOFFBAL,3)<>0 or right(ClrePayAmt,3)<>0 or right(ClrdDepAmt,3)<>0 or right(Cleared_Difference,3)<>0 or right(OUTPAYTOT,3)<>0 or right(OUTDEPTOT,3)<>0 or right(IINADJTOT,3)<>0 or right(DECADJTOT,3)<>0 or right(ASOFBAL,3)<>0 select 'CM20501' AS 'TABLE', DEX_ROW_ID,TRXAMNT,* from CM20501 where right(TRXAMNT,3)<>0 select 'CM20201' AS 'TABLE', DEX_ROW_ID, Orig_Credit_Card_Total,Originating_Cash_Total,Originating_Deposit_Amou,Originating_Checkbook_Am,* from CM20201 where right(ORCHKTTL,3)<>0 or right(Orig_Credit_Card_Total,3)<>0 or right(Originating_Cash_Total,3)<>0 or right(Originating_Deposit_Amou,3)<>0 or right(Originating_Checkbook_Am,3)<>0
重要
请务必滚动浏览返回的任何记录,以记下返回的任何记录的所有“amount”列。
此外,执行此脚本以查看 Checkbook Master 表中的金额:
select CURRBLNC,* from CM00100 where CHEKBKID = 'xxx' --modify the xxx placeholder with your checkbook ID.
在继续之前,请先创建公司数据库的当前可还原备份,或在测试环境中执行此操作。
重要
请勿跳过此步骤。
根据你在其中找到分数的表/字段,读取以下两种方法,并使用相应的方法解决问题:
方法 1:直接在 SQL 中更新每个字段,以删除小数点。
只需使用类似于以下示例的脚本直接在 SQL 表(s)中更新上述脚本找到的数量。 更新要删除不需要的分数的金额后,刷新“选择银行交易”窗口以查看问题是否已解决。
下面是一个示例脚本,用于一次更新一个字段:
UPDATE CMXXXXX SET YYYYY = '$.$$000' where DEX_ROW_ID = x --Before executing this script, update the placedholders as needed: -Modify the CMXXXXX placeholder with the correct table name; -Modify the YYYYY placedholder with the correct field name in that table; -Modify the $.$$000 with the correct amount with 2 decimal places, -Modify the x with the specific Dex Row ID for the record that you need to modify. Repeat as many times as needed to update each field/table returned by the script in step 2 and/or step 3 that has more than 2 decimal places.
注意
保持一致。 如果在步骤 2 中为Checkbook_Amt字段找到的脚本在表中更新任何金额,则可能需要在同一方向更新CM00100 Checkbook Master 表中的当前 checkbook 余额值。 此外,在对 Checkbook Master 表运行更新脚本之前,请务必让所有用户退出 Microsoft Dynamics GP。 你不希望任何人在进行此维护时发布和更改 checkbook 的当前余额量。
方法 2:求和字段总计,以查看是否有小数位数的总和。
执行以下脚本以按类型验证字段总计。 查看是否有比所使用的货币 ID 更多的小数。 此外,如果记录是导入或从第三方软件导入的,则你可能已导入的金额比 GP 中允许的小数位数。 在这种情况下,需要计算“净差”并更新此差异的单个记录,以便完全平衡到 0.00000 美元。 如果需要进一步的帮助才能执行此操作,可能需要打开支持事件。 如果你自己这样做,请务必先在测试公司中执行此操作。
下面是一个示例脚本,用于按类型对CM20200表的每个数量字段求和:
select Distinct(CMTRXTYPE)as 'Type',SUM(TRXAMNT)as 'TRXAMNT', SUM (ORIGAMT)as 'ORIGAMT', SUM(Checkbook_Amount)as 'Checkbook_Amount' from CM20200 where CHEKBKID='XXX' group by CMTRXTYPE
--update the XXX placeholder with the appropriate checkbook ID.
事务类型:
1 = 存款
2 = 收据
3 = 检查
4 = 取款
5 = 增加调整
6 = 减少调整
7 = 传输
101 = 利息收入
102 = 其他收入
103 = 其他费用
104 = 服务费
注意
记下所更改的任何金额,因为对于同一差异,可能需要在同一方向更新CM00100支票余额。
详细信息
最后一种方法是检查 SQL 排序规则和 SQL Server 排序顺序,以查看你是否在受支持的环境中。 (支持 Latin1-General 和 SQL Server 排序顺序为 50 或 52 的 SQL 排序规则。即使差异为 $0.00000,则协调可能不会在不支持的版本上运行。如果使用的 SQL 排序规则或 SQL Server 排序顺序不受支持,则需要与 SQL Server 团队打开支持事件,以获取有关如何更改 SQL 排序规则/SQL 排序顺序的其他帮助,然后才能继续。 运行此脚本以确定 SQL 排序规则和 SQL Server 排序顺序:
sp_helpsort