Falsche Daten werden für Arbeitsgänge generiert, wenn die Werte im Feld Weitergabemenge für einen Fertigungsauftrag in Microsoft Dynamics NAV 5.0 Service Pack 1 ändern


Dieser Artikel gilt für Microsoft Dynamics NAV für alle Länder und alle Gebietsschemas.

Problembeschreibung


Beim Ändern der Werte im Feld Weitergabemenge Arbeitsgänge für einen Produktionsauftrag in Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1) werden Daten für die Arbeitsgänge falsch berechnet.

Problemlösung


Hotfix-Informationen

Ein unterstützter Hotfix ist inzwischen von Microsoft erhältlich. Allerdings ist es lediglich zur Behebung dieses Problems. Wenden Sie es nur auf Systeme an, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird möglicherweise noch getestet. Wenn Ihr System durch dieses Problem nicht schwerwiegend beeinträchtigt ist, empfehlen wir, dass Sie warten auf das nächste Servicepack für Microsoft Dynamics NAV oder die nächste Microsoft Dynamics NAV-Version, die diesen Hotfix enthält.

Hinweis In besonderen Fällen bestimmt Gebühren fallen normalerweise Support aufrufen Wenn Experte Support für Microsoft Dynamics und zugehörige Produkte storniert werden können, dass ein bestimmtes Update Ihr Problem behebt. Die normalen Supportkosten gilt für zusätzliche Supportfragen und Probleme, die nicht für das betreffende Update qualifizieren.


Informationen zur Installation

Microsoft bietet Programmierbeispiele lediglich zur Veranschaulichung, ohne ausdrückliche oder konkludente Gewährleistung. Dies beinhaltet, ist jedoch nicht beschränkt auf, konkludente Gewährleistungen der Tauglichkeit oder Eignung für einen bestimmten Zweck. Dieser Artikel setzt voraus, dass Sie mit der von Beispielen verwendeten Programmiersprache und den Tools, die zum Erstellen und Debuggen von Prozeduren verwendet werden, vertraut sind. Microsoft-Supportmitarbeiter können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, sie werden jedoch diese Beispiele nicht verändern um eine erweiterte Funktionalität aufzuzeigen oder Prozeduren entwickeln, die Ihren Anforderungen entsprechen.

Hinweis Bevor Sie diesen Hotfix installieren, stellen Sie sicher, dass alle Microsoft Navision-Clientbenutzer vom System abgemeldet werden. Dies gilt auch für Clientbenutzer der Microsoft Navision Application Services (NAS). Sie sollte nur-Client-Benutzers, der angemeldet ist, wenn Sie diesen Hotfix installieren.

Muss eine Entwicklerlizenz verfügen, um diesen Hotfix installieren können.

Es wird empfohlen, das Benutzerkonto im Fenster Windows-Benutzernamen oder im Fenster Datenbank-Anmeldenamen "SUPER" Rollen-ID zugewiesen werden Wenn das Benutzerkonto die Rollen-ID "SUPER" nicht zugeordnet werden kann, müssen Sie sicherstellen, dass das Benutzerkonto die folgenden Berechtigungen verfügt:
  • Änderungsberechtigung für das Objekt, das Sie ändern.
  • Ausführungsberechtigung für System Object ID 5210 und System Object ID 9015 -Objekt.


Hinweis Sie müssen keine Rechte für die Datenspeicher haben, es sei denn, Sie müssen eine Datenreparatur durchführen.

Ändern von Code

