Система несподівано заповнює неправильні суми в записах головна книга (G/L) після того, як ви пост виправлення для документа заробітної плати в російській версії Microsoft Dynamics NAV 2009 R2

Застосовується до
Microsoft Dynamics NAV 2009 R2

Ця стаття стосується Microsoft Dynamics NAV для російської мови (ru).

Ознаки

Припустімо, що інсталяції локального критичного оновлення PS59774 і локального критичного оновлення PS60060 для російської версії Microsoft Dynamics NAV 2009 R2. Щоб отримати додаткові відомості, відвідайте такі веб-сайти Microsoft:

Після того, як ви опублікуйте виправлення для документа заробітної плати, система заповнює обсяги в записах загальної бухгалтерської книги (G/L) для виправлення. Проте суми відрізняються від суми в записах G/L для вихідного документа заробітної плати.

Спосіб усунення проблеми

Відомості про виправлення

Від корпорації Майкрософт доступне виправлення, що підтримується. Однак вона призначена лише для виправлення проблеми, описаної в цій статті. Застосуйте її лише до систем, у яких виникла ця проблема. Це виправлення може отримати додаткове тестування. Таким чином, якщо ви не серйозно постраждали від цієї проблеми, ми радимо дочекатися наступного Microsoft Dynamics NAV 2009 пакет оновлень або наступної версії Microsoft Dynamics NAV, яка містить це виправлення.

Примітка У особливих випадках стягнення плати, які зазвичай понесені для викликів підтримки, може бути скасовано, якщо спеціаліст служби технічної підтримки Microsoft Dynamics і пов'язані продукти визначать, що конкретне оновлення вирішить вашу проблему. Звичайні витрати на підтримку застосовуватимуться до додаткових запитань і питань підтримки, які не відповідають вимогам для конкретного оновлення, про яке йде мова.

          

Відомості про інсталяцію

Корпорація Майкрософт надає приклади програмування лише для ілюстрації без жодних гарантій, явних або неявних. Це стосується зокрема неявних гарантій щодо придатності до продажу чи придатності для певної мети. У цій статті припускається, що ви знайомі з мовою програмування, яка демонструється, і з інструментами, які використовуються для створення і налагодження процедур. Спеціалісти служби підтримки Microsoft можуть пояснити вам функціональні можливості певної процедури. Однак вони не змінюватимуть ці приклади, щоб надавати додаткові функції або конструювати процедури відповідно до ваших конкретних вимог.

Примітка. Перш ніж інсталювати це виправлення, переконайтеся, що всі користувачі клієнта Microsoft Navision, вийти із системи. Це стосується користувачів клієнтських служб Microsoft Navision (NAS). Ви повинні бути єдиним клієнтом користувача, який ввійшов, коли ви впроваджуєте це виправлення.

Щоб реалізувати це виправлення, потрібно мати ліцензію розробника.

Радимо призначити обліковому запису користувача у вікні "Вхід у Windows" або у вікні "Вхід до бази даних" ідентифікатор ролі "SUPER". Якщо обліковому запису користувача не вдалося призначити ідентифікатор ролі SUPER, переконайтеся, що обліковий запис має такі дозволи:

  • Дозвіл на змінення об'єкта, який буде змінюватися.
  • Дозвіл Execute для об'єкта System Object ID 5210 і для об'єкта System Object ID 9015.

Примітка. Ви не повинні мати права на зберігання даних, якщо не потрібно відновлювати дані.

Зміни коду

