Wie kann ich Beleg.Save richtig debuggen?

Arne Drews

Mitglied
Moin,

Ich erstelle über eine Anwendung eine Sofortrechnung, wie in anderen Anwendungen auch und obwohl ich Beleg.Save(false) verwende, also ohne Abbruch bei Warnungen, steigt er an der Stelle mit false aus, obwohl er keinen Fehler, sondern nur eine Warnung meldet:
1722245948563.png

Und mehr, wie:
Fehler in der Belegerfassung Verkauf
Es ist ein Fehler bei der Belegspeicherung aufgetreten.
sagt der Fehler nicht aus. Warum liefert Save false zurück, obwohl ich angebe, dass er bei Warnungen nicht abbrechen soll?!
Gibt es einen Weg, das detaillierter zu debuggen?

Hier mal der relevante Code-Teil, mit dem ich die Sofortrechnung aufbaue, evtl. sieht ja jemand auch einen Fehler, den ich übersehe:
C#:
Auftrag = new Beleg(Mandant, Erfassungsart.Verkauf);
Auftrag.Load((int)CurrentOrderItem.BelID);

using (Sofortrechnung = new Beleg(Mandant, Erfassungsart.Verkauf))
{
   Sofortrechnung.Initialize(doc_type, DateTime.Now.Date, (short)DateTime.Now.Year);
   Sofortrechnung.Transform(Auftrag.Handle, doc_type, DateTime.Now.Date, (short)DateTime.Now.Year, false, true);

   foreach (BelegPosition pos in Auftrag.Positionen)
   {
       BelegPosition p = new BelegPosition(Sofortrechnung);
       p.CopyData(pos);

       p.Calculate();
       p.SetVorgangPositionHandle(pos.VorgangspositionsHandle);

       Sofortrechnung.Positionen.Add(p);
   }

   Sofortrechnung.Versand = Auftrag.Versand;
   Sofortrechnung.Lieferbedingung = Auftrag.Lieferbedingung;
   Sofortrechnung.Bearbeiter = $"{Environment.UserName.ToLower()}";

   Sofortrechnung.Zuschlaege = (Sofortrechnung.Positionen.Count < Auftrag.Positionen.Count) ? new BelegZuschlagCollection() : Auftrag.Zuschlaege;
   Sofortrechnung.ZKDs = Auftrag.ZKDs;

   Sofortrechnung.Calculate(true);
   Sofortrechnung.Validate(true);

   if (!Sofortrechnung.Save(false))
       throw new Exception($"could not save shipment document of order {Auftrag.BelegnummerFormatiert}. {Sofortrechnung.Errors.GetDescriptionSummary()}");
}
Ich arbeite erst seit kurzem mit CopyData(), weshalb ich nicht ausschließe, dass ich an der Stelle mit den Positionen etwas falsch mache. Allerdings sieht es im Debugger bis zum Save() alles gut aus für mich.
 
Also die Problematik ist an sich erstmal gelöst.
CopyData() scheint die Lagerplätze bei Stücklisten oder Stücklisten generell nicht korrekt zu übernehmen, weshalb ich das zusätzlich manuell machen muss.
C#:
// p = BelegPosition vom Folgebeleg
// pos = Belegposition vom Quellbeleg

if (pos.Stuecklistentyp == Stuecklistentyp.Handel)
    p.Stueckliste = pos.CloneDataStueckliste();

Hier musste auch CloneDataStueckliste() verwendet werden, was bei mir zusätzliche Irritierung auslöst, denn
C#:
// funktioniert
p.Lagerplatz = pos.Lagerplatz;

// funktioniert NICHT!
p.Stueckliste = pos.Stueckliste;

Da würde ich mir ein wenig mehr Konsistenz in den Objekten wünschen, sorry :)

Trotzdem stelle ich mir die Frage, ob man das nicht detaillierter debuggen kann, denn Fehler bei Belegerfassung ist eher wenig aussagekräftig, meiner Meinung nach. Das ist so wie die Windows-Fehlermeldungen: Es ist ein Fehler aufgetreten o_O
 
Zurück
Oben