У Microsoft Dynamics NAV 5.0 із пакетом оновлень 1 не можна використовувати контракт для замовлення на обслуговування на дату завершення терміну дії контракту

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

Ця стаття стосується Microsoft Dynamics NAV для всіх країн і всіх мов.

Припустімо, що у вас є контракт, який має термін дії, указаний у Microsoft Dynamics NAV 5.0 з пакетом оновлень 1. Коли ви створюєте замовлення на обслуговування та намагаєтеся використати договір на дату завершення терміну дії, угоду використовувати не можна.

Ознаки

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

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

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

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

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

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

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

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

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

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

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

Зміни коду

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

  1. Змініть код у контракті "Ні". OnValidate (OnValidate) (OnValidate) (Функція OnValidate) у таблиці заголовків служби (5900), як показано нижче.
    Наявний код

    ...
                                                                        IF ServContract."Starting Date" > "Order Date" THEN
                                                                          ERROR(Text042,"Contract No.");
                                                                        IF (ServContract."Expiration Date" <> 0D) AND
    
                                                                          // Delete the following line.
                                                                           (ServContract."Expiration Date" <= "Order Date")
    
                                                                        THEN
                                                                          ERROR(Text043,"Contract No.");
                                                                      END;
    ...
    
    

    Код заміни

    ...
                                                                        IF ServContract."Starting Date" > "Order Date" THEN
                                                                          ERROR(Text042,"Contract No.");
                                                                        IF (ServContract."Expiration Date" <> 0D) AND
    
                                                                        // Add the following line.
                                                                           (ServContract."Expiration Date" < "Order Date")
    
                                                                        THEN
                                                                          ERROR(Text043,"Contract No.");
                                                                      END;
    ...
    
    
  2. Змініть код у контракті "Ні". Функція OnLookup у таблиці заголовків служби (5900) має такий зміст:
    Наявний код

    ...
                                                                  ServContract.SETRANGE("Bill-to Customer No.","Bill-to Customer No.");
                                                                  ServContract.SETRANGE(Status,ServContract.Status::Signed);
                                                                  ServContract.SETFILTER("Starting Date",'<=%1',"Order Date");
    
                                                                  // Delete the following line.
                                                                  ServContract.SETFILTER("Expiration Date",'>%1 | =%2',"Order Date",0D);
    
                                                                  ServContract.FILTERGROUP(0);
                                                                  CLEAR(ServContractList);
                                                                  ServContractList.SETTABLEVIEW(ServContract);
                                                                  ServContractList.LOOKUPMODE(TRUE);
    ...
    
    

    Код заміни

    ...
                                             ServContract.SETRANGE("Bill-to Customer No.","Bill-to Customer No.");
                                                                  ServContract.SETRANGE(Status,ServContract.Status::Signed);
                                                                  ServContract.SETFILTER("Starting Date",'<=%1',"Order Date");
    
                                                                  // Add the following line.
                                                                  ServContract.SETFILTER("Expiration Date",'>=%1 | =%2',"Order Date",0D);
    
                                                                  ServContract.FILTERGROUP(0);
                                                                  CLEAR(ServContractList);
                                                                  ServContractList.SETTABLEVIEW(ServContract);
                                                                  ServContractList.LOOKUPMODE(TRUE);
    ...
    
    
  3. Змініть код у функції ValidateServicePeriod у таблиці Service Contract Line (5964), як показано нижче.
    Наявний код

    ...
          IF "Starting Date" > CurrentDate THEN
            ERROR(Text020,"Service Item No.","Contract No.");
          IF "Contract Expiration Date" = 0D THEN BEGIN
            ServContractHeader.GET(ServContractHeader."Contract Type"::Contract,"Contract No.");
            IF (ServContractHeader."Expiration Date" <> 0D) AND
               (ServContractHeader."Expiration Date" <= CurrentDate)
            THEN
              ERROR(Text021,"Service Item No.","Contract No.");
          END ELSE
    
    // Delete the following line.
            IF "Contract Expiration Date" <= CurrentDate THEN
    
              ERROR(Text021,"Service Item No.","Contract No.");
    ...
    
    

    Код заміни

    ...
          IF "Starting Date" > CurrentDate THEN
            ERROR(Text020,"Service Item No.","Contract No.");
          IF "Contract Expiration Date" = 0D THEN BEGIN
            ServContractHeader.GET(ServContractHeader."Contract Type"::Contract,"Contract No.");
            IF (ServContractHeader."Expiration Date" <> 0D) AND
               (ServContractHeader."Expiration Date" <= CurrentDate)
            THEN
              ERROR(Text021,"Service Item No.","Contract No.");
          END ELSE
    
    // Add the following line.
            IF "Contract Expiration Date" < CurrentDate THEN
    
              ERROR(Text021,"Service Item No.","Contract No.");
    ...
    
    

          

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

Щоб застосувати це виправлення, потрібно мати пакет оновлень 1 для Microsoft Dynamics NAV 5.0.

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

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

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

Стан

КОРПОРАЦІЯ МАЙКРОСОФТ І/АБО ЇЇ ПОСТАЧАЛЬНИКИ НЕ РОБЛЯТЬ ЖОДНИХ ЗАЯВ АБО ГАРАНТІЙ ЩОДО ПРИДАТНОСТІ, НАДІЙНОСТІ АБО ТОЧНОСТІ ІНФОРМАЦІЇ, ЯКА МІСТИТЬСЯ В ДОКУМЕНТАХ, І ПОВ'ЯЗАНОЇ ГРАФІКИ, ОПУБЛІКОВАНОЇ НА ЦЬОМУ ВЕБ-САЙТІ ("МАТЕРІАЛИ") ДЛЯ БУДЬ-ЯКИХ ЦІЛЕЙ.

МАТЕРІАЛИ МОЖУТЬ МІСТИТИ ТЕХНІЧНІ НЕТОЧНОСТІ АБО ДРУКАРСЬКІ ПОМИЛКИ І МОЖУТЬ БУТИ ПЕРЕГЛЯНУТІ В БУДЬ-ЯКИЙ ЧАС БЕЗ ПОПЕРЕДЖЕННЯ. У МАКСИМАЛЬНІЙ МІРІ, ДОЗВОЛЕНІЙ ЗАСТОСОВНИМ ЗАКОНОДАВСТВОМ, КОРПОРАЦІЯ МАЙКРОСОФТ І/АБО ЇЇ ПОСТАЧАЛЬНИКИ ВІДМОВЛЯЄТЬСЯ ВІД ВІДПОВІДАЛЬНОСТІ ТА ВИКЛЮЧАЄ ВСІ ЗАЯВИ, ГАРАНТІЇ ТА УМОВИ, ЯКІ СТОСУЮТЬСЯ ПРЯМИХ, НЕПРЯМИХ АБО СТАТУТНИХ ЗОБОВ'ЯЗАНЬ, ВКЛЮЧАЮЧИ, АЛЕ НЕ ОБМЕЖУЮЧИСЬ ПОДАННЯМИ, ГАРАНТІЯМИ АБО УМОВАМИ ПРАВА ВЛАСНОСТІ, НЕПОРУШЕННЯ ПРАВ, ЗАДОВІЛЬНОГО СТАНУ АБО ЯКОСТІ, ПРИДАТНОСТІ ДО ПРОДАЖУ ТА ПРИДАТНОСТІ ДЛЯ ПЕВНОЇ МЕТИ, ЩО СТОСУЮТЬСЯ МАТЕРІАЛІВ.