Bài viết này áp dụng cho Microsoft Dynamics NAV cho ngôn ngữ tiếng Bồ Đào Nha (ỏ).
Triệu chứng
Khi bạn gửi một Nhật ký nhận tiền hóa đơn bị từ chối hóa đơn cùng một lúc trong phiên bản tiếng Bồ Đào Nha của Microsoft Dynamics NAV 2009, tất cả các mục đăng sổ kế toán chung được đăng bằng cách sử dụng tài khoản hóa đơn từ chối. Tuy nhiên, tài khoản phải thu khoản sẽ được sử dụng cho hóa đơn, và tài khoản hóa đơn từ chối nên sử dụng tài liệu bị từ chối. Sự cố này xảy ra trong các sản phẩm sau:
-
Phiên bản Microsoft Dynamics NAV 2009 R2 Bồ Đào Nha
-
Phiên bản tiếng Bồ Đào Nha của Microsoft Dynamics NAV 2009 Service Pack 1
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. Vì vậy, nếu bạn không bị ảnh hưởng bởi sự cố 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ợ cuộc gọi có thể được 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 ở các 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ể. Tuy nhiên, họ 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 cài đặt hotfix này, xác minh 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 người dùng. Bạn nên khách hàng chỉ người được đăng nhập khi bạn áp dụng hotfix này.
Để áp dụng hotfix này, bạn phải có 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, thay đổi mã trong các tướng Jnl.-bài dòng codeunit (12). Để thực hiện việc này, hãy làm theo các bước sau:
-
Địa chỉ toàn cầu biến sau:
TempRejCustLedgEntry@1100047 : TEMPORARY Record 21;
-
Thay đổi mã chức năng PostCust như sau:
Hiện có mã 1... DiscRiskFactAmountLCY := 0;
DiscUnriskFactAmountLCY := 0;
CollFactAmountLCY := 0;
//--------
IF Cust."No." <> "Account No." THEN
Cust.GET("Account No.");
Cust.CheckBlockedCustOnJnls(Cust,"Document Type",TRUE);
IF "Posting Group" = '' THEN BEGIN
...Thay thế mã 1
... DiscRiskFactAmountLCY := 0;
DiscUnriskFactAmountLCY := 0;
CollFactAmountLCY := 0;
//--------
// Add the following lines.
TempRejCustLedgEntry.RESET;
TempRejCustLedgEntry.DELETEALL;
// End of the lines.
IF Cust."No." <> "Account No." THEN
Cust.GET("Account No.");
Cust.CheckBlockedCustOnJnls(Cust,"Document Type",TRUE);
IF "Posting Group" = '' THEN BEGIN
...Hiện có mã 2
... END;
// Post the application
ApplyCustLedgEntry(
CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,GLSetup."Appln. Rounding Precision");
// Delete the following lines.
IF GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::" " THEN
GenJnlLine."Applies-to Doc. Type" := AppliesToDocType;
// End of the lines.
IF AppManagement.AccessToCartera AND NOT GenJnlLine.Prepayment THEN BEGIN
IF "Document Type" = "Document Type"::Bill THEN BEGIN
DocPost.CreateReceivableDoc(GenJnlLine,CVLedgEntryBuf);
CustLedgEntry."Document Situation" := CustLedgEntry."Document Situation"::Cartera;
...Thay thế mã 2
... END;
// Post the application
ApplyCustLedgEntry(
CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,GLSetup."Appln. Rounding Precision");
// Add the following lines.
IF ("Applies-to ID" = '') AND ("Applies-to Doc. Type" = "Applies-to Doc. Type"::" ") THEN
"Applies-to Doc. Type" := AppliesToDocType;
// End of the lines.
IF AppManagement.AccessToCartera AND NOT GenJnlLine.Prepayment THEN BEGIN
IF "Document Type" = "Document Type"::Bill THEN BEGIN
DocPost.CreateReceivableDoc(GenJnlLine,CVLedgEntryBuf);
CustLedgEntry."Document Situation" := CustLedgEntry."Document Situation"::Cartera;
... -
Thay đổi mã chức năng PostVend như sau:
Mã hiện tại... // Post the application
ApplyVendLedgEntry(
CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,
GLSetup."Appln. Rounding Precision");
// Delete the following lines.
IF GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::" " THEN
GenJnlLine."Applies-to Doc. Type" := AppliesToDocType;
// End of the lines.
IF AppManagement.AccessToCartera AND NOT GenJnlLine.Prepayment THEN BEGIN
IF "Document Type" = "Document Type"::Bill THEN BEGIN
DocPost.CreatePayableDoc(GenJnlLine,CVLedgEntryBuf);
VendLedgEntry."Document Situation" := VendLedgEntry."Document Situation"::Cartera;
...Thay thế mã
... // Post the application
ApplyVendLedgEntry(
CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,
GLSetup."Appln. Rounding Precision");
// Add the following lines.
IF ("Applies-to ID" = '') AND ("Applies-to Doc. Type" = "Applies-to Doc. Type"::" ") THEN
"Applies-to Doc. Type" := AppliesToDocType;
// End of the lines.
IF AppManagement.AccessToCartera AND NOT GenJnlLine.Prepayment THEN BEGIN
IF "Document Type" = "Document Type"::Bill THEN BEGIN
DocPost.CreatePayableDoc(GenJnlLine,CVLedgEntryBuf);
VendLedgEntry."Document Situation" := VendLedgEntry."Document Situation"::Cartera;
... -
Thay đổi mã chức năng ApplyCustLedgEntry như sau:
Mã hiện tại... OldCustLedgEntry."Document Situation"::"Closed Documents",
OldCustLedgEntry."Document Situation"::"Closed BG/PO"]) THEN
FromClosedDoc := TRUE
ELSE
FromClosedDoc := FALSE;
DocPost.UpdateReceivableDoc(
OldCustLedgEntry,GenJnlLine,AppliedAmountLCY + DeltaUnrealAmount + DeltaAmountLCY,
DocAmountLCY,RejDocAmountLCY,DiscDocAmountLCY,CollDocAmountLCY,
DiscRiskFactAmountLCY,DiscUnriskFactAmountLCY,CollFactAmountLCY);
END;
...Thay thế mã
... OldCustLedgEntry."Document Situation"::"Closed Documents",
OldCustLedgEntry."Document Situation"::"Closed BG/PO"]) THEN
FromClosedDoc := TRUE
ELSE
FromClosedDoc := FALSE;
// Add the following lines.
IF OldCustLedgEntry."Document Status" = OldCustLedgEntry."Document Status"::Rejected THEN BEGIN
TempRejCustLedgEntry := OldCustLedgEntry;
TempRejCustLedgEntry."Remaining Amount (LCY) stats." := AppliedAmountLCY + DeltaUnrealAmount + DeltaAmountLCY;
TempRejCustLedgEntry.INSERT;
END;
// End of the lines.
DocPost.UpdateReceivableDoc(
OldCustLedgEntry,GenJnlLine,AppliedAmountLCY + DeltaUnrealAmount + DeltaAmountLCY,
DocAmountLCY,RejDocAmountLCY,DiscDocAmountLCY,CollDocAmountLCY,
DiscRiskFactAmountLCY,DiscUnriskFactAmountLCY,CollFactAmountLCY);
END;
... -
Thay đổi mã chức năng PostDtldCustLedgEntries như sau:
Mã hiện tại... AccNo := CustPostingGr."Bills Account";
END ELSE BEGIN
CustPostingGr.TESTFIELD("Receivables Account");
AccNo := CustPostingGr."Receivables Account";
END;
// Delete the following lines.
IF DiscDocAmountLCY <> 0 THEN BEGIN
CustPostingGr.TESTFIELD("Discted. Bills Acc.");
AccNo := CustPostingGr."Discted. Bills Acc.";
END;
IF CollDocAmountLCY <> 0 THEN BEGIN
CustPostingGr.TESTFIELD("Bills on Collection Acc.");
AccNo := CustPostingGr."Bills on Collection Acc.";
END;
IF RejDocAmountLCY <> 0 THEN BEGIN
CASE GenJnlLine."Applies-to Doc. Type" OF
GenJnlLine."Applies-to Doc. Type"::Bill:
BEGIN
CustPostingGr.TESTFIELD("Rejected Bills Acc.");
AccNo := CustPostingGr."Rejected Bills Acc.";
END;
GenJnlLine."Applies-to Doc. Type"::Invoice:
BEGIN
CustPostingGr.TESTFIELD("Rejected Factoring Acc.");
AccNo := CustPostingGr."Rejected Factoring Acc.";
END;
ELSE
IF (GenJnlLine."Document Type" IN [GenJnlLine."Document Type"::"Credit Memo",GenJnlLine."Document Type"::Payment]) AND
(OldCVLedgEntryBuf4."Applies-to ID" <> '') THEN BEGIN
CASE OldCVLedgEntryBuf4."Document Type" OF
OldCVLedgEntryBuf4."Document Type"::Bill:
BEGIN
CustPostingGr.TESTFIELD("Receivables Account");
AccNo := CustPostingGr."Receivables Account";
END;
OldCVLedgEntryBuf4."Document Type"::Invoice:
BEGIN
CustPostingGr.TESTFIELD("Receivables Account");
AccNo := CustPostingGr."Receivables Account";
END;
END;
END;
END;
END;
IF (DiscRiskFactAmountLCY <> 0) OR (DiscUnriskFactAmountLCY <> 0) THEN BEGIN
CustPostingGr.TESTFIELD("Factoring for Discount Acc.");
AccNo := CustPostingGr."Factoring for Discount Acc.";
END;
IF CollFactAmountLCY <> 0 THEN BEGIN
CustPostingGr.TESTFIELD("Factoring for Collection Acc.");
AccNo := CustPostingGr."Factoring for Collection Acc.";
END;
// End of the lines.
ReceivableAccAmtLCY :=
TotalAmountLCY -
(DocAmountLCY + DiscDocAmountLCY +
CollDocAmountLCY + RejDocAmountLCY + DiscRiskFactAmountLCY +
...Thay thế mã
... AccNo := CustPostingGr."Bills Account";
END ELSE BEGIN
CustPostingGr.TESTFIELD("Receivables Account");
AccNo := CustPostingGr."Receivables Account";
END;
ReceivableAccAmtLCY :=
TotalAmountLCY -
(DocAmountLCY + DiscDocAmountLCY +
CollDocAmountLCY + RejDocAmountLCY + DiscRiskFactAmountLCY +
... -
Thay đổi mã chức năng PostReceivableDocs như sau:
Mã hiện tại... GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
InsertGLEntry(TRUE);
END;
IF RejDocAmountLCY <> 0 THEN BEGIN
// Delete the following lines.
CASE GenJnlLine."Applies-to Doc. Type" OF
GenJnlLine."Applies-to Doc. Type"::Bill:
BEGIN
CustPostingGr.TESTFIELD("Rejected Bills Acc.");
InitGLEntry(CustPostingGr."Rejected Bills Acc.",RejDocAmountLCY,DocAmtCalcAddCurrency(RejDocAmountLCY),TRUE,TRUE);
GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
InsertGLEntry(TRUE);
END;
GenJnlLine."Applies-to Doc. Type"::Invoice:
BEGIN
CustPostingGr.TESTFIELD("Rejected Factoring Acc.");
InitGLEntry(CustPostingGr."Rejected Factoring Acc.",RejDocAmountLCY,DocAmtCalcAddCurrency(RejDocAmountLCY),TRUE,TRUE);
GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
InsertGLEntry(TRUE);
END;
ELSE
IF (GenJnlLine."Document Type" IN [GenJnlLine."Document Type"::"Credit Memo",GenJnlLine."Document Type"::Payment]) AND
(OldCVLedgEntryBuf4."Applies-to ID" <> '') THEN BEGIN
CASE OldCVLedgEntryBuf4."Document Type" OF
OldCVLedgEntryBuf4."Document Type"::Bill:
BEGIN
CustPostingGr.TESTFIELD("Rejected Bills Acc.");
InitGLEntry(CustPostingGr."Rejected Bills Acc.",RejDocAmountLCY,DocAmtCalcAddCurrency(RejDocAmountLCY),TRUE,TRUE);
GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
InsertGLEntry(TRUE);
END;
OldCVLedgEntryBuf4."Document Type"::Invoice:
BEGIN
CustPostingGr.TESTFIELD("Rejected Factoring Acc.");
InitGLEntry(CustPostingGr."Rejected Factoring Acc.",RejDocAmountLCY,DocAmtCalcAddCurrency(RejDocAmountLCY),TRUE,TRUE
);
GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
InsertGLEntry(TRUE);
END;
END;
END;
// End of the lines.
END;
END;
IF DiscRiskFactAmountLCY <> 0 THEN BEGIN
CustPostingGr.TESTFIELD("Factoring for Discount Acc.");
InitGLEntry(CustPostingGr."Factoring for Discount Acc.",
...Thay thế mã
... GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
InsertGLEntry(TRUE);
END;
IF RejDocAmountLCY <> 0 THEN BEGIN
// Add the following lines.
WITH TempRejCustLedgEntry DO BEGIN
RESET;
SETCURRENTKEY("Customer No.","Document Type","Document Situation","Document Status");
SETRANGE("Document Type","Document Type"::Bill);
CALCSUMS("Remaining Amount (LCY) stats.");
IF "Remaining Amount (LCY) stats." <> 0 THEN BEGIN
CustPostingGr.TESTFIELD("Rejected Bills Acc.");
InitGLEntry(
CustPostingGr."Rejected Bills Acc.","Remaining Amount (LCY) stats.",
DocAmtCalcAddCurrency("Remaining Amount (LCY) stats."),TRUE,TRUE);
GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
InsertGLEntry(TRUE);
END;
SETRANGE("Document Type","Document Type"::Invoice);
CALCSUMS("Remaining Amount (LCY) stats.");
IF "Remaining Amount (LCY) stats." <> 0 THEN BEGIN
CustPostingGr.TESTFIELD("Rejected Factoring Acc.");
InitGLEntry(
CustPostingGr."Rejected Factoring Acc.","Remaining Amount (LCY) stats.",
DocAmtCalcAddCurrency("Remaining Amount (LCY) stats."),TRUE,TRUE);
GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
InsertGLEntry(TRUE);
END;
// End of the lines.
END;
END;
IF DiscRiskFactAmountLCY <> 0 THEN BEGIN
CustPostingGr.TESTFIELD("Factoring for Discount Acc.");
InitGLEntry(CustPostingGr."Factoring for Discount Acc.",
...
Đ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:
-
Phiên bản Microsoft Dynamics NAV 2009 R2 Bồ Đào Nha
-
Phiên bản tiếng Bồ Đào Nha của Microsoft Dynamics NAV 2009 Service Pack 1
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.