Запропонувати постачальника Платежі звіт (393) пропонує оплату для постачальника, який має від'ємний баланс несподівано, коли параметр пріоритети постачальника ввімкнуто в Microsoft Dynamics NAV 2009 R2

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

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

Ознаки

Припустімо, що застосування виправлення 2623584 в Microsoft Dynamics NAV 2009 R2. Під час запуску запропонувати постачальника Платежі звіт (393), який має параметр пріоритети постачальника ввімкнуто, запропонувати постачальника Платежі звіт (393) пропонує оплати для постачальника, який має від'ємний баланс несподівано.
  Щоб отримати додаткові відомості про виправлення 2623584 клацніть номер статті в базі знань база знань Microsoft:

2623584 звіт "Запропонувати постачальника Платежі" (393) пропонує від'ємний баланс як платіж несподівано, якщо ви використовуєте пріоритети постачальників у Microsoft Dynamics NAV

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

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

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

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

            
          

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

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

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

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

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

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

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

Зміни коду

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

  1. Додайте глобальну змінну у звіті запропонувати постачальника Платежі (393), а потім укажіть змінну в такий спосіб:

    • Ім'я: VendorBalance@1065
    • Тип даних: десяткове число
  2. Змінити код у постачальника - OnAfterGetRecord тригер у звіті запропонувати постачальника Платежі (393), як виконайте такі дії:
    Наявний код

    ...
    // Delete the following lines.
    IF StopPayments THEN
    CurrReport.BREAK;
    Window.UPDATE(1,"No.");
    GetVendLedgEntries(TRUE,FALSE);
    GetVendLedgEntries(FALSE,FALSE);
    CheckAmounts(FALSE);
    ClearNegative;
    // End of the lines.
    ...
    

    Код заміни

    ...
    // Add the following lines.
    CLEAR(VendorBalance);
    CALCFIELDS("Balance (LCY)");
    VendorBalance := "Balance (LCY)";
    IF StopPayments THEN
    CurrReport.BREAK;
    Window.UPDATE(1,"No.");
    IF VendorBalance > 0 THEN BEGIN
    GetVendLedgEntries(TRUE,FALSE);
    GetVendLedgEntries(FALSE,FALSE);
    CheckAmounts(FALSE);
    ClearNegative;
    END;
    // End of the lines.
    ...
    
  3. Змінити код у постачальника - OnPostDataItem тригер у звіті запропонувати постачальника Платежі (393), як виконайте такі дії:
    Наявний код

    ...
    COPYFILTERS(Vend2);
    SETCURRENTKEY(Priority);
    SETRANGE(Priority,0);
    IF FIND('-') THEN
    REPEAT
    
    // Delete the following lines.
    Window.UPDATE(1,"No.");
    GetVendLedgEntries(TRUE,FALSE);
    GetVendLedgEntries(FALSE,FALSE);
    CheckAmounts(FALSE);
    ClearNegative;
    // End of the lines.
    
    UNTIL (NEXT = 0) OR StopPayments;
    END;
    IF UsePaymentDisc AND NOT StopPayments THEN BEGIN
    RESET;
    COPYFILTERS(Vend2);
    Window.OPEN(Text007);
    IF FIND('-') THEN
    REPEAT
    
    // Delete the following lines.
    Window.UPDATE(1,"No.");
    PayableVendLedgEntry.SETRANGE("Vendor No.","No.");
    GetVendLedgEntries(TRUE,TRUE);
    GetVendLedgEntries(FALSE,TRUE);
    CheckAmounts(TRUE);
    UNTIL (NEXT = 0) OR StopPayments;
    END;
    ClearNegative;
    // End of the lines.
    
    JnlLineDim.LOCKTABLE;
    ...
    

    Код заміни

    ...
    COPYFILTERS(Vend2);
    SETCURRENTKEY(Priority);
    SETRANGE(Priority,0);
    IF FIND('-') THEN
    REPEAT
    
    // Add the following lines.
    CLEAR(VendorBalance);
    CALCFIELDS("Balance (LCY)");
    VendorBalance := "Balance (LCY)";
    IF VendorBalance > 0 THEN BEGIN
    Window.UPDATE(1,"No.");
    GetVendLedgEntries(TRUE,FALSE);
    GetVendLedgEntries(FALSE,FALSE);
    CheckAmounts(FALSE);
    ClearNegative;
    END;
    // End of the lines.
    
    UNTIL (NEXT = 0) OR StopPayments;
    END;
    IF UsePaymentDisc AND NOT StopPayments THEN BEGIN
    RESET;
    COPYFILTERS(Vend2);
    Window.OPEN(Text007);
    IF FIND('-') THEN
    REPEAT
    
    // Add the following lines.
    CLEAR(VendorBalance);
    CALCFIELDS("Balance (LCY)");
    VendorBalance := "Balance (LCY)";
    Window.UPDATE(1,"No.");
    PayableVendLedgEntry.SETRANGE("Vendor No.","No.");
    IF VendorBalance > 0 THEN BEGIN
    GetVendLedgEntries(TRUE,TRUE);
    GetVendLedgEntries(FALSE,TRUE);
    CheckAmounts(TRUE);
    ClearNegative;
    END;
    UNTIL (NEXT = 0) OR StopPayments;
    END ELSE
    IF FIND('-') THEN
    REPEAT
    ClearNegative;
    UNTIL NEXT = 0;
    // End of the lines.
    
    JnlLineDim.LOCKTABLE;
    ...
    
  4. Змініть код у функції ClearNegative у звіті запропонувати постачальника Платежі (393), як виконайте такі дії:
    Наявний код

    ...
    CLEAR(PayableVendLedgEntry);
    PayableVendLedgEntry.SETRANGE("Vendor No.",Vendor."No.");
    WHILE PayableVendLedgEntry.NEXT <> 0 DO BEGIN
    TempCurrency.Code := PayableVendLedgEntry."Currency Code";
    CurrencyBalance := 0;
    
    // Delete the following line.
    PayableVendLedgEntry2 := PayableVendLedgEntry;
    
    IF TempCurrency.INSERT THEN BEGIN
    PayableVendLedgEntry.SETRANGE("Currency Code",PayableVendLedgEntry."Currency Code");
    REPEAT
    CurrencyBalance := CurrencyBalance + PayableVendLedgEntry."Amount (LCY)"
    UNTIL PayableVendLedgEntry.NEXT = 0;
    IF CurrencyBalance < 0 THEN
    PayableVendLedgEntry.DELETEALL;
    PayableVendLedgEntry.SETRANGE("Currency Code");
    PayableVendLedgEntry := PayableVendLedgEntry2;
    END;
    END;
    PayableVendLedgEntry.RESET;
    ...
    

    Код заміни

    ...
    CLEAR(PayableVendLedgEntry);
    PayableVendLedgEntry.SETRANGE("Vendor No.",Vendor."No.");
    WHILE PayableVendLedgEntry.NEXT <> 0 DO BEGIN
    TempCurrency.Code := PayableVendLedgEntry."Currency Code";
    CurrencyBalance := 0;
    IF TempCurrency.INSERT THEN BEGIN
    PayableVendLedgEntry.SETRANGE("Currency Code",PayableVendLedgEntry."Currency Code");
    REPEAT
    CurrencyBalance := CurrencyBalance + PayableVendLedgEntry."Amount (LCY)"
    UNTIL PayableVendLedgEntry.NEXT = 0;
    IF CurrencyBalance < 0 THEN
    PayableVendLedgEntry.DELETEALL;
    PayableVendLedgEntry.SETRANGE("Currency Code");
    PayableVendLedgEntry := PayableVendLedgEntry2;
    END;
    END;
    PayableVendLedgEntry.RESET;
    ...
    

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

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

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

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

Стан

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

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