יתרת חופשה מחושבת באופן שגוי עבור חופשה מראש בעת סגירת תקופת שכר עבור התקופה מראש בגירסה הרוסית של Microsoft Dynamics NAV 2009 עם עדכון מקומי עדכונים PS59774, PS60060 מותקן

חל על
Dynamics NAV 2009

מאמר זה חל על Microsoft Dynamics NAV עבור אזור השפה ברוסית (ru).

סימפטומים

בעת סגירת תקופת שכר עבור חופשה מראש בגירסה הרוסית של Microsoft Dynamics NAV 2009 עם עדכון קריטי מקומי עדכונים PS59774, PS60060, יתרת לחופשה מחושבת באופן שגוי עבור התקופה מראש.
לקבלת מידע נוסף אודות קריטי עדכונים PS59774 מקומי PS60060, עיין במידע הבא:

59774 עדכון קריטי מקומי עבור Microsoft Dynamics NAV 2009 RU "שינויים בחישוב תרומות ביטוח עבור ימי מחלה - תבנית חדשה עבור טופס NDFL-2

60060 Персонал и зарплата. Регистр налога на дозодз зизиескиз лиз Microsoft Dynamics NAV 2009 R2 – Россияבעיה זו מתרחשת במוצרים הבאים:

  • הגירסה הרוסית של Microsoft Dynamics NAV 2009 R2
  • הגירסה הרוסית של Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

      

פתרון

מידע אודות תיקונים חמים

תיקון חם נתמך זמין כעת מ- Microsoft. עם זאת, הוא מיועד רק לתיקון הבעיה המתוארת במאמר זה. החל אותו רק על מערכות שנתקלות בבעיה ספציפית זו. תיקון חם זה עשוי לקבל בדיקות נוספות. לכן, אם אתה לא מושפע באופן חמור מבעיה זו, מומלץ להמתין ל- Service Pack הבא של Microsoft Dynamics NAV 2009 או לגירסת MICROSOFT Dynamics NAV הבאה המכילה תיקון חם זה.

הערה במקרים מיוחדים, חיובים שנצבורים בדרך כלל עבור שיחות תמיכה עשויים להבוטל אם מומחה תמיכה טכנית עבור Microsoft Dynamics ומוצרים קשורים קובע שעדכון ספציפי יפתור את הבעיה. עלויות התמיכה הרגילות יחולו על שאלות ובעיות תמיכה נוספות שלא עומדות בדרישות לעדכון הספציפי הרלוונטי.

מידע התקנה

Microsoft מספקת דוגמאות תיכנות לאיור בלבד, ללא אחריות, מפורשת או משתמעת. הדבר כולל, אך אינו מוגבל לאחריות המשתמעת של סוחר או התאמה למטרה מסוימת. מאמר זה מבוסס על ההנחה שאתה מכיר את שפת התיכנות המודגמת, עם הכלים המשמשים ליצירת הליכים ולאתר באגים. מהנדסי התמיכה של Microsoft יכולים לעזור להסביר את הפונקציונליות של הליך מסוים. עם זאת, הם לא שינוי דוגמאות אלה כדי לספק פונקציונליות נוספת או לבנות הליכים כדי לעמוד בדרישות הספציפיות שלך.

הערה לפני התקנת תיקון חם זה, ודא כי כל משתמשי לקוח Microsoft Dynamics NAV נרשם מהמערכת. הדבר כולל את שירותי Microsoft Dynamics NAV Application Server (NAS). עליך להיות משתמש הלקוח היחיד שנכנס בעת יישום תיקון חם זה.

כדי ליישם תיקון חם זה, דרוש לך רשיון מפתח.

אנו ממליצים להקצות לחשבון המשתמש בחלון כניסות Windows או בחלון כניסות מסד נתונים את מזהה התפקיד "SUPER". אם אין אפשרות להקצות לחשבון המשתמש את מזהה התפקיד "SUPER", עליך לוודא שלחשבון המשתמש יש את ההרשאות הבאות:

  • ההרשאה Modify עבור האובייקט שאתה תשנה.

  • ההרשאה Execute עבור אובייקט System Object ID 5210 ול- System Object ID 9015

    אובייקט.

הערה אין צורך להחזיק בזכויות על מאגרי הנתונים אלא אם עליך לבצע תיקון נתונים.

שינויי קוד

הערה בדוק תמיד את תיקוני הקוד בסביבה מבוקרת לפני החלת התיקונים על מחשבי הייצור שלך.

