Системата не актуализира стойностите в диалоговия прозорец "График на служители", след като промените стойностите в реда на календара за заплати в руската версия на Microsoft Dynamics NAV 2009 R2

Отнася се за
Microsoft Dynamics NAV 2009 R2

Тази статия се отнася за Microsoft Dynamics NAV за езиково-географска променлива за руски (ru).

Симптоми

Да приемем, че сте инсталирали локалния PS59774 за критична актуализация и локалния PS60060 за критична актуализация за руската версия на Microsoft Dynamics NAV 2009 R2. За повече информация посетете следните уеб сайтове на Microsoft:

След като промените стойностите в някои полета в реда на календара за заплати, системата не актуализира стойностите в съответните полета в диалоговия прозорец " График на служителите ", както се очаква.

Решение

Информация за горещи поправки

Поддържа гореща поправка вече се предлага от Microsoft. Целта му е обаче само да коригира проблема, който е описан в тази статия. Прилагайте го само към системи, които срещат този конкретен проблем. Тази гореща корекция може да бъде подложена на допълнително тестване. Ето защо, ако не сте сериозно засегнати от този проблем, ви препоръчваме да изчакате следващия сервизен пакет за Microsoft Dynamics NAV 2009 или следващата версия на Microsoft Dynamics NAV, която съдържа тази гореща корекция.

Забележка: При специални случаи таксите, които обикновено се начисляват за свързани с поддръжката разговори, могат да бъдат отменени, ако специалист по техническа поддръжка за Microsoft Dynamics и свързаните продукти реши, че проблемът може да бъде решен със специфична актуализация. Стандартните такси за поддръжката ще важат за допълнителни въпроси, свързани с нея, както и за проблеми, които не спадат към съответната актуализация.

          

Информация за инсталиране

Microsoft предоставя примери за програмиране само за илюстрация, без гаранция, нито изрична, или подразбираща се. Това включва, но не се ограничава до, подразбиращите се гаранции за продаваемост или годност за определена цел. В тази статия се предполага, че сте запознати с езика за програмиране, който се демонстрира, и с инструментите, които се използват за създаване и за процедури за отстраняване на грешки. Инженерите по поддръжката на Microsoft могат да ви помогнат да обяснят функционалността на дадена процедура. Те обаче няма да променят тези примери, за да предоставят допълнителна функционалност или да конструират процедури, които да отговарят на вашите конкретни изисквания.

Забележка Преди да инсталирате тази гореща корекция, уверете се, че всички потребители на клиента на Microsoft Navision са излезли от системата. Това включва потребители на клиенти на Microsoft Navision Application Services (NAS). Когато внедрявате тази гореща корекция, трябва да сте единственият клиентски потребител е влязъл.

За да приложите тази гореща корекция, трябва да имате лиценз за разработчик.

Препоръчваме на потребителския акаунт в прозореца за влизане в Windows или в прозореца за влизане в база данни да бъде присвоен ИД на роля "SUPER". Ако на потребителския акаунт не може да бъде присвоен ИД на роля "SUPER", трябва да се уверите, че този потребителски акаунт има следните разрешения:

  • Разрешението за промяна за обекта, който ще променяте.
  • Разрешението за изпълнение за обекта 5210 на системен обект с ИД 5210 и за обекта 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. Добавете глобална променлива и след това задайте променливата, както следва:

      • Име: TimesheetMgmt
      • Тип данни: Codeunit 17440
    2. Променете кода във функцията за освобождаване. За да направите това, изпълнете следните стъпки:

      1. Добавете локална променлива и след това задайте променливата по следния начин:

        • Име: PayrollPeriod
        • Datatype: Record
        • Подтип: Период на заплати
      2. Добавете втора локална променлива и след това задайте променливата по следния начин:

        • Име: Служител
        • Datatype: Record
        • Подтип: Служител
      3. Добавете трета локална променлива и след това задайте променливата, както следва:

        • Име: EmplJobEntry
        • Datatype: Record
        • Подтип: Запис за работа на служител
      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, които са изброени в раздела „Важи за“.

Забележка: Това е статия "FAST PUBLISH", създадена директно от организацията за поддръжка на Microsoft. Информацията, съдържаща се тук, е предоставена както е в отговор на възникващи проблеми. В резултат на бързината на предоставянето им, материалите могат да включват печатни грешки и могат да бъдат коригирани по всяко време без предизвестие. Вижте условията на използване за други съображения.