Mehrere Transaktionen im Fehlerfall abbrechen

5. März 2024 16:30

Wie kann ich in mehreren Tabellen etwas schreiben bzw. verändern und im Fehlerfall dies rückgängig machen.
Sprich ich buche über ein Artikelbuchblatt und dann wird noch in einer Tabelle X ein Eintrag gemacht bzw. verändert.
Das passiert alles über eine Codeunit.
Sollte diese Tabelle X gesperrt sein (oder anderer Fehlerfall) dann sollte auch die Buchung über das Artikelbuchblatt nicht durchgeführt werden!

Anbei der Code, wobei die Funktion ChargenPoolNachAbUndZubuchungUpdate(Arbeitsplatzgruppe) eine andere Tabelle ändert.

Aktuell wird das Artikelbuchblatt verbucht wenn die Funktion ChargenPoolNachAbUndZubuchungUpdate einen Fehler verursacht.

Code:
ItemJournalLine.SetUpNewLine(ItemJournalLine);
ItemJournalLine.VALIDATE("Posting Date",TODAY);
ItemJournalLine.VALIDATE("Entry Type",ItemJournalLine."Entry Type"::"Positive Adjmt.");
ItemJournalLine.VALIDATE("Item No.",FertigungsauftragProduktion.Artikelnr);
ItemJournalLine.VALIDATE("Location Code",ZuLagerort);
ItemJournalLine.VALIDATE("Bin Code",ZuLagerplatz);
ItemJournalLine.VALIDATE(Quantity,ZuMengeStk);
ItemJournalLine.VALIDATE("Unit of Measure Code",'STK');
ItemJournalLine.Produktdicke := ZuProduktdicke;
ItemJournalLine.Bemerkung := ZuBemerkung;
ItemJournalLine.VALIDATE("Posting Line",TRUE);

ItemJournalLine.INSERT(TRUE);

//Buchungen durchführen und Chargeninfo schreiben
CLEAR(ItemJournalLine);

ItemJournalLine.RESET;
ItemJournalLine.SETRANGE("Journal Template Name", 'ARTIKEL');
ItemJournalLine.SETRANGE("Journal Batch Name", UserSetup.BDENavBLFertigungsauftrag);
IF ItemJournalLine.FINDSET THEN BEGIN
  REPEAT
    IF ItemJournalLine."Entry Type" = ItemJournalLine."Entry Type"::"Positive Adjmt." THEN BEGIN
      ZubuchungsChargennr := ItemJournalLine."Lot No.";
      ZubuchungsMengeBasis := ItemJournalLine."Quantity (Base)";
    END;
  UNTIL ItemJournalLine.NEXT = 0;
  ItemJnlPostBatch.RUN(ItemJournalLine)
END; 

ChargenPoolNachAbUndZubuchungUpdate(Arbeitsplatzgruppe);

Re: Mehrere Transaktionen im Fehlerfall abbrechen

5. März 2024 16:32

Hallo,

dumme Frage: Was passiert, wenn du eine Rechnung in NAV buchst? In wie viel Tabellen wird dann geschrieben, und was passiert im Fehlerfall? :wink:

Gruß Fiddi

Re: Mehrere Transaktionen im Fehlerfall abbrechen

5. März 2024 16:38

Abbruch !! Wahrscheinlich
Und ich dachte das müsste bei mir auch passieren.
Hat es aber nicht und ich hoffe das ich richtig liege weil da in ItemJnlPostBatch.RUN(ItemJournalLine) ein Commit drinnen ist.

Re: Mehrere Transaktionen im Fehlerfall abbrechen

5. März 2024 18:02

COMMIT ist tödlich weil alles was zuvor passiert ist dann auch wirklich geschrieben ist und bei späteren Fehlern nicht zurückgedreht wird.

Re: Mehrere Transaktionen im Fehlerfall abbrechen

5. März 2024 22:47

Hallo,
COMMIT ist tödlich

Normalerweise hast du recht. Es kann aber sein, dass da Dinge bestätigt werden, die benötigt werden um eine Eingabe zu ermöglichen.

Aber grundsätzlich sollten Commits nur mit der Unterschrift der Ur-Ur-Großmutter des NAV- Erfinders erlaubt werden. :mrgreen:

Gruß Fiddi

Re: Mehrere Transaktionen im Fehlerfall abbrechen

6. März 2024 12:33

fiddi hat geschrieben:grundsätzlich sollten Commits nur mit der Unterschrift der Ur-Ur-Großmutter des NAV- Erfinders erlaubt werden. :mrgreen:

Genau! ;-) Deshalb sind sie im Microsoft Code auch extrem sparsam verwendet. Z. B. am Anfang der Belegbuchungsfunktionen, vorher passiert quasi nur das Ziehen der Nummer aus der Nummernserie. Hier hat es den Grund dass die Nummernserienzeile nicht länger als nötig gesperrt werden soll.

Re: Mehrere Transaktionen im Fehlerfall abbrechen

6. März 2024 12:58

Hallo,

es kommt aber auch vor, dass es absolut notwendig ist, z.B. wenn man nach einem Buchungsvorgang (z.B. Buchen & Drucken) etwas mit Dialog ausgeben/ausdrucken möchte. Dann geht es nicht anders, ist aber auch nicht wirklich gefährlich (wenn man weiß, was man tut :-D )

Gruß Fiddi