即使當您沒有使用中的 [Microsoft 動態航行點 2009年西班牙文版本的 Cartera 權限,您可以從客戶或供應商的總帳項目套用的付款和帳單。問題是,當您"不包括 Cartera 權限 」 套用這些文件 (付款和帳單) 物料單仍會在 Cartera 款或應付帳款文件中的 「 開啟 」。這會導致不一致之處,在資料庫中。下列產品中,就會發生這個問題︰
-
西班牙文版本的 Microsoft 動態航行點 2009 R2
-
西班牙文版本的 Microsoft 動態航行點 2009 SP1
解決方案
Hotfix 資訊
已經可以從 Microsoft 取得支援的 hotfix。不過,它只被用來修正本文所述的問題。它只適用於發生此特定問題的系統上。此 hotfix 可能會接受其他測試。因此,如果此問題不會嚴重影響,我們建議您等候下一步的 Microsoft 動態航行點 2009 service pack 或包含此 hotfix 的下一個 Microsoft 動態航行點版本。
注意 在特殊的情況下,通常會支援呼叫可能已被取消如果技術支援專業人員的 Microsoft 動態及相關的產品所產生的費用會決定某特定更新程式可以解決您的問題。收取支援費用會套用,如果有其他支援問題是,不能限定的特定更新程式。
安裝資訊
Microsoft 會提供程式設計範例僅供說明,而不做任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保責任。本文假設您已相當熟悉使用的我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能。不過,它們不會修改這些範例以提供附加功能或建構程序來滿足您特定需求。
注意套用此 hotfix 之前,請確認所有的 Microsoft 動態航行點用戶端使用者會登出系統。這包括 Microsoft 動態航行點應用程式伺服器 (NAS) 服務。您應該是唯一的用戶端使用者已登入,當您實作此 hotfix。
若要實作此 hotfix,您必須有開發人員授權。
我們建議您在 Windows 登入] 視窗中的色彩,或資料庫登入] 視窗中的使用者帳戶被指派 「 進階 」 的角色識別碼。如果使用者帳戶不能指派為 「 超級 」 的角色識別碼,您必須確認使用者帳戶具有下列權限︰
-
您將會變更物件的 [修改] 權限。
-
執行權限的系統物件 ID 5210物件和系統物件 ID 9015
物件。
注意您沒有擁有資料存放區的權限,除非您需要執行資料修復。
程式碼變更
注意一定要測試程式碼修正在受控制的環境中生產電腦套用修正程式之前。前套用變更,請匯入所有的 SEPA 更新。
若要解決這個問題,請依照下列步驟執行:
-
變更程式碼,在全域的 Variablesin Gen.Jnl。-張貼行 Codeunit (12),如下所示︰
現有的程式碼...Text1100010@1100016 : TextConst 'ENU=Remove it from its payment order and try again.;ESP=B¢rrelo de la orden de pago e int‚ntelo de nuevo.';
Text1100011@1100021 : TextConst 'ENU=Document Type is " " in Line %1. This posting will not realize the VAT, do you want to proceed?;ESP=El tipo de documento es " " en la l¡nea %1. Esta contabilizaci¢n no tendr en cuenta el IVA, ¨desea continuar?';
Text1100012@1100022 : TextConst 'ENU=The posting process has been cancelled by the user.;ESP=El proceso de registro ha sido cancelado por el usuario.';
AppliedAmountLCY2@1100053 : Decimal;
AppliesToDocType@1100023 : Integer;
PROCEDURE GetGLReg@10(VAR NewGLReg@1000 : Record 45);
BEGIN
NewGLReg := GLReg;
END;
...取代程式碼
...Text1100010@1100016 : TextConst 'ENU=Remove it from its payment order and try again.;ESP=B¢rrelo de la orden de pago e int‚ntelo de nuevo.';
Text1100011@1100021 : TextConst 'ENU=Document Type is " " in Line %1. This posting will not realize the VAT, do you want to proceed?;ESP=El tipo de documento es " " en la l¡nea %1. Esta contabilizaci¢n no tendr en cuenta el IVA, ¨desea continuar?';
Text1100012@1100022 : TextConst 'ENU=The posting process has been cancelled by the user.;ESP=El proceso de registro ha sido cancelado por el usuario.';
AppliedAmountLCY2@1100053 : Decimal;
AppliesToDocType@1100023 : Integer;
// Add the following line.
Text1100013@1100026 : TextConst 'ENU=You do not have permissions to apply or unapply documents in the Cartera Module.';
// End of the added line.
PROCEDURE GetGLReg@10(VAR NewGLReg@1000 : Record 45);
BEGIN
NewGLReg := GLReg;
END;
... -
變更程式碼在ApplyCustLedgEntry函式在 Gen.Jnl。-張貼行 Codeunit (12),如下所示︰
現有的程式碼 1...OldCustLedgEntry.SETRANGE("Bill No.",NewCVLedgEntryBuf."Applies-to Bill No.");
OldCustLedgEntry.SETRANGE("Customer No.",NewCVLedgEntryBuf."CV No.");
OldCustLedgEntry.SETRANGE(Open,TRUE);
OldCustLedgEntry.FINDFIRST;
OldCustLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
IF AppManagement.AccessToCartera THEN
DocPost.CheckAppliedReceivableDoc(
OldCustLedgEntry,GenJnlLine."System-Created Entry");
...取代程式碼 1
...OldCustLedgEntry.SETRANGE("Bill No.",NewCVLedgEntryBuf."Applies-to Bill No.");
OldCustLedgEntry.SETRANGE("Customer No.",NewCVLedgEntryBuf."CV No.");
OldCustLedgEntry.SETRANGE(Open,TRUE);
OldCustLedgEntry.FINDFIRST;
// Add the following line.
CheckCarteraAccessPermissions(OldCustLedgEntry."Document Situation");
// End of the added line.
OldCustLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
IF AppManagement.AccessToCartera THEN
DocPost.CheckAppliedReceivableDoc(
OldCustLedgEntry,GenJnlLine."System-Created Entry");
...現有的程式碼 2
...// Check Cust Ledger Entry and add to Temp.
IF SalesSetup."Appln. between Currencies" = SalesSetup."Appln. between Currencies"::None THEN
OldCustLedgEntry.SETRANGE("Currency Code",NewCVLedgEntryBuf."Currency Code");
IF OldCustLedgEntry.FINDSET(FALSE,FALSE) THEN
// Delete the following lines.
REPEAT
IF GenJnlApply.CheckAgainstApplnCurrency(
NewCVLedgEntryBuf."Currency Code",
OldCustLedgEntry."Currency Code",
GenJnlLine."Account Type"::Customer,
FALSE)
THEN BEGIN
IF (OldCustLedgEntry."Posting Date" > ApplyingDate) AND (OldCustLedgEntry."Applies-to ID" <> '') THEN
ApplyingDate := OldCustLedgEntry."Posting Date";
TempOldCustLedgEntry := OldCustLedgEntry;
TempOldCustLedgEntry.INSERT;
END;
UNTIL OldCustLedgEntry.NEXT=0;
// End of the deleted lines.
TempOldCustLedgEntry.SETRANGE(Positive,NewCVLedgEntryBuf."Remaining Amount" > 0);
IF TempOldCustLedgEntry.FIND('-') THEN BEGIN
...取代程式碼 2
...// Check Cust Ledger Entry and add to Temp.
IF SalesSetup."Appln. between Currencies" = SalesSetup."Appln. between Currencies"::None THEN
OldCustLedgEntry.SETRANGE("Currency Code",NewCVLedgEntryBuf."Currency Code");
IF OldCustLedgEntry.FINDSET(FALSE,FALSE) THEN
// Add the following lines.
REPEAT
CheckCarteraAccessPermissions(OldCustLedgEntry."Document Situation");
IF GenJnlApply.CheckAgainstApplnCurrency(
NewCVLedgEntryBuf."Currency Code",
OldCustLedgEntry."Currency Code",
GenJnlLine."Account Type"::Customer,
FALSE)
THEN BEGIN
IF (OldCustLedgEntry."Posting Date" > ApplyingDate) AND (OldCustLedgEntry."Applies-to ID" <> '') THEN
ApplyingDate := OldCustLedgEntry."Posting Date";
TempOldCustLedgEntry := OldCustLedgEntry;
TempOldCustLedgEntry.INSERT;
END;
UNTIL OldCustLedgEntry.NEXT=0;
// End of the added lines.
TempOldCustLedgEntry.SETRANGE(Positive,NewCVLedgEntryBuf."Remaining Amount" > 0);
IF TempOldCustLedgEntry.FIND('-') THEN BEGIN... -
變更程式碼中的UnapplyCustLedgEntry函式在 Gen.Jnl。-張貼行 Codeunit (12),如下所示︰
現有的程式碼...DtldCustLedgEntry2.SETRANGE("Customer No.",DtldCustLedgEntry."Customer No.");
DtldCustLedgEntry2.SETFILTER("Entry Type",'>%1',DtldCustLedgEntry."Entry Type"::"Initial Entry");
UnapplyVATEntries := FALSE;
DtldCustLedgEntry2.FINDSET;
REPEAT
DtldCustLedgEntry2.TESTFIELD(Unapplied,FALSE);
IF (DtldCustLedgEntry2."Entry Type" = DtldCustLedgEntry2."Entry Type"::"Payment Discount (VAT Adjustment)") OR
(DtldCustLedgEntry2."Entry Type" = DtldCustLedgEntry2."Entry Type"::"Payment Tolerance (VAT Adjustment)") OR
(DtldCustLedgEntry2."Entry Type" = DtldCustLedgEntry2."Entry Type"::"Payment Discount Tolerance (VAT Adjustment)")
THEN
...取代程式碼
...DtldCustLedgEntry2.SETRANGE("Customer No.",DtldCustLedgEntry."Customer No.");
DtldCustLedgEntry2.SETFILTER("Entry Type",'>%1',DtldCustLedgEntry."Entry Type"::"Initial Entry");
UnapplyVATEntries := FALSE;
DtldCustLedgEntry2.FINDSET;
REPEAT
// Add the following line.
CheckCarteraAccessPermissions(DtldCustLedgEntry2."Document Situation");
// End of the added line.
DtldCustLedgEntry2.TESTFIELD(Unapplied,FALSE);
IF (DtldCustLedgEntry2."Entry Type" = DtldCustLedgEntry2."Entry Type"::"Payment Discount (VAT Adjustment)") OR
(DtldCustLedgEntry2."Entry Type" = DtldCustLedgEntry2."Entry Type"::"Payment Tolerance (VAT Adjustment)") OR
(DtldCustLedgEntry2."Entry Type" = DtldCustLedgEntry2."Entry Type"::"Payment Discount Tolerance (VAT Adjustment)")
THEN
... -
變更程式碼中的ApplyVendLedgEntry函式在 Gen.Jnl。-張貼行 Codeunit (12),如下所示︰
現有的程式碼 1...OldVendLedgEntry.SETRANGE("Document Type",GenJnlLine."Applies-to Doc. Type");
OldVendLedgEntry.SETRANGE("Bill No.",NewCVLedgEntryBuf."Applies-to Bill No.");
OldVendLedgEntry.SETRANGE("Vendor No.",NewCVLedgEntryBuf."CV No.");
OldVendLedgEntry.SETRANGE(Open,TRUE);
OldVendLedgEntry.FINDFIRST;
OldVendLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
IF AppManagement.AccessToCartera THEN
DocPost.CheckAppliedPayableDoc(
OldVendLedgEntry,GenJnlLine."System-Created Entry");
...取代程式碼 1
...OldVendLedgEntry.SETRANGE("Document Type",GenJnlLine."Applies-to Doc. Type");
OldVendLedgEntry.SETRANGE("Bill No.",NewCVLedgEntryBuf."Applies-to Bill No.");
OldVendLedgEntry.SETRANGE("Vendor No.",NewCVLedgEntryBuf."CV No.");
OldVendLedgEntry.SETRANGE(Open,TRUE);
OldVendLedgEntry.FINDFIRST;
// Add the following line.
CheckCarteraAccessPermissions(OldVendLedgEntry."Document Situation");
// End of the added line.
OldVendLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
IF AppManagement.AccessToCartera THEN
DocPost.CheckAppliedPayableDoc(
OldVendLedgEntry,GenJnlLine."System-Created Entry");
...現有的程式碼 2
...//Check and Move Ledger Entries to Temp
IF PurchSetup."Appln. between Currencies" = PurchSetup."Appln. between Currencies"::None THEN
OldVendLedgEntry.SETRANGE("Currency Code",NewCVLedgEntryBuf."Currency Code");
IF OldVendLedgEntry.FINDSET(FALSE,FALSE) THEN
REPEAT
IF GenJnlApply.CheckAgainstApplnCurrency(
NewCVLedgEntryBuf."Currency Code",
OldVendLedgEntry."Currency Code",
GenJnlLine."Account Type"::Vendor,
FALSE)
...取代程式碼 2
...//Check and Move Ledger Entries to Temp
IF PurchSetup."Appln. between Currencies" = PurchSetup."Appln. between Currencies"::None THEN
OldVendLedgEntry.SETRANGE("Currency Code",NewCVLedgEntryBuf."Currency Code");
IF OldVendLedgEntry.FINDSET(FALSE,FALSE) THEN
REPEAT
// Add the following line.
CheckCarteraAccessPermissions(OldVendLedgEntry."Document Situation");
// End of the added line.
IF GenJnlApply.CheckAgainstApplnCurrency(
NewCVLedgEntryBuf."Currency Code",
OldVendLedgEntry."Currency Code",
GenJnlLine."Account Type"::Vendor,
FALSE)
... -
變更程式碼中的UnapplyVendLedgEntry函式在 Gen.Jnl。-張貼行 Codeunit (12),如下所示︰
現有的程式碼...DtldVendLedgEntry2.SETCURRENTKEY("Transaction No.","Vendor No.","Entry Type");
DtldVendLedgEntry2.SETRANGE("Transaction No.",DtldVendLedgEntry."Transaction No.");
DtldVendLedgEntry2.SETRANGE("Vendor No.",DtldVendLedgEntry."Vendor No.");
DtldVendLedgEntry2.SETFILTER("Entry Type",'>%1',DtldVendLedgEntry."Entry Type"::"Initial Entry");
DtldVendLedgEntry2.FINDSET;
UnapplyVATEntries := FALSE;
REPEAT
IF (DtldVendLedgEntry2."Entry Type" = DtldVendLedgEntry2."Entry Type"::"Payment Discount (VAT Adjustment)") OR
(DtldVendLedgEntry2."Entry Type" = DtldVendLedgEntry2."Entry Type"::"Payment Tolerance (VAT Adjustment)") OR
(DtldVendLedgEntry2."Entry Type" = DtldVendLedgEntry2."Entry Type"::"Payment Discount Tolerance (VAT Adjustment)")
...取代程式碼
...DtldVendLedgEntry2.SETCURRENTKEY("Transaction No.","Vendor No.","Entry Type");
DtldVendLedgEntry2.SETRANGE("Transaction No.",DtldVendLedgEntry."Transaction No.");
DtldVendLedgEntry2.SETRANGE("Vendor No.",DtldVendLedgEntry."Vendor No.");
DtldVendLedgEntry2.SETFILTER("Entry Type",'>%1',DtldVendLedgEntry."Entry Type"::"Initial Entry");
DtldVendLedgEntry2.FINDSET;
// Add the following line.
CheckCarteraAccessPermissions(DtldVendLedgEntry2."Document Situation");
// End of the added line.
UnapplyVATEntries := FALSE;
REPEAT
IF (DtldVendLedgEntry2."Entry Type" = DtldVendLedgEntry2."Entry Type"::"Payment Discount (VAT Adjustment)") OR
(DtldVendLedgEntry2."Entry Type" = DtldVendLedgEntry2."Entry Type"::"Payment Tolerance (VAT Adjustment)") OR
(DtldVendLedgEntry2."Entry Type" = DtldVendLedgEntry2."Entry Type"::"Payment Discount Tolerance (VAT Adjustment)")
... -
變更程式碼中的CheckCarteraAccessPermissions函式在 Gen.Jnl。-張貼行 Codeunit (12),如下所示︰
現有的程式碼...CLEAR(GenJnlLine2);
EXIT(IsOK);
END;
BEGIN
END.
}
}
...取代程式碼
...CLEAR(GenJnlLine2);
EXIT(IsOK);
END;
// Add the following lines.
LOCAL PROCEDURE CheckCarteraAccessPermissions@1100024(DocumentSituation@1170001 : ' ,Posted BG/PO,Closed BG/PO,BG/PO,Cartera,Closed Documents');
BEGIN
IF (DocumentSituation <> DocumentSituation::" ") AND (NOT AppManagement.AccessToCartera) THEN
ERROR(Text1100013);
END;
// End of the added lines.
BEGIN
END.
}
}
...
先決條件
您必須具備套用此 hotfix 之後安裝下列產品的其中一個︰
-
西班牙文版本的 Microsoft 動態航行點 2009 R2
-
西班牙文版本的 Microsoft 動態航行點 2009 SP1
移除資訊
您無法移除此 hotfix。
狀態
Microsoft 已確認這是<套用>一節所列出的 Microsoft 產品的問題。
注意這是直接從 Microsoft 支援組織內建立的「快速發行」文件。本文件所包含的現狀資訊是針對新興問題的回應。為縮短使其可用的時程,資料可能會包含印刷錯誤,且可能會隨時進行修改而不另行通知。如其他考量,請參閱 「使用規定」。