Arne Drews
Mitglied
Moin,
Ich löse in einem Prozess Handelsstücklisten auf, was bis dahin auch gut funktioniert.
Hier mal der aktuelle Stand, als Basis:
Was passiert
In meiner Oberfläche markiere ich die Handelsstückliste/n, die ich auflösen möchte und starte den Prozess mit Klick auf eine Schaltfläche.
Ich habe einen Debug-Punkt vor dem Save() gesetzt und dort sieht alles super aus, die beiden Handelsstücklisten, die ich auflösen wollte sind raus und die Elemente daraus als neue Positionen im Auftrag drin.
Führe ich aber den Save-Befehl aus, sind immer noch alle Elemente als neue Positionen drin, allerdings ohne Positionsnummer ( NULL ).
Zudem befinden sich die aufgelösten Handelsstücklisten aber noch mit im Beleg, obwohl die vor dem Save() bereits nicht mehr enthalten waren.
Auftrag.Errors ist leer.
Meine Frage/n
Mir ist bewusst, dass gelöschte Positionen zunächst nur als gelöscht markiert werden, aber wie entferne ich sie dann endgültig?
Und wie stoße ich die Nummerierung der Positionen neu an oder muss ich das selber setzen?
Danke für Infos/Hinweise
EDIT
Ich habe gerade noch Renumber() gefunden, womit er zwar die Positionen neu nummeriert, allerdings bei den eigentlich gelöschten Positionen eine doppelte Positionsnummer vergibt.
Die gelöschten Positionen bleiben nach dem Save() weiterhin nicht gelöscht.
Ich löse in einem Prozess Handelsstücklisten auf, was bis dahin auch gut funktioniert.
Hier mal der aktuelle Stand, als Basis:
C#:
Auftrag = new Beleg(Mandant, Erfassungsart.Verkauf);
Auftrag.Load(lists[0].BelId);
List<BelegPosition> _remove = new List<BelegPosition>();
List<string> _memo = new List<string>();
foreach (PartsListModel _position in lists)
{
BelegPosition _pos = Auftrag.Positionen.FirstOrDefault(p => p.Handle == _position.BelPosId);
if (_pos is null)
continue;
foreach (PartsListElementsModel _element in _position.Elements)
{
BelegPosition _new = new BelegPosition(Auftrag);
if (!_new.SetArtikel(_element.Artikelnummer, _element.AuspraegungID))
continue;
Auftrag.Positionen.Add(_new);
_new.Einzelpreis = _element.EinzelpreisKalkuliert;
_new.Menge = _element.MengeBasis;
_new.Liefertermin = _pos.Liefertermin;
_new.Calculate();
}
_remove.Add(_pos);
_memo.Add($"{_pos.Artikelnummer};{_pos.Handle}");
}
foreach (BelegPosition _item in _remove)
Auftrag.Positionen.Remove(_item);
Auftrag.Calculate(true);
Auftrag.Validate(true);
if (!Auftrag.Save(false))
throw new Exception($"Speichern des Belegs {Auftrag.BelegnummerFormatiert}/{Auftrag.Handle} gescheitert.");
return true;
Was passiert
In meiner Oberfläche markiere ich die Handelsstückliste/n, die ich auflösen möchte und starte den Prozess mit Klick auf eine Schaltfläche.
Ich habe einen Debug-Punkt vor dem Save() gesetzt und dort sieht alles super aus, die beiden Handelsstücklisten, die ich auflösen wollte sind raus und die Elemente daraus als neue Positionen im Auftrag drin.
Führe ich aber den Save-Befehl aus, sind immer noch alle Elemente als neue Positionen drin, allerdings ohne Positionsnummer ( NULL ).
Zudem befinden sich die aufgelösten Handelsstücklisten aber noch mit im Beleg, obwohl die vor dem Save() bereits nicht mehr enthalten waren.
Auftrag.Errors ist leer.
Meine Frage/n
Mir ist bewusst, dass gelöschte Positionen zunächst nur als gelöscht markiert werden, aber wie entferne ich sie dann endgültig?
Und wie stoße ich die Nummerierung der Positionen neu an oder muss ich das selber setzen?
Danke für Infos/Hinweise
EDIT
Ich habe gerade noch Renumber() gefunden, womit er zwar die Positionen neu nummeriert, allerdings bei den eigentlich gelöschten Positionen eine doppelte Positionsnummer vergibt.
Die gelöschten Positionen bleiben nach dem Save() weiterhin nicht gelöscht.
Zuletzt bearbeitet:
