本文适用于所有国家/地区和所有语言区域设置的 Microsoft Dynamics NAV。
症状
假设在 Microsoft Dynamics NAV 的“制造设置”对话框中将“所有操作的预设输出数量”值设置为“零”。 为生产订单定义项跟踪。 在这种情况下,尝试发布生产订单的部分输出时,会收到以下错误消息:
注意
在“项目日记帐行”中为项 “项编号 ”定义的项跟踪超过输入的数量。 必须调整现有项跟踪并重新输入新数量。
如果尝试更正生产订单的项跟踪,则会收到以下错误消息:
注意
无法保存更正,因为已定义多余的数量。 还是关闭窗体?
以下产品中会出现此问题:
- Microsoft Dynamics NAV 2009 R2
- Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
解决方法
修补程序信息
Microsoft现在提供了受支持的修补程序。 但是,它仅用于更正本文中所述的问题。 仅将其应用于遇到此特定问题的系统。 此修补程序可能会收到其他测试。 因此,如果你没有受到此问题的严重影响,我们建议你等待下一个Microsoft Dynamics NAV Service Pack 或包含此修补程序的下一Microsoft Dynamics NAV 版本。
注意 在特殊情况下,如果 Microsoft Dynamics 和相关产品的技术支持专业人员确定特定更新将解决你的问题,则通常由支持呼叫产生的费用可能会被取消。 对于相关特定升级无法解决的其他支持问题和事项,将照常收取支持费用。
安装信息
Microsoft 的编程示例仅用于说明,不做任何明示或暗示的保证。 这包括但不限于特定用途的适销性或适用性的隐含保证。 本文假定你熟悉所演示的编程语言以及用于创建和调试过程的工具。 Microsoft 支持工程师可以帮助解释特定过程的功能。 但他们不会修改这些示例以提供附加功能或构造满足你的特定要求的过程。
注意 在安装此修补程序之前,请验证所有Microsoft Dynamics NAV 客户端用户是否已从系统注销。 这包括Microsoft Dynamics NAV 应用程序服务器 (NAS) 服务。 实现此修补程序时,应是唯一登录的客户端用户。
若要实现此修补程序,必须具有开发人员许可证。
建议为 Windows 登录窗口或数据库登录名窗口中的用户帐户分配“SUPER”角色 ID。 如果无法为用户帐户分配“SUPER”角色 ID,则必须验证该用户帐户是否具有以下权限:
要更改的 对象的“修改”权限。
系统对象 ID 5210 对象和系统对象 ID 9015 的 Execute 权限
对象。
注意 除非必须执行数据修复,否则您不必拥有数据存储的权限。
代码更改
注意 在将修补程序应用到生产计算机之前,始终在受控环境中测试代码修复。
要解决此问题,请按照下列步骤操作:
更改预留管理代码单元 (99000845) 中的代码,如下所示:
现有代码... CODE ... PROCEDURE DeleteReservEntries2@31(DeleteAll@1000 : Boolean;DownToQuantity@1001 : Decimal;VAR ReservEntry@1002 : Record 337); ... IF QtyToRelease <> 0 THEN BEGIN IF ItemTrackingHandling = ItemTrackingHandling::None THEN IF DeleteAll THEN ERROR(Text010,ReservEntry."Item No.",ReservEntry.TextCaption) ELSE // Delete the following line. ERROR(Text008,ReservEntry."Item No.",ReservEntry.TextCaption); // End of the deleted line. ...THEN CalcReservedQtyOnPick(TotalAvailQty,QtyAllocInWhse); END; BEGIN END. ...替换代码
... CODE ... PROCEDURE DeleteReservEntries2@31(DeleteAll@1000 : Boolean;DownToQuantity@1001 : Decimal;VAR ReservEntry@1002 : Record 337); ... IF QtyToRelease <> 0 THEN BEGIN IF ItemTrackingHandling = ItemTrackingHandling::None THEN IF DeleteAll THEN ERROR(Text010,ReservEntry."Item No.",ReservEntry.TextCaption) ELSE // Add the following lines. IF NOT ProdJnlLineEntry(ReservEntry) THEN ERROR(Text008,ReservEntry."Item No.",ReservEntry.TextCaption); // End of the added lines. ... THEN CalcReservedQtyOnPick(TotalAvailQty,QtyAllocInWhse); END; BEGIN // Add the following lines. WITH ReservationEntry DO EXIT(("Source Type" = DATABASE::"Item Journal Line") AND ("Source Subtype" = 6)); END; BEGIN // End of the added lines. END. ...更改“项目跟踪行”窗体 (6510) 中的代码,如下所示:
现有代码 1... Text018@1057 : TextConst 'ENU=Saving item tracking line changes'; ForBinCode@1043 : Code[20]; Text019@1013 : TextConst 'ENU=There are availability warnings on one or more lines.\Close the form anyway?'; Text020@1002 : TextConst 'ENU=Placeholder'; IsPick@1042 : Boolean; PROCEDURE SetFormRunMode@19(Mode@1000 : ',Reclass,Combined Ship/Rcpt,Drop Shipment'); ...替换代码 1
... Text018@1057 : TextConst 'ENU=Saving item tracking line changes'; ForBinCode@1043 : Code[20]; Text019@1013 : TextConst 'ENU=There are availability warnings on one or more lines.\Close the form anyway?'; Text020@1002 : TextConst 'ENU=Placeholder'; IsPick@1042 : Boolean; // Add the following line. ProdOrderLineHandling@2002 : Boolean; // End of the added line. PROCEDURE SetFormRunMode@19(Mode@1000 : ',Reclass,Combined Ship/Rcpt,Drop Shipment'); ...现有代码 2
... THEN CurrentEntryStatus := CurrentEntryStatus::Surplus ELSE CurrentEntryStatus := CurrentEntryStatus::Prospect; // Delete the following lines. IF (TrackingSpecification."Source Type" IN [DATABASE::"Item Ledger Entry", DATABASE::"Item Journal Line", DATABASE::"Job Journal Line", DATABASE::"BOM Journal Line", DATABASE::"Requisition Line"]) OR ((TrackingSpecification."Source Type" IN [DATABASE::"Sales Line",DATABASE::"Purchase Line",DATABASE::"Service Line"]) AND (TrackingSpecification."Source Subtype" IN [0,2,3])) THEN SetControls(Controls::Handle,FALSE) ELSE SetControls(Controls::Handle,TRUE); // End of the deleted lines. SetControls(Controls::Reclass,FormRunMode = FormRunMode::Reclass); ...替换代码 2
... THEN CurrentEntryStatus := CurrentEntryStatus::Surplus ELSE CurrentEntryStatus := CurrentEntryStatus::Prospect; // Add the following lines. // Set controls for Qty To Handle: SetControls(Controls::Handle,GetHandleSource(TrackingSpecification)); // Set controls for Qty To Invoice: SetControls(Controls::Invoice,GetInvoiceSource(TrackingSpecification)); // End of the added lines. SetControls(Controls::Reclass,FormRunMode = FormRunMode::Reclass); ...现有代码 3
... SetControls(Controls::Handle,TRUE); // Delete the following lines. IF (TrackingSpecification."Source Type" IN [DATABASE::"Item Ledger Entry", DATABASE::"Item Journal Line", DATABASE::"Job Journal Line", DATABASE::"BOM Journal Line", DATABASE::"Requisition Line", DATABASE::"Transfer Line", DATABASE::"Prod. Order Line", DATABASE::"Prod. Order Component"]) OR ((TrackingSpecification."Source Type" IN [DATABASE::"Sales Line",DATABASE::"Purchase Line",DATABASE::"Service Line"]) AND (TrackingSpecification."Source Subtype" IN [0,2,3,4])) THEN SetControls(Controls::Invoice,FALSE) ELSE SetControls(Controls::Invoice,TRUE); // End of the deleted lines. SetControls(Controls::Reclass,FormRunMode = FormRunMode::Reclass); ...替换代码 3
... SetControls(Controls::Handle,TRUE); SetControls(Controls::Reclass,FormRunMode = FormRunMode::Reclass); ...现有代码 4
... BEGIN UndefinedQtyArray[1] := SourceQuantityArray[1] - TotalItemTrackingLine."Quantity (Base)"; UndefinedQtyArray[2] := SourceQuantityArray[2] - TotalItemTrackingLine."Qty. to Handle (Base)"; UndefinedQtyArray[3] := SourceQuantityArray[3] - TotalItemTrackingLine."Qty. to Invoice (Base)"; // Delete the following lines. IF ABS(SourceQuantityArray[1]) < ABS(TotalItemTrackingLine."Quantity (Base)") THEN BEGIN ColorOfQuantityArray[1] := 255; QtyIsValid := FALSE; END ELSE BEGIN // End of the deleted lines. ColorOfQuantityArray[1] := 0; // Delete the following lines. QtyIsValid := TRUE; END; // End of the deleted lines. IF ABS(SourceQuantityArray[2]) < ABS(TotalItemTrackingLine."Qty. to Handle (Base)") THEN ...替换代码 4
... BEGIN UndefinedQtyArray[1] := SourceQuantityArray[1] - TotalItemTrackingLine."Quantity (Base)"; UndefinedQtyArray[2] := SourceQuantityArray[2] - TotalItemTrackingLine."Qty. to Handle (Base)"; UndefinedQtyArray[3] := SourceQuantityArray[3] - TotalItemTrackingLine."Qty. to Invoice (Base)"; // Add the following lines. QtyIsValid := ProdOrderLineHandling OR (ABS(SourceQuantityArray[1]) >= ABS(TotalItemTrackingLine."Quantity (Base)")); IF ABS(SourceQuantityArray[1]) < ABS(TotalItemTrackingLine."Quantity (Base)") THEN ColorOfQuantityArray[1] := 255 ELSE // End of the added lines. ColorOfQuantityArray[1] := 0; IF ABS(SourceQuantityArray[2]) < ABS(TotalItemTrackingLine."Qty. to Handle (Base)") THEN ...现有代码 5
... CurrForm."Appl.-from Item Entry".VISIBLE(FALSE); END; BEGIN { In order to provide F6 invoked lookup from availability bitmap columns, a menu button has been hidden behind control 1. ...替换代码 5
... CurrForm."Appl.-from Item Entry".VISIBLE(FALSE); END; // Add the following lines. PROCEDURE GetHandleSource@63(TrackingSpecification@2004 : Record 336) : Boolean; VAR QtyToHandleColumnIsHidden@2005 : Boolean; // End of the added lines. BEGIN // Add the following lines. WITH TrackingSpecification DO BEGIN IF ("Source Type" = DATABASE::"Item Journal Line") AND ("Source Subtype" = 6) THEN BEGIN // 6 => Prod.order line ProdOrderLineHandling := TRUE; EXIT(TRUE); // Display Handle column for prod. orders END; QtyToHandleColumnIsHidden := ("Source Type" IN [DATABASE::"Item Ledger Entry", DATABASE::"Item Journal Line", DATABASE::"Job Journal Line", DATABASE::"Requisition Line"]) OR (("Source Type" IN [DATABASE::"Sales Line",DATABASE::"Purchase Line",DATABASE::"Service Line"]) AND ("Source Subtype" IN [0,2,3])); END; EXIT(NOT QtyToHandleColumnIsHidden); END; PROCEDURE GetInvoiceSource@73(TrackingSpecification@2007 : Record 336) : Boolean; VAR QtyToInvoiceColumnIsHidden@2009 : Boolean; BEGIN WITH TrackingSpecification DO BEGIN QtyToInvoiceColumnIsHidden := ("Source Type" IN [DATABASE::"Item Ledger Entry", DATABASE::"Item Journal Line", DATABASE::"Job Journal Line", DATABASE::"Requisition Line", DATABASE::"Transfer Line", DATABASE::"Prod. Order Line", DATABASE::"Prod. Order Component"]) OR (("Source Type" IN [DATABASE::"Sales Line",DATABASE::"Purchase Line",DATABASE::"Service Line"]) AND ("Source Subtype" IN [0,2,3,4])) END; EXIT(NOT QtyToInvoiceColumnIsHidden); END; BEGIN // End of the added lines. { In order to provide F6 invoked lookup from availability bitmap columns, a menu button has been hidden behind control 1. ...
先决条件
必须安装以下产品之一才能应用此修补程序:
- Microsoft Dynamics NAV 2009 R2
- Microsoft Dynamics NAV 2009 Service Pack 1
删除信息
无法删除此修补程序。
状态
Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。
注意这是一篇由 Microsoft 支持组织直接创建的“快速发布”文章。 本文所包含的信息是按原样提供的,以应对新出现的问题。 由于发布速度较快,这些材料可能包含印刷错误,无需通知即可随时修改。 有关其他注意事项,请参阅使用条款。