Gelöst Beleg buchen

Finn

Neues Mitglied
Guten Tag,

ich entwickle derzeit eine API, über die Belege erstellt werden können. Das Erstellen und Speichern der Belege funktioniert grundsätzlich korrekt, inklusive der Prüfung von Seriennummern und Chargen. Allerdings werden die Lagerbestände dabei nicht wie erwartet reduziert.

Konkret: Die chargenbezogenen Bestände werden korrekt verringert, der allgemeine Lagerbestand eines Artikels jedoch nicht.
Wenn also beispielsweise Lager 1 einen Basisbestand von 50 Stück hat und ich einen Artikel mit der Charge „XYZ“ um 5 Stück entnehme, wird zwar die Charge um 5 Stück reduziert, der Gesamt-Lagerbestand bleibt jedoch unverändert.

Ich benötige daher Unterstützung, wie ich sicherstellen kann, dass bei der Belegerfassung sowohl die Chargenbestände als auch der allgemeine Lagerbestand korrekt aktualisiert werden.

Vorgehen aktuell:
Ich erstelle zunächst einen neuen Beleg sowie die zugehörige BelegPosition. Abhängig davon, ob der Artikel chargen- oder seriennummernpflichtig ist, setze ich an der BelegPosition die entsprechende LagerPosition und hinterlege dort den jeweiligen Chargen- oder Seriennummern-Eintrag. Diesem Eintrag weise ich Menge, Bestand und die PlatzHandle zu. Zusätzlich setze ich an LagerPosition und BelegPosition

C#:
x.BestandBuchen = true

An der BelegPosition rufe ich anschließend folgende Funktionen auf:

C#:
x.RefreshBasismenge(true, 2);
x.RefreshStatusmengen();
x.Calculate();

Nach einer erfolgreichen Validierung speichere ich den Beleg:

C#:
var validated = beleg.Validate(true);
bool saveSuccess = false;
if (!validated){
    fehler.Add(Error.Validation.ValidationNichtErfolgreich());
    fehler.AddRange(beleg.Errors.Select(fehl => fehl.Description));
}
else
{
    beleg.Calculate(true);
    saveSuccess = beleg.Save(true);
}

if (!saveSuccess){
    fehler.Add(Error.Speichern.SpeichernNichtErfolgreich());
    fehler.AddRange(beleg.Errors.Select(fehl => fehl.Description));
}
Den vollständigen Code kann ich hier leider nicht zeigen, da er zu umfangreich ist.
Wichtig ist außerdem: Ich entwickle normalerweise nicht in C#, sodass mir eventuell bestimmte Framework- oder Sage-spezifische Details fehlen.
 
Hi Finn,
welche Belegart nutzt Du und wie sind deren Wirkungen, insbes. die Lagerbuchungswirkung, definiert? M.E. sollte das die Sage mit einem entsprechend wirkenden Beleg (bspw. klassischer Lieferschein) automatisch korrekt berechnen.
 
Guten Morgen,

genau der Hinweis zur Belegart war der Moment, in dem es bei mir endlich Klick gemacht hat. Nach so langer Zeit in der Entwicklung rund um die Warenwirtschaft übersieht man manchmal tatsächlich die offensichtlichsten Details.

In meinem Fall lag es schlicht daran, dass ich als Belegart „Rechnung“ verwendet hatte – und die hat natürlich keine Buchungswirkung. Damit war das Verhalten völlig logisch.

Trotzdem vielen Dank für den kleinen, aber sehr hilfreichen Denkanstoß!
 
Zurück
Oben