[Gelöst] FA beenden ohne Istmeldung

23. Mai 2007 13:37

Hallo miteinander,

wir haben häufiger den Fall, das freigegebene Fertigungsaufträge hinfällig werden, da z.B. der Kunde einen Auftrag nachträglich storniert hat. Bei bereits erfolgten Materialentnahmen ist die Löschung der Produktion nicht mehr möglich - was wir auch für korrekt halten. Also buchen wir die Materialentnahmen (Verbräuche) zurück. Bis hier hin ist alles O.K.

Nun wollen wir jedoch den Status der Produktion auf "Beendet" setzen, da keine Istmeldung vorgesehen ist und auch alle Verbräuche rückgängig gemacht wurden.
Dies ist jedoch nur möglich, nachdem wir mindestens 1 Stck. als Istmeldung gebucht haben. Anschließend müssen wir dann notgedrungen eine Korrekturbuchung über minus 1 Stck. durchführen um den Lagerbestand wieder auszugleichen.

Bevor ich mich hier mit dem entsprechenden Code beschäftige, wollte ich mal fragen, ob und an welcher Stelle dieses Problem schon mal jemand gelöst hat; bzw. ob man dieses Problem anderweitig umgehen kann.

Gruß
Ralf
Zuletzt geändert von neckit am 25. Mai 2007 10:18, insgesamt 1-mal geändert.

23. Mai 2007 13:40

Wir machen das genauso wie ihr...auch ich wäre an einer anderen Lösung interessiert.

24. Mai 2007 11:07

Nachdem ich den Code mal ein wenig verfolgt habe, bin ich zu folgender Lösung meines Problems gekommen:

Innerhalb der Codeunit 5407 (Prod. Order Status Management); in der Funktion "ChangeStatusOnProdOrder" habe ich den Funktionsaufruf "ErrorIfUnableToClearWIP" durch den enstprechend gekennzeichneten eigenen Code ersetzt.

Code:
IF NewStatus = NewStatus::Finished THEN BEGIN
  CheckBeforeFinishProdOrder(ProdOrder);
  FlushProdOrder(ProdOrder,NewStatus,NewPostingDate);

  // Eigener Code - 25.05.07 - H_RM ++++++++++++++++++++
  {
  ErrorIfUnableToClearWIP(ProdOrder);
  }
  ProdLineLocal.SETRANGE(Status,ProdOrder.Status);
  ProdLineLocal.SETRANGE("Prod. Order No.",ProdOrder."No.");
  IF ProdLineLocal.FINDSET THEN
    REPEAT
      IF NOT OutputExists(ProdLineLocal) THEN BEGIN
        ProdCompLocal.SETRANGE(Status,ProdLineLocal.Status);
        ProdCompLocal.SETRANGE("Prod. Order No.",ProdLineLocal."Prod. Order No.");
        ProdCompLocal.SETRANGE("Prod. Order Line No.",ProdLineLocal."Line No.");
        IF ProdCompLocal.FINDSET THEN
        REPEAT
        // Produktionen mit Abweichungen zwischen "Erw. Menge" und "Restmenge" (also Verbrauchssumme <> 0) nicht auf beendet setzen!
          IF ProdCompLocal."Expected Quantity" <> ProdCompLocal."Remaining Quantity" THEN
            ERROR(Text009,ProdLineLocal."Line No.",ToProdOrder.TABLECAPTION,ProdLineLocal."Prod. Order No.");
        UNTIL ProdCompLocal.NEXT = 0;
      END;
    UNTIL ProdLineLocal.NEXT = 0;
  // EigenerCode - 25.05.07 - H_RM ---------------------------------------------

  TransProdOrder(ProdOrder);


Produktionen, bei denen die Summe der einzelnen Komponenten-Verbräuche = 0 ist lassen sich nun auf Status "Beendet" setzen, ohne das eine Istmeldung erfolgen muß.
Auch die "Lagerregul. fakt. Einst.-Preise" scheint korrekt zu laufen.
Es sieht soweit alle korrekt aus.

Pegasus - kannst Du vielleicht auch noch mal testen, ob Dir irgendwas auffällt, was ich nicht bedacht haben könnte. Z.B. führen wir derzeit keine "Lagerregulierung buchen" durch und haben auch noch keine "Datumskomprimierung" der "Stücklistenposten" ausgeführt.
Nicht das uns da womöglich irgendwo etwas "überholt".

Vielleicht kann uns auch jemand aus dem Forum noch Tips geben, was wir noch kontrollieren sollten?! :!:

Gruß
Ralf
Zuletzt geändert von neckit am 25. Mai 2007 10:14, insgesamt 1-mal geändert.

24. Mai 2007 11:25

ohoh.....ich setze die version 3.7 ein und habe den befehl "findset" nicht...
(was macht der genau? kann ich den ersetzen?)

wäre ja schön wenn ich diesen Programmcode in version 3.7 auch einsetzen könnte..... das mit der "Lagerregulierung buchen" muss ich mal bei uns nachfragen....kann nämlich sein das wir das auch nciht machen...da informiere ich mich aber mal

24. Mai 2007 11:29

Hallo Pegasus,

statt FINDSET kannst duch auch folgende Funktion verwenden:

IF ProdLineLocal.FIND('-') THEN ....

Gruß
Ralf

24. Mai 2007 14:25

Also ich habe bei uns mal nachgeforscht. Bei dem Verbrauch buchen erzeugst du ja Wertposten. Und die sind später wichtig für "Lagerregulierung buchen"

Aber da bei einer Rückgabe ja auch ein entsprechender negativer Wertposten
erzeugt wird dürfte bei dieser Funktion auch alles unkritisch sein....

25. Mai 2007 10:17

ACHTUNG!

Ich habe oben den Code noch etwas angepasst, so dass die Prüfung nur bei Produktionen ohne Istmeldung durchlaufen wird, da sonst auch reguläre Produktion betroffen wären.

Ansonsten kann ich jetzt keinen Fehler mehr finden und setze das Thema damit mal auf [gelöst].

Gruß
Ralf