狀況
基底和金額會不正確的相同的增值稅百分比和參與 Microsoft 動態航行點 2009年西班牙文版本的增值稅現金 340 宣告中的週期分組。
如預期般,區隔每張發票,不論它們是否具有相同的增值稅百分比,就會運作正常的增值稅與相同的情況。請依照下列程式碼變更一節,若要解決這個問題的步驟。下列產品中,就會發生這個問題︰
-
西班牙文版本的 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
物件。
注意您沒有擁有資料存放區的權限,除非您需要執行資料修復。
程式碼變更
注意永遠測試程式碼修正在受控制的環境中才能套用到實際執行電腦的修正程式。
若要解決這個問題,請依照下列步驟執行:
-
變更使 340 宣告報表 (10743) 中的程式碼如下所示︰
現有的程式碼 1... END;
END;
// Delete the following line.
OnAfterGetRecord=BEGIN
// End of the deleted line.
OperationCode := GetOperationCode(VATEntry2);
VATBuffer."VAT %" := "VAT %";
...取代程式碼 1
... END;
END;
// Add the following lines.
OnAfterGetRecord=VAR
VendLedgEntryAppl@1100000 : Record 25;
NewEntry@1100001 : Boolean;
BEGIN
// End of the added lines.
OperationCode := GetOperationCode(VATEntry2);
VATBuffer."VAT %" := "VAT %";
...現有的程式碼 2
... VATBuffer.Amount := Amount;
END;
VATBuffer.INSERT;
// Delete the following lines.
IF Type = VATEntry.Type::Purchase THEN BEGIN
VATEntryTemporary := VATEntry2;
VATEntryTemporary.INSERT;
END;
END;
// End of the deleted lines.
END;
TotalFields=Base,Amount;
...取代程式碼 2
...VATBuffer.Amount := Amount;
END;
VATBuffer.INSERT;
// Add the following lines.
END;
IF Type = VATEntry.Type::Purchase THEN
IF HasBeenRealized("Entry No.") OR ("Unrealized VAT Entry No." <> 0) THEN BEGIN
NewEntry := CheckVLEApplication(VATEntry2);
VATEntryTemporary.SETRANGE("Posting Date","Posting Date");
VATEntryTemporary.SETRANGE("Document No.","Document No.");
VATEntryTemporary.SETRANGE("Document Type","Document Type");
VATEntryTemporary.SETRANGE(Type,Type);
VATEntryTemporary.SETRANGE("VAT %","VAT %");
VATEntryTemporary.SETRANGE("Transaction No.","Transaction No.");
IF VATEntryTemporary.FINDFIRST AND NOT NewEntry THEN BEGIN
VATEntryTemporary.Base += Base;
VATEntryTemporary.Amount += Amount;
VATEntryTemporary.MODIFY;
END ELSE BEGIN
VATEntryTemporary := VATEntry2;
VATEntryTemporary.INSERT;
END;
END ELSE BEGIN
VATEntryTemporary := VATEntry2;
VATEntryTemporary.INSERT;
END;
// End of the added lines.
END;
TotalFields=Base,Amount;
...現有的程式碼 3
... DataItemVarName=<Integer2>;
OnPreDataItem=BEGIN
VATBuffer.FIND('-');
VATEntryTemporary.SETCURRENTKEY("VAT %","EC %");
IF VATEntryTemporary.FINDFIRST THEN;
CurrReport.CREATETOTALS(VATBuffer2.Base,VATBuffer2.Amount);
Fin := FALSE;
...取代程式碼 3
... DataItemVarName=<Integer2>;
OnPreDataItem=BEGIN
VATBuffer.FIND('-');
// Delete the following line.
VATEntryTemporary.SETCURRENTKEY("VAT %","EC %");
// End of the deleted line.
IF VATEntryTemporary.FINDFIRST THEN;
CurrReport.CREATETOTALS(VATBuffer2.Base,VATBuffer2.Amount);
Fin := FALSE;
...現有的程式碼 4
...IF VATEntry.Type = VATEntry.Type::Purchase THEN BEGIN
VATEntryTemporary.Amount := VATBuffer.Amount;
VATDeductAmt := CheckDeductibleVAT(VATEntryTemporary);
// Delete the following lines.
VATEntryTemporary.NEXT;
RecordTypePurchase(VATEntry2);
// End of the deleted lines.
END;
Fin := VATBuffer.NEXT = 0;
END;
...取代程式碼 4
... IF VATEntry.Type = VATEntry.Type::Purchase THEN BEGIN
VATEntryTemporary.Amount := VATBuffer.Amount;
VATDeductAmt := CheckDeductibleVAT(VATEntryTemporary);
// Add the following lines.
VATEntryTemporary.SETCURRENTKEY("VAT %","EC %");
VATEntryTemporary.SETRANGE("VAT %",VATBuffer."VAT %");
VATEntryTemporary.SETRANGE("EC %",VATBuffer."EC %");
VATEntryTemporary.FINDSET;
REPEAT
RecordTypePurchase(VATEntryTemporary);
UNTIL VATEntryTemporary.NEXT = 0;
// End of the added lines.
END;
Fin := VATBuffer.NEXT = 0;
END;
... -
變更在全域變數進行 340 宣告報表 (10743) 中的程式碼如下所示︰
現有的程式碼...VATEntryTemporary@1100078 : TEMPORARY Record 254;
TempDeclarationLines@1100149 : TEMPORARY Record 10744;
TempVATEntry@1100007 : TEMPORARY Record 254;
CommonDialogMgt@1100015 : Codeunit 412;
OutFile@1100016 : File;
DeclarationNum@1100017 : Text[4];
...取代程式碼
... VATEntryTemporary@1100078 : TEMPORARY Record 254;
TempDeclarationLines@1100149 : TEMPORARY Record 10744;
TempVATEntry@1100007 : TEMPORARY Record 254;
// Add the following line.
TempDtldVendLedgerEntry@1100115 : TEMPORARY Record 380;
// End of the added line.
CommonDialogMgt@1100015 : Codeunit 412;
OutFile@1100016 : File;
DeclarationNum@1100017 : Text[4];
... -
變更使 340 宣告報表 (10743) 中的RecordTypePurchase函式中的程式碼如下所示︰
現有的程式碼... END ELSE
OperationDateText := FormatDate(VATEntryRec."Posting Date");
// Delete the following lines.
IF VATEntryRec."Document Type" IN [VATEntryRec."Document Type"::Payment,VATEntryRec."Document Type"::Refund] THEN BEGIN
UnrealizedVATEntryNo := VATEntryRec."Unrealized VAT Entry No.";
DocumentDate := VATEntryRec."Posting Date";
IF UnrealizedVATEntryNo <> 0 THEN BEGIN
UnrealizedVATEntry.GET(UnrealizedVATEntryNo);
OperationDateText := FormatDate(UnrealizedVATEntry."Posting Date");
DocumentDate := UnrealizedVATEntry."Document Date";
// End of the deleted lines.
END;
END ELSE
UnrealizedVATEntryNo := 0;
...取代程式碼
... END ELSE
OperationDateText := FormatDate(VATEntryRec."Posting Date");
// Add the following lines.
VATBuffer2.Base := VATBuffer.Base;
VATBuffer2.Amount := VATBuffer.Amount;
IF VATEntryRec."Document Type" IN [VATEntryRec."Document Type"::Payment,VATEntryRec."Document Type"::Refund] THEN BEGIN
UnrealizedVATEntryNo := VATEntryTemporary."Unrealized VAT Entry No.";
DocumentDate := VATEntryTemporary."Posting Date";
IF UnrealizedVATEntryNo <> 0 THEN BEGIN
UnrealizedVATEntry.GET(UnrealizedVATEntryNo);
OperationDateText := FormatDate(UnrealizedVATEntry."Posting Date");
DocumentDate := UnrealizedVATEntry."Document Date";
IF FindPmtOrderBillGrBankAcc(VATEntry.Type,VATEntry."Document No.") = '' THEN BEGIN
VendorDocumentNo := UnrealizedVATEntry."External Document No.";
VATBuffer2.Base := VATEntryTemporary.Base;
VATBuffer2.Amount := VATEntryTemporary.Amount;
END;
// End of the added lines.
END;
END ELSE
UnrealizedVATEntryNo := 0;
... -
變更使 340 宣告報表 (10743) 中的CheckVLEApplication函式中的程式碼如下所示︰
現有的程式碼... PrevDeclarationNumEnable := ReplaceDeclaration;
END;
BEGIN
END.
}
...取代程式碼
...PrevDeclarationNumEnable := ReplaceDeclaration;
END;
// Add the following lines.
LOCAL PROCEDURE CheckVLEApplication@1100074(VATEntry@1100000 : Record 254) : Boolean;
VAR
VendorLedgerEntry@1100001 : Record 25;
DtldVendLedgEntry@1100002 : Record 380;
CheckVendLedgEntry@1100003 : Record 25;
UnrealizedVendLedgEntry@1100004 : Integer;
BEGIN
FilterVendLedgerEntryByVATEntry(VendorLedgerEntry,VATEntry);
UnrealizedVendLedgEntry := GetUnrealizedInvoiceVLENo(VATEntry."Unrealized VAT Entry No.");
IF VendorLedgerEntry.FINDSET THEN
REPEAT
DtldVendLedgEntry.RESET;
DtldVendLedgEntry.SETRANGE(Unapplied,FALSE);
DtldVendLedgEntry.SETRANGE("Entry Type",DtldVendLedgEntry."Entry Type"::Application);
DtldVendLedgEntry.SETRANGE("Applied Vend. Ledger Entry No.",VendorLedgerEntry."Entry No.");
IF UnrealizedVendLedgEntry <> 0 THEN
DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",UnrealizedVendLedgEntry);
IF DtldVendLedgEntry.FINDSET THEN
REPEAT
IF (DtldVendLedgEntry."Vendor Ledger Entry No." <> DtldVendLedgEntry."Applied Vend. Ledger Entry No.") AND
CheckVendLedgEntry.GET(DtldVendLedgEntry."Vendor Ledger Entry No.")
THEN BEGIN
IF ExistDtldVLE(DtldVendLedgEntry."Vendor Ledger Entry No.",DtldVendLedgEntry."Applied Vend. Ledger Entry No.") THEN
EXIT(FALSE);
InsertTempDtldVLE(DtldVendLedgEntry."Vendor Ledger Entry No.",DtldVendLedgEntry."Applied Vend. Ledger Entry No.");
EXIT(TRUE);
END;
UNTIL DtldVendLedgEntry.NEXT = 0
ELSE BEGIN
DtldVendLedgEntry.SETRANGE("Applied Vend. Ledger Entry No.");
DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",VendorLedgerEntry."Entry No.");
IF UnrealizedVendLedgEntry <> 0 THEN
DtldVendLedgEntry.SETRANGE("Applied Vend. Ledger Entry No.",UnrealizedVendLedgEntry);
IF DtldVendLedgEntry.FINDSET THEN
REPEAT
IF CheckVendLedgEntry.GET(DtldVendLedgEntry."Applied Vend. Ledger Entry No.") THEN BEGIN
IF ExistDtldVLE(DtldVendLedgEntry."Applied Vend. Ledger Entry No.",DtldVendLedgEntry."Vendor Ledger Entry No.") THEN
EXIT(FALSE);
InsertTempDtldVLE(DtldVendLedgEntry."Applied Vend. Ledger Entry No.",DtldVendLedgEntry."Vendor Ledger Entry No.");
EXIT(TRUE);
END;
UNTIL DtldVendLedgEntry.NEXT = 0;
END;
UNTIL VendorLedgerEntry.NEXT = 0;
EXIT(TRUE);
END;
LOCAL PROCEDURE GetUnrealizedInvoiceVLENo@1100075(VATEntryNo@1100000 : Integer) : Integer;
VAR
VATEntry@1100002 : Record 254;
VendLedgEntry@1100001 : Record 25;
BEGIN
IF NOT VATEntry.GET(VATEntryNo) THEN
EXIT(0);
FilterVendLedgerEntryByVATEntry(VendLedgEntry,VATEntry);
IF VendLedgEntry.FINDFIRST THEN
EXIT(VendLedgEntry."Entry No.");
EXIT(0);
END;
LOCAL PROCEDURE FilterVendLedgerEntryByVATEntry@1100087(VAR VendLedgEntry@1100001 : Record 25;VATEntry@1100000 : Record 254);
BEGIN
VendLedgEntry.SETRANGE("Vendor No.",VATEntry."Bill-to/Pay-to No.");
VendLedgEntry.SETRANGE("Posting Date",VATEntry."Posting Date");
VendLedgEntry.SETRANGE("Document Type",VATEntry."Document Type");
VendLedgEntry.SETRANGE("Document No.",VATEntry."Document No.");
VendLedgEntry.SETRANGE("Transaction No.",VATEntry."Transaction No.");
END;
LOCAL PROCEDURE HasBeenRealized@1100064(VATEntryNo@1100000 : Integer) : Boolean;
VAR
UnrealizedVATEntry@1100001 : Record 254;
BEGIN
UnrealizedVATEntry.SETRANGE("Unrealized VAT Entry No.",VATEntryNo);
EXIT(NOT UnrealizedVATEntry.ISEMPTY);
END;
LOCAL PROCEDURE ExistDtldVLE@1100195(VLENo@1100001 : Integer;AppliedVLENo@1100000 : Integer) : Boolean;
BEGIN
TempDtldVendLedgerEntry.SETRANGE("Vendor Ledger Entry No.",VLENo);
TempDtldVendLedgerEntry.SETRANGE("Applied Vend. Ledger Entry No.",AppliedVLENo);
EXIT(NOT TempDtldVendLedgerEntry.ISEMPTY);
END;
LOCAL PROCEDURE InsertTempDtldVLE@1100191(VLENo@1100000 : Integer;AppliedVLENo@1100001 : Integer);
BEGIN
TempDtldVendLedgerEntry.INIT;
IF TempDtldVendLedgerEntry.FINDLAST THEN;
TempDtldVendLedgerEntry."Entry No." += 1;
TempDtldVendLedgerEntry."Vendor Ledger Entry No." := VLENo;
TempDtldVendLedgerEntry."Applied Vend. Ledger Entry No." := AppliedVLENo;
TempDtldVendLedgerEntry.INSERT;
END;
// End of the added lines.
BEGIN
END.
}
...
先決條件
您必須具備套用此 hotfix 之後安裝下列產品的其中一個︰
-
西班牙文版本的 Microsoft 動態航行點 2009 R2
-
西班牙文版本的 Microsoft 動態航行點 2009 SP1
移除資訊
您無法移除此 hotfix。
狀態
Microsoft 已確認這是<套用>一節所列出的 Microsoft 產品的問題。
注意這是直接從 Microsoft 支援組織內建立的「快速發行」文件。本文件所包含的現狀資訊是針對新興問題的回應。為縮短使其可用的時程,資料可能會包含印刷錯誤,且可能會隨時進行修改而不另行通知。如其他考量,請參閱 「使用規定」。