[Gelöst]Lagerregulierung

27. Dezember 2011 16:14

Standartfunktion in Codeunit 5895 Inventory Adjustment

Die Lagerregulierung führt für jeden Artikel der einer Regulierung bedarf (Cost is Adjusted, false) die Funktion:

Code:
 CopyItemToItem(VAR FromItem : Record Item;VAR ToItem : Record Item)
WITH ToItem DO BEGIN
  RESET;
  DELETEALL;
  IF FromItem.FIND('-') THEN
    REPEAT
      ToItem := FromItem;
      INSERT;
    UNTIL FromItem.NEXT = 0;
END;

Irgendwie habe ich ein Brett vorm Kopf, aber mir erschliesst sich der Sinn nicht, Alle Filter der Tabelle Item werden aufgelöst und alle Artikel werden gelöscht um Sie dann aus der Tabelle FromItem wieder zu kopieren.

Vielleicht hat jemand eine Tip, warum die Lagerregulierung diese Funktion ausführt oder was damit bezweckt werden soll.

Danke schonmal im Voraus
Zuletzt geändert von Torsten K. am 27. Dezember 2011 16:53, insgesamt 1-mal geändert.

Re: Lagerregulierung

27. Dezember 2011 16:26

Torsten K. hat geschrieben: Alle Filter der Tabelle Item werden aufgelöst und alle Artikel werden gelöscht um Sie dann aus der Tabelle FromItem wieder zu kopieren.

Das Ganze macht durchaus Sinn, wenn man sich vor Augen hält, dass ToItem eine temporäre Record-Variable ist (Achtung, die Deklaration als temporär findet offensichtlich außerhalb dieser Funktion statt).

Diese Funktion kann durchaus von vielen anderen Stellen aus aufgerufen werden, und da ist es durchaus notwendig, den Zielort erst einmal zu "säubern" bevor neue Daten eingelesen werden.

Re: Lagerregulierung

27. Dezember 2011 16:37

Hallo Natalie,

deine Erklärung ist schon plausibel, dort würde sich dann die Lagerregulierung eine Tabelle aufbauen, welche alle Artikel enthält, die eine Regulierung brauchen.
Ich habe nur nirgendwo gesehen, das der Record ToItem temporär deklariert ist :(.

Falls du Lust hast, kannst du mir noch verraten, warum der Record ToItem temporär ist?




Danke schonmal für deine Hilfe.



Gruß aus Hannover

Re: Lagerregulierung

27. Dezember 2011 16:43

Torsten K. hat geschrieben:Ich habe nur nirgendwo gesehen, das der Record ToItem temporär deklariert ist :(.

Schhau mal, wo diese Funktion aufgerufen wird und überprüfe dort die Deklaration der zweiten Parameter-Variable.
Irgendwo MUSS sie temporär sein. Wenn sie es beim Aufruf nicht ist, dann irgendwo, dort, wo die Funktion aufgerufen wird, die diese Funktion aufruft, usw. ;-)

Und da bin ich mir sehr, sehr sicher. Denn ansonsten ergäbe das hier
Code:
RESET;
DELETEALL;

einen Super-GAU.

Falls du Lust hast, kannst du mir noch verraten, warum der Record ToItem temporär ist?

Ich bin nicht Entwickler dieser Funktion und darüber hinaus kein Kenner der Inventur-Funktion ;-)

Re: Lagerregulierung

27. Dezember 2011 16:49

Natalie hat geschrieben:Und da bin ich mir sehr, sehr sicher. Denn ansonsten wäre ergäbe das hier
Code:
RESET;
DELETEALL;

einen Super-GAU.


Ok dann haben wir das Gleiche gedacht:wink:.


Allen noch einen angenehmen Rutsch und einen guten Start für das Jahr 2012.

Re: [Gelöst]Lagerregulierung

27. Dezember 2011 18:20

Falls du Lust hast, kannst du mir noch verraten, warum der Record ToItem temporär ist?


Nun ganz einfach: du füllst eine Tabelle mit allen Datensätzen, die du bearbeiten musst. Da musst du nichts filtern, oder markieren und aufpassen, das immer der richtige Record benutzt wird (bei MarkedOnly). Diese Tabelle kannst du dann ganz einfach abarbeiten:
Code:
TempTable.Reset;
if TempTable.Findset then
  repeat
      TuWas(TempTable);
  until (TempTable.next=0);


Gruß, Fiddi

Re: [Gelöst]Lagerregulierung

28. Dezember 2011 10:55

Hallo Fiddi, das Händling und die Anwendungsmöglichkeiten von TempRecords sind schon klar.

Innerhalb der Funktion CopyItemToItem sind allerdings beide Records nicht temporär deklariert, daher wurde der Record ToItem irgendwo vorher temporär deklariert und dieses "irgendwo vorher" habe ich halt nicht gefunden :cry: .


Aber trotzdem Danke für deine Hilfe.

Re: [Gelöst]Lagerregulierung

28. Dezember 2011 11:12

Die Funktion wird von der Funktion InvtToAdjustExist aufgerufen, diese wiederum von der Funktion MakeMultiLevelAdjmt. Dort ist TempItem temporär definiert.