Hinweis Testen Sie Programmcodeverbesserungen generell erst in einem Testsytem, bevor Sie sie im Produktionssystem verwenden.
Um dieses Problem zu beheben, führen Sie Code ändert 1 und Code ändert Teil 2:
Code ändert Teil 1
  1. Erstellen Sie eine neue FindSendAheadEndingTime -Funktion in der Codeunit Arbeitsgang berechnen (99000774). Um diese Funktion zu erstellen, gehen Sie folgendermaßen vor:
    1. Fügen Sie eine neue lokale Variable in der Funktion FindSendAheadEndingTime in Codeunit Arbeitsgang berechnen (99000774), und geben Sie die Variable wie folgt:
      • Name: Ergebnis
      • Datentyp: Boolean
    2. Fügen Sie eine neue lokale Variable in der Funktion FindSendAheadEndingTime in Codeunit Arbeitsgang berechnen (99000774), und geben Sie die Variable wie folgt:
      • Name: xTotalLotSize
      • Datentyp: Dezimalzahl
    3. Fügen Sie eine neue lokale Variable in der Funktion FindSendAheadEndingTime in Codeunit Arbeitsgang berechnen (99000774), und geben Sie die Variable wie folgt:
      • Name: xSendAheadLotSize
      • Datentyp: Dezimalzahl
    4. Fügen Sie den folgenden Code in der Funktion FindSendAheadEndingTime :
      LOCAL PROCEDURE FindSendAheadEndingTime@23(VAR TmpProdOrderRtngLine@1000 : Record 5409;VAR TmpProdOrderCapNeed@1001 : Record 5410;VAR SendAheadLotSize@1002 : Decimal) : Boolean;

      xTotalLotSize := TotalLotSize;
      xSendAheadLotSize := SendAheadLotSize;
      IF TmpProdOrderRtngLine.FINDSET THEN BEGIN
      REPEAT
      TotalLotSize := xTotalLotSize;
      SendAheadLotSize := xSendAheadLotSize;
      TmpProdOrderCapNeed.RESET;
      TmpProdOrderCapNeed.SETRANGE(Status,TmpProdOrderRtngLine.Status);
      TmpProdOrderCapNeed.SETRANGE("Prod. Order No.",TmpProdOrderRtngLine."Prod. Order No.");
      TmpProdOrderCapNeed.SETRANGE("Requested Only",FALSE);
      TmpProdOrderCapNeed.SETRANGE("Routing No.",TmpProdOrderRtngLine."Routing No.");
      TmpProdOrderCapNeed.SETRANGE("Routing Reference No.",TmpProdOrderRtngLine."Routing Reference No.");
      TmpProdOrderCapNeed.SETRANGE("Operation No.",TmpProdOrderRtngLine."Operation No.");
      IF TmpProdOrderCapNeed.FINDFIRST THEN BEGIN
      ProdOrderCapNeed2.COPY(TmpProdOrderCapNeed);
      TmpProdOrderCapNeed.DELETE;
      END;

      Result := Result OR GetSendAheadEndingTime(TmpProdOrderRtngLine,FALSE,SendAheadLotSize);
      TmpProdOrderCapNeed := ProdOrderCapNeed2;
      IF TmpProdOrderRtngLine."Operation No." = TmpProdOrderCapNeed."Operation No." THEN
      TmpProdOrderCapNeed.INSERT;

      IF ProdStartingDate < ProdEndingDate THEN BEGIN
      ProdStartingDate := ProdEndingDate;
      ProdStartingTime := ProdEndingTime;
      END ELSE
      IF (ProdStartingDate = ProdEndingDate) AND
      (ProdStartingTime < ProdEndingTime)
      THEN BEGIN
      ProdStartingTime := ProdEndingTime;
      END;
      UNTIL TmpProdOrderRtngLine.NEXT = 0;

      END ELSE BEGIN
      Result := GetSendAheadEndingTime(TmpProdOrderRtngLine,FALSE,SendAheadLotSize);
      END;
      EXIT(Result);
  2. Erstellen Sie eine neue FindSendAheadStartingTime -Funktion in der Codeunit Arbeitsgang berechnen (99000774). Um diese Funktion zu erstellen, gehen Sie folgendermaßen vor:
    1. Fügen Sie eine neue lokale Variable in der Funktion FindSendAheadStartingTime in Codeunit Arbeitsgang berechnen (99000774), und geben Sie die Variable wie folgt:
      • Name: Ergebnis
      • Datentyp: Boolean
    2. Fügen Sie eine neue lokale Variable in der Funktion FindSendAheadStartingTime in Codeunit Arbeitsgang berechnen (99000774), und geben Sie die Variable wie folgt:
      • Name: xTotalLotSize
      • Datentyp: Dezimal
    3. Fügen Sie eine neue lokale Variable in der Funktion FindSendAheadStartingTime in Codeunit Arbeitsgang berechnen (99000774), und geben Sie die Variable wie folgt:
      • Name: xSendAheadLotSize
      • Datentyp: Dezimal
    4. Fügen Sie den folgenden Code in der Funktion FindSendAheadStartingTime :
      LOCAL PROCEDURE FindSendAheadStartingTime@27(VAR TmpProdOrderRtngLine@1000 : Record 5409;VAR TmpProdOrderCapNeed@1001 : Record 5410;VAR SendAheadLotSize@1002 : Decimal) : Boolean;

      xTotalLotSize := TotalLotSize;
      xSendAheadLotSize := SendAheadLotSize;
      IF TmpProdOrderRtngLine.FINDSET THEN BEGIN
      REPEAT
      TotalLotSize := xTotalLotSize;
      SendAheadLotSize := xSendAheadLotSize;
      TmpProdOrderCapNeed.RESET;
      TmpProdOrderCapNeed.SETRANGE(Status,TmpProdOrderRtngLine.Status);
      TmpProdOrderCapNeed.SETRANGE("Prod. Order No.",TmpProdOrderRtngLine."Prod. Order No.");
      TmpProdOrderCapNeed.SETRANGE("Requested Only",FALSE);
      TmpProdOrderCapNeed.SETRANGE("Routing No.",TmpProdOrderRtngLine."Routing No.");
      TmpProdOrderCapNeed.SETRANGE("Routing Reference No.",TmpProdOrderRtngLine."Routing Reference No.");
      TmpProdOrderCapNeed.SETRANGE("Operation No.",TmpProdOrderRtngLine."Operation No.");
      IF TmpProdOrderCapNeed.FINDFIRST THEN BEGIN
      ProdOrderCapNeed2.COPY(TmpProdOrderCapNeed);
      TmpProdOrderCapNeed.DELETE;
      END;

      Result := Result OR GetSendAheadStartingTime(TmpProdOrderRtngLine,FALSE,SendAheadLotSize);
      TmpProdOrderCapNeed := ProdOrderCapNeed2;
      IF TmpProdOrderRtngLine."Operation No." = TmpProdOrderCapNeed."Operation No." THEN
      TmpProdOrderCapNeed.INSERT;

      IF ProdEndingDate > ProdStartingDate THEN BEGIN
      ProdEndingDate := ProdStartingDate;
      ProdEndingTime := ProdStartingTime;
      END ELSE
      IF (ProdEndingDate = ProdStartingDate) AND
      (ProdEndingTime > ProdStartingTime)
      THEN BEGIN
      ProdEndingTime := ProdStartingTime;
      END;

      UNTIL TmpProdOrderRtngLine.NEXT = 0;

      END ELSE BEGIN
      Result := GetSendAheadStartingTime(TmpProdOrderRtngLine,FALSE,SendAheadLotSize);
      END;
      EXIT(Result);
  3. Fügen Sie eine neue lokale Variable in der Funktion CalcRoutingLineForward in Codeunit Arbeitsgang berechnen (99000774), und geben Sie die Variable wie folgt:
    • Name: TmpProdOrderRtngLine
    • Datentyp: TEMPORÄRER Datensatz
    • Untertyp: Produkte. Bestellung an (5409)
  4. Fügen Sie eine neue lokale Variable in der Funktion CalcRoutingLineForward in Codeunit Arbeitsgang berechnen (99000774), und geben Sie die Variable wie folgt:
    • Name: TmpProdOrderCapNeed
    • Datentyp: TEMPORÄRER Datensatz
    • Untertyp: Produkte. Bestellen Kapazitäts müssen (5410)
  5. Ändern Sie den Code in der Funktion CalcRoutingLineForward in Codeunit Arbeitsgang berechnen (99000774) wie folgt:
    Vorhandener Code 1
    ...ProdOrderRoutingLine2.SETFILTER("Operation No.",ProdOrderRoutingLine."Previous Operation No.");

    IF ProdOrderRoutingLine2.FIND('-') THEN
    REPEAT
    TotalLotSize := 0;
    GetSendAheadEndingTime(ProdOrderRoutingLine2,TRUE,SendAheadLotSize);
    IF ProdStartingDate < ProdEndingDate THEN BEGIN
    ...
    Neuer Code 1
    ...ProdOrderRoutingLine2.SETFILTER("Operation No.",ProdOrderRoutingLine."Previous Operation No.");

    // Add the following lines.
    TmpProdOrderRtngLine.RESET;
    TmpProdOrderRtngLine.DELETEALL;
    TmpProdOrderCapNeed.RESET;
    TmpProdOrderCapNeed.DELETEALL;
    // End of the lines.

    IF ProdOrderRoutingLine2.FIND('-') THEN

    REPEAT
    TotalLotSize := 0;
    GetSendAheadEndingTime(ProdOrderRoutingLine2,TRUE,SendAheadLotSize);

    // Add the following lines.
    TmpProdOrderRtngLine.COPY(ProdOrderRoutingLine2);
    TmpProdOrderRtngLine.INSERT;
    TmpProdOrderCapNeed.COPY(ProdOrderCapNeed2);
    IF TmpProdOrderRtngLine."Operation No." = TmpProdOrderCapNeed."Operation No." THEN
    TmpProdOrderCapNeed.INSERT;
    // End of the lines.

    IF ProdStartingDate < ProdEndingDate THEN BEGIN
    ...
    Vorhandener Code 2
    ...ProdStartingTime := ProdOrderRoutingLine."Ending Time";

    // Delete the following line.
    UNTIL GetSendAheadEndingTime(ProdOrderRoutingLine3,FALSE,SendAheadLotSize);

    RemainNeedQty :=
    ...
    Neuer Code 2
    ...ProdStartingTime := ProdOrderRoutingLine."Ending Time";

    // Add the following line.
    UNTIL FindSendAheadEndingTime(TmpProdOrderRtngLine,TmpProdOrderCapNeed,SendAheadLotSize);

    RemainNeedQty :=
    ...
  6. Fügen Sie eine neue lokale Variable in der Funktion CalcRoutingLineBack in Codeunit Arbeitsgang berechnen (99000774), und geben Sie die Variable wie folgt:
    • Name: TmpProdOrderRtngLine
    • Datentyp: TEMPORÄRER Datensatz
    • Untertyp: Produkte. Bestellung an (5409)
  7. Fügen Sie eine neue lokale Variable in der Funktion CalcRoutingLineBack in Codeunit Arbeitsgang berechnen (99000774), und geben Sie die Variable wie folgt:
    • Name: TmpProdOrderCapNeed
    • Datentyp: TEMPORÄRER Datensatz
    • Untertyp: Produkte. Bestellen Kapazitäts müssen (5410)
  8. Ändern Sie den Code in der Funktion CalcRoutingLineBack in Codeunit Arbeitsgang berechnen (99000774) wie folgt:
    Vorhandener Code 1
    ...ProdOrderRoutingLine2.SETFILTER("Operation No.",ProdOrderRoutingLine."Next Operation No.");
    IF ProdOrderRoutingLine2.FIND('-') THEN
    REPEAT
    TotalLotSize := 0;
    GetSendAheadStartingTime(ProdOrderRoutingLine2,TRUE,SendAheadLotSize);
    IF ProdEndingDate > ProdStartingDate THEN BEGIN
    ...
    Neuer Code 1
    ...ProdOrderRoutingLine2.SETFILTER("Operation No.",ProdOrderRoutingLine."Next Operation No.");

    // Add the following lines.
    TmpProdOrderRtngLine.RESET;
    TmpProdOrderRtngLine.DELETEALL;
    TmpProdOrderCapNeed.RESET;
    TmpProdOrderCapNeed.DELETEALL;
    // End of the lines.

    IF ProdOrderRoutingLine2.FIND('-') THEN
    REPEAT
    TotalLotSize := 0;
    GetSendAheadStartingTime(ProdOrderRoutingLine2,TRUE,SendAheadLotSize);

    // Add the following lines.
    TmpProdOrderRtngLine.COPY(ProdOrderRoutingLine2);
    TmpProdOrderRtngLine.INSERT;
    TmpProdOrderCapNeed.COPY(ProdOrderCapNeed2);
    IF TmpProdOrderRtngLine."Operation No." = TmpProdOrderCapNeed."Operation No." THEN
    TmpProdOrderCapNeed.INSERT;
    // End of the lines.

    IF ProdEndingDate > ProdStartingDate THEN BEGIN
    ...
    Vorhandener Code 2
    ...ProdEndingTime := ProdOrderRoutingLine."Starting Time";

    // Delete the following line.
    UNTIL GetSendAheadStartingTime(ProdOrderRoutingLine3,FALSE,SendAheadLotSize);

    ProdEndingDate := ProdOrderRoutingLine."Starting Date";
    ...
    Neuer Code 2
    ...ProdEndingTime := ProdOrderRoutingLine."Starting Time";

    // Add the following line.
    UNTIL FindSendAheadStartingTime(TmpProdOrderRtngLine,TmpProdOrderCapNeed,SendAheadLotSize);

    ProdEndingDate := ProdOrderRoutingLine."Starting Date";
    ...
