如何排查水晶报表®错误

本文介绍如何解决Solomon中常见的Crystal Report®错误。

适用于: Microsoft Dynamics SL
原始 KB 数: 844751

  1. Microsoft Dynamics SL 支持安装 Crystal Reports®、其标准报告的内容、其标准报告的性能,以及对有关 Crystal 中基本功能的一般操作方法问题的答复。 Microsoft Dynamics SL 不强制提供对已修改或新开发的报表的调试支持,但会遵循常规技术支持故障排除技术(如下所述)来验证是否不存在Microsoft Dynamics SL 错误。

  2. 报告故障排除过程的主要目标是确定报告错误的原因。 为此,应要求以下问题来帮助了解问题的详细信息:

    • 正在打印哪份报表?
    • 正在打印该报表的格式是什么?
    • 报表是否自定义?
    • 是否使用模板、排序和/或选择?
    • 此报告是否曾经有效? 有何变化?
    • 报表是否在其他数据库中工作(例如演示数据库)?
  3. 下一步是通过尝试重新创建错误来确定问题是否与数据库或应用程序相关。 如果可以在其他数据库中重新创建相同的错误(演示数据库),Dynamics SL 技术支持将记录并提交测试步骤到 Dynamics SL 开发组,以便可以传递更正。 但是,如果错误似乎只特定于该数据库,则可能表明实际数据出现问题,而不是应用程序错误。

有关对水晶报告®进行故障排除的完整说明,请参阅以下步骤。

注意

