Отнася се за
Microsoft Dynamics NAV 2009 R2

В тази статия се отнася за Microsoft Dynamics NAV за Източна Европа ДД език език.

Симптоми

Да предположим, че прилагането на актуална корекция 2672643 в Източна Европа версия на Microsoft Dynamics NAV 2009 R2. Изпращате предварително писмо за поръчка, която съдържа авансови плащания. В тази ситуация когато доставят и фактуриране на поръчки за продажби, получавате следното съобщение за грешка:

Количество за доставка не може да бъде повече от 0,9. продажби линия тип документ = "Ред", документ номер = "номер", ред. = "номер".

Следователно не може да изпращате поръчки за продажби.За повече информация за актуална корекция 2672643 щракнете върху следния номер на статия в базата знания на Microsoft:

2672643 "не са публикувани предварително плащане суми по ред [Брой]" съобщение за грешка, когато изпращате частично експедиране на поръчка в Източна Европа версия на Microsoft Dynamics NAV 2009 R2

Решение

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

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

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

Microsoft предоставя примери само за илюстративни цели без гаранция за определени цели. Това включва, но не е ограничено до, подразбиращи се гаранции за продаваемост или годност за определена цел. Тази статия се предполага, че сте запознати с демонстрирания език за програмиране и инструментите, които се използват за създаване и процедури за отстраняване на грешки. Инженерите на поддръжката на Microsoft могат да помогнат обяснение на функциите на конкретна процедура. Въпреки това те няма да модифицират тези примери с цел осигуряване на допълнителна функционалност или създаване на процедури за удовлетворение на конкретните ви изисквания.Забележка: Преди да инсталирате тази актуална корекция, уверете се, че всички потребители на клиента на Microsoft Dynamics NAV са излезли от системата. Това включва и услуги на Microsoft Dynamics NAV приложение сървър (NAS). Трябва да бъде само клиент потребител, който е влязъл при прилагане на тази актуална корекция.За прилагане на тази актуална корекция, трябва да имате лиценз разработчик.Препоръчително е потребителският акаунт в прозореца влизания в Windows или в прозореца на БД присвояването на "СУПЕР" ИД на роля. Ако потребителският акаунт не може да бъде възложена ИД на роля на "СУПЕР", трябва да проверите, че потребителският акаунт има следните права:

  • Разрешение за промяна на обекта, ще се променя.

  • Разрешението за изпълнение за обекта на системата обект номер 5210 и системата обект ID 9015 обект.

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

Промени код

