系統會在你執行 Post Batch 功能後,意外地更新 Microsoft Dynamics NAV 2009 葡萄牙版銷售發票或購買發票的入帳日期

套用到
Dynamics NAV 2009

本文適用於葡萄牙語 () 語言地區的 Microsoft Dynamics NAV。

症狀

請考慮葡萄牙版 Microsoft Dynamics NAV 2009 R2 及 Microsoft Dynamics NAV 2009 Service Pack 1 (SP1) 中的以下情境:

  • 你有一個數字序列可以啟用 日期順序 設定。
  • 你有銷售發票或購買發票,這些發票會套用號碼系列。
  • 系統會為銷售發票或購買發票分配一個過帳號碼。
  • 你要執行這張發票的 「批次過貨 」功能,然後在 「選項 」標籤、 「批次帳單 」的對話框或 「批次帳單」的「批次帳單 」對話框中替換出帳號日期。

在這種情況下,系統會意外更新發票的入帳日期,卻不會檢查日期順序。 不過,如果你在這張發票的一般標籤頁「Posting Date」欄位替換該值,系統會檢查日期順序。

解決方式

Hotfix 資訊

Microsoft 現在已經支援熱修補程式。 然而,這僅是為了修正本文所描述的問題。 只應用在遇到這個特定問題的系統上。 此熱修補可能會進行額外測試。 因此,如果您未受到此問題嚴重影響,我們建議您等待下一個 Microsoft Dynamics NAV 2009 服務包或包含此熱修補的 Microsoft Dynamics NAV 版本。

注意:在特殊情況下,若 Microsoft Dynamics 及相關產品的技術支援專業人員判斷特定更新能解決您的問題,通常因支援電話而產生的費用可能會被取消。 一般來說,如果有所描述之特定更新無法解決的其他支援問題,才會收取支援費用。

          

安裝資訊

Microsoft 僅提供圖例的程式設計範例,不含明示或暗示的擔保。 這包括 (但不限於) 適用于特定目的之可操作性或適用性的暗示擔保。 本文假設您熟悉正在示範的程式設計語言,以及用來建立和進行程式偵錯工具的工具。 Microsoft 支援工程師可以協助說明特定程式的功能。 不過,他們將不會修改這些範例以提供新增功能或建構符合您特定需求的程式。

注意:安裝此熱修補程式前,請確認所有 Microsoft Navision 用戶端使用者都已登出系統。 這包括Microsoft Navision 應用服務 (NAS) 用戶端使用者。 當你實施這個熱修補時,應該只有你一個登入的客戶端使用者。

要實作這個熱修補,你必須擁有開發者授權。

我們建議在 Windows 登入視窗或資料庫登入視窗中,將使用者帳號分配「SUPER」角色 ID。 若使用者帳號無法被指派「SUPER」角色 ID,您必須驗證該帳號擁有以下權限:

  • 你要更改的物件的修改權限。
  • 系統物件 ID 5210 的執行權限,以及系統物件 ID 9015 的執行權限。

注意:除非你必須進行資料修復,否則你不必擁有資料儲存的權利。

法規變更