Примітка. Завжди перевіряйте виправлення коду в контрольованому середовищі, перш ніж застосовувати виправлення до робочих комп'ютерів.
Щоб вирішити цю проблему, виконайте такі дії:

  1. Змініть код у документі платіжних відомостей – Calculatecodeunit (17404). Для цього виконайте такі дії:

    1. Створіть нову функцію в такий спосіб:

      LOCAL PROCEDURE IsCorrDocument@1210011(DocumentNo@1210000 : Code[20]) : Boolean;
      VAR
      PayrollDocument@1210001 : Record 17414;
      BEGIN
      IF PayrollDocument.GET(DocumentNo) THEN
      EXIT(PayrollDocument.Correction);
      END;
      
    2. Змініть код у функції утримання. Ось як це зробити:

      1. Додайте локальну змінну, а потім укажіть змінну в такий спосіб:

        • Ім'я: знак
        • Тип даних: ціле число
      2. Змініть код у такий спосіб:
        Наявний код 1

        ...
        IF RangeHeader.FIND('+') THEN;
        FundTax := (PayrollDocLine."Element Type" = PayrollDocLine."Element Type"::Funds);
        ...
        

        Код заміни 1

        ...
        IF RangeHeader.FIND('+') THEN;
        
        // Add the following lines.
        IF TaxableGross >= 0 THEN
        Sign := 1
        ELSE
        Sign := -1;
        // End of the added lines
        
        FundTax := (PayrollDocLine."Element Type" = PayrollDocLine."Element Type"::Funds);
        ...
        

        Наявний код 2

        ...
        
        // Delete the following line.
        SETFILTER("Over Amount",'<%1',TaxableGross);
        
        IF NOT FIND('+') THEN BEGIN
        SETRANGE("Over Amount");
        IF NOT FIND('-') THEN
        EXIT(0);
        END;
        
        // Delete the following lines.
        ReturnValue := "Tax Amount" +
        ((TaxableGross - "Over Amount") * "Tax %" / 100.0);
        IF ReturnValue < 0 THEN
        ReturnValue := 0;
        IF ("Max Deduction" > 0) AND (ReturnValue > "Max Deduction") THEN
        ReturnValue := "Max Deduction";
        // End of the deleted lines.
        
        ...
        

        Код заміни 2

        ...
        
        // Add the following line.
        SETFILTER("Over Amount",'<%1',ABS(TaxableGross));
        
        IF NOT FIND('+') THEN BEGIN
        SETRANGE("Over Amount");
        IF NOT FIND('-') THEN
        EXIT(0);
        END;
        
        // Add the following lines.
        ReturnValue := "Tax Amount" +
        ((TaxableGross - Sign * "Over Amount") * "Tax %" / 100.0);
        IF (ReturnValue < 0) AND NOT IsCorrDocument(PayrollDocLine."Document No.") THEN
        ReturnValue := 0
        ELSE
        IF ("Max Deduction" > 0) AND (ABS(ReturnValue) > "Max Deduction") THEN
        ReturnValue := Sign * "Max Deduction";
        // End of the added lines.
        
        ...
        
  2. Змініть код у документі платіжних відомостей – post codeunit (17405). Ось як це зробити:

    1. Створіть нову функцію в такий спосіб:

      ...
      LOCAL PROCEDURE GetSignFactor@1210010(Amount@1170000000 : Decimal) : Integer;
      BEGIN
      IF Amount >= 0 THEN
      EXIT(1);
      EXIT(-1);
      END;
      ...
      
    2. Змініть код у тригері Onrun, як це зробити:
      Наявний код

      ...
      PostedPayrDocLineToGenJnlLine(PostedPayrollDocLine,GenJnlLine);
      
      // Delete the following lines.
      IF Correction THEN
      GenJnlLine.VALIDATE(Amount,-PayrollDocBuffer."Tax Amount")
      ELSE
      GenJnlLine.VALIDATE(Amount,PayrollDocBuffer."Tax Amount");
      // End of deleted lines.
      
      PayrollElement.GET(PayrollDocBuffer."Element Code");
      ...
      

      Код заміни

      ...
      PostedPayrDocLineToGenJnlLine(PostedPayrollDocLine,GenJnlLine);
      
      // Add the following line.
      GenJnlLine.VALIDATE(Amount,PayrollDocBuffer."Tax Amount");
      
      ...
      
    3. Змініть код у функції Aggregate Taxes.com. Ось як це зробити:

      1. Додайте локальну змінну, а потім укажіть змінну в такий спосіб:

        • Ім'я: знак
        • Тип даних: ціле число
      2. Змініть код у такий спосіб:
        Наявний код

        ...
        PayrollDocBuffer.RESET;
        PayrollDocBuffer.SETRANGE("Element Code",PayrollDocLineFund."Element Code");
        IF PayrollDocBuffer.FINDSET THEN
        REPEAT
        
        // Delete the following line.
        YTDTaxableAmount := YTDTaxableAmount + PayrollDocBuffer."Base Amount";
        
        TempPayrollDocLine2."Employee No." := PayrollDocLineFund."Employee No.";
        TempPayrollDocLine2."Period Code" := PayrollDocLineFund."Period Code";
        TempPayrollDocLine2."Element Code" := PayrollDocLineFund."Element Code";
        YTDTaxAmount := PayrollDocCalculate.Withholding(TempPayrollDocLine2,YTDTaxableAmount);
        
        // Delete the following line.
        CurrPeriodTaxAmount := YTDTaxAmount + YTDPostedTaxAmount;
        
        PayrollDocBuffer."Tax Amount" := CurrPeriodTaxAmount;
        PayrollDocBuffer.MODIFY;
        
        // Delete the following line.
        YTDPostedTaxAmount := YTDPostedTaxAmount - CurrPeriodTaxAmount;
        
        UNTIL PayrollDocBuffer.NEXT = 0;
        ...
        

        Код заміни

        ...
        PayrollDocBuffer.RESET;
        PayrollDocBuffer.SETRANGE("Element Code",PayrollDocLineFund."Element Code");
        IF PayrollDocBuffer.FINDSET THEN
        REPEAT
        
        // Add the following lines.
        Sign := GetSignFactor(PayrollDocBuffer."Base Amount");
        YTDTaxableAmount := YTDTaxableAmount + Sign * PayrollDocBuffer."Base Amount";
        // End of the added lines.
        
        TempPayrollDocLine2."Document No." := PayrollDocLineFund."Document No.";
        TempPayrollDocLine2."Employee No." := PayrollDocLineFund."Employee No.";
        TempPayrollDocLine2."Period Code" := PayrollDocLineFund."Period Code";
        TempPayrollDocLine2."Element Code" := PayrollDocLineFund."Element Code";
        YTDTaxAmount := PayrollDocCalculate.Withholding(TempPayrollDocLine2,YTDTaxableAmount);
        
        // Add the following line.
        CurrPeriodTaxAmount := Sign * YTDTaxAmount + Sign * YTDPostedTaxAmount;
        
        PayrollDocBuffer."Tax Amount" := CurrPeriodTaxAmount;
        PayrollDocBuffer.MODIFY;
        
        // Add the following line.
        YTDPostedTaxAmount := YTDPostedTaxAmount - Sign * CurrPeriodTaxAmount;
        
        UNTIL PayrollDocBuffer.NEXT = 0;
        ...
        

Попередні вимоги

Щоб застосувати це виправлення, потрібно мати російську версію Microsoft Dynamics NAV 2009 R2.

Відомості про видалення

Не можна видалити це виправлення.

Стан

Корпорація Microsoft підтвердила, що це одна з проблем з продуктами Microsoft, перелічених у розділі "Застосовується до".

Примітка. Це стаття "FAST PUBLISH", створена безпосередньо з організації підтримки Корпорації Майкрософт. Інформація, що міститься в цьому документі, надається як у відповідь на нові проблеми. В результаті швидкості її використання матеріали можуть включати друкарські помилки і можуть бути переглянуті в будь-який час без попередження. Інші зауваження див. в розділі Умови використання .