Bỏ qua để tới nội dung chính
Đăng nhập với Microsoft
Đăng nhập hoặc tạo một tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

Bài viết này áp dụng cho Microsoft Dynamics NAV cho tất cả các nước và tất cả ngôn ngữ.

Triệu chứng

Sau khi bạn chạy chức Nhận bán hàng để đơn đặt hàng đặc biệt đặc biệt trong Microsoft Dynamics NAV 2009 mua, vận chuyển đến mã trường trong tiêu đề đặc biệt mua hàng trống bất ngờ.
Sự cố này xảy ra trong các sản phẩm sau:

  • Microsoft Dynamics NAV 2009 R2

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

Giải pháp

Thông tin về cập nhật nóng

Microsoft hiện đã cung cấp bản cập nhật nóng được hỗ trợ. Tuy nhiên, đó là chỉ nhằm khắc phục sự cố được mô tả trong bài viết này. Áp dụng cho các hệ thống đang gặp sự cố cụ thể này. Hotfix này có thể được kiểm tra thêm. Do đó, nếu bạn không bị ảnh hưởng bởi vấn đề này, chúng tôi khuyến nghị bạn đợi cho gói dịch vụ tiếp theo của Microsoft Dynamics NAV 2009 hoặc phiên bản Microsoft Dynamics NAV tiếp theo có chứa hotfix này.

Lưu ý Trong trường hợp đặc biệt, chi phí thường phát sinh để hỗ trợ các cuộc gọi có thể bị hủy bỏ nếu chuyên viên hỗ trợ kỹ thuật cho Microsoft Dynamics và sản phẩm liên quan xác định rằng một Cập Nhật cụ thể sẽ giải quyết vấn đề của bạn. Chi phí hỗ trợ thông thường sẽ áp dụng cho các vấn đề không phù hợp với bản Cập Nhật cụ thể trong câu hỏi và câu hỏi hỗ trợ bổ sung.

Thông tin cài đặt

Microsoft cung cấp mô hình lập trình để minh hoạ, không bảo hành hoặc rõ ràng hay ngụ ý. Điều này bao gồm, nhưng không giới hạn bảo đảm cho một mục đích cụ thể hoặc sự. Bài viết này giả định rằng bạn đã quen với ngôn ngữ lập trình đang được giải thích và các công cụ được sử dụng để tạo và quy trình gỡ lỗi. Các kỹ sư hỗ trợ Microsoft có thể giúp giải thích các chức năng của một quy trình cụ thể, nhưng chúng sẽ không sửa đổi các ví dụ để cung cấp thêm chức năng hoặc xây dựng quy trình nhằm đáp ứng các yêu cầu cụ thể của bạn.

Lưu ý Trước khi bạn cài đặt hotfix này, kiểm chứng rằng tất cả Microsoft Navision khách người dùng đăng xuất hệ thống. Điều này bao gồm Microsoft Navision ứng dụng dịch vụ (NAS) khách hàng người dùng. Bạn có người chỉ khách hàng đang đăng nhập khi bạn áp dụng hotfix này.

Để áp dụng hotfix này, bạn phải có một giấy phép nhà phát triển.

Chúng tôi khuyên bạn nên tài khoản người dùng trong cửa sổ thông tin đăng nhập Windows hoặc trong cửa sổ thông tin đăng nhập cơ sở dữ liệu được gán vai trò "Siêu" của bạn. Nếu tài khoản người dùng không thể gán vai trò "SUPER" ID, bạn phải xác minh rằng tài khoản người dùng có các quyền sau đây:

  • Thay đổi quyền cho các đối tượng mà bạn sẽ thay đổi.

  • Quyền thực thi các đối tượng hệ thống đối tượng ID 5210 và các đối tượng hệ thống đối tượng ID 9015 .



Lưu ý Bạn không cần phải có quyền để lưu trữ dữ liệu nếu bạn phải tiến hành sửa chữa dữ liệu.

Thay đổi mã

