"배송 코드" 필드가 비어 예기치 않게 Microsoft Dynamics 탐색 2009 년에는 특별 한 구매 주문서에서 특별 주문에 대 한 Get Sales Order 함수를 실행 한 후

적용 대상: Dynamics NAV 2009

이 문서의 Microsoft Dynamics 탐색 모든 국가 모든 언어 로케일에 적용 됩니다.

증상


특수의 특별 주문에 대 한 Get Sales Order 함수를 실행 한 후 Microsoft Dynamics 탐색 2009의 순서를 구입, 헤더의 특수 주문서 배송 코드 필드는 예기치 않게 비어 있습니다.
다음 제품에이 문제가 발생합니다.
  • Microsoft Dynamics 탐색 2009 R2
  • Microsoft Dynamics 탐색 2009 서비스 팩 1 (SP1)

해결 방법


핫픽스 정보

지원 되는 핫픽스를 Microsoft에서 출시 되었습니다. 이 문서에 설명 되어 있는 문제를 해결 하기 위한 것일 뿐입니다. 이러한 특정 문제가 발생 한 시스템에만 적용 됩니다. 이 핫픽스는 추가 테스트가 필요할 수 있습니다. 따라서이 문제의 영향이 심각 하지 다음 Microsoft Dynamics 탐색 2009 서비스 팩 또는이 핫픽스가 포함 된 다음 Microsoft Dynamics 탐색 버전까지 기다리는 것이 좋습니다.

참고: 특별 한 경우 일반적으로 호출 취소 될 수도 있습니다 경우 기술 지원 담당자는 Microsoft Dynamics 및 관련 된 제품에 대 한 지원에 따른 비용이 특정 업데이트로 문제를 해결할 수 있다고 결정 합니다. 추가 지원 질문과 특정 업데이트가 필요 하지 않은 문제에는 일반 지원 비용이 적용 됩니다.

설치 정보

Microsoft는 모든 보증, 그림에 대 한 묵시적인 보증. 이 포함 되지만 상품성 또는 특정 목적에의 적합성의 묵시적된 보증에 국한 되지는 않습니다. 이 문서는 작성 하 고 프로시저를 디버깅할 데 사용 되는 도구 및 여기서 설명 하는 프로그래밍 언어에 익숙한 가정 합니다. Microsoft 지원 엔지니어는 특정 프로시저의 기능을 설명할 수 있지만 추가 기능을 제공 하거나 특정 요구 사항에 맞도록 프로시저를 구성 하는 이러한 예제를 수정 하지 않습니다.

참고: 이 핫픽스를 설치 하기 전에 모든 Microsoft Navision 클라이언트 사용자가 시스템 로그를 확인 하십시오. Navision 응용 프로그램 서비스 (NAS) 클라이언트 사용자가 포함 됩니다. 이 핫픽스를 구현할 때 로그온 되어 있는 사용자만 클라이언트 수 있습니다.

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

것을 권장 합니다 Windows 로그인 창이 나 데이터베이스 로그인 창에서 사용자 계정 "SUPER" 역할 ID를 할당할 수 사용자 계정 "SUPER" 역할 ID를 할당할 수 없습니다, 사용자 계정에 다음 권한이 있는지 확인 해야 합니다.
  • 변경할 수 있는 개체에 대 한 수정 권한이 있습니다.
  • 시스템 개체 ID 9015 개체 및 시스템 개체 ID 5210 개체에 대 한 Execute 권한이 있습니다.


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

코드 변경 사항

