使用 Microsoft 登入
登入或建立帳戶。
您好:
選取其他帳戶。
您有多個帳戶
選擇您要用來登入的帳戶。

本文適用於 Microsoft 動態航行點的所有國家/地區和所有的語言地區設定。

狀況

執行以特殊順序的取得銷貨單函式中特殊之後購買 Microsoft 動態航行點 2009 年的順序,在特殊的訂購單的標頭中的 [送貨地址-程式碼] 欄位是空的意外。
下列產品中,就會發生這個問題︰

  • Microsoft 動態航行點 2009 R2

  • Microsoft 動態航行點 2009 Service Pack 1 (SP1)

解決方案

Hotfix 資訊

已經可以從 Microsoft 取得支援的 hotfix。不過,它只被用來修正本文所述的問題。它只適用於發生此特定問題的系統上。此 hotfix 可能會接受其他測試。因此,如果此問題不會嚴重影響,我們建議您等候下一步的 Microsoft 動態航行點 2009 service pack 或包含此 hotfix 的下一個 Microsoft 動態航行點版本。

注意 在特殊的情況下,通常會支援呼叫可能已被取消如果技術支援專業人員的 Microsoft 動態及相關的產品所產生的費用會決定某特定更新程式可以解決您的問題。收取支援費用會套用,如果有其他支援問題是,不能限定的特定更新程式。

安裝資訊

Microsoft 會提供程式設計範例僅供說明,而不做任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保責任。本文假設您已相當熟悉使用的我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序中,功能,但它們不會修改這些範例以提供附加功能或建構程序來滿足您特定需求。

注意套用此 hotfix 之前,請確認所有的 Microsoft Navision 用戶端使用者會登出系統。這包括 Microsoft Navision 應用程式服務 (NAS) 用戶端的使用者。您應該是唯一的用戶端使用者已登入,當您實作此 hotfix。

若要實作此 hotfix,您必須有開發人員授權。

我們建議您在 Windows 登入] 視窗中的色彩,或資料庫登入] 視窗中的使用者帳戶被指派 「 進階 」 的角色識別碼。如果使用者帳戶不能指派為 「 超級 」 的角色識別碼,您必須確認使用者帳戶具有下列權限︰

  • 您將會變更物件的 [修改] 權限。

  • 執行權限的系統物件 ID 5210物件和系統物件 ID 9015物件。



注意您沒有擁有資料存放區的權限,除非您需要執行資料修復。

程式碼變更