Verwenden der Planungsfunktion folgendermaßen Sie für Code ändert Teil 1
  1. Erstellen Sie eine neue FindSendAheadEndingTime -Funktion in der Planungszeile berechnen Route Codeunit (99000810). Um diese Funktion zu erstellen, gehen Sie folgendermaßen vor:
    1. Fügen Sie eine neue lokale Variable in der Funktion FindSendAheadEndingTime in der Planungszeile berechnen Route Codeunit (99000810), und geben Sie die Variable wie folgt:
      • Name: Ergebnis
      • Datentyp: Boolean
    2. Fügen Sie eine neue lokale Variable in der Funktion FindSendAheadEndingTime in der Planungszeile berechnen Route Codeunit (99000810), und geben Sie die Variable wie folgt:
      • Name: xTotalLotSize
      • Datentyp: Dezimalzahl
    3. Fügen Sie eine neue lokale Variable in der Funktion FindSendAheadEndingTime in der Planungszeile berechnen Route Codeunit (99000810), und geben Sie die Variable wie folgt:
      • Name: xSendAheadLotSize
      • Datentyp: Dezimalzahl
    4. Fügen Sie den folgenden Code in der Funktion FindSendAheadEndingTime :
      LOCAL PROCEDURE FindSendAheadEndingTime@23(VAR TmpPlanRtngLine@1000 : Record 99000830;VAR TmpProdOrderCapNeed@1001 : Record 5410;VAR SendAheadLotSize@1002 : Decimal) : Boolean;

      xTotalLotSize := TotalLotSize;
      xSendAheadLotSize := SendAheadLotSize;
      IF TmpPlanRtngLine.FINDSET THEN BEGIN
      REPEAT
      TotalLotSize := xTotalLotSize;
      SendAheadLotSize := xSendAheadLotSize;
      TmpProdOrderCapNeed.RESET;
      TmpProdOrderCapNeed.SETCURRENTKEY("Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Operation No.");
      TmpProdOrderCapNeed.SETRANGE("Worksheet Template Name",TmpPlanRtngLine."Worksheet Template Name");
      TmpProdOrderCapNeed.SETRANGE("Worksheet Batch Name",TmpPlanRtngLine."Worksheet Batch Name");
      TmpProdOrderCapNeed.SETRANGE("Worksheet Line No.",TmpPlanRtngLine."Worksheet Line No.");
      TmpProdOrderCapNeed.SETRANGE("Operation No.",TmpPlanRtngLine."Operation No.");
      IF TmpProdOrderCapNeed.FINDFIRST THEN BEGIN
      ProdOrderCapNeed2.COPY(TmpProdOrderCapNeed);
      TmpProdOrderCapNeed.DELETE;
      END;

      Result := Result OR GetSendAheadEndingTime(TmpPlanRtngLine,FALSE,SendAheadLotSize);
      TmpProdOrderCapNeed := ProdOrderCapNeed2;
      IF TmpPlanRtngLine."Operation No." = TmpProdOrderCapNeed."Operation No." THEN
      TmpProdOrderCapNeed.INSERT;

      IF ProdStartingDate < ProdEndingDate THEN BEGIN
      ProdStartingDate := ProdEndingDate;
      ProdStartingTime := ProdEndingTime;
      END ELSE
      IF (ProdStartingDate = ProdEndingDate) AND
      (ProdStartingTime < ProdEndingTime)
      THEN BEGIN
      ProdStartingTime := ProdEndingTime;
      END;
      UNTIL TmpPlanRtngLine.NEXT = 0;

      END ELSE BEGIN
      Result := GetSendAheadEndingTime(TmpPlanRtngLine,FALSE,SendAheadLotSize);
      END;
      EXIT(Result);
  2. Erstellen Sie eine neue FindSendAheadStartingTime -Funktion in der Planungszeile berechnen Route Codeunit (99000810) wie folgt:
    LOCAL PROCEDURE FindSendAheadStartingTime@27(VAR TmpPlanRtngLine@1000 : Record 99000830;VAR TmpProdOrderCapNeed@1001 : Record 5410;VAR SendAheadLotSize@1002 : Decimal) : Boolean;

    xTotalLotSize := TotalLotSize;
    xSendAheadLotSize := SendAheadLotSize;
    IF TmpPlanRtngLine.FINDSET THEN BEGIN
    REPEAT
    TotalLotSize := xTotalLotSize;
    SendAheadLotSize := xSendAheadLotSize;
    TmpProdOrderCapNeed.RESET;
    TmpProdOrderCapNeed.SETCURRENTKEY("Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Operation No.");
    TmpProdOrderCapNeed.SETRANGE("Worksheet Template Name",TmpPlanRtngLine."Worksheet Template Name");
    TmpProdOrderCapNeed.SETRANGE("Worksheet Batch Name",TmpPlanRtngLine."Worksheet Batch Name");
    TmpProdOrderCapNeed.SETRANGE("Worksheet Line No.",TmpPlanRtngLine."Worksheet Line No.");
    TmpProdOrderCapNeed.SETRANGE("Operation No.",TmpPlanRtngLine."Operation No.");
    IF TmpProdOrderCapNeed.FINDFIRST THEN BEGIN
    ProdOrderCapNeed2.COPY(TmpProdOrderCapNeed);
    TmpProdOrderCapNeed.DELETE;
    END;

    Result := Result OR GetSendAheadStartingTime(TmpPlanRtngLine,FALSE,SendAheadLotSize);
    TmpProdOrderCapNeed := ProdOrderCapNeed2;
    IF TmpPlanRtngLine."Operation No." = TmpProdOrderCapNeed."Operation No." THEN
    TmpProdOrderCapNeed.INSERT;

    IF ProdEndingDate > ProdStartingDate THEN BEGIN
    ProdEndingDate := ProdStartingDate;
    ProdEndingTime := ProdStartingTime;
    END ELSE
    IF (ProdEndingDate = ProdStartingDate) AND
    (ProdEndingTime > ProdStartingTime)
    THEN BEGIN
    ProdEndingTime := ProdStartingTime;
    END;

    UNTIL TmpPlanRtngLine.NEXT = 0;

    END ELSE BEGIN
    Result := GetSendAheadStartingTime(TmpPlanRtngLine,FALSE,SendAheadLotSize);
    END;
    EXIT(Result);
  3. Fügen Sie eine neue lokale Variable in der Funktion CalcRoutingLineForward in der Planungszeile berechnen Route Codeunit (99000810), und geben Sie die Variable wie folgt:
    • Name: TmpPlanRtngLine
    • Datentyp: TEMPORÄRER Datensatz
    • Untertyp: Planungsarbeitsgang (99000830)
  4. Fügen Sie eine neue lokale Variable in der Funktion CalcRoutingLineForward in der Planungszeile berechnen Route Codeunit (99000810), und geben Sie die Variable wie folgt:
    • Name: TmpProdOrderCapNeed
    • Datentyp: TEMPORÄRER Datensatz
    • Untertyp: Produkte. Bestellen Kapazitäts müssen (5410)
  5. Ändern Sie den Code in der Funktion CalcRoutingLineForward in der Planungszeile berechnen Route Codeunit (99000810) wie folgt:
    Vorhandener Code 1
    ...PlanningRoutingLine2.SETFILTER("Operation No.",PlanningRoutingLine."Previous Operation No.");
    IF PlanningRoutingLine2.FIND('-') THEN
    REPEAT
    GetSendAheadEndingTime(PlanningRoutingLine2,TRUE,SendAheadLotSize);

    IF ProdStartingDate < ProdEndingDate THEN BEGIN
    ...
    Neuer Code 1
    ...PlanningRoutingLine2.SETFILTER("Operation No.",PlanningRoutingLine."Previous Operation No.");

    // Add the following lines.
    TmpPlanRtngLine.RESET;
    TmpPlanRtngLine.DELETEALL;
    TmpProdOrderCapNeed.RESET;
    TmpProdOrderCapNeed.DELETEALL;
    // End of the lines.

    IF PlanningRoutingLine2.FIND('-') THEN
    REPEAT
    GetSendAheadEndingTime(PlanningRoutingLine2,TRUE,SendAheadLotSize);

    // Add the following lines.
    TmpPlanRtngLine.COPY(PlanningRoutingLine2);
    TmpPlanRtngLine.INSERT;
    TmpProdOrderCapNeed.COPY(ProdOrderCapNeed2);
    IF TmpPlanRtngLine."Operation No." = TmpProdOrderCapNeed."Operation No." THEN
    TmpProdOrderCapNeed.INSERT;
    // End of the lines.

    IF ProdStartingDate < ProdEndingDate THEN BEGIN
    ...
    Vorhandener Code 2
    ...ProdStartingTime := PlanningRoutingLine."Ending Time";

    // Delete the following line.
    UNTIL GetSendAheadEndingTime(PlanningRoutingLine3,FALSE,SendAheadLotSize);

    RemainNeedQty :=
    ...
    Neuer Code 2
    ...ProdStartingTime := PlanningRoutingLine."Ending Time";

    // Add the following line.
    UNTIL FindSendAheadEndingTime(TmpPlanRtngLine,TmpProdOrderCapNeed,SendAheadLotSize);

    RemainNeedQty :=
    ...
  6. Fügen Sie eine neue lokale Variable in der Funktion CalcRoutingLineBack in der Planungszeile berechnen Route Codeunit (99000810), und geben Sie die Variable wie folgt:
    • Name: TmpPlanRtngLine
    • Datentyp: TEMPORÄRER Datensatz
    • Untertyp: Planungsarbeitsgang (99000830)
  7. Fügen Sie eine neue lokale Variable in der Funktion CalcRoutingLineBack in der Planungszeile berechnen Route Codeunit (99000810), und geben Sie die Variable wie folgt:
    • Name: TmpProdOrderCapNeed
    • Datentyp: TEMPORÄRER Datensatz
    • Untertyp: Produkte. Bestellen Kapazitäts müssen (5410)
  8. Ändern Sie den Code in der Funktion CalcRoutingLineBack in der Planungszeile berechnen Route Codeunit (99000810) wie folgt:
    Vorhandener Code 1
    ...PlanningRoutingLine2.SETFILTER("Operation No.",PlanningRoutingLine."Next Operation No.");
    IF PlanningRoutingLine2.FIND('-') THEN
    REPEAT
    GetSendAheadStartingTime(PlanningRoutingLine2,TRUE,SendAheadLotSize);

    IF ProdEndingDate > ProdStartingDate THEN BEGIN
    ...
    Neuer Code 1
    ...PlanningRoutingLine2.SETFILTER("Operation No.",PlanningRoutingLine."Next Operation No.");

    // Add the following lines.
    TmpPlanRtngLine.RESET;
    TmpPlanRtngLine.DELETEALL;
    TmpProdOrderCapNeed.RESET;
    TmpProdOrderCapNeed.DELETEALL;
    // End of the lines.

    IF PlanningRoutingLine2.FIND('-') THEN
    REPEAT
    GetSendAheadStartingTime(PlanningRoutingLine2,TRUE,SendAheadLotSize);

    // Add the following lines.
    TmpPlanRtngLine.COPY(PlanningRoutingLine2);
    TmpPlanRtngLine.INSERT;
    TmpProdOrderCapNeed.COPY(ProdOrderCapNeed2);
    IF TmpPlanRtngLine."Operation No." = TmpProdOrderCapNeed."Operation No." THEN
    TmpProdOrderCapNeed.INSERT;
    // End of the lines.

    IF ProdEndingDate > ProdStartingDate THEN BEGIN
    ...
    Vorhandener Code 2
    ...ProdEndingTime := PlanningRoutingLine."Starting Time";

    // Delete the following line.
    UNTIL GetSendAheadStartingTime(PlanningRoutingLine3,FALSE,SendAheadLotSize);

    ProdEndingDate := PlanningRoutingLine."Starting Date";
    ...
    Neuer Code 2
    ...ProdEndingTime := PlanningRoutingLine."Starting Time";

    // Add the following line.
    UNTIL FindSendAheadStartingTime(TmpPlanRtngLine,TmpProdOrderCapNeed,SendAheadLotSize);

    ProdEndingDate := PlanningRoutingLine."Starting Date";
    ...