참고: 항상 테스트 코드 수정 제어 된 환경에 적용 하기 전에 프로덕션 컴퓨터에 수정 프로그램입니다.
이 문제를 해결하려면 다음과 같이 하십시오.
  1. 여기에 GetDescriptionAndRcptName 함수가에 코드 변경 하면 다음과 같이 ReqJnlManagement codeunit (330)에:
    기존 코드
    ...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
    ...
    대체 코드
    ...ELSE
    Description := '';
    END;
    END;

    IF ReqLine."Vendor No." = '' THEN
    ...
  2. 새 전역 변수를 추가 하는에 있는 부문 Wksh.-주문 codeunit (333) 하 고 변수를 다음과 같이 지정 합니다.
    • 이름: DropShptSpecialOrderExists
    • 데이터 형식: 부울
  3. InsertPurchOrderLine 함수에 부문 Wksh. 새 지역 변수 추가-주문 codeunit (333) 하 고 변수를 다음과 같이 지정 합니다.
    • 이름: SalesHeader
    • 데이터 형식: 레코드
    • 하위 형식: 판매 헤더
  4. InsertPurchOrderLine 함수에 부문 Wksh. 새 지역 변수 추가-주문 codeunit (333) 하 고 변수를 다음과 같이 지정 합니다.
    • 이름: DropShptSplOrderDiffAddress
    • 데이터 형식: 부울
  5. InsertPurchOrderLine 함수에서 해당 부문 Wksh.에서 코드를 변경-순서 codeunit (333)을 다음과 같이 확인 합니다.
    기존 코드
    ...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
    ...
    대체 코드
    ...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. InsertHeader 함수에 부문 Wksh. 새 지역 변수 추가-주문 codeunit (333) 하 고 변수를 다음과 같이 지정 합니다.
    • 이름: SalesHeader
    • 데이터 형식: 레코드
    • 하위 형식: 판매 헤더
  7. InsertHeader 함수에서 해당 부문 Wksh.에서 코드를 변경-순서 codeunit (333)을 다음과 같이 확인 합니다.
    기존 코드
    ...PurchOrderHeader.SetShipToForSpecOrder;
    END;

    PurchOrderHeader.MODIFY;
    ...
    대체 코드
    ...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. Dist. 통합 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";
    "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;
    ...
    대체 코드
    ...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. Dist. 통합 codeunit (5702) GetSpecialOrders 함수에서 코드를 다음과 같이 변경.
    기존 코드
    ...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;
    ...
    대체 코드
    ...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. 문서의 이전 복사본 codeunit (6620) TransfldsFromSalesToPurchLine 함수에서 코드를 다음과 같이 변경.
    기존 코드
    ...VALIDATE("Direct Unit Cost");
    END;
    ...
    대체 코드
    ...VALIDATE("Direct Unit Cost");

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

    END;
    ...
  11. Purch에서 코드 의 코드를 변경-드롭 Shpt. codeunit (76)를 다음과 같이 가져오기:
    기존 코드 1
    ...TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    PurchLine.LOCKTABLE;
    ...
    대체 코드 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;
    ...
    기존 코드 2
    ...CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);
    PurchLine.Description := SalesLine.Description;
    PurchLine."Sales Order No." := SalesLine."Document No.";
    ...
    대체 코드 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. (698) Get Sales Orders 보고서에 InsertReqWkshLine 의 코드를 다음과 같이 변경.
    기존 코드
    ..."Sell-to Customer No." := SalesLine."Sell-to Customer No.";
    SalesHeader.GET(1,SalesLine."Document No.");
    IF SpecOrder <> 1 THEN
    ...
    대체 코드
    ..."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. (38) 구매 헤더 표에 새 전역 변수를 추가 하 고 변수를 다음과 같이 지정 합니다.
    • 이름: NameAddressDetails
    • 데이터 형식: 텍스트
    • 길이: 512
  14. (38) 구매 헤더 표에 새 전역 변수를 추가 하 고 변수를 다음과 같이 지정 합니다.
    • 이름: NameAddressDetails2
    • 데이터 형식: 텍스트
    • 길이: 512
  15. (38) 구매에 헤더 테이블에 새 텍스트 상수를 추가 하 고 텍스트 상수를 다음과 같이 지정 합니다.
    • 이름: Text051
    • ConstValue: 주문서 %2에서 %1 필드 매출을 %3의 순서와 동일 해야 합니다.
  16. (38) 구매에 헤더 테이블에 새로운 CheckAndAddShipToAdd 함수를 만듭니다. 이렇게 하려면, 다음 단계를 수행하십시오.
    1. (38) 구매에 헤더 테이블의 CheckAndAddShipToAdd 함수에서 새 로컬 매개 변수를 추가 하 고 매개 변수를 다음과 같이 지정 합니다.
      • Var: No
      • 이름: SalesHeader
      • 데이터 형식: 레코드
      • 하위 형식: 판매 헤더
    2. (38) 구매에 헤더 테이블의 CheckAndAddShipToAdd 함수에서 새 로컬 매개 변수를 추가 하 고 매개 변수를 다음과 같이 지정 합니다.
      • Var: No
      • 이름: ShowError
      • 데이터 형식: 부울
    3. (38) 구매에 헤더 테이블의 CheckAndAddShipToAdd 함수에서 반환 값을 추가 하 고 반환 값을 다음과 같이 지정 합니다.
      • 반환 유형: 부울
    4. (38) 구매에 헤더 테이블의 CheckAndAddShipToAdd 함수에서 새 로컬 변수를 추가 하 고 변수를 다음과 같이 지정 합니다.
      • 이름: PurchLine2
      • 데이터 형식: 레코드
      • 하위 형식: PurchLine2
    5. (38) 구매에 헤더 테이블의 CheckAndAddShipToAdd 함수에 다음 코드를 추가 합니다.
      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. (38) 구매에 헤더 테이블에 새로운 DropShptSplOrderExists 함수를 만듭니다. 이렇게 하려면, 다음 단계를 수행하십시오.
    1. (38) 구매에 헤더 테이블의 DropShptSplOrderExists 함수에서 새 로컬 매개 변수를 추가 하 고 매개 변수를 다음과 같이 지정 합니다.
      • Var: No
      • 이름: SalesHeader
      • 데이터 형식: 레코드
      • 하위 형식: 판매 헤더
    2. (38) 구매에 헤더 테이블의 DropShptSplOrderExists 함수에서 반환 값 형식을 추가 하 고 반환 값을 다음과 같이 지정 합니다.
      • 반환 유형: 부울
    3. (38) 구매에 헤더 테이블의 DropShptSplOrderExists 함수에서 새 로컬 변수를 추가 하 고 변수를 다음과 같이 지정 합니다.
      • 이름: SalesLine2
      • 데이터 형식: 레코드
      • 하위 형식: 판매 선
    4. (38) 구매에 헤더 테이블의 DropShptSplOrderExists 함수에 다음 코드를 추가 합니다.
      // 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);

전제 조건

이 핫픽스를 적용 하려면 설치한 다음 제품 중 하나가 있어야 합니다.
  • Microsoft Dynamics 탐색 2009 R2
  • Microsoft Dynamics 탐색 2009 서비스 팩 1 (SP1)

제거 정보

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

상태


Microsoft는 이 문제가 '적용 대상' 섹션에 나열된 Microsoft 제품의 문제임을 확인했습니다.
참고: 이 문서는 Microsoft 지원 부서 내에서 직접 작성한 "빠른 게시" 문서입니다. 여기에 포함된 정보는 신흥 문제에 대한 응답으로 제공되었습니다. 신속히 사용할 수 있도록 작성되었으므로, 자료 입력 오류가 포함될 수 있으며 언제든지 예고없이 개정될 수 있습니다. 다른 고려 사항은 사용 약관을 참조하십시오.