Данная статья относится к Microsoft Dynamics NAV для всех стран и всех языковых стандартов.
Симптомы
Можно создать заказ на продажу для заблокированного элемента к нарушению квоту продажи в Microsoft Dynamics 2009 неожиданно. При разноске заказа на продажу, появляется следующее сообщение об ошибке:
Количество отгруженные в связанном общем заказе не должно быть больше, чем количество в тип документа строки продажи = «Контракт», «Число1» номер документа, номер строки = «число2».
Эта проблема возникает в следующих продуктах:
-
2009 г. Пакет обновления 1 для Microsoft Dynamics NAV
-
Microsoft Dynamics NAV 2009 R2
Решение
Сведения об исправлении
Исправление от корпорации Майкрософт доступно. Однако оно предназначено только для устранения проблемы, описанной в этой статье. Предлагаемое исправление должно применяться исключительно в системах, в которых обнаружена эта специфическая неполадка. Это исправление может проходить дополнительное тестирование. Таким образом Если вы не подвержены серьезно эту проблему, рекомендуется дождаться следующего пакета обновления для Microsoft Dynamics NAV 2009 или следующей версии Microsoft Dynamics NAV, содержащего это исправление.Примечание. В особых случаях оплата, предусмотренная в службу поддержки может быть отменена Если специалист службы технической поддержки Microsoft Dynamics и связанных продуктов определит, что решения проблемы является специально выпущенное. Затраты на обычные услуги службы поддержки будут применяться к дополнительным вопросам и проблемам, которые не охватываются конкретным обновлением.
Сведения об установке
Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и без явных или подразумеваемых гарантий. Это включает, но не ограничиваясь, подразумеваемые гарантии товарной пригодности или пригодности для определенной цели. В данной статье предполагается, что вы знакомы с демонстрируемым языком программирования и средствами, которые используются для создания и отладки. Сотрудники службы поддержки Майкрософт могут объяснить возможности конкретной процедуры. Тем не менее они не изменит примеров для обеспечения функциональных возможностей или создания процедур для определенных требований.Примечание. Перед установкой данного исправления необходимо проверьте регистрацию всех пользователей клиента Microsoft Dynamics NAV выход из системы. Это относится к службам Microsoft Dynamics NAV приложения сервера (NAS). Должен быть только клиент пользователя, который вошел в систему, при реализации данного исправления.Чтобы реализовать это исправление, необходимо иметь лицензию разработчика.Рекомендуется, чтобы учетной записи пользователя в окне Логины Windows или в окне Логины базы данных был присвоен идентификатор роли «SUPER» Если учетная запись пользователя не может быть назначена роль «SUPER» идентификатор, необходимо убедиться, что учетная запись пользователя имеет следующие разрешения.
-
Изменение разрешений для объекта, подлежащий изменению.
-
Разрешение Execute для объекта 5210 идентификатор объекта системы и системы 9015 идентификатор объектаобъект.
Примечание. Необходимо иметь права к хранилищам данных, если необходимо выполнить восстановление данных.
Изменения кода
Примечание. Всегда тестовый код исправления в контролируемой среде, прежде чем применить исправления на производственных компьютерах.Чтобы устранить эту проблему, выполните следующие действия:
-
Измените код в свойства квоты продаж функции заказа (86) следующим образом:Существующий код 1
...Opp@1004 : Record 5092; OpportunityEntry@1006 : Record 5093; TempOpportunityEntry@1005 : TEMPORARY Record 5093; Cust@1008 : Record 18; BEGIN TESTFIELD("Document Type","Document Type"::Quote); Cust.GET("Sell-to Customer No."); Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);...
Код для замены 2
...Opp@1004 : Record 5092; OpportunityEntry@1006 : Record 5093; TempOpportunityEntry@1005 : TEMPORARY Record 5093; Cust@1008 : Record 18;// Add the following line. Item@1010 : Record 27; // End of the added line. BEGIN TESTFIELD("Document Type","Document Type"::Quote); Cust.GET("Sell-to Customer No."); Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);...
Существующий код 2
...SalesQuoteLine.SETRANGE(Type,SalesQuoteLine.Type::Item); SalesQuoteLine.SETFILTER("No.",'<>%1',''); IF SalesQuoteLine.FINDSET THEN REPEAT IF (SalesQuoteLine."Outstanding Quantity" > 0) THEN BEGIN SalesLine := SalesQuoteLine; SalesLine.VALIDATE("Reserved Qty. (Base)",0); SalesLine."Line No." := 0;...
Код для замены 2
...SalesQuoteLine.SETRANGE(Type,SalesQuoteLine.Type::Item); SalesQuoteLine.SETFILTER("No.",'<>%1',''); IF SalesQuoteLine.FINDSET THEN REPEAT IF Item.GET(SalesQuoteLine."No.") THEN //add line// Add the following line. Item.TESTFIELD(Blocked,FALSE); // End of the added line. IF (SalesQuoteLine."Outstanding Quantity" > 0) THEN BEGIN SalesLine := SalesQuoteLine; SalesLine.VALIDATE("Reserved Qty. (Base)",0); SalesLine."Line No." := 0;...
-
Измените код в свойствах Продажа Контракт функции заказа (87) следующим образом:Существующий код 1
...Cust@1001 : Record 18; TempSalesLine@1002 : TEMPORARY Record 37; Reservation@1005 : Form 498; PrepmtMgt@1004 : Codeunit 441; BEGIN TESTFIELD("Document Type","Document Type"::"Blanket Order"); Cust.GET("Sell-to Customer No."); Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);...
Код для замены 1
...Cust@1001 : Record 18; TempSalesLine@1002 : TEMPORARY Record 37; Reservation@1005 : Form 498; PrepmtMgt@1004 : Codeunit 441;// Add the following line. Item@1006 : Record 27; // End of the added line. BEGIN TESTFIELD("Document Type","Document Type"::"Blanket Order"); Cust.GET("Sell-to Customer No."); Cust.CheckBlockedCustOnDocs(Cust,"Document Type"::Order,TRUE,FALSE);...
Существующий код 2
...SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No."); QuantityOnOrders := 0; IF SalesLine.FINDSET THEN REPEAT IF SalesLine."Document Type" IN [SalesLine."Document Type"::"Return Order", SalesLine."Document Type"::"Credit Memo"] THEN...Код для замены 2
...SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No."); QuantityOnOrders := 0; IF SalesLine.FINDSET THEN REPEAT// Add the following lines. IF Item.GET(SalesLine."No.") THEN Item.TESTFIELD(Blocked,FALSE);// End of the added lines. IF SalesLine."Document Type" IN [SalesLine."Document Type"::"Return Order", SalesLine."Document Type"::"Credit Memo"] THEN...Существующий код 3
...TempSalesLine.DELETEALL; REPEAT SalesLine.SETCURRENTKEY("Document Type","Blanket Order No.","Blanket Order Line No."); SalesLine.SETRANGE("Blanket Order No.",BlanketOrderSalesLine."Document No."); SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No.");// Delete the following lines. SalesLine.SETFILTER( "Document Type",'<>%1 & <>%2',SalesLine."Document Type"::Invoice,SalesLine."Document Type"::"Credit Memo");// End of the deleted lines. QuantityOnOrders := 0; IF SalesLine.FINDSET THEN REPEAT IF Item.GET(SalesLine."No.") THEN Item.TESTFIELD(Blocked,FALSE);...
Код для замены 3
...TempSalesLine.DELETEALL; REPEAT SalesLine.SETCURRENTKEY("Document Type","Blanket Order No.","Blanket Order Line No."); SalesLine.SETRANGE("Blanket Order No.",BlanketOrderSalesLine."Document No."); SalesLine.SETRANGE("Blanket Order Line No.",BlanketOrderSalesLine."Line No."); QuantityOnOrders := 0; IF SalesLine.FINDSET THEN REPEAT IF Item.GET(SalesLine."No.") THEN Item.TESTFIELD(Blocked,FALSE);...
Существующий код 4
...QuantityOnOrders := 0; IF SalesLine.FINDSET THEN REPEAT IF Item.GET(SalesLine."No.") THEN Item.TESTFIELD(Blocked,FALSE);// Delete the following lines. IF SalesLine."Document Type" = SalesLine."Document Type"::"Return Order" THEN QuantityOnOrders := QuantityOnOrders - SalesLine."Outstanding Qty. (Base)" ELSE //Remove line QuantityOnOrders := QuantityOnOrders + SalesLine."Outstanding Qty. (Base)"; // End of the deleted lines. UNTIL SalesLine.NEXT = 0; IF (ABS(BlanketOrderSalesLine."Qty. to Ship (Base)" + QuantityOnOrders + BlanketOrderSalesLine."Qty. Shipped (Base)") > ABS(BlanketOrderSalesLine."Quantity (Base)")) OR (BlanketOrderSalesLine."Quantity (Base)" * BlanketOrderSalesLine."Outstanding Qty. (Base)" < 0)...
Код для замены 4
...QuantityOnOrders := 0; IF SalesLine.FINDSET THEN REPEAT IF Item.GET(SalesLine."No.") THEN Item.TESTFIELD(Blocked,FALSE);// Add the following lines. IF (SalesLine."Document Type" = SalesLine."Document Type"::"Return Order") OR ((SalesLine."Document Type" = SalesLine."Document Type"::"Credit Memo") AND (SalesLine."Return Receipt No." = '')) THEN QuantityOnOrders := QuantityOnOrders - SalesLine."Outstanding Qty. (Base)" ELSE IF (SalesLine."Document Type" = SalesLine."Document Type"::Order) OR ((SalesLine."Document Type" = SalesLine."Document Type"::Invoice) AND (SalesLine."Shipment No." = '')) THEN QuantityOnOrders := QuantityOnOrders + SalesLine."Outstanding Qty. (Base)";// End of the added lines. UNTIL SalesLine.NEXT = 0; IF (ABS(BlanketOrderSalesLine."Qty. to Ship (Base)" + QuantityOnOrders + BlanketOrderSalesLine."Qty. Shipped (Base)") > ABS(BlanketOrderSalesLine."Quantity (Base)")) OR (BlanketOrderSalesLine."Quantity (Base)" * BlanketOrderSalesLine."Outstanding Qty. (Base)" < 0)...
-
Изменение кода в свойствах в Покупка Скид.-квота для функции заказа (96) следующим образом:Существующий код 1
...OldPurchCommentLine@1001 : Record 43; FromDocDim@1000 : Record 357; ToDocDim@1003 : Record 357; Vend@1002 : Record 23; BEGIN TESTFIELD("Document Type","Document Type"::Quote); Vend.GET("Buy-from Vendor No."); Vend.CheckBlockedVendOnDocs(Vend,FALSE);...
Код для замены 1
...OldPurchCommentLine@1001 : Record 43; FromDocDim@1000 : Record 357; ToDocDim@1003 : Record 357; Vend@1002 : Record 23;// Add the following line. Item@1004 : Record 27; // End of the added line. BEGIN TESTFIELD("Document Type","Document Type"::Quote); Vend.GET("Buy-from Vendor No."); Vend.CheckBlockedVendOnDocs(Vend,FALSE);
Существующий код 2
...ToDocDim.SETRANGE("Table ID",DATABASE::"Purchase Line"); IF PurchQuoteLine.FINDSET THEN REPEAT PurchOrderLine := PurchQuoteLine; PurchOrderLine."Document Type" := PurchOrderHeader."Document Type"; PurchOrderLine."Document No." := PurchOrderHeader."No."; ReservePurchLine.TransferPurchLineToPurchLine(...Код для замены 2
...ToDocDim.SETRANGE("Table ID",DATABASE::"Purchase Line"); IF PurchQuoteLine.FINDSET THEN REPEAT// Add the following lines. IF Item.GET(PurchQuoteLine."No.") THEN Item.TESTFIELD(Blocked,FALSE); // End of the added lines. PurchOrderLine := PurchQuoteLine; PurchOrderLine."Document Type" := PurchOrderHeader."Document Type"; PurchOrderLine."Document No." := PurchOrderHeader."No."; ReservePurchLine.TransferPurchLineToPurchLine(... -
Изменение кода в свойствах контракта покупки. Чтобы функции заказа (97) следующим образом:Существующий код 1
...FromDocDim@1000 : Record 357; ToDocDim@1002 : Record 357; Vend@1001 : Record 23; PrepmtMgt@1003 : Codeunit 441; BEGIN TESTFIELD("Document Type","Document Type"::"Blanket Order"); Vend.GET("Buy-from Vendor No."); Vend.CheckBlockedVendOnDocs(Vend,FALSE);...
Код для замены 1
...FromDocDim@1000 : Record 357; ToDocDim@1002 : Record 357; Vend@1001 : Record 23; PrepmtMgt@1003 : Codeunit 441;// Add the following line. Item@1004 : Record 27; // End of the added line. BEGIN TESTFIELD("Document Type","Document Type"::"Blanket Order"); Vend.GET("Buy-from Vendor No."); Vend.CheckBlockedVendOnDocs(Vend,FALSE);...
Существующий код 2
...PurchLine.SETRANGE("Blanket Order Line No.",PurchBlanketOrderLine."Line No."); QuantityOnOrders := 0; IF PurchLine.FINDSET THEN REPEAT IF PurchLine."Document Type" IN [PurchLine."Document Type"::"Return Order", PurchLine."Document Type"::"Credit Memo"] THEN QuantityOnOrders := QuantityOnOrders - PurchLine."Outstanding Qty. (Base)"...Код для замены 2
...PurchLine.SETRANGE("Blanket Order Line No.",PurchBlanketOrderLine."Line No."); QuantityOnOrders := 0; IF PurchLine.FINDSET THEN REPEAT// Add the following lines. IF Item.GET(PurchLine."No.") THEN Item.TESTFIELD(Blocked,FALSE); // End of the added lines. IF PurchLine."Document Type" IN [PurchLine."Document Type"::"Return Order", PurchLine."Document Type"::"Credit Memo"] THEN QuantityOnOrders := QuantityOnOrders - PurchLine."Outstanding Qty. (Base)"...Существующий код 3
...IF PurchBlanketOrderLine.FINDSET THEN REPEAT PurchLine.SETCURRENTKEY("Document Type","Blanket Order No.","Blanket Order Line No."); PurchLine.SETRANGE("Blanket Order No.",PurchBlanketOrderLine."Document No."); PurchLine.SETRANGE("Blanket Order Line No.",PurchBlanketOrderLine."Line No.");// Delete the following lines. PurchLine.SETFILTER( "Document Type",'<>%1 & <>%2',PurchLine."Document Type"::Invoice,PurchLine."Document Type"::"Credit Memo");// End of the deleted lines. QuantityOnOrders := 0; IF PurchLine.FINDSET THEN REPEAT IF Item.GET(PurchLine."No.") THEN Item.TESTFIELD(Blocked,FALSE);...
Код для замены 3
...IF PurchBlanketOrderLine.FINDSET THEN REPEAT PurchLine.SETCURRENTKEY("Document Type","Blanket Order No.","Blanket Order Line No."); PurchLine.SETRANGE("Blanket Order No.",PurchBlanketOrderLine."Document No."); PurchLine.SETRANGE("Blanket Order Line No.",PurchBlanketOrderLine."Line No."); QuantityOnOrders := 0; IF PurchLine.FINDSET THEN REPEAT IF Item.GET(PurchLine."No.") THEN Item.TESTFIELD(Blocked,FALSE);...
Существующий код 4
...QuantityOnOrders := 0; IF PurchLine.FINDSET THEN REPEAT IF Item.GET(PurchLine."No.") THEN Item.TESTFIELD(Blocked,FALSE);// Delete the following lines. IF PurchLine."Document Type" = PurchLine."Document Type"::"Return Order" THEN QuantityOnOrders := QuantityOnOrders - PurchLine."Outstanding Qty. (Base)" ELSE QuantityOnOrders := QuantityOnOrders + PurchLine."Outstanding Qty. (Base)";// End of the deleted lines. UNTIL PurchLine.NEXT = 0; IF (ABS(PurchBlanketOrderLine."Qty. to Receive (Base)" + QuantityOnOrders + PurchBlanketOrderLine."Qty. Received (Base)") > ABS(PurchBlanketOrderLine."Quantity (Base)")) OR (PurchBlanketOrderLine."Quantity (Base)" * PurchBlanketOrderLine."Outstanding Qty. (Base)" < 0)...
Код для замены 4
...QuantityOnOrders := 0; IF PurchLine.FINDSET THEN REPEAT IF Item.GET(PurchLine."No.") THEN Item.TESTFIELD(Blocked,FALSE);// Add the following lines. IF (PurchLine."Document Type" = PurchLine."Document Type"::"Return Order") OR ((PurchLine."Document Type" = PurchLine."Document Type"::"Credit Memo") AND (PurchLine."Return Shipment No." = '')) THEN QuantityOnOrders := QuantityOnOrders - PurchLine."Outstanding Qty. (Base)" ELSE IF (PurchLine."Document Type" = PurchLine."Document Type"::Order) OR ((PurchLine."Document Type" = PurchLine."Document Type"::Invoice) AND (PurchLine."Receipt No." = '')) THEN QuantityOnOrders := QuantityOnOrders + PurchLine."Outstanding Qty. (Base)";// End of the added lines. UNTIL PurchLine.NEXT = 0; IF (ABS(PurchBlanketOrderLine."Qty. to Receive (Base)" + QuantityOnOrders + PurchBlanketOrderLine."Qty. Received (Base)") > ABS(PurchBlanketOrderLine."Quantity (Base)")) OR (PurchBlanketOrderLine."Quantity (Base)" * PurchBlanketOrderLine."Outstanding Qty. (Base)" < 0)...
Предварительные условия
Следующее обновление и одного из следующих продуктов для установки этого исправления необходимо иметь:
-
2009 г. Пакет обновления 1 для Microsoft Dynamics NAV
-
Microsoft Dynamics NAV 2009 R2
-
2642368 сообщение об ошибке «Кол-во для отгрузки (баз.) в строке номер [номер_строки] элемента [Item_Number] не может быть больше [число]» при попытке создать заказ из общего заказа в Microsoft Dynamics NAV
Сведения об удалении
Установленное обновление удалить нельзя.
Статус
Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".
Примечание. Это статья «БЫСТРАЯ ПУБЛИКАЦИЯ», созданная непосредственно из технической поддержки корпорации Майкрософт. Сведения, содержащиеся в настоящем документе, предоставляются "как есть" в ответ на возникающие проблемы. В результате скорости предоставления материалов они могут включать опечаток и быть изменены в любое время без предварительного уведомления. Другие вопросы, связанные с Условиями использованиясм.