Semestersaldot beräknas felaktigt för en förskottssemester när du stänger en löneperiod för förskottssemestern i den ryska versionen av Microsoft Dynamics NAV 2009 med Lokal kritisk Uppdateringar PS59774 PS60060 installerat

Gäller för
Dynamics NAV 2009

Den här artikeln gäller Microsoft Dynamics NAV för det ryska språkspråket (ru).

Symptom

När du stänger en löneperiod för en förskottssemester i den ryska versionen av Microsoft Dynamics NAV 2009 med Lokal kritisk Uppdateringar PS59774, PS60060 installerat, beräknas semestersaldot felaktigt för förskottssemestern.
Mer information om lokala kritiska Uppdateringar PS59774 och PS60060 finns i följande information:

59774 Lokal viktig uppdatering för Microsoft Dynamics NAV 2009 RU "Ändringar i beräkning av försäkringsavgifter för sjukfrånvardagar – ny mall för formuläret NDFL-2

60060 Персонал и зарплата. Регистр налога на доходя физических лиц Microsoft Dynamics NAV 2009 R2 – РоссияProblemet uppstår i följande produkter:

  • Den ryska versionen av Microsoft Dynamics NAV 2009 R2
  • Den ryska versionen av Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

      

Lösning

Snabbkorrigeringsinformation

En snabbkorrigering som stöds är nu tillgänglig från Microsoft. Det är dock bara avsett att åtgärda problemet som beskrivs i den här artikeln. Använd den bara på system som har det här specifika problemet. Den här snabbkorrigeringen kan få ytterligare tester. Om du inte drabbas hårt av det här problemet rekommenderar vi därför att du väntar på nästa Microsoft Dynamics NAV 2009 Service Pack eller nästa Microsoft Dynamics NAV-version som innehåller den här snabbkorrigeringen.

Obs! I särskilda fall kan avgifter som vanligtvis uppkommer för supportsamtal avbrytas om en teknisk supporttekniker för Microsoft Dynamics och relaterade produkter fastställer att en specifik uppdatering löser problemet. De vanliga supportkostnaderna gäller för ytterligare supportfrågor och problem som inte är berättigade till den aktuella uppdateringen.

Installationsinformation

Microsoft tillhandahåller endast programmeringsexempel i visningssyfte, utan att någon form av garanti uttrycks eller är underförstådd. Detta omfattar men är inte begränsat till underförstådda garantier för säljbarhet eller lämplighet för ett visst ändamål. Den här artikeln förutsätter att du är bekant med programmeringsspråket som demonstreras och med de verktyg som används för att skapa och felsöka procedurer. Microsofts supporttekniker kan hjälpa till att förklara funktionerna i en viss procedur. De kommer dock inte att ändra dessa exempel för att tillhandahålla ytterligare funktioner eller konstruktionsprocedurer för att uppfylla dina specifika krav.

Obs! Innan du installerar den här snabbkorrigeringen kontrollerar du att alla Microsoft Dynamics NAV-klientanvändare loggas ut från systemet. Detta omfattar NAS-tjänster (Microsoft Dynamics NAV Application Server). Du bör vara den enda klientanvändare som är inloggad när du implementerar snabbkorrigeringen.

Om du vill implementera den här snabbkorrigeringen måste du ha en utvecklarlicens.

Vi rekommenderar att användarkontot i fönstret Windows-inloggningar eller i fönstret Databasinloggningar tilldelas roll-ID:t "SUPER". Om användarkontot inte kan tilldelas superroll-ID måste du kontrollera att användarkontot har följande behörigheter:

  • Behörigheten Ändra för det objekt som du kommer att ändra.

  • Körbehörigheten för systemobjekt-ID 5210-objektet och för systemobjekt-ID 9015

    Objekt.

Obs! Du behöver inte ha rättigheter till datakällorna om du inte behöver utföra datareparation.

Kodändringar

Obs! Testa alltid korrigeringar av kod i en kontrollerad miljö innan du tillämpar korrigeringarna på produktionsdatorerna.

Lös problemet genom att följa de här stegen:

  1. Lägg till en ny funktion i Period-Close codeunit (17410) enligt följande:

    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. Ändra koden i funktionen UpdateEmployeeAbsenceEntries i Period-Close codeunit (17410) enligt följande:
    Befintlig kod

    ...
    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;
    ...
    

    Ersättningskod

    ...
    // 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. Lägg till en ny funktion i Order-Post codeunit (17387) enligt följande:

    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. Ändra koden i funktionen ApplyEmplAbsenceEntry enligt följande:
    Befintlig kod

    ...
    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);
    ...
    

    Ersättningskod

    ...
    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);
    ...
    

          

Krav

Du måste ha någon av följande produkter installerade för att kunna använda den här snabbkorrigeringen:

  • Den ryska versionen av Microsoft Dynamics NAV 2009 R2
  • Den ryska versionen av Microsoft Dynamics NAV 2009 Service Pack 1

Information om borttagning

Du kan inte ta bort den här snabbkorrigeringen.

Status

Microsoft har bekräftat att detta är ett problem i de Microsoft-produkter som anges i avsnittet "Gäller".

Obs! Det här är en "FAST PUBLISH"-artikel som skapats direkt från Microsofts supportorganisation. Den information som finns häri tillhandahålls i befintligt format som svar på framväxande problem. Till följd av hur snabbt materialet blir tillgängligt kan materialet innehålla typografiska fel och kan komma att revideras när som helst utan föregående meddelande. Se användningsvillkor för andra överväganden.