Gelöst Probleme mit Belegdatum setzen in .net - am letzten Tag des Monats

mgosx

Mitglied
Hallo zusammen,

ich habe ein Problem beim Übernehmen eines Auftrags zu einem Lieferscheins in .net.

NamePasswordCredential credentials = new NamePasswordCredential("UserTest", "Test");
Session session = Sagede.OfficeLine.Engine.ApplicationEngine.CreateSession(Database, ApplicationToken.Abf, null, credentials);
Mandant mandant = session.CreateMandant(1);

var beleg = new Sagede.OfficeLine.Wawi.BelegEngine.Beleg(this.mandant, Sagede.OfficeLine.Wawi.Tools.Erfassungsart.Verkauf);
beleg.Transform(this.Belid, "VLL", DateTime.Now, Convert.ToInt16(DateTime.Now.Year), false, true);
beleg.Periode = System.DateTime.Now.Year * 1000 + System.DateTime.Now.Month;
beleg.Belegdatum = System.DateTime.Now;
...
beleg.Calculate(true);
beleg.Validate();
beleg.Save(true);

Die beleg.Save(true) liefert FALSE und als Fehlermeldung steht im Errror-Array:
"Das Geschäftsjahr bzw. die Perioden eines Rumpfgeschäftsjahres, in das der Beleg gespeichert werden soll, sind nicht angelegt."

Wenn ich mir nun unter mandant.PeriodenManager.PeriodeAktuell.Value anschaue, so zeigt diese 2021012.

Wie kann ich dieses denn nach der Mandantenerzeugung die aktuelle Periode und das aktuelle Datum setzen?
Bei der normalen Anwendung gebe ich dieses ja schließlich auch mit an.

Leider habe ich in der Sage Dokumentation nichts darüber gefunden.

Vielleicht liegt es ja auch an einer anderen Ursache, habe aber trotz Kontrolle aller Felder (insbesondere der Datumsfelder) bisher keine Ursache gefunden.


Gruss Mark
 
Zuletzt bearbeitet:
Hallo Mark,

über den PeriodenManager gibt es eine Methode PeriodeCurrent(DateTime date,int Jahr).
Somit wird die aktuelle Periode ermittelt für das entsprechende Geschäftsjahr.

Gruß
Jaan
 
Hi Mark,

eine ähnliche Fehlermeldung bekommst du auch, wenn du am letzten Tag eines Monats einen Beleg erstellst und mit
beleg.Belegdatum = System.DateTime.Now;
arbeitest.
Am besten verwendest du
beleg.Belegdatum = System.DateTime.Today;
Der Beleg kommt nicht mit dem Überschlag(Uhrzeit) klar.

Gruß Jan
 
Wie Jan bereits geschrieben hat, wird der Fehler am Belegdatum mit Uhrzeit hängen.
Die Periode wird vom Belegobjekt ermittelt und anhand des Belegdatums gesetzt, von daher würde ich die nicht anpacken (und wenn nur über den "PeriodenManager").
 
Vielen Dank für Eure Rückmeldung, ich habe mit Eurer Hilfe den Fehler gefunden.

Es lag an der Zeile
beleg.Belegdatum = System.DateTime.Today;

Das Verrückte ist, dass das meine Zeile: beleg.Belegdatum = System.DateTime.Now;

An allen Tagen ausser dem letzten im Monat hat auch Not einwandfrei funktioniert!!
Ich dachte daher dass ich vielleicht irgendwo noch beim Mandanten die aktuelle Periode setzen müsste.
 
Vielen Dank für Eure Rückmeldung, ich habe mit Eurer Hilfe den Fehler gefunden.

Es lag an der Zeile
beleg.Belegdatum = System.DateTime.Today;

Das Verrückte ist, dass das meine Zeile: beleg.Belegdatum = System.DateTime.Now;

An allen Tagen ausser dem letzten im Monat hat auch Not einwandfrei funktioniert!!
Ich dachte daher dass ich vielleicht irgendwo noch beim Mandanten die aktuelle Periode setzen müsste.

Das liegt daran, dass z.B. die Periode 2022005 zum Datum 01.05.2022 00:00:00 beginnt und zum Datum 31.05.2022 00:00:00 endet (Datum ohne Uhrzeit). Die nächste Periode beginnt dann wieder am 01.06.2022 00:00:00.
Wenn Du das Belegdatum mit Uhrzeit setzt, kann er am letzten Tag der Periode zum Datum keine Periode ermitteln (Beginn der Periode >= Belegdatum und Ende der Periode <= Belegdatum ergibt keinen Datensatz), was dann zu dem Fehler führt.
 
Zurück
Oben