"Kód příjemce" pole je prázdné neočekávaně po spuštění funkce Získat prodejní objednávky speciální objednávky v speciální nákupní objednávky v aplikaci Microsoft Dynamics NAV 2009

Platí pro: Dynamics NAV 2009

Tento článek se týká aplikace Microsoft Dynamics NAV ve všech zemích a všechna národní prostředí jazyka.

Příznaky


Po spuštění funkce Získat prodejní objednávky speciální objednávky ve speciální nákupní objednávky v aplikaci Microsoft Dynamics NAV 2009, neočekávaně je prázdné pole Kód příjemce v hlavičce nákupní speciální objednávky.
K tomuto problému dochází v následujících produktů:
  • Aplikace Microsoft Dynamics NAV 2009 R2
  • Aplikace Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

Řešení


Informace o opravě hotfix

Podporovaná oprava hotfix je nyní k dispozici od společnosti Microsoft. Však je určena pouze k odstranění problému popsaného v tomto článku. Použijte ji pouze u systémů, ve kterých dochází k tomuto konkrétnímu problému. Tato oprava hotfix může být dále testována. Proto pokud jste závažně tento problém, doporučujeme počkat na další aktualizaci service pack produktu Microsoft Dynamics NAV 2009 nebo další verze produktu Microsoft Dynamics NAV, která obsahuje tuto opravu hotfix.

Poznámka: Ve zvláštních případech poplatky, které jsou třeba obvykle zaplatit za telefonní hovory mohou být stornovány, jestliže pracovník technické podpory společnosti Microsoft Dynamics a souvisejících produktů Určuje, že konkrétní aktualizace odstraní váš problém. Výdaje na technickou podporu použije dalších otázek a problémů, které nelze vyřešit konkrétní aktualizací.

Informace o instalaci

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez žádné záruky výslovně uvedené nebo odvozené. To zahrnuje, ale není omezen pouze na předpokládané záruky obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že jste obeznámeni s programovacím jazykem, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci podpory společnosti Microsoft mohou pomoci vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo vytvářet postupy podle vašich konkrétních požadavků.

Poznámka: Před instalací této opravy hotfix ověřte, že všichni uživatelé klienta Microsoft Navision odhlášeni systému. To zahrnuje uživatele klienta Microsoft Navision Application Services (NAS). Je třeba klienta pouze uživatel přihlášený při implementaci opravy hotfix.

Chcete-li implementovat tuto opravu hotfix, musí mít licenci vývojáře.

Doporučujeme, aby uživatelský účet v okně přihlášení systému Windows nebo v okně přihlášení databáze přidělí "SUPER" ID role. Pokud uživatelský účet nelze přiřadit ID role "SUPER", musíte ověřit, že uživatelský účet má následující oprávnění:
  • Změnit oprávnění pro objekt, který budete měnit.
  • Oprávnění ke spuštění pro System Object ID 5210 objekt a System Object ID 9015 objekt.


Poznámka: Nemáte práva k úložištím dat. Pokud nebudete provádět opravu dat.

Změny kódu