Забележка: Винаги тест код решава в управлявана среда преди да приложите корекциите производство компютри.За да разрешите този проблем, изпълнете следните стъпки:

  1. Да променяте Ав за приспадане - OnValidate задейства в таблицата "Ред от продажби" (37) както следва:Съществуващ код

    ..."Prepmt Amt to Deduct",STRSUBSTNO(Text045,"Prepmt. Amt. Inv." - "Prepmt Amt Deducted"));IF "Qty. to Invoice" = Quantity - "Quantity Invoiced" THEN// Delete the following line. TESTFIELD("Prepmt Amt to Deduct","Prepmt. Amt. Inv." - "Prepmt Amt Deducted");...

    Смяна на код

    ..."Prepmt Amt to Deduct",STRSUBSTNO(Text045,"Prepmt. Amt. Inv." - "Prepmt Amt Deducted"));IF "Qty. to Invoice" = Quantity - "Quantity Invoiced" THEN// Add the following lines. TESTFIELD("Prepmt Amt to Deduct","Prepmt. Amt. Inv." - "Prepmt Amt Deducted");GetSalesHeader;IF SalesHeader."Prepayment Type" = SalesHeader."Prepayment Type"::Advance THEN BEGINVATPostingSetup.GET("VAT Bus. Posting Group","VAT Prod. Posting Group");VATPostingSetup.TESTFIELD("Adv. Invoice Correction Type",VATPostingSetup."Adv. Invoice Correction Type"::Percentage);END;// End of the added lines. ...

  2. Променете кода в CalcPrepaymentToDeduct функция в таблицата "Ред от продажби" (37) както следва:

    1. Изтрийте следните локални променливи:

      PrepmtPct: Decimal;AbsoluteAdvCorrection : Boolean;
    2. Променяте както следва:Съществуващ код

      ...IF (Quantity - "Quantity Invoiced") <> 0 THEN BEGINGetSalesHeader;IF SalesHeader."Prepayment Type" = SalesHeader."Prepayment Type"::Advance THEN BEGINVATPostingSetup.GET("VAT Bus. Posting Group","VAT Prod. Posting Group");// Delete the following lines. AbsoluteAdvCorrection :=VATPostingSetup."Adv. Invoice Correction Type" = VATPostingSetup."Adv. Invoice Correction Type"::Absolute;IF AbsoluteAdvCorrection THEN BEGINPrepmtPct := "Prepayment %";"Prepayment %" := 100;END;END;IF SalesHeader."Prices Including VAT" THEN"Prepmt Amt to Deduct" :=ROUND(ROUND(ROUND(ROUND("Unit Price" * "Qty. to Invoice",Currency."Amount Rounding Precision") *(1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *("Prepayment %" / 100) / (1 + ("VAT %" / 100)),Currency."Amount Rounding Precision") *(1 + ("VAT %" / 100)),Currency."Amount Rounding Precision")ELSE"Prepmt Amt to Deduct" :=ROUND(ROUND(ROUND("Unit Price" * "Qty. to Invoice",Currency."Amount Rounding Precision") *(1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *"Prepayment %" / 100 ,Currency."Amount Rounding Precision");IF AbsoluteAdvCorrection THEN BEGIN"Prepayment %" := PrepmtPct;IF "Prepmt Amt to Deduct" > ("Prepmt. Amt. Inv." - "Prepmt Amt Deducted") THEN"Prepmt Amt to Deduct" := "Prepmt. Amt. Inv." - "Prepmt Amt Deducted";END;END ELSE"Prepmt Amt to Deduct" := 0// End of the deleted lines....

      Смяна на код

      ...IF (Quantity - "Quantity Invoiced") <> 0 THEN BEGINGetSalesHeader;IF SalesHeader."Prepayment Type" = SalesHeader."Prepayment Type"::Advance THEN BEGINVATPostingSetup.GET("VAT Bus. Posting Group","VAT Prod. Posting Group");// Add the following lines. CASE VATPostingSetup."Adv. Invoice Correction Type" OFVATPostingSetup."Adv. Invoice Correction Type"::Percentage:"Prepmt Amt to Deduct" :=ROUND("Qty. to Invoice" / (Quantity - "Quantity Invoiced") *("Prepmt. Amt. Inv." - "Prepmt Amt Deducted"),Currency."Amount Rounding Precision");VATPostingSetup."Adv. Invoice Correction Type"::Absolute:BEGIN"Prepmt Amt to Deduct" := PrepmtAmtToDeduct(SalesHeader."Prices Including VAT",100);IF "Prepmt Amt to Deduct" > ("Prepmt. Amt. Inv." - "Prepmt Amt Deducted") THEN"Prepmt Amt to Deduct" := "Prepmt. Amt. Inv." - "Prepmt Amt Deducted";END;VATPostingSetup."Adv. Invoice Correction Type"::"Fully Invoiced":IF "Qty. to Invoice" = Quantity - "Quantity Invoiced" THEN"Prepmt Amt to Deduct" := "Prepmt. Amt. Inv." - "Prepmt Amt Deducted"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// End of the added lines. ...

  3. Създайте нова функция PrepmtAmtToDeduct в таблицата "Ред от продажби" (37) както следва:

    PROCEDURE PrepmtAmtToDeduct@1470002(PricesIncludingVAT@1470000 : Boolean;PrepaymentPct@1470001 : Decimal) : Decimal;VARVATPct@1470002 : Decimal;BEGINIF PricesIncludingVAT THENVATPct := "VAT %"ELSEVATPct := 0;EXIT(ROUND(ROUND(ROUND(ROUND("Unit Price" * "Qty. to Invoice",Currency."Amount Rounding Precision") *(1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *(PrepaymentPct / 100) / (1 + (VATPct / 100)),Currency."Amount Rounding Precision") *(1 + (VATPct / 100)),Currency."Amount Rounding Precision"));END;
  4. Да променяте Ав за приспадане - OnValidate задейства в таблицата "Ред от покупка" (39) както следва:Съществуващ код

    ...FIELDERROR("Prepmt Amt to Deduct",STRSUBSTNO(Text039,"Prepmt. Amt. Inv." - "Prepmt Amt Deducted"));IF "Qty. to Invoice" = Quantity - "Quantity Invoiced" THEN// Delete the following line. TESTFIELD("Prepmt Amt to Deduct","Prepmt. Amt. Inv." - "Prepmt Amt Deducted");...

    Смяна на код

    ...FIELDERROR("Prepmt Amt to Deduct",STRSUBSTNO(Text039,"Prepmt. Amt. Inv." - "Prepmt Amt Deducted"));IF "Qty. to Invoice" = Quantity - "Quantity Invoiced" THEN// Add the following lines. TESTFIELD("Prepmt Amt to Deduct","Prepmt. Amt. Inv." - "Prepmt Amt Deducted");GetPurchHeader;IF PurchHeader."Prepayment Type" = PurchHeader."Prepayment Type"::Advance THEN BEGINVATPostingSetup.GET("VAT Bus. Posting Group","VAT Prod. Posting Group");VATPostingSetup.TESTFIELD("Adv. Invoice Correction Type",VATPostingSetup."Adv. Invoice Correction Type"::Percentage);END;// End of the added lines. ...
  5. Променете кода в CalcPrepaymentToDeduct функция в таблицата "Ред от покупка" (39). За да направите това, изпълнете следните стъпки:

    1. Изтрийте следните локални променливи:

      PrepmtPct@ : Decimal;AbsoluteAdvCorrection@ : Boolean;
    2. Променяте както следва:Съществуващ код

      ...IF (Quantity - "Quantity Invoiced") <> 0 THEN BEGINGetPurchHeader;IF PurchHeader."Prepayment Type" = PurchHeader."Prepayment Type"::Advance THEN BEGINVATPostingSetup.GET("VAT Bus. Posting Group","VAT Prod. Posting Group");// Delete the following lines. AbsoluteAdvCorrection :=VATPostingSetup."Adv. Invoice Correction Type" = VATPostingSetup."Adv. Invoice Correction Type"::Absolute;IF AbsoluteAdvCorrection THEN BEGINPrepmtPct := "Prepayment %";"Prepayment %" := 100;END;END;IF PurchHeader."Prices Including VAT" THEN"Prepmt Amt to Deduct" :=ROUND(ROUND(ROUND(ROUND("Direct Unit Cost" * "Qty. to Invoice",Currency."Amount Rounding Precision") *(1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *("Prepayment %" / 100) / (1 + ("VAT %" / 100)),Currency."Amount Rounding Precision") *(1 + ("VAT %" / 100)),Currency."Amount Rounding Precision")ELSE"Prepmt Amt to Deduct" :=ROUND(ROUND(ROUND("Direct Unit Cost" * "Qty. to Invoice",Currency."Amount Rounding Precision") *(1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *"Prepayment %" / 100,Currency."Amount Rounding Precision");IF AbsoluteAdvCorrection THEN BEGIN"Prepayment %" := PrepmtPct;IF "Prepmt Amt to Deduct" > ("Prepmt. Amt. Inv." - "Prepmt Amt Deducted") THEN"Prepmt Amt to Deduct" := "Prepmt. Amt. Inv." - "Prepmt Amt Deducted";END;END ELSE"Prepmt Amt to Deduct" := 0// End of the deleted lines....

      Смяна на код

      ...IF (Quantity - "Quantity Invoiced") <> 0 THEN BEGINGetPurchHeader;IF PurchHeader."Prepayment Type" = PurchHeader."Prepayment Type"::Advance THEN BEGINVATPostingSetup.GET("VAT Bus. Posting Group","VAT Prod. Posting Group");// Add the following lines. CASE VATPostingSetup."Adv. Invoice Correction Type" OFVATPostingSetup."Adv. Invoice Correction Type"::Percentage:"Prepmt Amt to Deduct" :=ROUND("Qty. to Invoice" / (Quantity - "Quantity Invoiced") *("Prepmt. Amt. Inv." - "Prepmt Amt Deducted"),Currency."Amount Rounding Precision");VATPostingSetup."Adv. Invoice Correction Type"::Absolute:BEGIN"Prepmt Amt to Deduct" := PrepmtAmtToDeduct(PurchHeader."Prices Including VAT",100);IF "Prepmt Amt to Deduct" > ("Prepmt. Amt. Inv." - "Prepmt Amt Deducted") THEN"Prepmt Amt to Deduct" := "Prepmt. Amt. Inv." - "Prepmt Amt Deducted";END;VATPostingSetup."Adv. Invoice Correction Type"::"Fully Invoiced":IF "Qty. to Invoice" = Quantity - "Quantity Invoiced" THEN"Prepmt Amt to Deduct" := "Prepmt. Amt. Inv." - "Prepmt Amt Deducted"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// End of the added lines. ...
  6. Създайте нова функция PrepmtAmtToDeduct в таблицата "Ред от покупка" (39) както следва:

    PROCEDURE PrepmtAmtToDeduct@1470002(PricesIncludingVAT@1470000 : Boolean;PrepaymentPct@1470001 : Decimal) : Decimal;VARVATPct@1470002 : Decimal;BEGINIF PricesIncludingVAT THENVATPct := "VAT %"ELSEVATPct := 0;EXIT(ROUND(ROUND(ROUND(ROUND("Direct Unit Cost" * "Qty. to Invoice",Currency."Amount Rounding Precision") *(1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *(PrepaymentPct / 100) / (1 + (VATPct / 100)),Currency."Amount Rounding Precision") *(1 + (VATPct / 100)),Currency."Amount Rounding Precision"));END;
  7. Да променяте задейства при изпълнение на "Продажби-Post" кодова единица (80) както следва:Съществуващ код

    ...ItemJnlRollRndg := FALSE;LineCount := LineCount + 1;Window.UPDATE(2,LineCount);IF Invoice AND (NOT GLSetup."Allow VAT Date Change in Lines") THENSalesLine."VAT Date" := "VAT Date";IF SalesLine.Type = SalesLine.Type::"Charge (Item)" THEN BEGINSalesLine.TESTFIELD(Amount);SalesLine.TESTFIELD("Job No.",'');SalesLine.TESTFIELD("Job Contract Entry No.",0);END;...

    Смяна на код

    ...ItemJnlRollRndg := FALSE;LineCount := LineCount + 1;Window.UPDATE(2,LineCount);IF Invoice AND (NOT GLSetup."Allow VAT Date Change in Lines") THENSalesLine."VAT Date" := "VAT Date";// Add the following lines. IF Invoice THENIF SalesHeader."Prepayment Type" = SalesHeader."Prepayment Type"::Advance THENTestPrepmtAmount;// End of the added lines. IF SalesLine.Type = SalesLine.Type::"Charge (Item)" THEN BEGINSalesLine.TESTFIELD(Amount);SalesLine.TESTFIELD("Job No.",'');SalesLine.TESTFIELD("Job Contract Entry No.",0);END;...
  8. Създайте нова функция TestPrepmtAmount в "Продажби-Post" кодова единица (80) както следва:

    PROCEDURE TestPrepmtAmount@1470003();VARAllowedQtyToShip@1470000 : Decimal;SalesAdvLetterHeader@1470001 : Record 26585;BEGINWITH SalesLine DO BEGINIF ("Prepmt. Line Amount" = 0) OR (Quantity = 0) THENEXIT;SalesAdvLetterHeader.SETRANGE("Order No.","Document No.");IF NOT SalesAdvLetterHeader.ISEMPTY THEN BEGINAllowedQtyToShip :=ROUND(("Line Amount" - "Prepmt. Line Amount" + "Prepmt. Amt. Inv.") /"Line Amount" * Quantity - "Quantity Invoiced",0.00001);IF "Qty. to Ship" > AllowedQtyToShip THENFIELDERROR("Qty. to Ship",STRSUBSTNO(Text047,AllowedQtyToShip));END;END;END;
  9. В превключвател при изпълнение на промени "покупка.-Post" кодова единица (90) както следва:Съществуващ код

    ...IF GUIALLOWED THENWindow.UPDATE(2,LineCount);IF Invoice AND (NOT GLSetup."Allow VAT Date Change in Lines") THENPurchLine."VAT Date" := "VAT Date";IF Invoice THENTestPrepmtAmount;IF PurchLine.Type = PurchLine.Type::"Charge (Item)" THEN BEGINPurchLine.TESTFIELD(Amount);PurchLine.TESTFIELD("Job No.",'');END;...

    Смяна на код

    ...IF GUIALLOWED THENWindow.UPDATE(2,LineCount);IF Invoice AND (NOT GLSetup."Allow VAT Date Change in Lines") THENPurchLine."VAT Date" := "VAT Date";IF Invoice THEN// Add the following line.IF PurchHeader."Prepayment Type" = PurchHeader."Prepayment Type"::Advance THENTestPrepmtAmount;IF PurchLine.Type = PurchLine.Type::"Charge (Item)" THEN BEGINPurchLine.TESTFIELD(Amount);PurchLine.TESTFIELD("Job No.",'');END;...
  10. Изтриване на функцията TestPrepmtAmount и я създадете отново в "Продажби-Post" кодова единица (80) както следва:

    LOCAL PROCEDURE TestPrepmtAmount@55();VARAllowedQtyToReceive@1470000 : Decimal;PurchAdvLetterHeader@147001 : Record 26587;BEGINWITH PurchLine DO BEGINIF ("Prepmt. Line Amount" = 0) OR (Quantity = 0) THENEXIT;PurchAdvLetterHeader.SETRANGE("Order No.","Document No.");IF NOT PurchAdvLetterHeader.ISEMPTY THEN BEGINAllowedQtyToReceive :=ROUND(("Line Amount" - "Prepmt. Line Amount" + "Prepmt. Amt. Inv.") /"Line Amount" * Quantity - "Quantity Invoiced",0.00001);IF "Qty. to Receive" > AllowedQtyToReceive THENFIELDERROR("Qty. to Receive",STRSUBSTNO(Text047,AllowedQtyToReceive));END;END;END;
  11. Променете кода в TestSalesPrepayment функция в "Управление на одобрения" кодова единица (439) както следва:Съществуващ код

    ...SalesLines.SETRANGE("Document Type",SalesHeader."Document Type");SalesLines.SETRANGE("Document No.",SalesHeader."No.");SalesLines.SETFILTER("Prepmt. Line Amount",'<>%1',0);IF SalesLines.FIND('-') THEN BEGINREPEAT...

    Смяна на код

    ...// Add the following lines.IF SalesHeader."Prepayment Type" = SalesHeader."Prepayment Type"::Advance THENEXIT(IsNotInvoicedSalesAdvLetter(SalesHeader."No."));// End of the added lines. SalesLines.SETRANGE("Document Type",SalesHeader."Document Type");SalesLines.SETRANGE("Document No.",SalesHeader."No.");SalesLines.SETFILTER("Prepmt. Line Amount",'<>%1',0);IF SalesLines.FIND('-') THEN BEGINREPEAT...

  12. Променете кода в TestPurchasePrepayment функция в "Управление на одобрения" кодова единица (439) както следва:Съществуващ код

    ...PurchaseLines.SETRANGE("Document Type",PurchaseHeader."Document Type");PurchaseLines.SETRANGE("Document No.",PurchaseHeader."No.");PurchaseLines.SETFILTER("Prepmt. Line Amount",'<>%1',0);IF PurchaseLines.FIND('-') THEN BEGINREPEAT...

    Смяна на код

    ...// Add the following lines.IF PurchaseHeader."Prepayment Type" = PurchaseHeader."Prepayment Type"::Advance THENEXIT(IsNotInvoicedPurchAdvLetter(PurchaseHeader."No."));// End of the added lines. PurchaseLines.SETRANGE("Document Type",PurchaseHeader."Document Type");PurchaseLines.SETRANGE("Document No.",PurchaseHeader."No.");PurchaseLines.SETFILTER("Prepmt. Line Amount",'<>%1',0);IF PurchaseLines.FIND('-') THEN BEGINREPEAT...
  13. Създайте нов IsNotInvoicedSalesAdvLetter местната функция в "Управление на одобрения" кодова единица (439) както следва:

    LOCAL PROCEDURE IsNotInvoicedSalesAdvLetter@38(SalesOrderNo@1170000000 : Code[30]) : Boolean;VARSalesAdvLetterHeader@1001 : Record 26585;SalesAdvLetterLine@1002 : Record 26586;BEGINWITH SalesAdvLetterHeader DO BEGINSETRANGE("Order No.",SalesOrderNo);IF FIND('-') THENREPEATSalesAdvLetterLine.SETRANGE("Letter No.","No.");IF SalesAdvLetterLine.FIND('-') THENREPEATIF SalesAdvLetterLine."Amount Including VAT" <> SalesAdvLetterLine."Amount Invoiced" THENEXIT(TRUE);UNTIL SalesAdvLetterLine.NEXT = 0;UNTIL NEXT = 0;END;END;
  14. Създайте нов IsNotInvoicedPurchAdvLetter местни функция в "Управление на одобрения" кодова единица (439) както следва:

    LOCAL PROCEDURE IsNotInvoicedPurchAdvLetter@39(PurchOrderNo@1170000000 : Code[30]) : Boolean;VARPurchAdvLetterHeader@1001 : Record 26587;PurchAdvLetterLine@1002 : Record 26588;BEGINWITH PurchAdvLetterHeader DO BEGINSETRANGE("Order No.",PurchOrderNo);IF FIND('-') THENREPEATPurchAdvLetterLine.SETRANGE("Letter No.","No.");IF PurchAdvLetterLine.FIND('-') THENREPEATIF PurchAdvLetterLine."Amount Including VAT" <> PurchAdvLetterLine."Amount Invoiced" THENEXIT(TRUE);UNTIL PurchAdvLetterLine.NEXT = 0;UNTIL NEXT = 0;END;END;

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

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

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

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

Статус

Microsoft потвърждава, че това е проблем в продуктите на Microsoft, изброени в раздела "Отнася се за".

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

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.