在俄羅斯版 Microsoft Dynamics NAV 2009 R2 中,您更改薪資行事曆行的數值後,系統不會更新員工工時表對話框中的數值

套用到
Microsoft Dynamics NAV 2009 R2

本文適用於俄語 (ru 語言地區的 Microsoft Dynamics) NAV。

症狀

假設你安裝的是俄羅斯版 Microsoft Dynamics NAV 2009 R2 的本地關鍵更新PS59774和本地關鍵更新PS60060。 欲了解更多資訊,請造訪以下 Microsoft 官方網站:

在薪資行事曆欄位中更改某些欄位的值後,系統不會如預期更新員工 工時表 對話框中相應欄位的值。

解決方式

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. 在工時表管理代碼單元 (17440 的更新時表功能中,將代碼變更如下) :
    現有程式碼

    ...
    
    // Delete the following line.
    UpdateTimesheet(Employee : Record Employee;StartDate : Date;EndDate : Date;CalendarCode : Code[10])
    
    ...
    
    WHILE CurrentDate <= EndDate DO BEGIN
    TimesheetLine.GET(Employee."No.",CurrentDate);
    TimesheetLine.VALIDATE("Calendar Code",CalendarCode);
    CalendarLine.GET(TimesheetLine."Calendar Code",TimesheetLine.Date);
    CalendarLine.TESTFIELD(Status,CalendarLine.Status::Released);
    ...
    

    替換代碼

    ...
    
    // Add the following line.
    UpdateTimesheet(Employee : Record Employee;StartDate : Date;EndDate : Date;CalendarCode : Code[10];CheckReleased : Boolean)
    
    ...
    
    WHILE CurrentDate <= EndDate DO BEGIN
    TimesheetLine.GET(Employee."No.",CurrentDate);
    TimesheetLine.VALIDATE("Calendar Code",CalendarCode);
    CalendarLine.GET(TimesheetLine."Calendar Code",TimesheetLine.Date);
    
    // Add the following line.
    IF CheckReleased THEN 
    
    CalendarLine.TESTFIELD(Status,CalendarLine.Status::Released);
    ...
    
  2. 將薪資Calendar行表中的代碼改為 17430) (。 若要這麼做,請按照下列步驟進行:

    1. 新增一個全域變數,然後指定該變數如下:

      • 名稱:工時表管理
      • 資料類型Codeunit 17440
    2. 在 Release 函式中更改程式碼。 為此,請遵循以下步驟:

      1. 新增一個局部變數,然後指定該變數如下:

        • 名稱:薪資期間
        • 資料型態記錄
        • 子類型薪資期間
      2. 新增第二個區域變數,然後指定該變數如下:

        • 姓名:員工
        • 資料型態記錄
        • 子類型員工
      3. 新增第三個區域變數,然後指定該變數如下:

        • 名稱:EmplJobEntry
        • 資料型態記錄
        • 子類型員工職缺輸入
      4. 更改代碼如下:
        現有程式碼

        ...
        VALIDATE(Status,Status::Open);
        TESTFIELD("Time Activity Code");
        
        GetCalendar;
        IF (Calendar."Shift Days" = 0) AND (NOT Nonworking) THEN
        TESTFIELD("Work Hours");
        
        Status := Status::Released;
        MODIFY;
        ...
        

        替換代碼

        ...
        VALIDATE(Status,Status::Open);
        TESTFIELD("Time Activity Code");
        
        GetCalendar;
        IF (Calendar."Shift Days" = 0) AND (NOT Nonworking) THEN
        TESTFIELD("Work Hours");
        
        // Add the following lines.
        Employee.RESET;
        IF Employee.FINDSET THEN
        REPEAT
        IF Employee.GetJobEntry(Employee."No.",Date,EmplJobEntry) THEN
        IF (EmplJobEntry."Calendar Code" = "Calendar Code") AND
        TimesheetStatus.GET(PayrollPeriod.PeriodByDate(Date),Employee."No.")
        THEN BEGIN
        TimesheetStatus.TESTFIELD(Status,TimesheetStatus.Status::Open);
        TimesheetMgmt.UpdateTimesheet(Employee,Date,Date,"Calendar Code",FALSE);
        END;
        UNTIL Employee.NEXT = 0;
        // End of the added lines.
        
        Status := Status::Released;
        MODIFY;
        ...
        
    3. 在 Reopen 函式中更改程式碼如下:
      現有程式碼

      ...
      VALIDATE(Status,Status::Released);
      
      Employee.RESET;
      IF Employee.FINDSET THEN
      REPEAT
      IF Employee.GetJobEntry(Employee."No.",Date,EmplJobEntry) THEN
      
      // Delete the following lines. 
      IF EmplJobEntry."Calendar Code" = "Calendar Code" THEN BEGIN
      TimesheetStatus.GET(PayrollPeriod.PeriodByDate(Date),Employee."No.");
      TimesheetStatus.TESTFIELD(Status,TimesheetStatus.Status::Open);
      END;
      // End of the deleted lines. 
      
      UNTIL Employee.NEXT = 0;
      
      Status := Status::Open;
      MODIFY;
      ...
      

      替換代碼

      ...
      VALIDATE(Status,Status::Released);
      
      Employee.RESET;
      IF Employee.FINDSET THEN
      REPEAT
      IF Employee.GetJobEntry(Employee."No.",Date,EmplJobEntry) THEN
      
      // Add the following lines.
      IF (EmplJobEntry."Calendar Code" = "Calendar Code") AND
      TimesheetStatus.GET(PayrollPeriod.PeriodByDate(Date),Employee."No.")
      THEN
      TimesheetStatus.TESTFIELD(Status,TimesheetStatus.Status::Open);
      // End of the added lines.
      
      UNTIL Employee.NEXT = 0;
      
      Status := Status::Open;
      MODIFY;
      ...
      
  3. 在勞資合約管理碼單元 (17370 中,將轉移函數中的代碼) 如下:
    現有程式碼

    ...
    IF TimesheetStatus.FINDSET THEN
    REPEAT
    PayrollPeriod.GET(TimesheetStatus."Period Code");
    IF PayrollPeriod.Code = PayrollPeriod.PeriodByDate("Starting Date") THEN
    TimesheetMgmt.UpdateTimesheet(
    
    // Delete the following line.
    Employee,"Starting Date",PayrollPeriod."Ending Date",Position."Calendar Code")
    
    ELSE
    TimesheetMgmt.UpdateTimesheet(
    Employee,PayrollPeriod."Starting Date",PayrollPeriod."Ending Date",Position."Calendar Code");
    UNTIL TimesheetStatus.NEXT = 0;
    END;
    ...
    

    替換代碼

    ...
    IF TimesheetStatus.FINDSET THEN
    REPEAT
    PayrollPeriod.GET(TimesheetStatus."Period Code");
    IF PayrollPeriod.Code = PayrollPeriod.PeriodByDate("Starting Date") THEN
    TimesheetMgmt.UpdateTimesheet(
    
    // Add the following line.
    Employee,"Starting Date",PayrollPeriod."Ending Date",Position."Calendar Code",TRUE)
    
    ELSE
    TimesheetMgmt.UpdateTimesheet(
    Employee,PayrollPeriod."Starting Date",PayrollPeriod."Ending Date",Position."Calendar Code",TRUE); // Modify this line
    UNTIL TimesheetStatus.NEXT = 0;
    END;
    ...
    

先決條件

您必須安裝俄版 Microsoft Dynamics NAV 2009 R2 才能套用此熱修補。

移除資訊

你無法移除這個熱修正。

狀態

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

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