[GELÖST] Fert.StüLi: Fehler beim Setzen Status:Zertifiziert

27. Mai 2014 14:50

Hallo Zusammen,

für folgendes Problem benötige ich eure Unterstützung.
Beim Statusändern eines Fert.-Auftrag erhalte ich folgende Fehlermeldung:

"Die max. Ebene in der Stückl.-Struktur darf nicht größer als 50 sein. Aktuelle Artiklnr. . Letzte Stückl.-Kopfnr. F100 Ebene 25."

Mir ist klar, was mir NAV damit sagen will ;-) aber ich bekomme es einfach nicht, diesen Fehler zu beheben.
Bin mir unsicher, ob es an einem Verständnis- oder/und Handlingproblem liegt. Seht selbst..

Was wollte ich umsetzen:
Artikel A100 mit Artikelstückliste S100 soll eine Fert.Stückliste F100 hinterlegt bekommen, welche in den Fert.-Komponenten, die Artikel auflistet, die hinter der Art.-Stückliste S100 stecken. Da diese teilweise noch produziert werden müssen bzw. ein Arbeitsplan (ist beim Artikel A100 auch hinterlegt) noch mit einkalkuliert werden muss.

Meine Eingabe:
Fert.Stückliste F100 neu erstellt
als Komponent habe ich nur A100 angegeben

Überprüfung:
Fert.Stückliste F100
Komponente --> Verwendung: A100 wird angezeigt
Stückliste --> Verwendung: F100

Will ich hier den Status von "in Entwicklung" auf "Zertifiziert" umstellen, erhalte ich die oben genannte Fehlermeldung.

Google half mir soweit, dass ich herausgefunden habe, dass MS für NAV 2009 für diesen Fehler einen Hotfix anbietet:
http://support.microsoft.com/kb/2589758/de

Wir nutzen Nav 4.0 und daher habe ich testweise versucht den Hotfix manuell in die Codeunit 99000793 einzubauen. Hat aber leider nichts geholfen, Fehler bleibt trotzdem.

Funktion CalcLevels:
Code:
REPEAT
  IF ProdBOMHeader.GET(ProdBomComponent."Production BOM No.") THEN
    IF ProdBomComponent."Version Code" <> '' THEN BEGIN
      ProductionBOMVersion.GET(ProdBomComponent."Production BOM No.",ProdBomComponent."Version Code");
      CalculateDeeperLevel := ProductionBOMVersion.Status = ProductionBOMVersion.Status::Certified;
    END ELSE
      CalculateDeeperLevel := ProdBOMHeader.Status = ProdBOMHeader.Status::Certified;

    IF CalculateDeeperLevel THEN BEGIN
      ProdBOMHeader."Low-Level Code" :=
      CalcLevels(Type::"Production BOM",ProdBomComponent."Production BOM No.",Level,LevelDepth + 1) - Level;

    ActLevel := ProdBOMHeader."Low-Level Code" + Level;
    IF ActLevel > TotalLevels THEN
      TotalLevels := ActLevel;
    END;
UNTIL ProdBomComponent.NEXT = 0;


bzw. Funktion RecalcLowerLevels:
Code:
IF ProdBOMComponent.FIND('-') THEN
  REPEAT
    IF ProdBOMComponent."Version Code" <> '' THEN BEGIN
    ProductionBOMVersion.GET(ProdBOMComponent."Production BOM No.",ProdBOMComponent."Version Code");
    CalculateDeeperLevel := ProductionBOMVersion.Status <> ProductionBOMVersion.Status::Closed;
    END ELSE BEGIN
    ProdBOMHeader.GET(ProdBOMComponent."Production BOM No.");
    CalculateDeeperLevel := ProdBOMHeader.Status <> ProdBOMHeader.Status::Closed;
    END;

    CASE ProdBOMComponent.Type OF
      ProdBOMComponent.Type::Item:
        BEGIN
          CompItem.GET(ProdBOMComponent."No.");
          IF (CompItem."Low-Level Code" - 1) <> LowLevelCode THEN BEGIN
            xLowLevelCode := CompItem."Low-Level Code";
            CompItem."Low-Level Code" :=
              CalcLevels(ProdBOMComponent.Type::Item,ProdBOMComponent."No.",0,0);
            IF CompItem."Low-Level Code" <> xLowLevelCode THEN BEGIN
              CompItem.MODIFY;
              RecalcLowerLevels(CompItem."Production BOM No.",CompItem."Low-Level Code");
            END;
          END;
        END;
      ProdBOMComponent.Type::"Production BOM":
        BEGIN
          ProdBOMHeader.GET(ProdBOMComponent."No.");
          IF (ProdBOMHeader."Low-Level Code" - 1) <> LowLevelCode THEN BEGIN
            xLowLevelCode := ProdBOMHeader."Low-Level Code";
            ProdBOMHeader."Low-Level Code" :=
              CalcLevels(ProdBOMComponent.Type::"Production BOM",ProdBOMComponent."No.",0,0);
            IF ProdBOMHeader."Low-Level Code" <> xLowLevelCode THEN BEGIN
              ProdBOMHeader.MODIFY;
              RecalcLowerLevels(ProdBOMHeader."No.",ProdBOMHeader."Low-Level Code" - 1);
            END;
          END;
        END;
    END;
  UNTIL ProdBOMComponent.NEXT = 0;