Code ändert Teil 2
  1. Ändern Sie den Code in der Funktion GetSendAheadStartingTime in Codeunit Arbeitsgang berechnen (99000774) wie folgt:
    Vorhandener code
    ...ProdOrderCapNeed2.RESET;
    ProdOrderCapNeed2.SETRANGE(Status,Status);
    ProdOrderCapNeed2.SETRANGE("Prod. Order No.","Prod. Order No.");
    ProdOrderCapNeed2.SETRANGE("Requested Only",FALSE);
    ProdOrderCapNeed2.SETRANGE("Routing No.","Routing No.");
    ProdOrderCapNeed2.SETRANGE("Routing Reference No.","Routing Reference No.");
    ProdOrderCapNeed2.SETRANGE("Operation No.","Operation No.");

    // Delete the following line.
    ProdOrderCapNeed2.ASCENDING(FALSE);

    IF NOT ProdOrderCapNeed2.FIND('+') THEN BEGIN
    ...
    Neuer code
    ...ProdOrderCapNeed2.RESET;

    // Add the following line.
    ProdOrderCapNeed2.SETCURRENTKEY(Status,"Prod. Order No.","Routing Reference No.","Operation No.",Date,"Starting Time");

    ProdOrderCapNeed2.SETRANGE(Status,Status);
    ProdOrderCapNeed2.SETRANGE("Prod. Order No.","Prod. Order No.");
    ProdOrderCapNeed2.SETRANGE("Requested Only",FALSE);
    ProdOrderCapNeed2.SETRANGE("Routing No.","Routing No.");
    ProdOrderCapNeed2.SETRANGE("Routing Reference No.","Routing Reference No.");
    ProdOrderCapNeed2.SETRANGE("Operation No.","Operation No.");

    IF NOT ProdOrderCapNeed2.FIND('+') THEN BEGIN
    ...
  2. Ändern Sie den Code in der Funktion GetSendAheadEndingTime in Codeunit Arbeitsgang berechnen (99000774) wie folgt:
    Vorhandener code
    ...ProdOrderCapNeed2.RESET;
    ProdOrderCapNeed2.SETRANGE(Status,Status);
    ...
    Neuer code
    ...ProdOrderCapNeed2.RESET;

    // Add the following line.
    ProdOrderCapNeed2.SETCURRENTKEY(Status,"Prod. Order No.","Routing Reference No.","Operation No.",Date,"Starting Time");

    ProdOrderCapNeed2.SETRANGE(Status,Status);
    ...
  3. Ändern Sie den Code in der Funktion FindSendAheadEndingTime in Codeunit Arbeitsgang berechnen (99000774) wie folgt:
    Vorhandener code
    ...TmpProdOrderCapNeed.RESET;
    TmpProdOrderCapNeed.SETRANGE(Status,TmpProdOrderRtngLine.Status);
    ...
    Neuer code
    ...TmpProdOrderCapNeed.RESET;

    // Add the following line.
    TmpProdOrderCapNeed.SETCURRENTKEY(Status,"Prod. Order No.","Routing Reference No.","Operation No.",Date,"Starting Time");

    TmpProdOrderCapNeed.SETRANGE(Status,TmpProdOrderRtngLine.Status);
    ...
  4. Ändern Sie den Code in der Funktion FindSendAheadStartingTime in Codeunit Arbeitsgang berechnen (99000774) wie folgt:
    Vorhandener code
    ...TmpProdOrderCapNeed.RESET;

    // Delete the following line.
    TmpProdOrderCapNeed.ASCENDING(FALSE);

    TmpProdOrderCapNeed.SETRANGE(Status,TmpProdOrderRtngLine.Status);
    ...
    Neuer code
    ...TmpProdOrderCapNeed.RESET;

    // Add the following line.
    TmpProdOrderCapNeed.SETCURRENTKEY(Status,"Prod. Order No.","Routing Reference No.","Operation No.",Date,"Starting Time");
    TmpProdOrderCapNeed.SETRANGE(Status,TmpProdOrderRtngLine.Status);
    ...
  5. Ändern Sie den Code in der Funktion GetSendAheadStartingTime in der Planungszeile berechnen Route Codeunit (99000810) wie folgt:
    Vorhandener code
    ...ProdOrderCapNeed2.SETCURRENTKEY(

    // Delete the following line.
    "Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Operation No.");

    ProdOrderCapNeed2.SETRANGE("Worksheet Template Name","Worksheet Template Name");
    ProdOrderCapNeed2.SETRANGE("Worksheet Batch Name","Worksheet Batch Name");
    ProdOrderCapNeed2.SETRANGE("Worksheet Line No.","Worksheet Line No.");
    ProdOrderCapNeed2.SETRANGE("Operation No.","Operation No.");

    // Delete the following line.
    ProdOrderCapNeed2.ASCENDING(FALSE);

    IF NOT ProdOrderCapNeed2.FIND('+') THEN BEGIN
    ...
    Neuer code
    ...ProdOrderCapNeed2.SETCURRENTKEY(

    // Add the following line.
    "Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Operation No.",Date);

    ProdOrderCapNeed2.SETRANGE("Worksheet Template Name","Worksheet Template Name");
    ProdOrderCapNeed2.SETRANGE("Worksheet Batch Name","Worksheet Batch Name");
    ProdOrderCapNeed2.SETRANGE("Worksheet Line No.","Worksheet Line No.");
    ProdOrderCapNeed2.SETRANGE("Operation No.","Operation No.");
    IF NOT ProdOrderCapNeed2.FIND('+') THEN BEGIN
    ...
  6. Ändern Sie den Code in der Funktion GetSendAheadEndingTime in der Planungszeile berechnen Route Codeunit (99000810) wie folgt:
    Vorhandener code
    ...ProdOrderCapNeed2.SETCURRENTKEY(

    // Delete the following line.
    "Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Operation No.");

    ProdOrderCapNeed2.SETRANGE("Worksheet Template Name","Worksheet Template Name");
    ...
    Neuer code
    ...ProdOrderCapNeed2.SETCURRENTKEY(

    // Add the following line.
    "Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Operation No.",Date);

    ProdOrderCapNeed2.SETRANGE("Worksheet Template Name","Worksheet Template Name");
    ...
  7. Ändern Sie den Code in der Funktion FindSendAheadEndingTime in der Planungszeile berechnen Route Codeunit (99000810) wie folgt:
    Vorhandener code
    ...TmpProdOrderCapNeed.RESET;

    // Delete the following line.
    TmpProdOrderCapNeed.SETCURRENTKEY("Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Operation No.");

    TmpProdOrderCapNeed.SETRANGE("Worksheet Template Name",TmpPlanRtngLine."Worksheet Template Name");
    ...
    Neuer code
    ...TmpProdOrderCapNeed.RESET;

    // Add the following line.
    TmpProdOrderCapNeed.SETCURRENTKEY("Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Operation No.",Date);

    TmpProdOrderCapNeed.SETRANGE("Worksheet Template Name",TmpPlanRtngLine."Worksheet Template Name");
    ...
  8. Ändern Sie den Code in der Funktion FindSendAheadStartingTime in der Planungszeile berechnen Route Codeunit (99000810) wie folgt:
    Vorhandener code
    ...TmpProdOrderCapNeed.RESET;

    // Delete the following lines.
    TmpProdOrderCapNeed.ASCENDING(FALSE);
    TmpProdOrderCapNeed.SETCURRENTKEY("Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Operation No.");
    // End of the lines.

    TmpProdOrderCapNeed.SETRANGE("Worksheet Template Name",TmpPlanRtngLine."Worksheet Template Name");
    ...
    Neuer code
    ...TmpProdOrderCapNeed.RESET;

    // Add the following line.
    TmpProdOrderCapNeed.SETCURRENTKEY("Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Operation No.",Date);

    TmpProdOrderCapNeed.SETRANGE("Worksheet Template Name",TmpPlanRtngLine."Worksheet Template Name");
    ...

Voraussetzungen

Sie müssen Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1) installiert, um diesen Hotfix anwenden.

Informationen zur Deinstallation

Dieser Hotfix kann nicht entfernt werden.

Status


Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.
Hinweis Dies ist ein im Schnellverfahren veröffentlichter Artikel, der direkt in der Microsoft Support-Organisation erstellt wurde. Die hierin enthaltenen Informationen werden ohne Mängelgewähr in Reaktion auf neue Probleme bereitgestellt. Aufgrund der schnellen Bereitstellung kann das Material möglicherweise typografische Fehler enthalten und jederzeit ohne vorherige Ankündigung geändert werden. Weitere Hinweise finden Sie unter Geschäftsbedingungen .