Microsoft Dynamics NAV 2009 R2'nin Rusça sürümünde bordro takvim satırındaki değerleri değiştirdikten sonra sistem Çalışan Zaman Çizelgesi iletişim kutusundaki değerleri güncelleştirmiyor

Uygulandığı Öğe
Microsoft Dynamics NAV 2009 R2

Bu makale, Rusça (ru) dil yerel ayarı için Microsoft Dynamics NAV için geçerlidir.

Belirtiler

Microsoft Dynamics NAV 2009 R2'nin Rusça sürümü için yerel kritik güncelleştirme PS59774 ve yerel kritik güncelleştirme PS60060 yüklediğinizi varsayalım. Daha fazla bilgi için aşağıdaki Microsoft web sitelerini ziyaret edin:

Bordro takvim satırındaki bazı alanların değerlerini değiştirdikten sonra, sistem Çalışan Zaman Çizelgesi iletişim kutusunda ilgili alanlarda yer alan değerleri beklendiği gibi güncelleştirmez.

Çözüm

Düzeltme bilgileri

Artık Microsoft, desteklenen bir düzeltme sunmaktadır. Ancak, yalnızca bu makalede açıklanan sorunu düzeltmeye yöneliktir. Bunu yalnızca bu özel sorunun yaşandığı sistemlere uygulayın. Bu düzeltme için ek sınamalar gerekebilir. Bu nedenle, bu sorundan ciddi bir şekilde etkilenmiyorsanız, bir sonraki Microsoft Dynamics NAV 2009 hizmet paketini veya bu düzeltmeyi içeren bir sonraki Microsoft Dynamics NAV sürümünü beklemenizi öneririz.

Not Özel durumlarda, Microsoft Dynamics ve ilgili ürünler için bir Teknik Destek Uzmanı belirli bir güncelleştirmenin sorunu çözeceğini belirlerse, normalde destek aramaları için yapılan ücretler iptal edilebilir. Ek destek soruları ve söz konusu güncelleştirme için uygun olmayan sorunlara normal destek ücretleri uygulanır.

          

Yükleme bilgileri

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; açık veya zımni hiçbir garanti vermez. Bu, satılabilirlik veya belirli bir amaca uygunluk ile ilgili zımni garantileri içerir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama diline ve prosedürler oluşturmak ve prosedürlerde hata ayıklamak için kullanılan araçlara aşina olduğunuzu varsaymaktadır. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğini açıklamaya yardımcı olabilir. Ancak, ek işlevsellik sağlamak veya özel gereksinimlerinizi karşılamak için prosedürler oluşturmak için bu örnekleri değiştirmeyeceklerdir.

Not Bu düzeltmeyi yüklemeden önce, tüm Microsoft Navision istemcisi kullanıcılarının sistem oturumunu kapattığını doğrulayın. Bu, Microsoft Navision Application Services (NAS) istemci kullanıcılarını içerir. Bu düzeltmeyi uyguladığınızda oturum açan tek istemci kullanıcı siz olmalısınız.

Bu düzeltmeyi uygulamak için bir geliştirici lisansınız olmalıdır.

Windows Oturum Açma veya Veritabanı Oturum Açma penceresindeki kullanıcı hesabına "SUPER" rol kimliğinin atanmasını öneririz. Kullanıcı hesabına "SUPER" rol kimliği atanamıyorsa, kullanıcı hesabının aşağıdaki izinlere sahip olduğunu doğrulamanız gerekir:

  • Değiştireceğiniz nesnenin Değiştirme izni.
  • Sistem Nesne Kimliği 5210 nesnesi ve Sistem Nesne Kimliği 9015 nesnesi için Yürütme izni.

Not: Veri onarımı gerçekleştirmeniz gerekmediği sürece, veri depoları üzerinde haklarınız olması gerekmez.

Kod değişiklikleri

Not: Kod düzeltmelerini üretim bilgisayarlarınıza uygulamadan önce her zaman denetimli bir ortamda sınayın.
Bu sorunu gidermek için aşağıdaki adımları izleyin:

  1. Zaman Çizelgesi Yönetimi kod birimindeki (17440) Zaman Çizelgesini Güncelleştir işlevinde yer alan kodu aşağıdaki gibi değiştirin:
    Mevcut kod

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

    Değişim kodu

    ...
    
    // 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. Bordro CalendarCalendar Line tablosundaki (17430) kodu değiştirin. Bunu yapmak için aşağıdaki adımları izleyin:

    1. Bir genel değişken ekleyin ve değişkeni aşağıdaki gibi belirtin:

      • Ad: TimesheetMgmt
      • Veri türü: Codeunit 17440
    2. Release işlevindeki kodu değiştirin. Bunu yapmak için şu adımları izleyin:

      1. Yerel bir değişken ekleyin ve ardından değişkeni aşağıdaki gibi belirtin:

        • Ad: Bordro Dönemi
        • Veri Türü: Kayıt
        • Alt tür: Bordro Dönemi
      2. İkinci bir yerel değişken ekleyin ve ardından değişkeni aşağıdaki gibi belirtin:

        • Adı: Çalışan
        • Veri Türü: Kayıt
        • Alt tür: Çalışan
      3. Üçüncü bir yerel değişken ekleyin ve değişkeni aşağıdaki gibi belirtin:

        • Adı: EmplJobEntry
        • Veri Türü: Kayıt
        • Alt tür: Çalışan İş Girişi
      4. Kodu aşağıdaki gibi değiştirin:
        Mevcut kod

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

        Değişim kodu

        ...
        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. Yeniden Aç işlevindeki kodu aşağıdaki gibi değiştirin:
      Mevcut kod

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

      Değişim kodu

      ...
      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. İş Sözleşmesi Yönetimi kod birimindeki (17370) Transfer işlevindeki kodu aşağıdaki gibi değiştirin:
    Mevcut kod

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

    Değişim kodu

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

Önkoşullar

Bu düzeltmeyi uygulamak için Microsoft Dynamics NAV 2009 R2'nin Rusça sürümü yüklü olmalıdır.

Kaldırma bilgileri

Bu düzeltmeyi kaldıramazsınız.

Durum

Microsoft bunun, "Şunlar için geçerlidir" bölümünde listelenen Microsoft ürünlerinde sorun olduğunu doğrulamıştır.

Not: Bu, doğrudan Microsoft destek kuruluşu tarafından hazırlanmış bir "HIZLI YAYIMLAMA" makalesidir. Burada yer alan bilgiler acil sorunlar karşısında bu şekliyle verilir. Kullanıma sunma hızının bir sonucu olarak, materyaller yazım hataları içerebilir ve herhangi bir zamanda önceden haber verilmeksizin revize edilebilir. Göz önünde bulundurulması gereken diğer hususlar için Kullanım Koşulları'na bakın.