注意永遠測試程式碼修正在受控制的環境中才能套用到實際執行電腦的修正程式。
若要解決這個問題,請依照下列步驟執行:

  1. 變更中的GetDescriptionAndRcptName funtion 中的程式碼在 ReqJnlManagement codeunit (330),如下所示︰
    現有的程式碼

    ...ELSE
    Description := '';

    // Delete the following lines.
    ReqLine.Type::Item:
    IF Item.GET(ReqLine."No.") THEN
    Description := Item.Description
    ELSE
    Description := '';
    // End of the lines.

    END;
    END;

    IF ReqLine."Vendor No." = '' THEN
    ...

    取代程式碼

    ...ELSE
    Description := '';
    END;
    END;

    IF ReqLine."Vendor No." = '' THEN
    ...
  2. 加入新的全域變數在 Req.Wksh。-請順序 codeunit (333),然後指定變數,如下所示︰

    • 名稱︰ DropShptSpecialOrderExists

    • 資料類型布林

  3. 新增新的本機變數中的InsertPurchOrderLine函式在 Req.Wksh。-請順序 codeunit (333),然後指定變數,如下所示︰

    • 名稱︰ SalesHeader

    • 資料型別資料錄

    • 子類型銷售的標頭

  4. 新增新的本機變數中的InsertPurchOrderLine函式在 Req.Wksh。-請順序 codeunit (333),然後指定變數,如下所示︰

    • 名稱︰ DropShptSplOrderDiffAddress

    • 資料型別 ,則為 True

  5. 變更程式碼中的InsertPurchOrderLine函式在 Req.Wksh。-請順序 codeunit (333),如下所示︰
    現有的程式碼

    ...WITH ReqLine2 DO BEGIN
    IF ("No." = '') OR ("Vendor No." = '') OR (Quantity = 0) THEN
    EXIT;


    IF (PurchOrderHeader."Buy-from Vendor No." <> "Vendor No.") OR
    (PurchOrderHeader."Sell-to Customer No." <> "Sell-to Customer No.") OR
    (PrevShipToCode <> "Ship-to Code") OR
    (PurchOrderHeader."Order Address Code" <> "Order Address Code") OR
    (PurchOrderHeader."Currency Code" <> "Currency Code") OR

    // Delete the following line.
    (PrevPurchCode <> "Purchasing Code")

    THEN BEGIN
    ...

    取代程式碼

    ...WITH ReqLine2 DO BEGIN
    IF ("No." = '') OR ("Vendor No." = '') OR (Quantity = 0) THEN
    EXIT;

    // Add the following lines.
    DropShptSpecialOrderExists := FALSE;
    IF SalesHeader.GET(SalesHeader."Document Type"::Order,"Sales Order No.") THEN BEGIN
    DropShptSpecialOrderExists := PurchOrderHeader.DropShptSplOrderExists(SalesHeader);
    IF DropShptSpecialOrderExists THEN
    DropShptSplOrderDiffAddress :=
    NOT PurchOrderHeader.CheckAndAddShipToAdd(SalesHeader,FALSE);
    END;
    // End of the lines.

    IF (PurchOrderHeader."Buy-from Vendor No." <> "Vendor No.") OR
    (PurchOrderHeader."Sell-to Customer No." <> "Sell-to Customer No.") OR
    (PrevShipToCode <> "Ship-to Code") OR
    (PurchOrderHeader."Order Address Code" <> "Order Address Code") OR
    (PurchOrderHeader."Currency Code" <> "Currency Code") OR

    // Add the following lines.
    (PrevPurchCode <> "Purchasing Code") OR
    (DropShptSplOrderDiffAddress)
    // End of the lines.

    THEN BEGIN
    ...
  6. 新增新的本機變數中的InsertHeader函式在 Req.Wksh。-請順序 codeunit (333),然後指定變數,如下所示︰

    • 名稱︰ SalesHeader

    • 資料型別記錄

    • 子類型銷售的標頭

  7. 變更程式碼中的InsertHeader函式在 Req.Wksh。-請順序 codeunit (333),如下所示︰
    現有的程式碼

    ...PurchOrderHeader.SetShipToForSpecOrder;
    END;

    PurchOrderHeader.MODIFY;
    ...

    取代程式碼

    ...PurchOrderHeader.SetShipToForSpecOrder;
    END;

    // Add the following lines.
    IF DropShptSpecialOrderExists THEN BEGIN
    SalesHeader.GET(SalesHeader."Document Type"::Order,"Sales Order No.");
    PurchOrderHeader."Ship-to Name" := SalesHeader."Ship-to Name";
    PurchOrderHeader."Ship-to Name 2" := SalesHeader."Ship-to Name 2";
    PurchOrderHeader."Ship-to Address" := SalesHeader."Ship-to Address";
    PurchOrderHeader."Ship-to Address 2" := SalesHeader."Ship-to Address 2";
    PurchOrderHeader."Ship-to Post Code" := SalesHeader."Ship-to Post Code";
    PurchOrderHeader."Ship-to City" := SalesHeader."Ship-to City";
    PurchOrderHeader."Ship-to Contact" := SalesHeader."Ship-to Contact";
    END;
    // End of the lines.

    PurchOrderHeader.MODIFY;
    ...
  8. 變更 Dist.整合 codeunit (5702) 的EnterPurchaseItemCrossRef函式中的程式碼如下所示︰
    現有的程式碼

    ...IF Found THEN BEGIN
    "Cross-Reference No." := ItemCrossReference."Cross-Reference No.";
    "Unit of Measure (Cross Ref.)" := ItemCrossReference."Unit of Measure";
    "Cross-Reference Type" := ItemCrossReference."Cross-Reference Type";
    "Cross-Reference Type No." := ItemCrossReference."Cross-Reference Type No.";

    // Delete the following lines.
    IF ItemCrossReference.Description <> '' THEN BEGIN
    Description := ItemCrossReference.Description;
    "Description 2" := '';
    END;
    // End of the lines.

    END ELSE BEGIN
    "Cross-Reference No." := '';
    "Cross-Reference Type" := "Cross-Reference Type"::" ";
    "Cross-Reference Type No." := '';

    // Delete the following lines.
    IF "Variant Code" <> '' THEN BEGIN
    ItemVariant.GET("No.","Variant Code");
    Description := ItemVariant.Description;
    "Description 2" := ItemVariant."Description 2";
    END ELSE BEGIN
    Item.GET("No.");
    Description := Item.Description;
    "Description 2" := Item."Description 2";
    END;
    // End of the lines.

    GetItemTranslation;
    ...

    取代程式碼

    ...IF Found THEN BEGIN
    "Cross-Reference No." := ItemCrossReference."Cross-Reference No.";
    "Unit of Measure (Cross Ref.)" := ItemCrossReference."Unit of Measure";
    "Cross-Reference Type" := ItemCrossReference."Cross-Reference Type";
    "Cross-Reference Type No." := ItemCrossReference."Cross-Reference Type No.";
    END ELSE BEGIN
    "Cross-Reference No." := '';
    "Cross-Reference Type" := "Cross-Reference Type"::" ";
    "Cross-Reference Type No." := '';
    GetItemTranslation;
    ...
  9. 變更 Dist.整合 codeunit (5702) 的GetSpecialOrders函式中的程式碼如下所示︰
    現有的程式碼

    ...TESTFIELD("Sell-to Customer No.",SalesHeader."Sell-to Customer No.");
    TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    // Delete the following line.
    PurchHeader.SetShipToForSpecOrder;

    PurchLine.LOCKTABLE;
    ...

    取代程式碼

    ...TESTFIELD("Sell-to Customer No.",SalesHeader."Sell-to Customer No.");
    TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    // Add the following lines.
    IF DropShptSplOrderExists(SalesHeader) THEN
    CheckAndAddShipToAdd(SalesHeader,TRUE);
    // End of the lines.

    PurchLine.LOCKTABLE;
    ...
  10. 變更複製文件 Mgt.codeunit (6620) 的TransfldsFromSalesToPurchLine函式中的程式碼如下所示︰
    現有的程式碼

    ...VALIDATE("Direct Unit Cost");
    END;
    ...

    取代程式碼

    ...VALIDATE("Direct Unit Cost");

    // Add the following lines.
    Description := FromSalesLine.Description;
    "Description 2" := FromSalesLine."Description 2";
    // End of the lines.

    END;
    ...
  11. 變更程式 Purch.的程式碼中的程式碼-取得拖放 Shpt.codeunit (76),如下所示︰
    現有的程式碼 1

    ...TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    PurchLine.LOCKTABLE;
    ...

    取代程式碼 1

    ...TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    // Add the following line.
    IF DropShptSplOrderExists(SalesHeader) THEN
    CheckAndAddShipToAdd(SalesHeader,TRUE);
    // End of the lines.

    PurchLine.LOCKTABLE;
    ...

    現有的程式碼 2

    ...CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);
    PurchLine.Description := SalesLine.Description;
    PurchLine."Sales Order No." := SalesLine."Document No.";
    ...

    取代程式碼 2

    ...CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);
    PurchLine.Description := SalesLine.Description;

    // Add the following line.
    PurchLine."Description 2" := SalesLine."Description 2";

    PurchLine."Sales Order No." := SalesLine."Document No.";
    ...
  12. 變更在取得銷售訂單報表 (698) 中的InsertReqWkshLine中的程式碼如下所示︰
    現有的程式碼

    ..."Sell-to Customer No." := SalesLine."Sell-to Customer No.";
    SalesHeader.GET(1,SalesLine."Document No.");
    IF SpecOrder <> 1 THEN
    ...

    取代程式碼

    ..."Sell-to Customer No." := SalesLine."Sell-to Customer No.";

    // Add the following lines.
    Description := SalesLine.Description;
    "Description 2" := SalesLine."Description 2";
    // End of the lines.

    SalesHeader.GET(1,SalesLine."Document No.");
    IF SpecOrder <> 1 THEN
    ...
  13. 在購買的標頭資料表 (38),新增新的全域變數,然後指定變數,如下所示︰

    • 名稱︰ NameAddressDetails

    • 資料類型文字

    • 長度︰ 512

  14. 在購買的標頭資料表 (38),新增新的全域變數,然後指定變數,如下所示︰

    • 名稱︰ NameAddressDetails2

    • 資料型別文字

    • 長度︰ 512

  15. 在購買的標頭資料表 (38),新增新的文字常數,然後指定文字的常數,如下所示︰

    • 名稱︰ Text051

    • ConstValue:在採購 %2 的 %1 欄位必須與銷售訂購 %3 的相同。

  16. 購買的標頭資料表 (38) 中建立新的CheckAndAddShipToAdd函式。若要執行這項操作,請參考下列步驟:

    1. 購買的標頭資料表 (38),在CheckAndAddShipToAdd函式中加入新的本機參數,然後指定參數,如下所示︰

      • Var: No

      • 名稱︰ SalesHeader

      • 資料型別資料錄

      • 子類型銷售的標頭

    2. 購買的標頭資料表 (38),在CheckAndAddShipToAdd函式中加入新的本機參數,然後指定參數,如下所示︰

      • Var: No

      • 名稱︰ ShowError

      • 資料類型布林

    3. 購買的標頭資料表 (38),在CheckAndAddShipToAdd函式中加入傳回的值,然後指定傳回值,如下所示︰

      • 傳回型別布林

    4. 購買的標頭資料表 (38),在CheckAndAddShipToAdd函式中加入新的本機變數,然後指定變數,如下所示︰

      • 名稱︰ PurchLine2

      • 資料型別資料錄

      • 子類型PurchLine2

    5. 購買的標頭資料表 (38) 中的CheckAndAddShipToAdd函式中加入下列程式碼︰

      IF ShowError THEN BEGINPurchLine2.RESET;
      PurchLine2.SETRANGE("Document Type","Document Type"::Order);
      PurchLine2.SETRANGE("Document No.","No.");
      IF NOT PurchLine2.ISEMPTY THEN BEGIN
      IF "Ship-to Name" <> SalesHeader."Ship-to Name" THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Name"),"No.",SalesHeader."No.");
      IF "Ship-to Name 2" <> SalesHeader."Ship-to Name 2" THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Name 2"),"No.",SalesHeader."No.");
      IF ("Ship-to Address" <> SalesHeader."Ship-to Address") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Address"),"No.",SalesHeader."No.");
      IF ("Ship-to Address 2" <> SalesHeader."Ship-to Address 2") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Address 2"),"No.",SalesHeader."No.");
      IF ("Ship-to Post Code" <> SalesHeader."Ship-to Post Code") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Post Code"),"No.",SalesHeader."No.");
      IF ("Ship-to City" <> SalesHeader."Ship-to City") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to City"),"No.",SalesHeader."No.");
      IF ("Ship-to Contact" <> SalesHeader."Ship-to Contact") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Contact"),"No.",SalesHeader."No.");
      END ELSE BEGIN
      // no purchase line exists
      "Ship-to Name" := SalesHeader."Ship-to Name";
      "Ship-to Name 2" := SalesHeader."Ship-to Name 2";
      "Ship-to Address" := SalesHeader."Ship-to Address";
      "Ship-to Address 2" := SalesHeader."Ship-to Address 2";
      "Ship-to Post Code" := SalesHeader."Ship-to Post Code";
      "Ship-to City" := SalesHeader."Ship-to City";
      "Ship-to Contact" := SalesHeader."Ship-to Contact";
      END;
      END ELSE BEGIN
      NameAddressDetails :=
      SalesHeader."Ship-to Name" + SalesHeader."Ship-to Name 2" +
      SalesHeader."Ship-to Address" + SalesHeader."Ship-to Address 2" +
      SalesHeader."Ship-to Post Code" + SalesHeader."Ship-to City" +
      SalesHeader."Ship-to Contact";
      IF NameAddressDetails2 = '' THEN
      NameAddressDetails2 := NameAddressDetails;
      EXIT(NameAddressDetails2 = NameAddressDetails);
      END;
  17. 購買的標頭資料表 (38) 中建立新的DropShptSplOrderExists函式。若要執行這項操作,請參考下列步驟:

    1. 購買的標頭資料表 (38),在DropShptSplOrderExists函式中加入新的本機參數,然後指定參數,如下所示︰

      • Var: No

      • 名稱︰ SalesHeader

      • 資料型別資料錄

      • 子類型銷售的標頭

    2. 購買的標頭資料表 (38),在DropShptSplOrderExists函式中加入傳回值的型別,然後指定傳回值,如下所示︰

      • 傳回型別布林

    3. 購買的標頭資料表 (38),在DropShptSplOrderExists函式中加入新的本機變數,然後指定變數,如下所示︰

      • 名稱︰ SalesLine2

      • 資料型別資料錄

      • 子類型銷售的行

    4. 購買的標頭資料表 (38) 中的DropShptSplOrderExists函式中加入下列程式碼︰

      // returns TRUE if sales is either Drop Shipment of Special OrderSalesLine2.RESET;
      SalesLine2.SETRANGE("Document Type",SalesLine2."Document Type"::Order);
      SalesLine2.SETRANGE("Document No.",SalesHeader."No.");
      SalesLine2.SETRANGE("Drop Shipment",TRUE);
      IF NOT SalesLine2.ISEMPTY THEN
      EXIT(TRUE);

      SalesLine2.SETRANGE("Drop Shipment");
      SalesLine2.SETRANGE("Special Order",TRUE);
      EXIT(NOT SalesLine2.ISEMPTY);

先決條件

您必須具備套用此 hotfix 之後安裝下列產品的其中一個︰

  • Microsoft 動態航行點 2009 R2

  • Microsoft 動態航行點 2009 Service Pack 1 (SP1)

移除資訊

您無法移除此 hotfix。

狀態

Microsoft 已確認這是<套用>一節所列出的 Microsoft 產品的問題。

注意這是直接從 Microsoft 支援組織內建立的「快速發行」文件。本文件所包含的現狀資訊是針對新興問題的回應。為縮短使其可用的時程,資料可能會包含印刷錯誤,且可能會隨時進行修改而不另行通知。如其他考量,請參閱 「使用規定」。

需要更多協助嗎?

想要其他選項嗎?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

這項資訊有幫助嗎?

您對語言品質的滿意度如何?
以下何者是您會在意的事項?
按下 [提交] 後,您的意見反應將用來改善 Microsoft 產品與服務。 您的 IT 管理員將能夠收集這些資料。 隱私權聲明。

感謝您的意見反應!

×