Lưu ý Luôn kiểm tra mã khắc phục trong một môi trường được kiểm soát trước khi bạn áp dụng bản vá để sản xuất máy tính của bạn.
Để khắc phục sự cố này, hãy làm theo các bước sau:

  1. Thay đổi mã trong funtion GetDescriptionAndRcptName trong các trong codeunit ReqJnlManagement (330) như sau:
    Mã hiện tại

    ...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
    ...

    Thay thế mã

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

    IF ReqLine."Vendor No." = '' THEN
    ...
  2. Thêm một biến toàn cầu mới trong các Req. Wksh.-thực hiện lệnh codeunit (333), và sau đó xác định biến như sau:

    • Tên: DropShptSpecialOrderExists

    • Loại dữ liệu: Boolean

  3. Thêm một biến địa phương mới chức năng InsertPurchOrderLine trong các Req. Wksh.-thực hiện lệnh codeunit (333), và sau đó xác định biến như sau:

    • Tên: SalesHeader

    • Loại dữ liệu: hồ sơ

    • Phiên bản: bán hàng đầu

  4. Thêm một biến địa phương mới chức năng InsertPurchOrderLine trong các Req. Wksh.-thực hiện lệnh codeunit (333), và sau đó xác định biến như sau:

    • Tên: DropShptSplOrderDiffAddress

    • Loại dữ liệu: phép

  5. Thay đổi mã trong hàm InsertPurchOrderLine trong các Req. Wksh.-thực hiện lệnh codeunit (333) như sau:
    Mã hiện tại

    ...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
    ...

    Thay thế mã

    ...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. Thêm một biến địa phương mới chức năng InsertHeader trong các Req. Wksh.-thực hiện lệnh codeunit (333), và sau đó xác định biến như sau:

    • Tên: SalesHeader

    • Loại dữ liệu: hồ sơ

    • Phiên bản: bán hàng đầu

  7. Thay đổi mã trong hàm InsertHeader trong các Req. Wksh.-thực hiện lệnh codeunit (333) như sau:
    Mã hiện tại

    ...PurchOrderHeader.SetShipToForSpecOrder;
    END;

    PurchOrderHeader.MODIFY;
    ...

    Thay thế mã

    ...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. Thay đổi mã trong hàm EnterPurchaseItemCrossRef codeunit tích hợp quận (5702) như sau:
    Mã hiện tại

    ...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;
    ...

    Thay thế mã

    ...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. Thay đổi mã trong hàm GetSpecialOrders codeunit tích hợp quận (5702) như sau:
    Mã hiện tại

    ...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;
    ...

    Thay thế mã

    ...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. Thay đổi mã trong hàm TransfldsFromSalesToPurchLine bản sao tài liệu Mgt. codeunit (6620) như sau:
    Mã hiện tại

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

    Thay thế mã

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

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

    END;
    ...
  11. Thay đổi mã trong mã Purch.-được thả Shpt. codeunit (76) như sau:
    Mã hiện 1

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

    PurchLine.LOCKTABLE;
    ...

    Thay thế mã 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;
    ...

    Hiện có mã 2

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

    Thay thế mã 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. Thay đổi mã trong InsertReqWkshLine trong báo cáo được bán hàng (698) như sau:
    Mã hiện tại

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

    Thay thế mã

    ..."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. Thêm một biến chung mới mua tiêu đề bảng (38), và sau đó xác định biến như sau:

    • Tên: NameAddressDetails

    • Loại dữ liệu: văn bản

    • Chiều dài: 512

  14. Thêm một biến chung mới mua tiêu đề bảng (38), và sau đó xác định biến như sau:

    • Tên: NameAddressDetails2

    • Loại dữ liệu: văn bản

    • Độ dài: 512

  15. Thêm một số văn bản mới trong bảng mua đầu (38), và sau đó xác định hằng số văn bản như sau:

    • Tên: Text051

    • ConstValue: trường %1 ngày mua hàng %2 phải giống như bán hàng đặt %3.

  16. Tạo ra một chức năng CheckAndAddShipToAdd mới trong bảng mua tiêu đề (38). Để thực hiện việc này, hãy làm theo các bước sau:

    1. Thêm tham số mới cục bộ trong hàm CheckAndAddShipToAdd mua tiêu đề bảng (38), và sau đó xác định các tham số như sau:

      • Var: No

      • Tên: SalesHeader

      • Loại dữ liệu: hồ sơ

      • Phiên bản: bán hàng đầu

    2. Thêm tham số mới cục bộ trong hàm CheckAndAddShipToAdd mua tiêu đề bảng (38), và sau đó xác định các tham số như sau:

      • Var: No

      • Tên: ShowError

      • Loại dữ liệu: Boolean

    3. Thêm giá trị trả lại chức năng CheckAndAddShipToAdd trong bảng mua tiêu đề (38), và sau đó xác định giá trị trả lại như sau:

      • Trở về loại: Boolean

    4. Thêm một biến địa phương mới trong hàm CheckAndAddShipToAdd mua đầu bảng (38), và sau đó xác định biến như sau:

      • Tên: PurchLine2

      • Loại dữ liệu: hồ sơ

      • Phiên bản: PurchLine2

    5. Thêm mã sau trong hàm CheckAndAddShipToAdd mua tiêu đề bảng (38):

      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. Tạo ra một chức năng DropShptSplOrderExists mới trong bảng mua đầu (38). Để thực hiện việc này, hãy làm theo các bước sau:

    1. Thêm tham số mới cục bộ trong hàm DropShptSplOrderExists mua tiêu đề bảng (38), và sau đó xác định các tham số như sau:

      • Var: No

      • Tên: SalesHeader

      • Loại dữ liệu: hồ sơ

      • Phiên bản: bán hàng đầu

    2. Thêm kiểu giá trị trả lại chức năng DropShptSplOrderExists trong bảng mua tiêu đề (38), và sau đó xác định giá trị trả lại như sau:

      • Trở về loại: phép

    3. Thêm một biến địa phương mới chức năng DropShptSplOrderExists trong bảng mua đầu (38), và sau đó xác định biến như sau:

      • Tên: SalesLine2

      • Loại dữ liệu: hồ sơ

      • Phiên bản: dòng bán hàng

    4. Thêm mã sau trong hàm DropShptSplOrderExists mua tiêu đề bảng (38):

      // 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);

Điều kiện tiên quyết

Bạn phải có một trong các sản phẩm được cài đặt để áp dụng hotfix này:

  • Microsoft Dynamics NAV 2009 R2

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

Thông tin về việc loại bỏ

Bạn không thể xoá hotfix này.

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".

Lưu ý Đây là một bài viết "XUẤT BẢN NHANH" được tạo trực tiếp từ trung tâm hỗ trợ của Microsoft. Thông tin này được cung cấp-trả lời cho các vấn đề mới xuất hiện. Vì nhanh chóng có sẵn, các tài liệu có thể bao gồm lỗi và có thể được sửa đổi bất kỳ lúc nào mà không cần thông báo. Xem Điều khoản sử dụng để xem xét khác.

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?
Khi nhấn gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Người quản trị CNTT của bạn sẽ có thể thu thập dữ liệu này. Điều khoản về quyền riêng tư.

Cảm ơn phản hồi của bạn!

×