Закръгляване е неправилен и крайната сума е неправилен, когато използвате метода за плащане с фактура точност на закръгление параметър в унгарски версия на Microsoft Dynamics NAV 2009 R2

Прилага се за: Microsoft Dynamics NAV 2009 R2

В тази статия се отнася за Microsoft Dynamics NAV за езиковата променлива на унгарски (hu) език.

Симптоми


Да предположим, че използвате метод на плащане с Фактура точност на закръгление параметър в унгарски версия на Microsoft Dynamics NAV 2009 R2. Освен това закръгляване тип е разположен до най-близкия. В този случай закръгляване е неправилно и крайната сума е неправилен.

Решение


Информация за актуалната корекция

Вече се предлага от Microsoft предоставя поддържана актуална корекция. Обаче е предназначена само за коригиране на описания в тази статия. Прилагайте корекцията само към системи, изпитващи този конкретен проблем. Възможно е провеждането на допълнителни тестове на тази актуална корекция. Следователно ако не сте силно засегнати от този проблем, препоръчваме да изчакате следващия сервизен пакет за Microsoft Dynamics NAV 2009 или следващата версия на Microsoft Dynamics NAV, който ще съдържа тази корекция.

Забележка: При специални случаи таксите, които са за свързани с поддръжката обаждания могат да бъдат отменени, ако специалист по техническа поддръжка за Microsoft Dynamics и свързани с тях продукти определя, че конкретна актуализация може да разреши проблема. Обичайните такси за поддръжката ще важат за допълнителни въпроси и проблеми, които не спадат към съответната актуализация.

Информация за инсталирането

Microsoft предоставя примери само за илюстративни цели без гаранция за определени цели. Това включва, но не е ограничено до, подразбиращи се гаранции за продаваемост или годност за определена цел. Тази статия се предполага, че сте запознати с демонстрирания език за програмиране и инструментите, които се използват за създаване и процедури за отстраняване на грешки. Инженерите на поддръжката на Microsoft могат да помогнат обяснение на функциите на конкретна процедура. Въпреки това те няма да модифицират тези примери с цел осигуряване на допълнителна функционалност или създаване на процедури за удовлетворение на конкретните ви изисквания.

Забележка: Преди да инсталирате тази актуална корекция, уверете се, че всички потребители на Microsoft Navision клиент излезли системата. Това включва Microsoft Navision Application услуги (NAS) клиент потребители. Трябва да бъде само клиент потребител, който е влязъл при прилагане на тази актуална корекция.

За прилагането на тази актуална корекция, трябва да имате лиценз разработчик.

Препоръчително е потребителският акаунт в прозореца влизания в Windows или в прозореца на БД присвояването на "СУПЕР" ИД на роля. Ако потребителският акаунт не може да бъде възложена ИД на роля на "СУПЕР", трябва да проверите, че потребителският акаунт има следните права:
  • Разрешение за промяна на обекта, ще се променя.
  • Разрешението за изпълнение за системата обект номер 5210 обект и системата обект ID 9015 обект.


Забележка: Не трябва да имате права на съхранените данни, освен ако трябва да извършите възстановяване на данни.

Промени код