Wenn das zu wenig Codeschnipsel sein sollte, gebt mir bitte Bescheid.

Keine Sorge, bin hier nicht im Echt System. Habe alles in der Test eingegeben, geändert, getestet usw.

Der Stand jetzt ist der, dass ich die Codeunit 99000793 wieder auf den Orginalstand (ohne Hotfix) gesetzt habe.

Würde mich sehr freuen, wenn ihr mir weiter helfen könnt.

Merci,
vG AlphaWeibchen
Zuletzt geändert von AlphaWeibchen am 27. Mai 2014 16:40, insgesamt 1-mal geändert.

Re: Fert.Stückliste: Fehler beim Setzen Status:Zertifiziert

27. Mai 2014 15:10

Ich bin mir nicht ganz sicher, welche Unterscheidung du zwischen "Artikelstückliste" (bzw. "Art.-Stückliste") und "Fertigungsstückliste" machst. Aber wenn ich das hier richtig verstehe:
AlphaWeibchen hat geschrieben:Fert.Stückliste F100Komponente --> Verwendung: A100 wird angezeigtStückliste --> Verwendung: F100

heißt das Folgendes:
in der Fertigungsstückliste F100 steht als Komponente der Artikel A100, dem wiederum die Fertigungsstückliste F100 hinterlegt wurde?

Re: Fert.Stückliste: Fehler beim Setzen Status:Zertifiziert

27. Mai 2014 15:32

Hmm, ja. :oops: Das erklärt die Endlosschleife bzw. die Fehlermeldung.

Eigentlich war ich mir sicher im Unterschied zw. Artikel- bzw. Fert.Stückliste. Scheine mich aber ja geirrt zu haben.

Bsp. Artikel ist eine Uhr
Artikelstückliste (ist für den Verkauf): Uhr, Zertifikat, Box

Fertigungstückliste Komponente (ist für die Produktion): Band, Werk, Ziffernblatt etc (mehrere Ebenen, da der Artikel Ziffernblatt ebenfalls eine Fert.Stückliste sein kann etc).

Sehe ich das jetzt falsch?

Re: Fert.Stückliste: Fehler beim Setzen Status:Zertifiziert

27. Mai 2014 15:56

Nein, siehst du richtig. Ich war mir bloß unsicher, weil man sich so schnell damit vertun kann und wollte sichergehen, dass du nicht aus Versehen doch dasselbe meintest :)

AlphaWeibchen hat geschrieben:Bsp. Artikel ist eine Uhr Artikelstückliste (ist für den Verkauf): Uhr, Zertifikat, Box

In den Stücklisten der Artikelkarte funktioniert es, dass die StüLi eines Artikels den Artikel selbst enthält. In den Fertigungsstücklisten jedoch nicht, da man je nach Ebene zur Produktion des Artikels XY früher oder später den Artikel XY benötigen würde. Und das ergibt selten einen Sinn.

Re: Fert.Stückliste: Fehler beim Setzen Status:Zertifiziert

27. Mai 2014 16:39

hach, herzlichen Dank. Ich bin erleichert und in der Stimmung einen Purzelbaum zu schlagen. :-)

Die Frage klingt jetzt vielleicht etwas eigenartig. Aber ich würde mich gerne etwas mehr schlau machen, was die Artikelstückliste betrifft.

Ich habe hier div. (Kurs-)Unterlagen von Microsoft vorliegen, aber ich finde keine Stelle wo die Aritikelstückliste näher erklärt wird. In meinem Kopf kreisen doch noch ein, zwei Fragen. Hätte dies zur Artikelkarte (Lager) sortiert, aber dort taucht nichts dazu auf.
Würde gerne erfahren, welche "Freiheiten" ich bei der Eingabe der StüLi eines Artikels habe. Das Bsp. mit der Uhr ist sehr simpel. Wenn ich das Versuche in die Praxis umzudenken, wären das meistens doch Set-Artikel (die dann detailiert in der Artikel StüLi angezeigt werden)?
Oder anders gesagt, in der Art. StüLi werden keine Komponenten auftauchen, die eine Weiterverarbeitung benötigen. Um nochmal die Uhr zu nehmen.
In der Komponentenliste taucht kein Werk, Band, Box, Zertifikat auf, da noch das Uhrwerk und das Band miteinander verbaut werden muss. Somit wieder Arbeitsaufwand dazu kommt und das gehört schon in die Sparte Fertigungstückliste.

Da der Ursprungsfehler sich erledigt hat, setzte ich diesen Thread auf gelöst.

vG
AlphaWeibchen

Re: [GELÖST] Fert.StüLi: Fehler beim Setzen Status:Zertifizi

28. Mai 2014 07:19

So in etwa interpretiere ich das auch. Hier bei mir benutzen wir Artikel mit hinterlegten Stücklisten quasi als Platzhalter für Angebote, deren tatsächlicher Lieferumfang dann erst im Auftrag entfaltet wird.