注意:在將修正程式套用到生產電腦之前,務必在受控環境中測試修正。
如果要解決這個問題,請依照下列步驟執行。

  1. 將銷售標頭表中的代碼 (36) 。 若要這麼做,請按照下列步驟進行:

    1. 欄位的程式碼變更如下:
      現有程式碼

      ...
      END;
      
      CaptionML=[ENU=Order Date;
      PTG=Data Encomenda] }
      { 20 ; ;Posting Date ;Date ;OnValidate=BEGIN
      
      // Delete the following lines.
       TestNoSeriesDate(
       "Posting No.","Posting No. Series",
       FIELDCAPTION("Posting No."),FIELDCAPTION("Posting No. Series"));
       TestNoSeriesDate(
       "Prepayment No.","Prepayment No. Series",
       FIELDCAPTION("Prepayment No."),FIELDCAPTION("Prepayment No. Series"));
       TestNoSeriesDate(
       "Prepmt. Cr. Memo No.","Prepmt. Cr. Memo No. Series",
       FIELDCAPTION("Prepmt. Cr. Memo No."),FIELDCAPTION("Prepmt. Cr. Memo No. Series"));
      
       VALIDATE("Document Date","Posting Date");
      
       IF ("Document Type" IN ["Document Type"::Invoice,"Document Type"::"Credit Memo"]) AND
       NOT ("Posting Date" = xRec."Posting Date")
       THEN
       PriceMessageIfSalesLinesExist(FIELDCAPTION("Posting Date"));
      
       IF "Currency Code" <> '' THEN BEGIN
       UpdateCurrencyFactor;
       IF "Currency Factor" <> xRec."Currency Factor" THEN
       ConfirmUpdateCurrencyFactor;
       END;
      // End of the deleted lines.
      
      END;
      
      CaptionML=[ENU=Posting Date;
      PTG=Data Registo] }
      { 21 ; ;Shipment Date ;Date ;OnValidate=BEGIN
      ...
      

      替換代碼

      ...
      END;
      
      CaptionML=[ENU=Order Date;
      PTG=Data Encomenda] }
      { 20 ; ;Posting Date ;Date ;OnValidate=BEGIN
      
      // Add the following lines.
       IF "Posting Date" <> xRec."Posting Date" THEN BEGIN
       TestNoSeriesDate(
       "Posting No.","Posting No. Series",
       FIELDCAPTION("Posting No."),FIELDCAPTION("Posting No. Series"));
       TestNoSeriesDate(
       "Prepayment No.","Prepayment No. Series",
       FIELDCAPTION("Prepayment No."),FIELDCAPTION("Prepayment No. Series"));
       TestNoSeriesDate(
       "Prepmt. Cr. Memo No.","Prepmt. Cr. Memo No. Series",
       FIELDCAPTION("Prepmt. Cr. Memo No."),FIELDCAPTION("Prepmt. Cr. Memo No. Series"));
      
       VALIDATE("Document Date","Posting Date");
      
       IF ("Document Type" IN ["Document Type"::Invoice,"Document Type"::"Credit Memo"]) AND
       NOT ("Posting Date" = xRec."Posting Date")
       THEN
       PriceMessageIfSalesLinesExist(FIELDCAPTION("Posting Date"));
      
       IF "Currency Code" <> '' THEN BEGIN
       UpdateCurrencyFactor;
       IF "Currency Factor" <> xRec."Currency Factor" THEN
       ConfirmUpdateCurrencyFactor;
       END;
      END;
      // End of the added lines.
      
      END;
      
      CaptionML=[ENU=Posting Date;
      PTG=Data Registo] }
      { 21 ; ;Shipment Date ;Date ;OnValidate=BEGIN
      ...
      
    2. 在 UpdatePmtDiscDate 函式中更改程式碼如下:
      現有程式碼

      ...
      IF NOT("Document Type" IN ["Document Type"::"Credit Memo", "Document Type"::"Return Order"]) THEN
      "Pmt. Discount Date" := "Due Date";
      END;
      
      BEGIN
      END.
      }
      }
      ...
      

      替換代碼

      ...
      IF NOT("Document Type" IN ["Document Type"::"Credit Memo", "Document Type"::"Return Order"]) THEN
      "Pmt. Discount Date" := "Due Date";
      END;
      
      BEGIN
      
      // Add the following lines.
       {
       <changelog>
       <change id="VSTF300295" dev="v-mokuma" feature="VSTF300295"
       date="2012-01-20" area="Sales" baseversion="PT6.00.01"
       releaseversion="PT6.00.02">
       Problem with number series with date order setting and batch posting
       </change>
       </changelog>
       }
      // End of the added lines.
      
      END.
      }
      }
      ...
      
  2. 將購買標頭表中的代碼改 (38) 。 為此,請遵循以下步驟:

    1. 欄位的程式碼變更如下:
      現有程式碼

      ...
      END;
      
      CaptionML=[ENU=Order Date;
      PTG=Data Encomenda] }
      { 20 ; ;Posting Date ;Date ;OnValidate=BEGIN
      
      // Delete the following lines.
       TestNoSeriesDate(
       "Posting No.","Posting No. Series",
       FIELDCAPTION("Posting No."),FIELDCAPTION("Posting No. Series"));
       TestNoSeriesDate(
       "Prepayment No.","Prepayment No. Series",
       FIELDCAPTION("Prepayment No."),FIELDCAPTION("Prepayment No. Series"));
       TestNoSeriesDate(
       "Prepmt. Cr. Memo No.","Prepmt. Cr. Memo No. Series",
       FIELDCAPTION("Prepmt. Cr. Memo No."),FIELDCAPTION("Prepmt. Cr. Memo No. Series"));
      
       VALIDATE("Document Date","Posting Date");
      
       IF ("Document Type" IN ["Document Type"::Invoice,"Document Type"::"Credit Memo"]) AND
       NOT ("Posting Date" = xRec."Posting Date")
       THEN
       PriceMessageIfPurchLinesExist(FIELDCAPTION("Posting Date"));
      
       IF "Currency Code" <> '' THEN BEGIN
       UpdateCurrencyFactor;
       IF "Currency Factor" <> xRec."Currency Factor" THEN
       ConfirmUpdateCurrencyFactor;
       END;
       IF PurchLinesExist THEN
       JobUpdatePurchLines;
      // End of the deleted lines.
      
      
      END;
      
      CaptionML=[ENU=Posting Date;
      PTG=Data Registo] }
      { 21 ; ;Expected Receipt Date;Date ;OnValidate=BEGIN
      ...
      

      替換代碼

      ...
      END;
      
      CaptionML=[ENU=Order Date;
      PTG=Data Encomenda] }
      { 20 ; ;Posting Date ;Date ;OnValidate=BEGIN
      
      // Add the following lines.
       IF "Posting Date" <> xRec."Posting Date" THEN BEGIN
       TestNoSeriesDate(
       "Posting No.","Posting No. Series",
       FIELDCAPTION("Posting No."),FIELDCAPTION("Posting No. Series"));
       TestNoSeriesDate(
       "Prepayment No.","Prepayment No. Series",
       FIELDCAPTION("Prepayment No."),FIELDCAPTION("Prepayment No. Series"));
       TestNoSeriesDate(
       "Prepmt. Cr. Memo No.","Prepmt. Cr. Memo No. Series",
       FIELDCAPTION("Prepmt. Cr. Memo No."),FIELDCAPTION("Prepmt. Cr. Memo No. Series"));
      
       VALIDATE("Document Date","Posting Date");
      
       IF ("Document Type" IN ["Document Type"::Invoice,"Document Type"::"Credit Memo"]) AND
       NOT ("Posting Date" = xRec."Posting Date")
       THEN
       PriceMessageIfPurchLinesExist(FIELDCAPTION("Posting Date"));
      
       IF "Currency Code" <> '' THEN BEGIN
       UpdateCurrencyFactor;
       IF "Currency Factor" <> xRec."Currency Factor" THEN
       ConfirmUpdateCurrencyFactor;
       END;
       IF PurchLinesExist THEN
       JobUpdatePurchLines;
       END;
      // End of the added lines.
      
      END;
      
      CaptionML=[ENU=Posting Date;
      PTG=Data Registo] }
      { 21 ; ;Expected Receipt Date;Date ;OnValidate=BEGIN
      ...
      
    2. 在 UpdatePmtDiscDate 函式中更改程式碼如下:
      現有程式碼

      ...
      IF NOT("Document Type" IN ["Document Type"::"Credit Memo", "Document Type"::"Return Order"]) THEN
      "Pmt. Discount Date" := "Due Date";
      END;
      
      BEGIN
      END.
      }
      }
      ...
      

      替換代碼

      ...
      IF NOT("Document Type" IN ["Document Type"::"Credit Memo", "Document Type"::"Return Order"]) THEN
      "Pmt. Discount Date" := "Due Date";
      END;
      
      BEGIN
      
      // Add the following lines.
       {
       <changelog>
       <change id="VSTF300295" dev="v-mokuma" feature="VSTF300295"
       date="2012-01-20" area="Sales" baseversion="PT6.00.01"
       releaseversion="PT6.00.02">
       Problem with number series with date order setting and batch posting
       </change>
       </changelog>
       }
      // End of the added lines.
      
      END.
      }
      }
      ...
      
  3. 將 Sales-Post 碼單元的代碼 (80) 。 若要這麼做,請按照下列步驟進行:

    1. 變更屬性代碼如下:
      現有程式碼

      ...
      DocType@1022 : ' ,Payment,Invoice,Credit Memo,Finance Charge Memo,Reminder,Refund,Shipment';
      TempJnlLineDim2@1023 : TEMPORARY Record 356;
      TempPrePmtAmtToDeduct@1003 : Decimal;
      BEGIN
      IF PostingDateExists AND (ReplacePostingDate OR ("Posting Date" = 0D)) THEN BEGIN
      
      // Delete the following line.
      "Posting Date" := PostingDate;
      
      VALIDATE("Currency Code");
      END;
      
      IF PostingDateExists AND (ReplaceDocumentDate OR ("Document Date" = 0D)) THEN
      VALIDATE("Document Date",PostingDate);
      ...
      

      替換代碼

      ...
      DocType@1022 : ' ,Payment,Invoice,Credit Memo,Finance Charge Memo,Reminder,Refund,Shipment';
      TempJnlLineDim2@1023 : TEMPORARY Record 356;
      TempPrePmtAmtToDeduct@1003 : Decimal;
      BEGIN
      IF PostingDateExists AND (ReplacePostingDate OR ("Posting Date" = 0D)) THEN BEGIN
      
      
      // Add the following line.
      VALIDATE("Posting Date",PostingDate);
      
      VALIDATE("Currency Code");
      END;
      
      IF PostingDateExists AND (ReplaceDocumentDate OR ("Document Date" = 0D)) THEN
      VALIDATE("Document Date",PostingDate);
      ...
      
    2. 在 ItemLedgerEntryExist 函式中更改程式碼如下:
      現有程式碼

      ...
      EXIT(HasItemLedgerEntry);
      END;
      
      BEGIN
      END.
      }
      }
      ...
      

      替換代碼

      ...
      EXIT(HasItemLedgerEntry);
      END;
      
      BEGIN
      
      // Add the following lines.
       {
       <changelog>
       <change id="VSTF300295" dev="v-mokuma" feature="VSTF300295"
       date="2012-01-20" area="Sales" baseversion="PT6.00.01"
       releaseversion="PT6.00.02">
       Problem with number series with date order setting and batch posting
       </change>
       </changelog>
       }
      // End of the added lines.
      
      END.
      }
      }
      ...
      
  4. 更改 Purch.-Post 代碼單元 (90) 的物業代碼如下:
    現有程式碼

    ...
    TrackingSpecificationExists@1010 : Boolean;
    EndLoop@1009 : Boolean;
    TempPrePmtAmtToDeduct@1004 : Decimal;
    BEGIN
    IF PostingDateExists AND (ReplacePostingDate OR ("Posting Date" = 0D)) THEN BEGIN
    
    // Delete the following line.
    "Posting Date" := PostingDate;
    
    
    VALIDATE("Currency Code");
    END;
    
    IF PostingDateExists AND (ReplaceDocumentDate OR ("Document Date" = 0D)) THEN
    VALIDATE("Document Date",PostingDate);
    ...
    
    

    替換代碼

    ...
    TrackingSpecificationExists@1010 : Boolean;
    EndLoop@1009 : Boolean;
    TempPrePmtAmtToDeduct@1004 : Decimal;
    BEGIN
    IF PostingDateExists AND (ReplacePostingDate OR ("Posting Date" = 0D)) THEN BEGIN
    
    
    // Add the following line.
    VALIDATE("Posting Date",PostingDate);
    
    VALIDATE("Currency Code");
    END;
    
    IF PostingDateExists AND (ReplaceDocumentDate OR ("Document Date" = 0D)) THEN
    VALIDATE("Document Date",PostingDate);
    ...
    

先決條件

您必須安裝以下其中一項產品才能套用此熱修補:

  • Microsoft Dynamics NAV 2009 R2 的葡萄牙語版本
  • Microsoft Dynamics NAV 2009 Service Pack 1 的葡萄牙語版本

移除資訊

你無法移除這個熱修正。

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

注意本文為 Microsoft 支援單位內部直接建立的「快速發佈」文章。 此處包含的資訊是以其現況提供,用於回應新產生的問題。 由於快速發佈,資料可能包含拼字錯誤,並可能會隨時修訂,不另行通知。 請參閱使用條款以瞭解其他相關考量。