Применяется к
Dynamics NAV 2009 Service Pack 1 Microsoft Dynamics NAV 2009 R2

Данная статья относится к 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 идентификатор объектаобъект.

Примечание. Необходимо иметь права к хранилищам данных, если необходимо выполнить восстановление данных.

Изменения кода

Примечание. Всегда тестовый код исправления в контролируемой среде, прежде чем применить исправления на производственных компьютерах.Чтобы устранить эту проблему, выполните следующие действия:

  1. Измените код в свойства квоты продаж функции заказа (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;...
  2. Измените код в свойствах Продажа Контракт функции заказа (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)...
  3. Изменение кода в свойствах в Покупка Скид.-квота для функции заказа (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(...
  4. Изменение кода в свойствах контракта покупки. Чтобы функции заказа (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

Сведения об удалении

Установленное обновление удалить нельзя.

Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Примечание. Это статья «БЫСТРАЯ ПУБЛИКАЦИЯ», созданная непосредственно из технической поддержки корпорации Майкрософт. Сведения, содержащиеся в настоящем документе, предоставляются "как есть" в ответ на возникающие проблемы. В результате скорости предоставления материалов они могут включать опечаток и быть изменены в любое время без предварительного уведомления. Другие вопросы, связанные с Условиями использованиясм.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.