Giá trị trong trường "Số tiền còn lại", mục sổ kế toán được tạo ra cho hóa đơn không đúng ngay cả khi bạn áp dụng hotfix 975264 trong Microsoft Dynamics NAV 2009


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


Xem xét kịch bản sau đây trong Microsoft Dynamics NAV 2009:
  • Khi áp dụng hotfix 975264.
    Để biết thêm thông tin về hotfix 975264, nhấp vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
    975264 giá trị trong trường "Số tiền còn lại", mục sổ kế toán được tạo ra thanh toán không đúng trong Microsoft Dynamics NAV
  • Bạn nhập một giá trị Appln. Làm tròn chính xác trường tab ứng dụng trong hộp thoại Thiết lập sổ cái chung .
  • Bạn gửi hóa đơn bán hàng.
  • Bạn gửi Nhật ký nhận tiền mặt cho đơn bán hàng.
Trong trường hợp này, giá trị trong trường Số tiền còn lại trong mục sổ cái tương ứng không chính xác. Không có giá trị sẽ được hiển thị trong trường Số tiền còn lại .
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, nó chỉ được dùng để 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 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 kích hoạt PostCust trong các tướng Jnl.-bài dòng codeunit (12) như sau:
    Mã hiện tại
    ...// Post the application
    ApplyCustLedgEntry(

    // Delete the following line.
    CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,GLSetup."Appln. Rounding Precision");

    // Post customer entry
    ...
    Thay thế mã
    ...// Post the application
    ApplyCustLedgEntry(

    // Add the following line.
    CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine);

    // Post customer entry
    ...
  2. Thay đổi mã trong kích hoạt PostVend trong các tướng Jnl.-bài dòng codeunit (12) như sau:
    Mã hiện tại
    ...// Post the application
    ApplyVendLedgEntry(

    // Delete the following lines.
    CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,
    GLSetup."Appln. Rounding Precision");
    // End of the lines.

    // Post Vendor entry
    ...
    Thay thế mã
    ...// Post the application
    ApplyVendLedgEntry(

    // Add the following line.
    CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine);

    // Post Vendor entry
    ...
  3. Thêm tham số mới cục bộ trong hàm ApplyCustLedgEntry trong các tướng Jnl.-đăng dòng codeunit (12), và sau đó xác định các tham số như sau:
    • Var: No
    • Tên: ApplnRoundingPrecision
    • Loại dữ liệu: thập phân
  4. Thêm một biến địa phương mới chức năng ApplyCustLedgEntry trong các tướng Jnl.-bài dòng codeunit (12), và sau đó xác định biến như sau:
    • Tên: ApplnRoundingPrecision
    • Loại dữ liệu: thập phân
  5. Thay đổi mã trong hàm ApplyCustLedgEntry trong các tướng Jnl.-bài dòng codeunit (12) như sau:
    Mã hiện 1
    ...NewCVLedgEntryBuf2 := NewCVLedgEntryBuf;

    // Delete the following lines.
    IF NewCVLedgEntryBuf."Currency Code" <> '' THEN BEGIN
    Management of application of already posted entries
    IF NewCVLedgEntryBuf."Currency Code" <> ApplnCurrency.Code THEN
    ApplnCurrency.GET(NewCVLedgEntryBuf."Currency Code");
    ApplnRoundingPrecision := ApplnCurrency."Appln. Rounding Precision";
    END ELSE
    ApplnRoundingPrecision := GLSetup."Appln. Rounding Precision";
    // End of the lines.

    ApplyingDate := GenJnlLine."Posting Date";

    IF GenJnlLine."Applies-to Doc. No." <> '' THEN BEGIN
    ...
    Thay thế mã 1
    ...NewCVLedgEntryBuf2 := NewCVLedgEntryBuf;

    ApplyingDate := GenJnlLine."Posting Date";

    IF GenJnlLine."Applies-to Doc. No." <> '' THEN BEGIN
    ...
    Hiện có mã 2
    ...// Management of posting in multiple currencies
    OldCVLedgEntryBuf2 := OldCVLedgEntryBuf;
    OldCVLedgEntryBuf.COPYFILTER(Positive,OldCVLedgEntryBuf2.Positive);

    IF NewCVLedgEntryBuf."Currency Code" <> OldCVLedgEntryBuf2."Currency Code" THEN BEGIN

    ...
    Thay thế mã 2
    ...// Management of posting in multiple currencies
    OldCVLedgEntryBuf2 := OldCVLedgEntryBuf;
    OldCVLedgEntryBuf.COPYFILTER(Positive,OldCVLedgEntryBuf2.Positive);

    // Add the following line.
    GetApplnRoundPrecision(ApplnRoundingPrecision,NewCVLedgEntryBuf,OldCVLedgEntryBuf);

    IF NewCVLedgEntryBuf."Currency Code" <> OldCVLedgEntryBuf2."Currency Code" THEN BEGIN
    ...
  6. Thay đổi mã trong hàm CustPostApplyCustLedgEntry trong các tướng Jnl.-bài dòng codeunit (12) như sau:
    Mã hiện tại
    ...// Post the application
    CustLedgEntry.CALCFIELDS(
    Amount,"Amount (LCY)","Remaining Amount","Remaining Amt. (LCY)",
    "Original Amount","Original Amt. (LCY)");
    TransferCustLedgEntry(CVLedgEntryBuf,CustLedgEntry,TRUE);
    ApplyCustLedgEntry(

    // Delete the following line.
    CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,GLSetup."Appln. Rounding Precision");

    TransferCustLedgEntry(CVLedgEntryBuf,CustLedgEntry,FALSE);
    CustLedgEntry.MODIFY;
    ...
    Thay thế mã
    ...// Post the application
    CustLedgEntry.CALCFIELDS(
    Amount,"Amount (LCY)","Remaining Amount","Remaining Amt. (LCY)",
    "Original Amount","Original Amt. (LCY)");
    TransferCustLedgEntry(CVLedgEntryBuf,CustLedgEntry,TRUE);
    ApplyCustLedgEntry(

    // Add the following line.
    CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine);

    TransferCustLedgEntry(CVLedgEntryBuf,CustLedgEntry,FALSE);
    CustLedgEntry.MODIFY;
    ...
  7. Thêm tham số mới cục bộ trong hàm ApplyVendLedgEntry trong các tướng Jnl.-bài dòng codeunit (12), và sau đó xác định các tham số như sau:
    • Var: No
    • Tên: ApplnRoundingPrecision
    • Loại dữ liệu: thập phân
  8. Thêm một biến địa phương mới chức năng ApplyVendLedgEntry trong các tướng Jnl.-đăng dòng codeunit (12), và sau đó xác định biến như sau:
    • Tên: ApplnRoundingPrecision
    • Loại dữ liệu: thập phân
  9. Thay đổi mã trong hàm ApplyVendLedgEntry trong các tướng Jnl.-bài dòng codeunit (12) như sau:
    Mã hiện 1
    ...NewCVLedgEntryBuf2 := NewCVLedgEntryBuf;

    // Delete the following lines.
    IF NewCVLedgEntryBuf."Currency Code" <> '' THEN BEGIN
    // Management of application of already posted entries
    IF NewCVLedgEntryBuf."Currency Code" <> ApplnCurrency.Code THEN
    ApplnCurrency.GET(NewCVLedgEntryBuf."Currency Code");
    ApplnRoundingPrecision := ApplnCurrency."Appln. Rounding Precision";
    END ELSE
    ApplnRoundingPrecision := GLSetup."Appln. Rounding Precision";
    // End of the lines.

    ApplyingDate := GenJnlLine."Posting Date";

    IF GenJnlLine."Applies-to Doc. No." <> '' THEN BEGIN
    ...
    Thay thế mã 1
    ...NewCVLedgEntryBuf2 := NewCVLedgEntryBuf;

    ApplyingDate := GenJnlLine."Posting Date";

    IF GenJnlLine."Applies-to Doc. No." <> '' THEN BEGIN
    ...
    Hiện có mã 2
    ...// Management of posting in multiple currencies
    OldCVLedgEntryBuf2 := OldCVLedgEntryBuf;
    OldCVLedgEntryBuf.COPYFILTER(Positive,OldCVLedgEntryBuf2.Positive);

    IF NewCVLedgEntryBuf."Currency Code" <> OldCVLedgEntryBuf2."Currency Code" THEN BEGIN
    ...
    Thay thế mã 2
    ...// Management of posting in multiple currencies
    OldCVLedgEntryBuf2 := OldCVLedgEntryBuf;
    OldCVLedgEntryBuf.COPYFILTER(Positive,OldCVLedgEntryBuf2.Positive);

    // Add the following line.
    GetApplnRoundPrecision(ApplnRoundingPrecision,NewCVLedgEntryBuf,OldCVLedgEntryBuf);

    IF NewCVLedgEntryBuf."Currency Code" <> OldCVLedgEntryBuf2."Currency Code" THEN BEGIN
    ...
  10. Thay đổi mã trong hàm VendPostApplyVendLedgEntry trong các tướng Jnl.-đăng dòng codeunit (12) như sau:
    Mã hiện tại
    ...// Post the application
    VendLedgEntry.CALCFIELDS(
    Amount,"Amount (LCY)","Remaining Amount","Remaining Amt. (LCY)",
    "Original Amount","Original Amt. (LCY)");
    TransferVendLedgEntry(CVLedgEntryBuf,VendLedgEntry,TRUE);
    ApplyVendLedgEntry(

    // Delete the following line.
    CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,GLSetup."Appln. Rounding Precision");

    TransferVendLedgEntry(CVLedgEntryBuf,VendLedgEntry,FALSE);
    ...
    Thay thế mã
    ...// Post the application
    VendLedgEntry.CALCFIELDS(
    Amount,"Amount (LCY)","Remaining Amount","Remaining Amt. (LCY)",
    "Original Amount","Original Amt. (LCY)");
    TransferVendLedgEntry(CVLedgEntryBuf,VendLedgEntry,TRUE);
    ApplyVendLedgEntry(

    // Add the following line.
    CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine);

    TransferVendLedgEntry(CVLedgEntryBuf,VendLedgEntry,FALSE);
    ...
  11. Tạo funtion GetApplnRoundPrecision mới trong các tướng Jnl.-bài dòng codeunit (12). Để tạo các chức năng, hãy làm theo các bước sau:
    1. Thêm một số địa phương mới funtion GetApplnRoundPrecision trong các tướng Jnl.-đăng dòng codeunit (12), và sau đó xác định các tham số như sau:
      • Var:
      • Tên: ApplnRoundingPrecision
      • Loại dữ liệu: thập phân
    2. Thêm một số địa phương mới funtion GetApplnRoundPrecision trong các tướng Jnl.-bài dòng codeunit (12), và sau đó xác định các tham số như sau:
      • Var: No
      • Tên: NewCVLedgEntryBuf
      • Loại dữ liệu: hồ sơ
      • Phiên bản: hồ sơ sổ cái mục đệm
    3. Thêm một số địa phương mới funtion GetApplnRoundPrecision trong các tướng Jnl.-bài dòng codeunit (12), và sau đó xác định các tham số như sau:
      • Var: No
      • Tên: OldCVLedgEntryBuf
      • Loại dữ liệu: hồ sơ
      • Phiên bản: hồ sơ sổ cái mục đệm
    4. Thêm một biến địa phương mới funtion GetApplnRoundPrecision trong các tướng Jnl.-bài dòng codeunit (12), và sau đó xác định biến như sau:
      • Tên: CurrencyExistInledger
      • Loại dữ liệu: Boolean
    5. Thêm một biến địa phương mới funtion GetApplnRoundPrecision trong các tướng Jnl.-đăng dòng codeunit (12), và sau đó xác định biến như sau:
      • Tên: CurrencyCode
      • Loại dữ liệu:
      • Độ dài: 20
    6. Thêm mã sau trong funtion GetApplnRoundPrecision trong các tướng Jnl.-đăng dòng codeunit (12):
      IF NewCVLedgEntryBuf."Currency Code" <> '' THENCurrencyCode := NewCVLedgEntryBuf."Currency Code"
      ELSE
      CurrencyCode := OldCVLedgEntryBuf."Currency Code";
      IF CurrencyCode <> ApplnCurrency.Code THEN
      CurrencyExistInledger := ApplnCurrency.GET(CurrencyCode);

      IF CurrencyExistInledger THEN BEGIN
      IF ApplnCurrency."Appln. Rounding Precision" <> 0 THEN
      ApplnRoundingPrecision := ApplnCurrency."Appln. Rounding Precision"
      ELSE
      ApplnRoundingPrecision := GLSetup."Appln. Rounding Precision";
      END;

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