배송 중단 및 특별 주문은 필수 워크시트를 사용하여 구매 주문을 만들거나 Microsoft Dynamics NAV에서 구매 주문을 수동으로 만들 때 판매 주문에 대한 정의된 정보를 고려하지 않습니다.

적용 대상
Dynamics NAV 2009

이 문서는 모든 언어 로캘에 대해 Microsoft Dynamics NAV에 적용됩니다.

증상

Microsoft Dynamics NAV에서 필수 워크시트를 사용하여 구매 주문을 만들거나 구매 주문을 수동으로 만들 때 배송 중단 및 특별 주문은 관련 판매 주문에 대한 정의된 정보를 고려하지 않습니다. 따라서 판매 주문 헤더 및 줄의 설명, 설명 2 및 배송 주소는 페그 구매 주문을 따르지 않습니다.
이 문제는 다음 제품에서 발생합니다.

  • Microsoft Dynamics NAV 2009 SP1(서비스 팩 1)
  • Microsoft Dynamics NAV 2009 R2

해결 방법

핫픽스 정보

이제 Microsoft에서 지원되는 핫픽스를 사용할 수 있습니다. 그러나 이 문서에 설명된 문제만 수정하기 위한 것입니다. 이 특정 문제가 발생하는 시스템에만 적용합니다. 이 핫픽스는 추가 테스트를 받을 수 있습니다. 따라서 이 문제의 심각한 영향을 받지 않는 경우 다음 Microsoft Dynamics NAV 2009 서비스 팩 또는 이 핫픽스가 포함된 다음 Microsoft Dynamics NAV 버전을 기다리는 것이 좋습니다.

참고 특별한 경우 Microsoft Dynamics 및 관련 제품에 대한 기술 지원 전문가가 특정 업데이트가 문제를 resolve 판단하는 경우 지원 호출에 대해 일반적으로 발생하는 요금이 취소될 수 있습니다. 특정 업데이트가 필요하지 않은 추가 지원 질문과 문제에는 일반 지원 비용이 적용됩니다.

            
          

설치 정보

Microsoft는 명시적이거나 묵시적인 보증 없이 설명용으로만 프로그래밍 예제를 제공합니다. 여기에는 상품성 또는 특정 목적에의 적합성에 대한 묵시적 보증이 포함되지만 이에 국한되지 않습니다. 이 문서에서는 설명 중인 프로그래밍 언어와 프로시저를 만들고 디버깅하는 데 사용되는 도구에 대해 잘 알고 있다고 가정합니다. Microsoft 지원 엔지니어는 사용자에게 도움이 되도록 특정 프로시저에 대한 기능을 설명할 수 있지만 사용자의 특정 요구 사항에 맞도록 예제를 수정하여 추가 기능을 제공하거나 프로시저를 구성하지는 않습니다.

참고 이 핫픽스를 설치하기 전에 모든 Microsoft Navision 클라이언트 사용자가 시스템에서 로그오프되었는지 확인합니다. 여기에는 NAS(Microsoft Navision Application Services) 클라이언트 사용자가 포함됩니다. 이 핫픽스를 구현할 때 로그온한 유일한 클라이언트 사용자여야 합니다.

이 핫픽스를 구현하려면 개발자 라이선스가 있어야 합니다.

Windows 로그인 창 또는 데이터베이스 로그인 창의 사용자 계정에 "SUPER" 역할 ID가 할당되는 것이 좋습니다. 사용자 계정에 "SUPER" 역할 ID를 할당할 수 없는 경우 사용자 계정에 다음 권한이 있는지 확인해야 합니다.

  • 변경할 개체에 대한 수정 권한입니다.
  • 시스템 개체 ID 5210 개체 및 System Object ID 9015 개체에 대한 Execute 권한입니다.

                
참고 데이터 복구를 수행해야 하는 경우가 아니면 데이터 저장소에 대한 권한이 있을 필요가 없습니다.

코드 변경 내용