Poznámka: Vždy otestujte opravy kódu v kontrolovaném prostředí před instalací opravy v provozních počítačích.
Chcete-li vyřešit tento problém, postupujte takto:
  1. Změňte kód v funtion GetDescriptionAndRcptName v v ReqJnlManagement procedura (330) takto:
    Existující kód
    ...ELSE
    Description := '';

    // Delete the following lines.
    ReqLine.Type::Item:
    IF Item.GET(ReqLine."No.") THEN
    Description := Item.Description
    ELSE
    Description := '';
    // End of the lines.

    END;
    END;

    IF ReqLine."Vendor No." = '' THEN
    ...
    Změněný kód
    ...ELSE
    Description := '';
    END;
    END;

    IF ReqLine."Vendor No." = '' THEN
    ...
  2. Přidat novou globální proměnnou v sešitu požadavků.-proveďte objednávku procedura (333) a potom zadejte proměnné takto:
    • Název: DropShptSpecialOrderExists
    • Datový typ: Boolean
  3. Přidat novou místní proměnnou ve funkci InsertPurchOrderLine v sešitu požadavků.-proveďte objednávku procedura (333) a potom zadejte proměnné takto:
    • Název: SalesHeader
    • Datový typ: záznam
    • Podtyp: Prodejní hlavička
  4. Přidat novou místní proměnnou ve funkci InsertPurchOrderLine v sešitu požadavků.-proveďte objednávku procedura (333) a potom zadejte proměnné takto:
    • Název: DropShptSplOrderDiffAddress
    • Datový typ: logická
  5. Změňte kód ve funkci InsertPurchOrderLine v sešitu požadavků.-provést objednávku procedura (333) takto:
    Existující kód
    ...WITH ReqLine2 DO BEGIN
    IF ("No." = '') OR ("Vendor No." = '') OR (Quantity = 0) THEN
    EXIT;


    IF (PurchOrderHeader."Buy-from Vendor No." <> "Vendor No.") OR
    (PurchOrderHeader."Sell-to Customer No." <> "Sell-to Customer No.") OR
    (PrevShipToCode <> "Ship-to Code") OR
    (PurchOrderHeader."Order Address Code" <> "Order Address Code") OR
    (PurchOrderHeader."Currency Code" <> "Currency Code") OR

    // Delete the following line.
    (PrevPurchCode <> "Purchasing Code")

    THEN BEGIN
    ...
    Změněný kód
    ...WITH ReqLine2 DO BEGIN
    IF ("No." = '') OR ("Vendor No." = '') OR (Quantity = 0) THEN
    EXIT;

    // Add the following lines.
    DropShptSpecialOrderExists := FALSE;
    IF SalesHeader.GET(SalesHeader."Document Type"::Order,"Sales Order No.") THEN BEGIN
    DropShptSpecialOrderExists := PurchOrderHeader.DropShptSplOrderExists(SalesHeader);
    IF DropShptSpecialOrderExists THEN
    DropShptSplOrderDiffAddress :=
    NOT PurchOrderHeader.CheckAndAddShipToAdd(SalesHeader,FALSE);
    END;
    // End of the lines.

    IF (PurchOrderHeader."Buy-from Vendor No." <> "Vendor No.") OR
    (PurchOrderHeader."Sell-to Customer No." <> "Sell-to Customer No.") OR
    (PrevShipToCode <> "Ship-to Code") OR
    (PurchOrderHeader."Order Address Code" <> "Order Address Code") OR
    (PurchOrderHeader."Currency Code" <> "Currency Code") OR

    // Add the following lines.
    (PrevPurchCode <> "Purchasing Code") OR
    (DropShptSplOrderDiffAddress)
    // End of the lines.

    THEN BEGIN
    ...
  6. Přidat novou místní proměnnou ve funkci InsertHeader v sešitu požadavků.-proveďte objednávku procedura (333) a potom zadejte proměnné takto:
    • Název: SalesHeader
    • Datový typ: záznam
    • Podtyp: Prodejní hlavička
  7. Změňte kód ve funkci InsertHeader v sešitu požadavků.-provést objednávku procedura (333) takto:
    Existující kód
    ...PurchOrderHeader.SetShipToForSpecOrder;
    END;

    PurchOrderHeader.MODIFY;
    ...
    Změněný kód
    ...PurchOrderHeader.SetShipToForSpecOrder;
    END;

    // Add the following lines.
    IF DropShptSpecialOrderExists THEN BEGIN
    SalesHeader.GET(SalesHeader."Document Type"::Order,"Sales Order No.");
    PurchOrderHeader."Ship-to Name" := SalesHeader."Ship-to Name";
    PurchOrderHeader."Ship-to Name 2" := SalesHeader."Ship-to Name 2";
    PurchOrderHeader."Ship-to Address" := SalesHeader."Ship-to Address";
    PurchOrderHeader."Ship-to Address 2" := SalesHeader."Ship-to Address 2";
    PurchOrderHeader."Ship-to Post Code" := SalesHeader."Ship-to Post Code";
    PurchOrderHeader."Ship-to City" := SalesHeader."Ship-to City";
    PurchOrderHeader."Ship-to Contact" := SalesHeader."Ship-to Contact";
    END;
    // End of the lines.

    PurchOrderHeader.MODIFY;
    ...
  8. Změňte kód ve funkci EnterPurchaseItemCrossRef v procedura Dist. integrace (5702) takto:
    Existující kód
    ...IF Found THEN BEGIN
    "Cross-Reference No." := ItemCrossReference."Cross-Reference No.";
    "Unit of Measure (Cross Ref.)" := ItemCrossReference."Unit of Measure";
    "Cross-Reference Type" := ItemCrossReference."Cross-Reference Type";
    "Cross-Reference Type No." := ItemCrossReference."Cross-Reference Type No.";

    // Delete the following lines.
    IF ItemCrossReference.Description <> '' THEN BEGIN
    Description := ItemCrossReference.Description;
    "Description 2" := '';
    END;
    // End of the lines.

    END ELSE BEGIN
    "Cross-Reference No." := '';
    "Cross-Reference Type" := "Cross-Reference Type"::" ";
    "Cross-Reference Type No." := '';

    // Delete the following lines.
    IF "Variant Code" <> '' THEN BEGIN
    ItemVariant.GET("No.","Variant Code");
    Description := ItemVariant.Description;
    "Description 2" := ItemVariant."Description 2";
    END ELSE BEGIN
    Item.GET("No.");
    Description := Item.Description;
    "Description 2" := Item."Description 2";
    END;
    // End of the lines.

    GetItemTranslation;
    ...
    Změněný kód
    ...IF Found THEN BEGIN
    "Cross-Reference No." := ItemCrossReference."Cross-Reference No.";
    "Unit of Measure (Cross Ref.)" := ItemCrossReference."Unit of Measure";
    "Cross-Reference Type" := ItemCrossReference."Cross-Reference Type";
    "Cross-Reference Type No." := ItemCrossReference."Cross-Reference Type No.";
    END ELSE BEGIN
    "Cross-Reference No." := '';
    "Cross-Reference Type" := "Cross-Reference Type"::" ";
    "Cross-Reference Type No." := '';
    GetItemTranslation;
    ...
  9. Změňte kód ve funkci GetSpecialOrders v procedura Dist. integrace (5702) takto:
    Existující kód
    ...TESTFIELD("Sell-to Customer No.",SalesHeader."Sell-to Customer No.");
    TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    // Delete the following line.
    PurchHeader.SetShipToForSpecOrder;

    PurchLine.LOCKTABLE;
    ...
    Změněný kód
    ...TESTFIELD("Sell-to Customer No.",SalesHeader."Sell-to Customer No.");
    TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    // Add the following lines.
    IF DropShptSplOrderExists(SalesHeader) THEN
    CheckAndAddShipToAdd(SalesHeader,TRUE);
    // End of the lines.

    PurchLine.LOCKTABLE;
    ...
  10. Změňte kód ve funkci TransfldsFromSalesToPurchLine v procedura správce kopie dokumentu (6620) takto:
    Existující kód
    ...VALIDATE("Direct Unit Cost");
    END;
    ...
    Změněný kód
    ...VALIDATE("Direct Unit Cost");

    // Add the following lines.
    Description := FromSalesLine.Description;
    "Description 2" := FromSalesLine."Description 2";
    // End of the lines.

    END;
    ...
  11. Změňte kód v kódu v nák.-takto získat přímé dodávky procedura (76):
    Existující kód 1
    ...TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    PurchLine.LOCKTABLE;
    ...
    Změněný kód 1
    ...TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    // Add the following line.
    IF DropShptSplOrderExists(SalesHeader) THEN
    CheckAndAddShipToAdd(SalesHeader,TRUE);
    // End of the lines.

    PurchLine.LOCKTABLE;
    ...
    Existující kód 2
    ...CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);
    PurchLine.Description := SalesLine.Description;
    PurchLine."Sales Order No." := SalesLine."Document No.";
    ...
    Náhradní kód 2
    ...CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);
    PurchLine.Description := SalesLine.Description;

    // Add the following line.
    PurchLine."Description 2" := SalesLine."Description 2";

    PurchLine."Sales Order No." := SalesLine."Document No.";
    ...
  12. Změňte kód v InsertReqWkshLine v sestavě získat prodejní objednávky (698) takto:
    Existující kód
    ..."Sell-to Customer No." := SalesLine."Sell-to Customer No.";
    SalesHeader.GET(1,SalesLine."Document No.");
    IF SpecOrder <> 1 THEN
    ...
    Změněný kód
    ..."Sell-to Customer No." := SalesLine."Sell-to Customer No.";

    // Add the following lines.
    Description := SalesLine.Description;
    "Description 2" := SalesLine."Description 2";
    // End of the lines.

    SalesHeader.GET(1,SalesLine."Document No.");
    IF SpecOrder <> 1 THEN
    ...
  13. Přidat novou globální proměnnou v tabulce Nákupní hlavička (38) a potom zadejte proměnné takto:
    • Název: NameAddressDetails
    • Datový typ: Text
    • Délka: 512
  14. Přidat novou globální proměnnou v tabulce Nákupní hlavička (38) a potom zadejte proměnné takto:
    • Název: NameAddressDetails2
    • Datový typ: Text
    • Délka: 512
  15. Přidejte novou textovou konstantu v tabulce Nákupní hlavička (38) a potom zadejte textovou konstantu takto:
    • Název: Text051
    • ConstValue: pole %1 v %2 nákupní objednávky musí být stejný jako prodejní objednávky %3.
  16. Vytvořte novou funkci CheckAndAddShipToAdd v tabulce Nákupní hlavička (38). Chcete-li to provést, postupujte takto:
    1. Přidat nový místní parametr ve funkci CheckAndAddShipToAdd v tabulce Nákupní hlavička (38) a potom zadejte parametr takto:
      • Var: No
      • Název: SalesHeader
      • Datový typ: záznam
      • Podtyp: Prodejní hlavička
    2. Přidat nový místní parametr ve funkci CheckAndAddShipToAdd v tabulce Nákupní hlavička (38) a potom zadejte parametr takto:
      • Var: No
      • Název: ShowError
      • Datový typ: Boolean
    3. Přidat vrácené hodnoty ve funkci CheckAndAddShipToAdd v tabulce Nákupní hlavička (38) a potom zadejte vrácená hodnota takto:
      • Návratový typ: Boolean
    4. Přidat novou místní proměnnou ve funkci CheckAndAddShipToAdd v tabulce Nákupní hlavička (38) a potom zadejte proměnné takto:
      • Název: PurchLine2
      • Datový typ: záznam
      • Podtyp: PurchLine2
    5. Přidejte následující kód ve funkci CheckAndAddShipToAdd v tabulce Nákupní hlavička (38):
      IF ShowError THEN BEGINPurchLine2.RESET;
      PurchLine2.SETRANGE("Document Type","Document Type"::Order);
      PurchLine2.SETRANGE("Document No.","No.");
      IF NOT PurchLine2.ISEMPTY THEN BEGIN
      IF "Ship-to Name" <> SalesHeader."Ship-to Name" THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Name"),"No.",SalesHeader."No.");
      IF "Ship-to Name 2" <> SalesHeader."Ship-to Name 2" THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Name 2"),"No.",SalesHeader."No.");
      IF ("Ship-to Address" <> SalesHeader."Ship-to Address") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Address"),"No.",SalesHeader."No.");
      IF ("Ship-to Address 2" <> SalesHeader."Ship-to Address 2") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Address 2"),"No.",SalesHeader."No.");
      IF ("Ship-to Post Code" <> SalesHeader."Ship-to Post Code") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Post Code"),"No.",SalesHeader."No.");
      IF ("Ship-to City" <> SalesHeader."Ship-to City") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to City"),"No.",SalesHeader."No.");
      IF ("Ship-to Contact" <> SalesHeader."Ship-to Contact") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Contact"),"No.",SalesHeader."No.");
      END ELSE BEGIN
      // no purchase line exists
      "Ship-to Name" := SalesHeader."Ship-to Name";
      "Ship-to Name 2" := SalesHeader."Ship-to Name 2";
      "Ship-to Address" := SalesHeader."Ship-to Address";
      "Ship-to Address 2" := SalesHeader."Ship-to Address 2";
      "Ship-to Post Code" := SalesHeader."Ship-to Post Code";
      "Ship-to City" := SalesHeader."Ship-to City";
      "Ship-to Contact" := SalesHeader."Ship-to Contact";
      END;
      END ELSE BEGIN
      NameAddressDetails :=
      SalesHeader."Ship-to Name" + SalesHeader."Ship-to Name 2" +
      SalesHeader."Ship-to Address" + SalesHeader."Ship-to Address 2" +
      SalesHeader."Ship-to Post Code" + SalesHeader."Ship-to City" +
      SalesHeader."Ship-to Contact";
      IF NameAddressDetails2 = '' THEN
      NameAddressDetails2 := NameAddressDetails;
      EXIT(NameAddressDetails2 = NameAddressDetails);
      END;
  17. Vytvořte novou funkci DropShptSplOrderExists v tabulce Nákupní hlavička (38). Chcete-li to provést, postupujte takto:
    1. Přidat nový místní parametr ve funkci DropShptSplOrderExists v tabulce Nákupní hlavička (38) a potom zadejte parametr takto:
      • Var: No
      • Název: SalesHeader
      • Datový typ: záznam
      • Podtyp: Prodejní hlavička
    2. Přidat typ vrácené hodnoty ve funkci DropShptSplOrderExists v tabulce Nákupní hlavička (38) a potom zadejte vrácená hodnota takto:
      • Návratový typ: Boolean
    3. Přidat novou místní proměnnou ve funkci DropShptSplOrderExists v tabulce Nákupní hlavička (38) a potom zadejte proměnné takto:
      • Název: SalesLine2
      • Datový typ: záznam
      • Podtyp: Prodejní řádek
    4. Přidejte následující kód ve funkci DropShptSplOrderExists v tabulce Nákupní hlavička (38):
      // returns TRUE if sales is either Drop Shipment of Special OrderSalesLine2.RESET;
      SalesLine2.SETRANGE("Document Type",SalesLine2."Document Type"::Order);
      SalesLine2.SETRANGE("Document No.",SalesHeader."No.");
      SalesLine2.SETRANGE("Drop Shipment",TRUE);
      IF NOT SalesLine2.ISEMPTY THEN
      EXIT(TRUE);

      SalesLine2.SETRANGE("Drop Shipment");
      SalesLine2.SETRANGE("Special Order",TRUE);
      EXIT(NOT SalesLine2.ISEMPTY);

Předpoklady

Musí mít jednu z následujících produktů nainstalovali tuto opravu hotfix:
  • Aplikace Microsoft Dynamics NAV 2009 R2
  • Aplikace Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

Informace o odinstalaci

Tato oprava hotfix nelze odebrat.

Stav


Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".
Poznámka: Toto je článek "Rychlé publikování" vytvářen přímo v rámci odborné pomoci společnosti Microsoft. Informace obsažené v tomto dokumentu jsou poskytovány tak, jak je v reakci na vznikající problémy. V důsledku rychlosti v jeho zpřístupnění materiály, mohou obsahovat typografické chyby a mohou být upraveny kdykoli bez předchozího upozornění. Viz Podmínky použití pro další aspekty.