关闭制造订单时出现“此制造订单具有挂起的组件事务”错误

本文提供了用于解决在 Microsoft dynamics GP 中尝试关闭制造订单时出现的错误消息的方法。

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

注意

在按照本文中的说明操作之前,请确保拥有数据库的完整备份副本,如果出现问题,可以还原该副本。

现象

尝试关闭“制造订单关闭”窗口中的完整制造订单或“编辑制造订单状态”窗口时,Microsoft Dynamics GP 和 Microsoft Business Solutions - Great Plains 中,将收到以下错误消息:

此制造订单具有挂起的组件交易。 有关详细信息,请参阅选择文档 XXXXX。

注意

XXXXXX 是选取文档编号的占位符。

原因

此问题可能由于以下原因之一而发生:

  • 已保存的未发布选取文档适用于制造订单(MO)。 请参阅决议 1。
  • 待定数量存在于 MOP1400(MOP_Picklist_Site_QTY)表中,但这些数量没有其他制造表中的数据支持。 请参阅解决方法 2。

决议 1

若要解决此问题,请使用 SQL 查询工具查找和发布未发布的选取文档。 为此,请按照下列步骤进行操作:

  1. 启动支持管理员控制台、Microsoft SQL Query Analyzer 或 SQL Server Management Studio。 为此,请使用以下方法之一,具体取决于所使用的程序。

    • 方法 1 - 适用于 SQL Server 桌面引擎

      如果使用 SQL Server 桌面引擎(也称为 MSDE 2000),请启动支持管理员控制台。 为此,请选择“开始”,指向“所有程序”,指向“Microsoft管理员控制台”,然后选择“支持管理员控制台”。

    • 方法 2 - 对于 SQL Server 2000

      如果使用 SQL Server 2000,请启动 SQL 查询分析器。 为此,请选择“开始”,指向“所有程序”,指向Microsoft SQL Server,然后选择“查询分析器”。

    • 方法 3 - 对于 SQL Server 2005

      如果使用 SQL Server 2005,请启动 SQL Server Management Studio。 为此,请选择“开始”,指向“所有程序”,指向“MICROSOFT SQL Server 2005”,然后选择“SQL Server Management Studio”。

  2. 针对公司数据库运行以下脚本:

    Select PICKNUMBER from MOP1210 where MANUFACTUREORDER_I = 'XXXX'
    and MANUFACTUREORDER_I in (select MANUFACTUREORDER_I from MOP1400 
    where MANUFACTUREORDER_I in (select MANUFACTUREORDER_I where PENDING_REV_ISS_QTY_I > 0 
    or PENDING_ISSUE_QTY_I > 0 or PENDING_SCRAP_QTY_I > 0 or PENDING_REV_SCRAP_QTY_I > 0))
    and TRX_TYPE in (1,2,5,6) and PICKNUMBER in (select PICKNUMBER from MOP1200 where POSTED = 0)
    

    注意

    在此脚本中,必须将 XXXX 占位符替换为制造订单号。

  3. 步骤 2 中脚本返回的结果表明存在一个未发布的拣货文档。 若要发布选取文档或删除选取文档中的项目,请执行以下步骤:

    1. “事务 ”菜单上,指向 “制造”,指向 “制造订单”,然后选择“ 组件 Trx 条目”。
    2. 生产拣选编号 列表中,选择步骤 2 中的拣选文档编号。
    3. 按照以下步骤之一操作:
      • 如果要发布项,请选择“标记全部”,然后选择“发布”。

      • 如果不想发布项目,请选择每个项目编号旁边的复选框,选择“编辑”,然后选择“删除行”。

        注意

        如果从选取文档中删除了所有项目,则无需发布选取文档。

决议 2

即使没有挂起的文档,MOP1400表也可能保留选取文档的挂起数量。 若要解决此问题,请使用 SQL 查询工具来更新MOP1400表。 为此,请按照下列步骤进行操作:

  1. 启动支持管理员控制台、Microsoft SQL Query Analyzer 或 SQL Server Management Studio。 为此,请使用以下方法之一,具体取决于所使用的程序。

    • 方法 1 - 对于 SQL Server 桌面引擎

      如果使用 SQL Server 桌面引擎(也称为 MSDE 2000),请启动支持管理员控制台。 为此,请选择“开始”,指向“所有程序”,指向“Microsoft管理员控制台”,然后选择“支持管理员控制台”。

    • 方法 2 - 对于 SQL Server 2000

      如果使用 SQL Server 2000,请启动 SQL 查询分析器。 为此,请选择“开始”,指向“所有程序”,指向Microsoft SQL Server,然后选择“查询分析器”。

    • 方法 3 - 对于 SQL Server 2005

      如果使用 SQL Server 2005,请启动 SQL Server Management Studio。 为此,请选择“开始”,指向“所有程序”,指向“MICROSOFT SQL Server 2005”,然后选择“SQL Server Management Studio”。

  2. 针对公司数据库运行以下脚本:

    select PENDING_ISSUE_QTY_I, MANUFACTUREORDER_I from MOP1400 where PENDING_ISSUE_QTY_I > 0 and MANUFACTUREORDER_I = 'MOxxx' 
    select PENDING_REV_ISS_QTY_I, MANUFACTUREORDER_I from MOP1400 where PENDING_REV_ISS_QTY_I > 0 and MANUFACTUREORDER_I = 'MOxxx' 
    select PENDING_SCRAP_QTY_I, MANUFACTUREORDER_I from MOP1400 where PENDING_SCRAP_QTY_I > 0 and MANUFACTUREORDER_I = 'MOxxx' 
    select PENDING_REV_SCRAP_QTY_I, MANUFACTUREORDER_I from MOP1400 where PENDING_REV_SCRAP_QTY_I > 0 and MANUFACTUREORDER_I = 'MOxxx'
    

    注意

    在此脚本中,必须将 MOxxx 占位符替换为制造订单号。

  3. 步骤 2 中从脚本返回的结果指示必须更新MOP1400表。 针对公司数据库运行以下脚本:

    update MOP1400 set PENDING_ISSUE_QTY_I = 0 where PENDING_ISSUE_QTY_I > 0 and MANUFACTUREORDER_I = 'xxxx' 
    update MOP1400 set PENDING_REV_ISS_QTY_I = 0 where PENDING_REV_ISS_QTY_I > 0 and MANUFACTUREORDER_I = 'xxxx'
    update MOP1400 set PENDING_SCRAP_QTY_I = 0 where PENDING_SCRAP_QTY_I > 0 and MANUFACTUREORDER_I = 'xxxx' 
    update MOP1400 set PENDING_REV_SCRAP_QTY_I = 0 where PENDING_REV_SCRAP_QTY_I > 0 and MANUFACTUREORDER_I = 'xxxx' 
    

    注意

    在此脚本中,必须将 xxxx 占位符替换为制造订单号。