Gelöst Lagerplatzzuordnung bei Handelsstücklisten

Arne Drews

Mitglied
Moin,

Ich weise über eine DCM Belegpositionen einen definierten Lagerplatz auf Basis bestimmter Kriterien zu.
Das klappt problemlos für Standard-Artikel mit
C#:
position.SetLagerplatz(12345, "DUMMY01;0;0;0");

Bei Handelsstücklisten muss ich allerdings über die Stückliste der Position gehen, wo es dann für die BelegStueckliste-Objekte keine Methode SetLagerplatz() gibt.
Mein Weg sieht aktuell so aus:
C#:
foreach (BelegStueckliste element in position.Stueckliste)
{
    decimal gesamt = element.MengeBasis * position.Menge;

    element.Lagerplatz.Clear();
    element.Lagerplatz.Add(new LagerPosition { PlatzHandle = 12345, Kurzbezeichnung = "DUMMY01;0;0;0", Menge = gesamt });
}

Die Kenner werden sicher schon sehen, dass das nicht funktioniert.
Welchen Weg muss ich an der Stelle gehen? Ich möchte jedem einzelnen Element der Stückliste einen separaten Lagerplatz zuweisen können.

Danke für Info
 
Ich würde zunächst jeweils eine neue "LagerPositionCollection()" initialisieren und dann den Lagerplatz hinzufügen.
Die "MengeBasis" entspricht schon der Gesamtmenge (Menge * MengeFaktor), muss also nicht multipliziert werden.
Zudem sollte geprüft werden, ob der Artikel überhaupt lagerführend ist.

Sollte dann so aussehen:

C#:
foreach (BelegStueckliste element in position.Stueckliste)
{
    if (element.HatLagerfuehrung)
    {
        element.Lagerplatz = new LagerPositionCollection();
        element.Lagerplatz.Add(new LagerPosition { PlatzHandle = 12345, Kurzbezeichnung = "DUMMY01;0;0;0", Menge = element.MengeBasis, MengeBasis = element.MengeBasis });
    }
}

Ein Element könnte ebenfalls wieder eine Stückliste sein, von daher sollte noch der Stücklistentyp geprüft werden und die Funktion dann rekursiv aufgerufen werden.
 
Hi, danke für Deinen Vorschlag und die Hinweise.

Sowohl die Lagerführung, als auch die Rekursion habe ich mir bewusst gespart, weil wir aus anderen Gründen dafür sorgen. dass wir nie eine HS innerhalb einer HS haben. Bei uns sind alle Elemente einer HS lagerführend.

Den Hinweis mit der Menge schaue ich mir nochmal an, hatte ich anders in Erinnerung, ist nur heut zu spät, mache ich morgen ;)

Am Ende muss ich allerdings trotzdem die Methode SetLagerplatzzuordnung() in jedem Durchlauf einmal ausführen, damit die BelegPosition von den Anpassungen mitbekommt.

Danke für Deinen Beitrag
:)
 
Am Ende muss ich allerdings trotzdem die Methode SetLagerplatzzuordnung() in jedem Durchlauf einmal ausführen, damit die BelegPosition von den Anpassungen mitbekommt.
SetLagerplatzzuordnung() ist die Methode für die automatische Lagerplatzzuordnung. Dies ist definitiv nicht notwendig.

Beim Hinzufügen des Lagerplatzes nutze ich immer die Methode mit Übergabe der Kurzbezeichnung als zweiten Parameter. Vielleicht macht dies noch einen Unterschied?!
C#:
stuecklistenElement.Lagerplatz.Add(lagerplatz, lagerplatz.Kurzbezeichnung);
 
Der Vollständigkeit halber
Tatsächlich war das fehlende Puzzleteil in meinem Fall die Verwendung der Methode BelegPosition.Calculate(), nachdem alle Elemente bearbeitet wurden und die Verwendung des zweiten Parameters der Methode BelegStueckliste.Lagerplatz.Add():
C#:
foreach (BelegStueckliste element in position.Stueckliste)
{
    decimal gesamt = element.MengeBasis * position.Menge;

    element.Lagerplatz.Clear();
    element.Lagerplatz.Add
        (
            new LagerPosition
            {
                    PlatzHandle = data.PlatzHandle
                    , Kurzbezeichnung = data.Kurzbezeichnung
                    , Menge = gesamt
                    , MengeBasis = gesamt
            }
            , kurzbezeichnung: data.Kurzbezeichnung
        );
}

position.Calculate();

Warum auch immer funktioniert es bei uns nicht, der Parameter für die Kurzbezeichnung nicht explizit nochmal angegeben wird.

Was die Menge angeht, habe ich mir die Datenbank genau angesehen. Bei uns steht in der KHKVKBelegePositionenLager in keinem Feld die Gesamtmenge aus Bestellmenge * Elementmenge, weshalb die Berechnung in unserem Fall notwendig ist.

So wie oben angegeben funktioniert es bei uns jetzt sauber.
 
Zurück
Oben