ПДВ, округляючи працює неправильно, для виправлення записи з документами чеською версії Microsoft Dynamics NAV 2009-R2 купівлі продажу


Ця стаття відноситься до Microsoft Dynamics NAV області Чеська (cz).

Причини


Чеська версія Microsoft Dynamics NAV 2009-R2 система обчислює, ПДВ, округляючи виправлення записів, купівлі продажу документів. Ця проблема виникає, під час системи є округлення рахунків-фактур і ПДВ цілі числа.

Вирішення


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

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

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



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

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

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

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

Корпорація Майкрософт рекомендує, що обліковий запис користувача Windows, вхід вікна або у вікні бази даних входи призначити "Супер" роль ID. Якщо обліковий запис користувача не призначено роль ID "Супер", необхідно переконатися, що обліковий запис користувача, має такі дозволи:
  • Змінити дозвіл об'єкт, який буде змінити.
  • Права для виконання системи об'єкт з Ідентифікатором 5210 об'єкт а також системи об'єкт з Ідентифікатором 9015 об'єкта.


Примітка. Маєте відповідних прав у сховища даних, якщо не потрібно виконати дані відновлення не потрібно.

Зміни коду

Примітка. Завжди тест код вирішення в середовищі контрольовані перед інсталяцією розглянутого виправлення виробництва комп'ютерів.
Щоб вирішити цю проблему, виконайте такі дії.
  1. Змінити код функції RoundAmount в codeunit- Продажу та повідомлення (80) наступним чином:
    Додайте текст постійний наступним чином:
    Text054: TextConst "меню = %1 %2 має бути нуль інсталяції, ПДВ."
    Наявний код
    ...      IF ("VAT Calculation Type" = "VAT Calculation Type"::"Normal VAT") OR
    ("VAT Calculation Type" = "VAT Calculation Type"::"Reverse Charge VAT")
    THEN BEGIN
    GetCurrency;
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);

    IF SalesHeader."Prices Including VAT" THEN
    ...
    Заміна код
    ...   IF ("VAT Calculation Type" = "VAT Calculation Type"::"Normal VAT") OR
    ("VAT Calculation Type" = "VAT Calculation Type"::"Reverse Charge VAT")
    THEN BEGIN
    GetCurrency;
    // Add the following lines.
    IF "System-Created Entry" THEN BEGIN
    RoundingPrecisionLCY := Currency."Amount Rounding Precision";
    RoundingDirectionLCY := Currency.VATRoundingDirection;
    END ELSE BEGIN
    // End of the added lines.

    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
    // Add the following line.
    END;

    IF SalesHeader."Prices Including VAT" THEN
    ...
  2. Змін у функції InvoiceRounding в codeunit- Продажу та повідомлення (80) наступним чином:
    Видалення локального таких змінних:
    • Ім'я: RoundingPrecision; Тип даних: десятковий
    • Ім'я: RoundingDirection; Тип: Текст, [1]
    Додайте локальні таких змінних:
    • Ім'я: VATPostingSetup; Тип:, Запис (325)
    • Ім'я: GLAcc; Тип: Запис, (15)

    Наявний код 1
    ...// Delete the following line.
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);

    Currency.TESTFIELD("Invoice Rounding Precision");
    InvoiceRoundingAmount :=
    -ROUND(
    TotalSalesLine."Amount Including VAT" -
    ROUND(
    TotalSalesLine."Amount Including VAT",
    Currency."Invoice Rounding Precision",
    Currency.InvoiceRoundingDirection),
    // Delete the following line.
    RoundingPrecision);

    IF InvoiceRoundingAmount <>0 THEN BEGIN
    CustPostingGr.GET(SalesHeader."Customer Posting Group");
    CustPostingGr.TESTFIELD("Invoice Rounding Account");

    WITH SalesLine DO BEGIN
    ...
    Код на заміну 1
    ...  Currency.TESTFIELD("Invoice Rounding Precision");
    InvoiceRoundingAmount :=
    -ROUND(
    TotalSalesLine."Amount Including VAT" -
    ROUND(
    TotalSalesLine."Amount Including VAT",
    Currency."Invoice Rounding Precision",
    Currency.InvoiceRoundingDirection),

    // Add the following line.
    Currency."Amount Rounding Precision");

    IF InvoiceRoundingAmount <> 0 THEN BEGIN
    CustPostingGr.GET(SalesHeader."Customer Posting Group");
    CustPostingGr.TESTFIELD("Invoice Rounding Account");
    // Add the following lines.
    IF GLSetup."Rounding VAT (LCY)" <> GLSetup."Amount Rounding Precision" THEN BEGIN
    GLAcc.GET(CustPostingGr."Invoice Rounding Account");
    IF VATPostingSetup.GET(SalesHeader."VAT Bus. Posting Group",GLAcc."VAT Prod. Posting Group") THEN
    IF VATPostingSetup."VAT %" <> 0 THEN
    ERROR(Text054,CustPostingGr.FIELDCAPTION("Invoice Rounding Account"),CustPostingGr."Invoice Rounding Account");
    END;
    // End of the added lines.

    WITH SalesLine DO BEGIN
    ...
    Наявний код 2
    ...   ELSE
    VALIDATE(
    "Unit Price",
    ROUND(
    InvoiceRoundingAmount /
    (1 + (1 - SalesHeader."VAT Base Discount %" / 100) * "VAT %" / 100),
    // Delete the following line.
    RoundingPrecision));

    VALIDATE("Amount Including VAT",InvoiceRoundingAmount);
    ...
    Код на заміну 2
    ...  ELSE
    VALIDATE(
    "Unit Price",
    ROUND(
    InvoiceRoundingAmount /
    (1 + (1 - SalesHeader."VAT Base Discount %" / 100) * "VAT %" / 100),
    // Add the following line.
    Currency."Amount Rounding Precision"));

    VALIDATE("Amount Including VAT",InvoiceRoundingAmount);
    ...
  3. Змін RoundAmount функція в на Purch.-повідомлення codeunit (90) наступним чином:
    Додайте постійне такий текст:

    Text061: TextConst "меню = %1 %2 не має бути нульовим ПДВ-інсталяції."

    Наявний код
    ...  IF ("VAT Calculation Type" = "VAT Calculation Type"::"Normal VAT") OR
    ("VAT Calculation Type" = "VAT Calculation Type"::"Reverse Charge VAT")
    THEN BEGIN
    GetCurrency;
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);

    IF PurchHeader."Prices Including VAT" THEN
    ...
    Заміна код
    ...  IF ("VAT Calculation Type" = "VAT Calculation Type"::"Normal VAT") OR
    ("VAT Calculation Type" = "VAT Calculation Type"::"Reverse Charge VAT")
    THEN BEGIN
    GetCurrency;
    // Add the following lines.
    IF "System-Created Entry" THEN BEGIN
    RoundingPrecisionLCY := Currency."Amount Rounding Precision";
    RoundingDirectionLCY := Currency.VATRoundingDirection;
    END ELSE BEGIN
    // End of the added lines.
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
    // Add the following line.
    END;

    IF PurchHeader."Prices Including VAT" THEN
    ...
  4. Змін InvoiceRounding функція в на Purch.-повідомлення codeunit (90) наступним чином:
    Видалення локального таких змінних:
    • Ім'я: RoundingPrecision; Тип даних: десятковий
    • Ім'я: RoundingDirection; Тип: Текст, [1]
    Додайте локальні таких змінних:
    • Ім'я: VATPostingSetup; Тип:, Запис (325)
    • Ім'я: GLAcc; Тип:, Запис (15)

    Наявний код
    ...   IF InvoiceRoundingAmount <> 0 THEN BEGIN
    VendPostingGr.GET(PurchHeader."Vendor Posting Group");
    VendPostingGr.TESTFIELD("Invoice Rounding Account");

    WITH PurchLine DO BEGIN
    ...
    Заміна код
    ...    IF InvoiceRoundingAmount <>  0 THEN BEGIN
    VendPostingGr.GET(PurchHeader."Vendor Posting Group");
    VendPostingGr.TESTFIELD("Invoice Rounding Account");
    // Add the following lines.
    IF GLSetup."Rounding VAT (LCY)" <> GLSetup."Amount Rounding Precision" THEN BEGIN
    GLAcc.GET(VendPostingGr."Invoice Rounding Account");
    IF VATPostingSetup.GET(PurchHeader."VAT Bus. Posting Group",GLAcc."VAT Prod. Posting Group") THEN
    IF VATPostingSetup."VAT %" <>0 THEN
    ERROR(Text061,VendPostingGr.FIELDCAPTION("Invoice Rounding Account"),VendPostingGr."Invoice Rounding Account");
    END;
    // End of the added lines.
    WITH PurchLine DO BEGIN
    ...
  5. Змінити код у Обсяг включаючи ПДВ - OnValidate тригер Продажу рядка таблиці (37) наступним чином:
    Наявний код
    ...    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);

    Amount :=
    ...
    Заміна код
    ...  CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    // Add the following lines.
    IF "System-Created Entry" THEN
    RoundingPrecision := Currency."Amount Rounding Precision"
    ELSE
    // End of the added lines.
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);

    Amount :=
    ...
  6. Змінити код CalcVATAmountLines функції Продажу рядка таблиці (37) наступним чином:
    Наявний код 1
    ...              END;
    END;
    // Delete the following line
    TotalVATAmount := TotalVATAmount + "Amount Including VAT" - Amount;
    VATCorrection := VATCorrection AND SalesLine."VAT Correction";
    END;
    UNTIL NEXT = 0;
    ...
    Код на заміну 1
    ...            END;
    END;
    // Add the following lines.
    IF GLSetup."Rounding VAT (LCY)" = GLSetup."Amount Rounding Precision" THEN
    TotalVATAmount := TotalVATAmount + "Amount Including VAT" - Amount + "VAT Difference";
    // End of the added lines.
    VATCorrection := VATCorrection AND SalesLine."VAT Correction";
    END;
    UNTIL NEXT = 0;
    ...
    Наявний код 2
    ...    END;
    END;
    // Delete the following line.
    IF RoundingLineInserted THEN
    TotalVATAmount := TotalVATAmount - "VAT Amount";
    "Calculated VAT Amount" := "VAT Amount" - "VAT Difference";
    ...
    Код на заміну 2
    ...     END;
    END;
    // Add the following line.
    IF RoundingLineInserted AND (GLSetup."Rounding VAT (LCY)" = GLSetup."Amount Rounding Precision") THEN
    TotalVATAmount := TotalVATAmount - "VAT Amount";
    "Calculated VAT Amount" := "VAT Amount" - "VAT Difference";
    ...
  7. Змінити код у Обсяг включаючи ПДВ - OnValidate тригер Придбання рядка таблиці (39) наступним чином:
    Наявний код
    ...    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);

    Amount :=
    ...
    Заміна код
    ...  CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    // Add the following lines.
    IF "System-Created Entry" THEN
    RoundingPrecision := Currency."Amount Rounding Precision"
    ELSE
    // End of the added lines.
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);

    Amount :=
    ...
  8. Змінити код CalcVATAmountLines функції Придбання рядка таблиці (39) наступним чином:
    Наявний код 1
    ...       END;
    END;

    TotalVATAmount := TotalVATAmount + "Amount Including VAT" - Amount + "VAT Difference";
    VATCorrection := VATCorrection AND PurchLine."VAT Correction";
    ...
    Код на заміну 1
    ...       END;
    END;
    // Add the following line.
    IF GLSetup."Rounding VAT (LCY)" = GLSetup."Amount Rounding Precision" THEN
    TotalVATAmount := TotalVATAmount + "Amount Including VAT" - Amount + "VAT Difference";
    VATCorrection := VATCorrection AND PurchLine."VAT Correction";
    ...
    Наявний код 2
    ...   END;
    END;
    // Delete the following line.
    IF RoundingLineInserted THEN
    TotalVATAmount := TotalVATAmount - "VAT Amount";
    "Calculated VAT Amount" := "VAT Amount" - "VAT Difference";
    ...
    Код на заміну 2
    ...     END;
    END;
    // Add the following line
    IF RoundingLineInserted AND (GLSetup."Rounding VAT (LCY)" = GLSetup."Amount Rounding Precision") THEN
    TotalVATAmount := TotalVATAmount - "VAT Amount";
    "Calculated VAT Amount" := "VAT Amount" - "VAT Difference";
    ...

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

Потрібно мати чеською версії Microsoft Dynamics NAV 2009 R2 для застосування цього виправлення.

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

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

Стан


Корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених у розділі "Застосовується до".

Посилання


VSTF DynamicsNAV-SE: 254108
Примітка. Це "Швидка публікація" статті, надана службою підтримки корпорації Майкрософт. Відомості в цій статті надано без змін у відповідь на повідомлення про проблеми. З огляду на швидкість публікації матеріали можуть містити орфографічні помилки. Їх може бути змінено в будь-який час без повідомлення. Щоб отримати додаткові відомості, див. Умови використання.