참고 프로덕션 컴퓨터에 수정 사항을 적용하기 전에 제어된 환경에서 항상 코드 수정을 테스트합니다.
이 문제를 해결하려면 다음과 같이 하십시오.
참고 북아메리카 버전 W1과 다르므로 codeunit(333)에 액세스할 때 읽어보세요. 둘 다 각 버전의 시작 및 중지에 대한 태그와 함께 여기에 있습니다.

  1. 다음과 같이 구매 헤더 테이블(38)의 코드를 변경합니다.

    1. 다음 전역 텍스트 상수를 추가합니다.
      Text051@1091: TextConst 'ENU=구매 주문 %2의 %1 필드는 판매 주문 %3과 동일해야 합니다.'

    2. 다음 전역 변수를 추가합니다.

      • 이름: NameAddressDetails; DataType: Text[512];
      • 이름: NameAddressDetails2; DataType: Text[512];
    3. 다음 함수를 추가합니다.
      CheckAndAddShipToAdd@46(SalesHeader@1000: 레코드 36; ShowError@1001: 부울) : 부울;

      VAR PurchLine2@1002: 레코드 39;
      함수에 대해 다음 코드를 추가합니다.

      IF ShowError THEN BEGIN
        PurchLine2.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;
      
      
    4. 다음 함수를 추가합니다.
      DropShptSplOrderExists@48(SalesHeader@1000: 레코드 36) : 부울;

      VAR SalesLine2@1001: 레코드 37;

      함수에 대해 다음 코드를 추가합니다.

      // returns TRUE if sales is either Drop Shipment of Special Order
      SalesLine2.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);
      
      
  2. 다음과 같이 Sales Orders 가져오기 보고서(698)에서 InsertReqWkshLine 함수의 코드를 변경합니다.
    기존 코드

    ...
        Quantity,
        ROUND(SalesLine."Outstanding Quantity" * SalesLine."Qty. per Unit of Measure" / "Qty. per Unit of Measure",0.00001));
      "Sales Order No." := SalesLine."Document No.";
      "Sales Order Line No." := SalesLine."Line No.";
      "Sell-to Customer No." := SalesLine."Sell-to Customer No.";
      SalesHeader.GET(1,SalesLine."Document No.");
      IF SpecOrder <>1 THEN
        "Ship-to Code" := SalesHeader."Ship-to Code";
      "Item Category Code" := SalesLine."Item Category Code";
      Nonstock := SalesLine.Nonstock;  
    ...
    

    대체 코드

    ...
            Quantity,
        ROUND(SalesLine."Outstanding Quantity" * SalesLine."Qty. per Unit of Measure" / "Qty. per Unit of Measure",0.00001));
      "Sales Order No." := SalesLine."Document No.";
      "Sales Order Line No." := SalesLine."Line No.";
      "Sell-to Customer No." := SalesLine."Sell-to Customer No.";
    
    // Add the following lines.
      Description := SalesLine.Description;
      "Description 2" := SalesLine."Description 2";
    // End of the added lines.
    
      SalesHeader.GET(1,SalesLine."Document No.");
      IF SpecOrder <>1 THEN
        "Ship-to Code" := SalesHeader."Ship-to Code";
      "Item Category Code" := SalesLine."Item Category Code";
      Nonstock := SalesLine.Nonstock;  
    ...
    
  3. 다음과 같이 Purch.-Get Drop Shpt. codeunit(76)의 Code 함수에서 코드를 변경합니다.
    기존 코드

    ...
          IF RECORDLEVELLOCKING THEN
        LOCKTABLE;
      SalesHeader.TESTFIELD("Document Type",SalesHeader."Document Type"::Order);
      TESTFIELD("Sell-to Customer No.",SalesHeader."Sell-to Customer No.");
      TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");
    
      PurchLine.LOCKTABLE;
      IF NOT RECORDLEVELLOCKING THEN
        LOCKTABLE(TRUE,TRUE); // Only version check
      SalesLine.LOCKTABLE;
    ...
          PurchLine."Document Type" := PurchLine."Document Type"::Order;
          PurchLine."Document No." := "No.";
          PurchLine."Line No." := NextLineNo;
          CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);
          PurchLine.Description := SalesLine.Description;
          PurchLine."Sales Order No." := SalesLine."Document No.";
          PurchLine."Sales Order Line No." := SalesLine."Line No.";
          PurchLine."Drop Shipment" := TRUE;
          EVALUATE(PurchLine."Inbound Whse. Handling Time",'<0D>');
          PurchLine.VALIDATE("Inbound Whse. Handling Time");    
    ...
    

    대체 코드

    ...
       IF RECORDLEVELLOCKING THEN
        LOCKTABLE;
      SalesHeader.TESTFIELD("Document Type",SalesHeader."Document Type"::Order);
      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 added lines.
    
      PurchLine.LOCKTABLE;
      IF NOT RECORDLEVELLOCKING THEN
        LOCKTABLE(TRUE,TRUE); // Only version check
      SalesLine.LOCKTABLE;
    ...
          PurchLine."Document Type" := PurchLine."Document Type"::Order;
          PurchLine."Document No." := "No.";
          PurchLine."Line No." := NextLineNo;
          CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);
          PurchLine.Description := SalesLine.Description;
    
    // Add the following line.
          PurchLine."Description 2" := SalesLine."Description 2";
    // End of the added line.
    
          PurchLine."Sales Order No." := SalesLine."Document No.";
          PurchLine."Sales Order Line No." := SalesLine."Line No.";
          PurchLine."Drop Shipment" := TRUE;
          EVALUATE(PurchLine."Inbound Whse. Handling Time",'<0D>');
          PurchLine.VALIDATE("Inbound Whse. Handling Time");          
    ...
    
  4. 다음과 같이 ReqJnlManagement codeunit(330)의 GetDescriptionAndRcptName 함수에서 코드를 변경합니다.
    기존 코드

    ...
           ReqLine.Type::"G/L Account":
            IF GLAcc.GET(ReqLine."No.") THEN
              Description := GLAcc.Name
            ELSE
              Description := '';
    
    // Delete the following lines.
          ReqLine.Type::Item:
            IF Item.GET(ReqLine."No.") THEN
              Description := Item.Description
            ELSE
              Description := '';
    // End of the deleted lines.
    
        END;
      END;
    
    IF ReqLine."Vendor No." = '' THEN
      BuyFromVendorName := ''        
    ...
    

    대체 코드

    ...
             ReqLine.Type::"G/L Account":
            IF GLAcc.GET(ReqLine."No.") THEN
              Description := GLAcc.Name
            ELSE
              Description := '';
        END;
      END;
    
    IF ReqLine."Vendor No." = '' THEN
      BuyFromVendorName := ''    
    ...
    
  5. 참고 Codeunit(333)에는 전 세계 버전과 북미 버전에서 다른 코드가 있습니다. 설치에 올바른 섹션을 사용합니다.

    BEGIN 북미 버전 codeunit(333)의 경우 Req. Wksh.-Make Orders의 코드를 다음과 같이 변경합니다.

    1. 다음 전역 변수를 추가합니다.

      • 이름: DropShptSpecialOrderExists;
      • DataType: 부울;
    2. InsertPurchOrderLinefunction에 다음 지역 변수를 추가합니다.

      • 이름: SalesHeader; DataType: 레코드(36);
      • 이름: DropShptSplOrderDiffAddress; DataType: 부울;
      • 이름: CreateNewRecord; DataType: 부울;
    3. InsertPurchOrderLinefunction의 코드를 다음과 같이 변경합니다.
      기존 코드

      ...
      // Delete the following lines.
      WITH ReqLine2 DO BEGIN
        IF ("No." = '') OR ("Vendor No." = '') OR (Quantity = 0) THEN
          EXIT;
        IF NOT PurchasingCode.GET("Purchasing Code") THEN
          PurchasingCode."Special Order" := FALSE;
        IF (PurchasingCode."Special Order" AND
            (PurchSetup."Combine Special Orders Default" =
             PurchSetup."Combine Special Orders Default"::"Always Combine") AND
            ((PurchOrderHeader."Buy-from Vendor No." <>"Vendor No.") OR
             (PurchOrderHeader."Location Code" <> "Location Code") OR
             (PurchOrderHeader."Currency Code" <>"Currency Code") OR
             (PrevPurchCode <>"Purchasing Code"))) OR
           (NOT PurchasingCode."Special Order" AND
             ((PurchOrderHeader."Buy-from Vendor No." <>"Vendor No.") OR
             (PurchOrderHeader."Location Code" <>"Location Code") 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
             (PrevPurchCode <>"Purchasing Code")))
        THEN BEGIN
          InsertHeader(ReqLine2);
          LineCount := 0;
          NextLineNo := 0;
          PrevPurchCode := "Purchasing Code";
          PrevShipToCode := "Ship-to Code";
        END;
        IF (PurchasingCode."Special Order") AND
            (PurchSetup."Combine Special Orders Default" =
            PurchSetup."Combine Special Orders Default"::"Never Combine") AND
            ((PurchOrderHeader."Buy-from Vendor No." <>"Vendor No.") OR
             (PurchOrderHeader."Location Code" <> "Location Code") OR
             (PurchOrderHeader."Currency Code" <>"Currency Code") OR
             (PrevPurchCode <> "Purchasing Code")) THEN BEGIN
          InsertHeader(ReqLine2);
        END;
      // End of the deleted lines.
      
        LineCount := LineCount + 1;
        IF NOT PlanningResiliency THEN
          Window.UPDATE(4,LineCount);       
      ...
      

      대체 코드

      ...
      // Add the following lines.
      WITH ReqLine2 DO BEGIN
        IF ("No." = '') OR ("Vendor No." = '') OR (Quantity = 0) THEN
          EXIT;
        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;
        IF NOT PurchasingCode.GET("Purchasing Code") THEN
          PurchasingCode."Special Order" := FALSE;
      
        CreateNewRecord :=
          (PurchOrderHeader."Buy-from Vendor No." <>"Vendor No.") OR
          (PurchOrderHeader."Location Code" <> "Location Code") OR
          (PurchOrderHeader."Currency Code" <> "Currency Code") OR
          (PrevPurchCode <>"Purchasing Code") OR
          DropShptSplOrderDiffAddress;
      
        IF PurchasingCode."Special Order" AND CreateNewRecord THEN BEGIN
          InsertHeader(ReqLine2);
          IF PurchSetup."Combine Special Orders Default" =
             PurchSetup."Combine Special Orders Default"::"Always Combine"
          THEN BEGIN
            LineCount := 0;
            NextLineNo := 0;
            PrevPurchCode := "Purchasing Code";
            PrevShipToCode := "Ship-to Code";
          END;
        END;
        IF NOT PurchasingCode."Special Order" AND
           (CreateNewRecord OR
           (PurchOrderHeader."Sell-to Customer No." <>"Sell-to Customer No.") OR
           (PrevShipToCode <>"Ship-to Code") OR
           (PurchOrderHeader."Order Address Code" <>"Order Address Code"))
        THEN BEGIN
          InsertHeader(ReqLine2);
          LineCount := 0;
          NextLineNo := 0;
          PrevPurchCode := "Purchasing Code";
          PrevShipToCode := "Ship-to Code";
        END;
      // End of the added lines.
      
        LineCount := LineCount + 1;
        IF NOT PlanningResiliency THEN
          Window.UPDATE(4,LineCount);       
      ...
      
    4. InsertHeader 함수의 코드를 다음과 같이 변경합니다.
      다음 지역 변수를 추가합니다.

      • 이름: SalesHeader;
      • DataType: 레코드(36);

      기존 코드

      ...
         WITH ReqLine2 DO BEGIN
        OrderCounter := OrderCounter + 1;
        IF NOT PlanningResiliency THEN
          Window.UPDATE(3,OrderCounter);
      
        PurchSetup.GET;
        PurchSetup.TESTFIELD("Order Nos.");
      
      // Delete the following line.
        CLEAR(PurchOrderHeader);
      // End of the deleted line.
      
        PurchOrderHeader.INIT;
        PurchOrderHeader."Document Type" := PurchOrderHeader."Document Type"::Order;
        PurchOrderHeader."No." := '';
      ...
            PurchOrderHeader.VALIDATE("Location Code",ReqLine2."Location Code");
        END ELSE BEGIN
          PurchOrderHeader.VALIDATE("Location Code",ReqLine2."Location Code");
          PurchOrderHeader.SetShipToForSpecOrder;
        END;
      
        PurchOrderHeader.MODIFY;
        COMMIT;
        IF RECORDLEVELLOCKING THEN
          LOCKTABLE;
        PurchOrderHeader.MARK(TRUE);
      END;      
      ...
      

      대체 코드

      ...
      WITH ReqLine2 DO BEGIN
        OrderCounter := OrderCounter + 1;
        IF NOT PlanningResiliency THEN
          Window.UPDATE(3,OrderCounter);
      
        PurchSetup.GET;
        PurchSetup.TESTFIELD("Order Nos.");
        PurchOrderHeader.INIT;
        PurchOrderHeader."Document Type" := PurchOrderHeader."Document Type"::Order;
        PurchOrderHeader."No." := '';
      ...
            PurchOrderHeader.VALIDATE("Location Code",ReqLine2."Location Code");
        END ELSE BEGIN
          PurchOrderHeader.VALIDATE("Location Code",ReqLine2."Location Code");
          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 added lines.
      
        PurchOrderHeader.MODIFY;
        COMMIT;
        IF RECORDLEVELLOCKING THEN
          LOCKTABLE;
        PurchOrderHeader.MARK(TRUE);
      END;       
      ...
      

    BEGIN W1 버전 codeunit(333)의 경우 Req. Wksh.-Make Order에서 코드를 다음과 같이 변경합니다.

    1. 다음 전역 변수를 추가합니다.

      • 이름: DropShptSpecialOrderExists;
      • DataType: 부울;
    2. InsertPurchOrderLinefunction에 다음 지역 변수를 추가합니다.

      • 이름: SalesHeader; DataType: 레코드(36);
      • 이름: DropShptSplOrderDiffAddress; DataType: 부울;
    3. InsertPurchOrderLinefunction의 코드를 다음과 같이 변경합니다.
      기존 코드

      ...
         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")
      // End of the deleted line.
      
        THEN BEGIN
          InsertHeader(ReqLine2);
          LineCount := 0;
          NextLineNo := 0;
          PrevPurchCode := "Purchasing Code";
          PrevShipToCode := "Ship-to Code";
        END; 
      ...
      

      대체 코드

      ...
        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 added 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 added lines.
      
        THEN BEGIN
          InsertHeader(ReqLine2);
          LineCount := 0;
          NextLineNo := 0;
          PrevPurchCode := "Purchasing Code";
          PrevShipToCode := "Ship-to Code";
        END; 
      ...
      
    4. InsertHeader 함수의 코드를 다음과 같이 변경합니다.
      다음 지역 변수를 추가합니다.

      • 이름: SalesHeader;
      • DataType: 레코드(36);

      기존 코드

      ...
          END ELSE BEGIN
          PurchOrderHeader.VALIDATE("Location Code",ReqLine2."Location Code");
          PurchOrderHeader.SetShipToForSpecOrder;
        END;
      
        PurchOrderHeader.MODIFY;
        COMMIT;
        IF RECORDLEVELLOCKING THEN
          LOCKTABLE;
        PurchOrderHeader.MARK(TRUE);
      END;      
      ...
      

      대체 코드

      ...
       END ELSE BEGIN
          PurchOrderHeader.VALIDATE("Location Code",ReqLine2."Location Code");
          PurchOrderHeader.SetShipToForSpecOrder;
        END;
      // Add the following lines.
        IF DropShptSpecialOrderExists THEN BEGIN
          IF SalesHeader.GET(SalesHeader."Document Type"::Order,"Sales Order No.") THEN BEGIN
          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 added lines.
      
        PurchOrderHeader.MODIFY;
        COMMIT;
        IF RECORDLEVELLOCKING THEN
          LOCKTABLE;
        PurchOrderHeader.MARK(TRUE);
      END;
      ...
      
  6. Dist. Integration codeunit(5702)에서 EnterPurchaseItemCrossRef 함수의 코드를 다음과 같이 변경합니다.
    기존 코드

    ...
       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";
    
    // Delete the following lines.
          IF ItemCrossReference.Description <>'' THEN BEGIN
            Description := ItemCrossReference.Description;
            "Description 2" := '';
          END;
        END ELSE BEGIN
          "Cross-Reference No." := '';
          "Cross-Reference Type" := "Cross-Reference Type"::" ";
          "Cross-Reference Type No." := '';
          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 deleted lines.
    
          GetItemTranslation;
        END;
      END;         
    ...
    

    대체 코드

    ...
           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";
    
    // Add the following lines.
          "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." := '';
    // End of the added lines.
    
          GetItemTranslation;
        END;
      END;    
    ...
    
  7. Dist. Integration codeunit(5702)에서 GetSpecialOrders 함수의 코드를 다음과 같이 변경합니다.
    기존 코드

    ...
        IF RECORDLEVELLOCKING THEN
        LOCKTABLE;
      SalesHeader.TESTFIELD("Document Type",SalesHeader."Document Type"::Order);
      TESTFIELD("Sell-to Customer No.",SalesHeader."Sell-to Customer No.");
      TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");
    
    // Delete the following line.
      PurchHeader.SetShipToForSpecOrder;
    // End of the deleted line.
    
      PurchLine.LOCKTABLE;
      IF NOT RECORDLEVELLOCKING THEN
        LOCKTABLE(TRUE,TRUE); // Only version check
      SalesLine.LOCKTABLE;       
    ...
    

    대체 코드

    ...
        IF RECORDLEVELLOCKING THEN
        LOCKTABLE;
      SalesHeader.TESTFIELD("Document Type",SalesHeader."Document Type"::Order);
      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 added lines.
    
      PurchLine.LOCKTABLE;
      IF NOT RECORDLEVELLOCKING THEN
        LOCKTABLE(TRUE,TRUE); // Only version check
      SalesLine.LOCKTABLE;    
    ...
    
  8. 다음과 같이 문서 Mgt. codeunit(6620) 복사에서 TransfldsFromSalesToPurchLine 함수의 코드를 변경합니다.
    기존 코드

    ...
      "Expected Receipt Date" := FromSalesLine."Shipment Date";
      "Bin Code" := FromSalesLine."Bin Code";
      VALIDATE(Quantity,FromSalesLine."Outstanding Quantity");
      VALIDATE("Return Reason Code",FromSalesLine."Return Reason Code");
      VALIDATE("Direct Unit Cost");
    END;     
    ...
    

    대체 코드

    ...
      "Expected Receipt Date" := FromSalesLine."Shipment Date";
      "Bin Code" := FromSalesLine."Bin Code";
      VALIDATE(Quantity,FromSalesLine."Outstanding Quantity");
      VALIDATE("Return Reason Code",FromSalesLine."Return Reason Code");
      VALIDATE("Direct Unit Cost");
    // Add the following lines.
      Description := FromSalesLine.Description;
      "Description 2" := FromSalesLine."Description 2";
    // End of the added lines.
    END;       
    ...
    

          

필수 구성 요소

이 핫픽스를 적용하려면 다음 제품 중 하나가 설치되어 있어야 합니다.

  • Microsoft Dynamics NAV 2009 SP1(서비스 팩 1)
  • Microsoft Dynamics NAV 2009 R2

                
              

제거 정보

이 핫픽스는 제거할 수 없습니다.

상태

Microsoft에서 이는 "적용 대상" 섹션에 나열된 Microsoft 제품에서의 문제임을 확인했습니다.

참조 자료

VSTF DynamicsNAV SE: 238210

참고 이 문서는 Microsoft 지원 부서에서 직접 작성한 "빠른 게시" 문서입니다. 여기에 포함된 정보는 새로운 문제에 대한 응답으로 있는 그대로 제공됩니다. 문서를 제공하는 속도로 인해 문서에 오자가 있을 수 있으며 사전 통지 없이 언제든지 수정될 수 있습니다. 다른 고려 사항은 사용 약관을 참조하십시오.