如果在故障排除过程中出现任何问题,请在尝试建议的操作之前联系技术支持以澄清。

  1. 通过查看 ROI(投资回报)屏幕标题栏中显示的报表名称和屏幕编号来确定要打印的报表。

  2. 确定打印报表时选择哪个报表格式。 例如,如果对常规账本详细信息报表进行故障排除,则确定正在使用哪两种报表格式:标准或多货币。

  3. 使用查询分析器确定与报表格式对应的报表文件名,步骤 2 中指出。 若要执行此操作,请访问相应的系统数据库并执行以下语句:

    SELECT * from RPTCONTROL where ReportNbr = '01620'
    

    注意

    其中ReportNbr = 报表屏幕的前 5 位数字。 该值应在引号中输入,而不输入十进制值。 对于此示例 01620,代表 GL 总账(明细)报告(01.620.00)。

    查看存储在 ReportFormat00 - ReportFormat07 字段中的信息。 找到所需的报表格式名称并记下在其中找到的 ReportFormatXX 字段。 相应的报表文件名将在匹配的 ReportNameXX 字段中找到,即 *。打印报表时 Dynamics SL 使用的 RPT 文件名。 根据示例,“详细信息总账本”报表的标准格式存储在 ReportFormat00 和相应的 *中。RPT 报表文件名 - 01620 在 ReportName00 中找到。

    注意

    所有信息都很重要,因为后续步骤中需要此信息。

  4. 确定报表是否为标准 Dynamics SL 报表。

    1. 使用文件资源管理器查看 DYNAMICSSL\USR_RPTS 目录的内容,并确定步骤 3 中记录的 *.RPT 文件是否存在。 如果是这样,则可能表明自定义报表。 将该文件重命名为 。

    2. 使用资源管理器,找到并记下 *。RPT 文件位于模块的子目录中(即 \SOLOMONIV\GL\01620.RPT)。 如果日期与 Dynamics SL CD 上与当前安装的产品相对应的日期不同,则可能指示自定义报表或报表安装失败。 将此文件重命名并替换为相应的产品 CD 或 Service Pack 中的一个文件。 如果使用 CD,请删除只读属性。 重新测试报表。

  5. 删除任何模板、排序或选择并重新测试报表。 如果报表打印成功,请使用演示数据库重新创建“排序选择”,并比较结果。 如果两者都收到错误,则问题可能与可用性或潜在缺陷相关。 如果使用演示数据库时未收到错误,请继续执行步骤 6。

  6. 使用查询分析器中的以下语句从 RPTRUNTIME 和 RPTCOMPANY 中删除任何孤立的临时记录。 在执行语句之前,所有用户都必须退出 Dynamics SL。

    注意

    RPTRUNTIME 位于 Dynamics SL 中的系统和应用程序数据库中。 RPTCOMPANY 仅在所罗门 IV 版本 4.x 应用程序数据库中找到。 这些表用于标识打印报表的用户和工作站,允许多个用户同时打印同一报表。

    1. 访问相应的系统数据库并执行以下语句:

      DELETE from RPTRUNTIME
      
    2. 选择适当的应用程序数据库并执行以下语句:

      DELETE from RPTRUNTIME
      
      DELETE from RPTCOMPANY
      
    3. 执行这些语句后,如果仍然有错误报告,但无法在演示数据库中重现,请继续执行以下步骤来检查实际数据。

  7. 查看报表使用的 SQL 查询。

    1. 在 Crystal Reports® Designer 中访问报表。

    2. 选择 “数据库”,显示 SQL 查询。

    3. 从计算机数据源列表中选择数据库源名称。 选择“确定”

    4. 在 SQL Server 登录屏幕中再次选择“ 确定 ”以以 sa 身份登录。

      以下示例是总账明细报表使用的 SQL 查询。 此语句针对数据库执行,查询使用的 FROM 子句包含用于打印报表的数据库表或视图。 依赖于工作表的报表将在 FROM 子句中显示对象名称,其开头或结尾带有 WRK 。 依赖于视图的报表将显示以vr开头的对象名称。

      SELECT vr_01620."Acct", vr_01620."Sub", ..... FROM "DemoApp0060"."dbo"."vr_01620"
      

      vr_01620 记录 Query 语句的 FROM 节中列出的任何表或视图。 如果列出了工作表,请继续执行步骤 8。 如果列出了视图,请继续执行步骤 9。 如果工作表和视图均未列出,请继续执行步骤 10。

  8. 在查询分析器中,使用以下语句删除 Work Table 中的所有孤立记录。 在执行语句之前,所有用户都必须退出 Dynamics SL。

    注意

    工作表是仅在打印报表或进程运行时使用的空表。 除非某个依赖特定工作表格的报表正在 Dynamics SL 中生成,否则工作表格应保持空置。 例如,AR 客户对账单(08.600.00)使用名为 AR08600_wrk 的工作表。 AR08600_wrk将显示在步骤 7 中引用的 FROM 子句中。

    访问相应的应用程序数据库并执行以下语句:

    DELETE from AR08600_WRK
    

    继续执行步骤 9。

  9. 重新生成系统和应用程序数据库的视图、存储过程和索引。 重新测试报表。

  10. 如果在从“工作表”中删除孤立记录、重新创建视图或查询语句中未使用“工作表”和“视图”的情况下继续出现错误,则需要查看从视图、存储过程或查询返回的实际数据。 在查询分析器中执行步骤 7 中审核的 Crystal SQL 查询语句。

    1. 访问相应的应用程序数据库,并将步骤 7 中查看的 SQL 查询语句复制并粘贴到查询窗口中。

    2. 使用 “编辑”删除引号, 替换“查找内容:”选择 全部替换。 这将删除所有引用。 替换为留空。

    3. 从查询中删除限定的数据库名称、所有者、对象名称。

    4. 使用步骤 7 中提供的示例,删除DemoApp0060.dbo.vr_01620,只留下vr_01620

    5. 在 Dynamics SL 中,从 ROI 屏幕打印报表预览。 在屏幕上保留任何错误消息,而无需选择“ 确定”。 这会将必要的临时记录插入 RPTCOMPANY。

    6. 在查询分析器中执行 SQL 查询语句,并查看数据中无效或缺失的数据。

    7. 如果在查看数据后,确定报告问题的原因丢失或损坏数据,请使用相应的模块完整性检查(仅验证选项)来验证支持记录是否存在。 有关运行完整性检查的详细信息,请参阅 Dynamics SL 在线帮助或用户指南。

  11. 如果需要进一步的帮助,请联系 Dynamics SL 技术支持。