Забележка: Винаги тест код решава в управлявана среда преди да приложите корекциите производство компютри.
За да разрешите този проблем, изпълнете следните стъпки:
  1. Добавяне на нов PrepmtAmtToDeduct (PricesIncludingVAT: Boolean; PrepaymentPct: Decimal): Decimal функция в таблицата ред в продажби (37). За да направите това, изпълнете следните стъпки:
    1. Добавяне на локална променлива и след това задайте променливата както следва:
      • Име: VATFactor
      • Тип данни: десетично
    2. Добавете кода по следния начин:
      IF PricesIncludingVAT THENVATFactor := (1 + "VAT %" / 100)
      ELSE
      VATFactor := 1;
      EXIT(
      ROUND(
      ROUND(
      ROUND(
      ROUND("Unit Price" * "Qty. to Invoice",Currency."Amount Rounding Precision") *
      (1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *
      (PrepaymentPct / 100) / VATFactor,Currency."Amount Rounding Precision") * VATFactor,Currency."Amount Rounding Precision"));

  2. Промяна на функцията CalcPrepaymentToDeduct в таблицата ред в продажби (37). За да направите това, изпълнете следните стъпки:
    1. Изтрийте следните локални променливи:
      PrepmtPct: Decimal;AbsoluteAdvCorrection: Boolean;

    2. Добавете следните локални променливи:
      TotalPrepmtAmtToDeduct: Decimal;HundredPct: Decimal;

    3. Замени код по следния начин:
      IF (Quantity - "Quantity Invoiced") <> 0 THEN BEGINTotalPrepmtAmtToDeduct := "Prepmt. Amt. Inv." - "Prepmt Amt Deducted";
      GetSalesHeader;
      IF SalesHeader."Prepayment Type" = SalesHeader."Prepayment Type"::Advance THEN BEGIN
      VATPostingSetup.GET("VAT Bus. Posting Group","VAT Prod. Posting Group");
      CASE VATPostingSetup."Adv. Invoice Correction Type" OF
      VATPostingSetup."Adv. Invoice Correction Type"::Percentage:
      "Prepmt Amt to Deduct" :=
      ROUND("Qty. to Invoice" / (Quantity - "Quantity Invoiced") *
      TotalPrepmtAmtToDeduct,Currency."Amount Rounding Precision");
      VATPostingSetup."Adv. Invoice Correction Type"::Absolute:
      BEGIN
      HundredPct := 100;
      "Prepmt Amt to Deduct" := PrepmtAmtToDeduct(SalesHeader."Prices Including VAT",HundredPct);
      IF "Prepmt Amt to Deduct" > TotalPrepmtAmtToDeduct THEN
      "Prepmt Amt to Deduct" := TotalPrepmtAmtToDeduct;
      END;
      VATPostingSetup."Adv. Invoice Correction Type"::"Fully Invoiced":
      IF "Qty. to Invoice" = Quantity - "Quantity Invoiced" THEN
      "Prepmt Amt to Deduct" := TotalPrepmtAmtToDeduct
      ELSE
      "Prepmt Amt to Deduct" := 0;
      END;
      END ELSE
      "Prepmt Amt to Deduct" := PrepmtAmtToDeduct(SalesHeader."Prices Including VAT","Prepayment %");
      END ELSE
      "Prepmt Amt to Deduct" := 0

  3. Добавяне на нов PrepmtAmtToDeduct (PricesIncludingVAT: Boolean; PrepaymentPct: Decimal): Decimal функция в таблицата за покупки (39). За да направите това, изпълнете следните стъпки:
    1. Добавяне на локална променлива и след това задайте променливата както следва:
      • Име: VATFactor
      • Тип данни: десетично
    2. Добавете кода по следния начин:
      IF PricesIncludingVAT THENVATFactor := (1 + "VAT %" / 100)
      ELSE
      VATFactor := 1;
      EXIT(
      ROUND(
      ROUND(
      ROUND(
      ROUND("Unit Cost" * "Qty. to Invoice",Currency."Amount Rounding Precision") *
      (1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *
      (PrepaymentPct / 100) / VATFactor,Currency."Amount Rounding Precision") * VATFactor,Currency."Amount Rounding Precision"));

  4. Промяна на функцията CalcPrepaymentToDeduct в таблицата ред в продажби (37). За да направите това, изпълнете следните стъпки:
    1. Изтрийте следните локални променливи:
      PrepmtPct: Decimal;AbsoluteAdvCorrection: Boolean;

    2. Добавете следните локални променливи:
      TotalPrepmtAmtToDeduct: Decimal;HundredPct: Decimal;

    3. Замени код по следния начин:
      IF (Quantity - "Quantity Invoiced") <> 0 THEN BEGINTotalPrepmtAmtToDeduct := "Prepmt. Amt. Inv." - "Prepmt Amt Deducted";
      GetPurchHeader;
      IF PurchHeader."Prepayment Type" = PurchHeader."Prepayment Type"::Advance THEN BEGIN
      VATPostingSetup.GET("VAT Bus. Posting Group","VAT Prod. Posting Group");
      CASE VATPostingSetup."Adv. Invoice Correction Type" OF
      VATPostingSetup."Adv. Invoice Correction Type"::Percentage:
      "Prepmt Amt to Deduct" :=
      ROUND("Qty. to Invoice" / (Quantity - "Quantity Invoiced") *
      TotalPrepmtAmtToDeduct,Currency."Amount Rounding Precision");
      VATPostingSetup."Adv. Invoice Correction Type"::Absolute:
      BEGIN
      HundredPct := 100;
      "Prepmt Amt to Deduct" := PrepmtAmtToDeduct(PurchHeader."Prices Including VAT",HundredPct);
      IF "Prepmt Amt to Deduct" > TotalPrepmtAmtToDeduct THEN
      "Prepmt Amt to Deduct" := TotalPrepmtAmtToDeduct;
      END;
      VATPostingSetup."Adv. Invoice Correction Type"::"Fully Invoiced":
      IF "Qty. to Invoice" = Quantity - "Quantity Invoiced" THEN
      "Prepmt Amt to Deduct" := TotalPrepmtAmtToDeduct
      ELSE
      "Prepmt Amt to Deduct" := 0;
      END;
      END ELSE
      "Prepmt Amt to Deduct" := PrepmtAmtToDeduct(PurchHeader."Prices Including VAT","Prepayment %");
      END ELSE
      "Prepmt Amt to Deduct" := 0

  5. Променете кода в InitInvoiceRoundingLine функция в кодова единица продажбите Post авансови плащания (442) както следва:
    Съществуващ код
    ...IF SalesHeader."Currency Code" = '' THEN
    Currency.InitRoundingPrecision
    ELSE
    Currency.GET(SalesHeader."Currency Code");
    ...

    Замени код
    ...IF SalesHeader."Currency Code" = '' THEN BEGIN
    Currency.SetDocumentType(SalesHeader."Document Type");
    Currency.SetPaymentMethod(SalesHeader."Payment Method Code");
    Currency.InitRoundingPrecision;
    END ELSE
    Currency.GET(SalesHeader."Currency Code");
    ...

  6. Променете кода в InsertLineRelation функция в кодова единица продажбите Post авансови плащания (442) както следва:
    Съществуващ код
    ...IF SalesHeader."Currency Code" = '' THEN
    Currency.InitRoundingPrecision
    ELSE
    Currency.GET(SalesHeader."Currency Code");
    ...

    Замени код
    ...IF SalesHeader."Currency Code" = '' THEN BEGIN
    Currency.SetDocumentType(SalesHeader."Document Type");
    Currency.SetPaymentMethod(SalesHeader."Payment Method Code");
    Currency.InitRoundingPrecision;
    END ELSE
    Currency.GET(SalesHeader."Currency Code");
    ...

  7. Променете кода в InsertInvoiceRounding функция в кодова единица продажбите Post авансови плащания (442) както следва:
    Съществуващ код
    ..."G/L Account No." := SalesLine."No.";
    "Dimension Entry No." := InsertInDimBuffer(TempDocDim,SalesLine);
    ...

    Замени код
    ..."G/L Account No." := SalesLine."No.";

    // Add the following line
    Description := SalesLine.Description;

    "Dimension Entry No." := InsertInDimBuffer(TempDocDim,SalesLine);
    ...

  8. Променете кода в InsertInvoiceRounding функция в кодова единица покупка Post авансови плащания (444) както следва:
    Съществуващ код
    ..."G/L Account No." := PurchLine."No.";
    "Dimension Entry No." := InsertInDimBuffer(TempDocDim,PurchLine);
    ...

    Замени код
    ..."G/L Account No." := PurchLine."No.";

    // Add the following line.
    Description := PurchLine.Description;

    "Dimension Entry No." := InsertInDimBuffer(TempDocDim,PurchLine);
    ...

  9. Променете кода в InitInvoiceRoundingLine функция в кодова единица покупка Post авансови плащания (444) както следва:
    Съществуващ код
    ...IF PurchHeader."Currency Code" = '' THEN
    Currency.InitRoundingPrecision
    ELSE
    Currency.GET(PurchHeader."Currency Code");
    ...

    Замени код
    ...IF PurchHeader."Currency Code" = '' THEN BEGIN
    Currency.SetDocumentType(PurchHeader."Document Type");
    Currency.SetPaymentMethod(PurchHeader."Payment Method Code");
    Currency.InitRoundingPrecision;
    END
    ELSE
    Currency.GET(PurchHeader."Currency Code");
    ...

  10. Променете кода в InsertLineRelation функция в кодова единица покупка Post авансови плащания (444) както следва:
    Съществуващ код
    ...IF PurchHeader."Currency Code" = '' THEN
    Currency.InitRoundingPrecision
    ELSE
    Currency.GET(PurchHeader."Currency Code");
    ...

    Замени код
    ...IF PurchHeader."Currency Code" = '' THEN BEGIN
    Currency.SetDocumentType(PurchHeader."Document Type");
    Currency.SetPaymentMethod(PurchHeader."Payment Method Code");
    Currency.InitRoundingPrecision;
    END
    ELSE
    Currency.GET(PurchHeader."Currency Code");
    ...

  11. Добавяне на нов LineRelationExists (LetterLine: 26586 запис): Boolean функция в продажби Post напредъка кодова единица (26585). За да направите това, изпълнете следните стъпки:
    1. Добавяне на локална променлива и след това задайте променливата както следва:
      • Име: LineRelation
      • Тип данни: запис 26592
    2. Добавете кода по следния начин:
      WITH LineRelation DO BEGINSETRANGE(Type,Type::Sale);
      SETRANGE("Letter No.",LetterLine."Letter No.");
      SETRANGE("Letter Line No.",LetterLine."Line No.");
      EXIT(NOT ISEMPTY);
      END;

  12. Добавяне на нов UpdateAmountToApply (LetterLine: запис 26592; ДДС LinkedAdvanceEntry: Запис 21) функция в продажби Post напредъка кодова единица (26585). За да направите това, изпълнете следните стъпки:
    1. Добавяне на локална променлива и след това задайте променливата както следва:
      • Име: връзка
      • Тип данни: запис 26590
    2. Добавяне на локална променлива и след това задайте променливата както следва:
      • Име: CustLedgEntry
      • Тип данни: запис 21
    3. Добавете кода по следния начин:
      WITH Link DO BEGINSETRANGE("Entry Type","Entry Type"::"Link To Letter");
      SETRANGE("Document No.",LetterLine."Letter No.");
      SETRANGE("Line No.",LetterLine."Line No.");
      IF FINDSET THEN
      REPEAT
      IF CustLedgEntry.GET("CV Ledger Entry No.") THEN BEGIN
      CustLedgEntry.CALCFIELDS("Remaining Amount");
      IF CustLedgEntry."Remaining Amount" <> -LinkedAdvanceEntry."Amount to Apply" THEN
      IF LinkedAdvanceEntry.GET(CustLedgEntry."Entry No.") THEN BEGIN
      LinkedAdvanceEntry."Amount to Apply" := LinkedAdvanceEntry."Amount to Apply" + Amount;
      LinkedAdvanceEntry.MODIFY;
      END ELSE BEGIN
      LinkedAdvanceEntry := CustLedgEntry;
      LinkedAdvanceEntry."Amount to Apply" := Amount;
      LinkedAdvanceEntry."Currency Code" := "Currency Code";
      LinkedAdvanceEntry.INSERT;
      END;
      END;
      UNTIL NEXT = 0;
      END;

  13. Добавяне на нов AddRoundingLine (LetterLine: запис 26586; SalesInvHeader: Запис 112; VAR LinkedAdvanceEntry: Запис 21; LastLetterNo: Код [20]): DeductedAmount: Decimal
    функционират по продажби-Post напредъка кодова единица (26585) както следва:
    LetterLine.SETRANGE("Letter No.",LetterLine."Letter No.");LetterLine.SETFILTER("Line No.",'>%1',LetterLine."Line No.");
    LetterLine.SETFILTER("Amount To Deduct",'<>0');
    IF LetterLine.FINDSET(TRUE) THEN
    REPEAT
    IF NOT LineRelationExists(LetterLine) THEN BEGIN
    DeductedAmount := DeductedAmount + LetterLine."Amount To Deduct";
    LetterLine."Amount Deducted" := LetterLine."Amount Deducted" + LetterLine."Amount To Deduct";
    LetterLine."Amount To Deduct" := 0;
    LetterLine.MODIFY(TRUE);
    UpdateAmountToApply(LetterLine,LinkedAdvanceEntry);
    AddPrepmtSalesInvLine(LetterLine,SalesInvHeader,LetterLine."Amount Deducted",LetterLine."VAT Amount",LastLetterNo);
    END;
    UNTIL LetterLine.NEXT = 0;

  14. Промяна на кода в PostInvoiceCorrection функция в продажби Post напредъка кодова единица (26585) както следва:
    Съществуващ код
    ...FullyDeducted := FullyDeductedCustPrepmt(SalesLine);

    // Delete the following lines.
    IF FullyDeducted THEN
    DeductRndLetterLines(SalesHeader."No.");
    // End of thelines.
    ...

    Замени код
    ...FullyDeducted := FullyDeductedCustPrepmt(SalesLine);
    ...

  15. Променете кода в DeductRndLetterLines функция в продажби Post напредъка кодова единица (26585) както следва:
    Съществуващ код
    ...AddPrepmtSalesInvLine(LetterLine,SalesInvHeader,AmountToDeduct,VATAmount,LastLetterNo);
    END;
    UNTIL LineRelation.NEXT = 0;

    Замени код
    ...AddPrepmtSalesInvLine(LetterLine,SalesInvHeader,AmountToDeduct,VATAmount,LastLetterNo);

    // Add the following lines.
    IF SalesLine."Prepmt Amt to Deduct" + SalesLine."Prepmt Amt Deducted" = SalesLine."Prepmt. Amt. Inv." THEN
    InvoicedAmount := InvoicedAmount + AddRoundingLine(LetterLine,SalesInvHeader,LinkedAdvanceEntry,LastLetterNo);
    // End of the lines.

    END;
    UNTIL LineRelation.NEXT = 0;
    ...

  16. Добавяне на нов LineRelationExists (LetterLine: запис 26588) функция в покупка Post напредъка кодова единица (26586). За да направите това, изпълнете следните стъпки:
    1. Добавяне на локална променлива и след това задайте променливата както следва:
      • Име: LineRelation
      • Тип данни: запис 26592
    2. Добавете кода по следния начин:
      WITH LineRelation DO BEGINSETRANGE(Type,Type::Purchase);
      SETRANGE("Letter No.",LetterLine."Letter No.");
      SETRANGE("Letter Line No.",LetterLine."Line No.");
      EXIT(NOT ISEMPTY);
      END;

  17. Добавяне на нов UpdateAmountToApply (LetterLine: запис 26588; VAR LinkedAdvanceEntry: Запис 25) функция в покупка Post напредъка кодова единица (26586). За да направите това, изпълнете следните стъпки:
    1. Добавяне на локална променлива и след това задайте променливата както следва:
      • Име: LetterLine
      • Тип данни: запис 26588
    2. Добавяне на локална променлива и след това задайте променливата както следва:
      • Име: VendorLedgEntry
      • Тип данни: запис 25
    3. Добавете кода по следния начин:
      WITH Link DO BEGINSETRANGE("Entry Type","Entry Type"::"Link To Letter");
      SETRANGE("Document No.",LetterLine."Letter No.");
      SETRANGE("Line No.",LetterLine."Line No.");
      IF FINDSET THEN
      REPEAT
      IF VendorLedgEntry.GET("CV Ledger Entry No.") THEN BEGIN
      VendorLedgEntry.CALCFIELDS("Remaining Amount");
      IF VendorLedgEntry."Remaining Amount" <> -LinkedAdvanceEntry."Amount to Apply" THEN
      IF LinkedAdvanceEntry.GET(VendorLedgEntry."Entry No.") THEN BEGIN
      LinkedAdvanceEntry."Amount to Apply" := LinkedAdvanceEntry."Amount to Apply" + Amount;
      LinkedAdvanceEntry.MODIFY;
      END ELSE BEGIN
      LinkedAdvanceEntry := VendorLedgEntry;
      LinkedAdvanceEntry."Amount to Apply" := Amount;
      LinkedAdvanceEntry."Currency Code" := "Currency Code";
      LinkedAdvanceEntry.INSERT;
      END;
      END;
      UNTIL NEXT = 0;
      END;

  18. Добавяне на нов AddRoundingLine (LetterLine: запис 26588; PurchInvHeader: Запис 122; VAR LinkedAdvanceEntry: Запис 25; LastLetterNo: Код [20]): DeductedAmount: Decimal функционира в покупка Post напредъка кодова единица (26586) както следва:
    LetterLine.SETRANGE("Letter No.",LetterLine."Letter No.");LetterLine.SETFILTER("Line No.",'>%1',LetterLine."Line No.");
    LetterLine.SETFILTER("Amount To Deduct",'<>0');
    IF LetterLine.FINDSET(TRUE) THEN
    REPEAT
    IF NOT LineRelationExists(LetterLine) THEN BEGIN
    DeductedAmount := DeductedAmount + LetterLine."Amount To Deduct";
    LetterLine."Amount Deducted" := LetterLine."Amount Deducted" + LetterLine."Amount To Deduct";
    LetterLine."Amount To Deduct" := 0;
    LetterLine.MODIFY(TRUE);
    UpdateAmountToApply(LetterLine,LinkedAdvanceEntry);
    AddPrepmtPurchInvLine(LetterLine,PurchInvHeader,LetterLine."Amount Deducted",LetterLine."VAT Amount",LastLetterNo);
    END;
    UNTIL LetterLine.NEXT = 0;

  19. Променете кода в PostInvoiceCorrection функция в покупка Post напредъка кодова единица (26586) както следва:
    Съществуващ код
    ...FullyDeducted := FullyDeductedVendPrepmt(PurchLine);

    // Delete the following lines.
    IF FullyDeducted THEN
    DeductRndLetterLines(PurchHeader."No.");
    // End of the lines.

    PurchLine.SETFILTER("Prepmt Amt to Deduct",'<>0');
    ...

    Замени код
    ...FullyDeducted := FullyDeductedVendPrepmt(PurchLine);

    PurchLine.SETFILTER("Prepmt Amt to Deduct",'<>0');
    ...

  20. Изтриване на функцията DeductRndLetterLines в покупка Post напредъка кодова единица (26586).
  21. Променете кода в PostInvLineCorrection функция в покупка Post напредъка кодова единица (26586) както следва:
    Съществуващ код
    ...AddPrepmtPurchInvLine(LetterLine,PurchInvHeader,AmountToDeduct,VATAmount,LastLetterNo);
    END;
    UNTIL LineRelation.NEXT = 0;
    ...

    Замени код
    ...AddPrepmtPurchInvLine(LetterLine,PurchInvHeader,AmountToDeduct,VATAmount,LastLetterNo);

    // Add the following lines.
    IF PurchLine."Prepmt Amt to Deduct" + PurchLine."Prepmt Amt Deducted" = PurchLine."Prepmt. Amt. Inv." THEN
    InvoicedAmount := InvoicedAmount + AddRoundingLine(LetterLine,PurchInvHeader,LinkedAdvanceEntry,LastLetterNo);
    // End of the lines.

    END;
    UNTIL LineRelation.NEXT = 0;
    ...

Необходими условия:

Трябва да имате унгарски версия на Microsoft Dynamics NAV 2009 R2 да приложите тази актуална корекция.

Информация за премахване

Не можете да премахнете тази актуална корекция.

Статус


Microsoft потвърждава, че това е проблем в продуктите на Microsoft, изброени в раздела "Отнася се за".
Забележка: Това е статия "БЪРЗА ПУБЛИКАЦИЯ", създадени директно от организацията за поддръжка на Microsoft. Информацията тук се предоставя "както-е" в отговор на появили се проблеми. В резултат на скоростта на предоставянето му материалите могат да съдържат печатни грешки и могат да бъдат коригирани по всяко време без предизвестие. Вижте Условия за други съображения.