כדי לפתור בעיה זו, בצע את הפעולות הבאות:

  1. הוסף פונקציה חדשה ב- Payroll Period-Close codeunit (17410) באופן הבא:

    PROCEDURE AccrualEntryExists@1210003(EmployeeNo@1210000 : Code[20];StartDate@1210001 : Date;EndDate@1210002 : Date) : Boolean;
    
    VAR
    
    EmplAbsenceEntry@1210003 : Record 17389;
    
    BEGIN
    
    WITH EmplAbsenceEntry DO BEGIN
    
    SETRANGE("Employee No.",EmployeeNo);
    
    SETRANGE("Entry Type","Entry Type"::Accrual);
    
    SETRANGE("Start Date",StartDate);
    
    SETRANGE("End Date",EndDate);
    
    EXIT(NOT ISEMPTY);
    
    END;
    
    END;
    
  2. שנה את הקוד בפונקציה UpdateEmployeeAbsenceEntries בפונקציה Payroll Period-Close codeunit (17410) באופן הבא:
    קוד קיים

    ...
    NewEmplAbsenceEntry.INIT;
    NewEmplAbsenceEntry.TRANSFERFIELDS(EmplAbsenceEntry);
    NewEmplAbsenceEntry."Entry No." := NextEntryNo;
    NewEmplAbsenceEntry."Start Date" := NewStartDate;
    
    // Delete the following line.
    NewEmplAbsenceEntry."End Date" := CALCDATE('<1Y-1D>',NewStartDate);
    // End of the deleted line.
    
    NewEmplAbsenceEntry."Accrual Entry No." := EmplAbsenceEntry."Entry No.";
    NewEmplAbsenceEntry."Calendar Days" := EmplAbsenceEntry."Calendar Days";
    NewEmplAbsenceEntry."Working Days" := 0;
    NewEmplAbsenceEntry.INSERT;
    NextEntryNo := NextEntryNo + 1;
    UNTIL EmplAbsenceEntry.NEXT = 0;
    ...
    

    קוד חלופי

    ...
    // Add the following lines.
    NewEndDate := CALCDATE('<1Y-1D>',NewStartDate);
    IF NOT VacationPeriodExists(Employee."No.",NewStartDate,NewEndDate) THEN BEGIN
    // end of the added line
    
    NewEmplAbsenceEntry.INIT;
    NewEmplAbsenceEntry.TRANSFERFIELDS(EmplAbsenceEntry);
    NewEmplAbsenceEntry."Entry No." := NextEntryNo;
    NewEmplAbsenceEntry."Start Date" := NewStartDate;
    
    // Add the following line.
    NewEmplAbsenceEntry."End Date" := NewEndDate;
    // End of the added line.
    
    NewEmplAbsenceEntry."Accrual Entry No." := EmplAbsenceEntry."Entry No.";
    NewEmplAbsenceEntry."Calendar Days" := EmplAbsenceEntry."Calendar Days";
    NewEmplAbsenceEntry."Working Days" := 0;
    NewEmplAbsenceEntry.INSERT;
    NextEntryNo := NextEntryNo + 1;
    
    // Add the following line.
    END;
    // End of the added line.
    
    UNTIL EmplAbsenceEntry.NEXT = 0;
    ...
    
  3. הוסף פונקציה חדשה ב- codeunit Order-Post (17387) באופן הבא:

    PROCEDURE InsertVacationAccrual@1210008(AbsenceLine@1210000 : Record 17386) : Integer;
    
    VAR
    
    VacationAccrualEntry@1210001 : Record 17389;
    
    BEGIN
    
    EmplAbsenceEntry.RESET;
    
    EmplAbsenceEntry.SETRANGE("Employee No.",AbsenceLine."Employee No.");
    
    EmplAbsenceEntry.SETRANGE("Entry Type",EmplAbsenceEntry."Entry Type"::Accrual);
    
    EmplAbsenceEntry.SETRANGE("Accrual Entry No.",0);
    
    EmplAbsenceEntry.SETFILTER(
    
    "Time Activity Code",
    
    GetAnnualVacTimeActFilter(CALCDATE('<CY>',AbsenceLine."End Date")));
    
    IF EmplAbsenceEntry.FINDLAST THEN BEGIN
    
    NextEntryNo := NextEntryNo + 1;
    
    VacationAccrualEntry.INIT;
    
    VacationAccrualEntry.TRANSFERFIELDS(EmplAbsenceEntry);
    
    VacationAccrualEntry."Entry No." := NextEntryNo;
    
    VacationAccrualEntry."Start Date" := CALCDATE('<+1D>',EmplAbsenceEntry."End Date");
    
    VacationAccrualEntry."End Date" := CALCDATE('<1Y-1D>',VacationAccrualEntry."Start Date");
    
    VacationAccrualEntry."Accrual Entry No." := 0;
    
    VacationAccrualEntry."Calendar Days" := EmplAbsenceEntry."Calendar Days";
    
    VacationAccrualEntry."Working Days" := 0;
    
    VacationAccrualEntry.INSERT;
    
    EXIT(VacationAccrualEntry."Entry No.");
    
    END;
    
    
    
    EXIT(0);
    
    END;
    
  4. שנה את הקוד בפונקציה ApplyEmplAbsenceEntry באופן הבא:
    קוד קיים

    ...
    IF TimeActivity."Use Accruals" THEN BEGIN
    ...
    IF EmplAbsenceEntry2.FINDSET THEN
    REPEAT
    EmplAbsenceEntry2.CALCFIELDS("Used Calendar Days");
    RemainingDays := EmplAbsenceEntry2."Calendar Days" - EmplAbsenceEntry2."Used Calendar Days";
    IF RemainingDays >= DaysToUse THEN BEGIN
    ...
    END;
    UNTIL (EmplAbsenceEntry2.NEXT = 0) OR (DaysToUse = 0);
    END ELSE
    InsertEmplAbsenceEntry(AbsenceLine,AbsenceLine."Calendar Days",AbsenceLine."Working Days",0);
    ...
    

    קוד חלופי

    ...
    IF TimeActivity."Use Accruals" THEN BEGIN
    ...
    IF EmplAbsenceEntry2.FINDSET THEN BEGIN // modify this line
    REPEAT
    EmplAbsenceEntry2.CALCFIELDS("Used Calendar Days");
    RemainingDays := EmplAbsenceEntry2."Calendar Days" - EmplAbsenceEntry2."Used Calendar Days";
    
    // Add the following line.
    IF RemainingDays <> 0 THEN
    // End of the added line.
    
    IF RemainingDays >= DaysToUse THEN BEGIN
    
    ...
    END;
    UNTIL (EmplAbsenceEntry2.NEXT = 0) OR (DaysToUse = 0);
    
    // Add the following lines.
    IF DaysToUse <> 0 THEN
    REPEAT
    IF EmplAbsenceEntry2.GET(InsertVacationAccrual(AbsenceLine)) THEN BEGIN
    EmplAbsenceEntry2.CALCFIELDS("Used Calendar Days");
    RemainingDays := EmplAbsenceEntry2."Calendar Days" - EmplAbsenceEntry2."Used Calendar Days";
    IF RemainingDays >= DaysToUse THEN BEGIN
    InsertEmplAbsenceEntry(AbsenceLine,DaysToUse,0,EmplAbsenceEntry2."Entry No.");
    DaysToUse := 0;
    END ELSE BEGIN
    InsertEmplAbsenceEntry(AbsenceLine,RemainingDays,0,EmplAbsenceEntry2."Entry No.");
    DaysToUse := DaysToUse - RemainingDays;
    END;
    END;
    UNTIL DaysToUse = 0;
    END;
    // End of the added lines.
    
    END ELSE
    InsertEmplAbsenceEntry(AbsenceLine,AbsenceLine."Calendar Days",AbsenceLine."Working Days",0);
    ...
    

          

דרישות מוקדמות

דרוש לך אחד המוצרים הבאים מותקנים כדי להחיל תיקון חם זה:

  • הגירסה הרוסית של Microsoft Dynamics NAV 2009 R2
  • הגירסה הרוסית של Microsoft Dynamics NAV 2009 Service Pack 1

מידע על הסרה

אין באפשרותך להסיר תיקון חם זה.

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".

הערה זהו מאמר "FAST PUBLISH" שנוצר ישירות מתוך ארגון התמיכה של Microsoft. המידע הכלול ב- Herein מסופק כפי שהוא בתגובה לבעיות מתפתחות. כתוצאה מההפיכתה לזמינה, החומרים עשויים לכלול שגיאות טיפוגרפיות וייתכן שיתוקנו בכל עת ללא הודעה מוקדמת. ראה תנאי שימוש לקבלת שיקולים אחרים.