Buchungsfrage mit Code (Commit)

9. Juni 2020 06:47

Hallo,
über ein Webservice befülle ich erst eine Zeile in einen Artikelbuchblatt.
Danach wird auch über einen Webserivce-Aufruf eine Codeunit-Funktion aufgerufen, welche diese Zeile bucht und in weiteren Tabellen Änderungen vornimmt.
Buchungscode ist
Code:
CLEAR(ItemJnlLine);
ItemJnlLine.RESET;
ItemJnlLine.SETRANGE("Journal Template Name", TemplateCode);
ItemJnlLine.SETRANGE("Journal Batch Name", BatchName);
ItemJnlLine.SETRANGE("Line No.", LineNo);
IF ItemJnlLine.FINDSET THEN BEGIN
  CLEARLASTERROR();
  MengeBasis := ItemJnlLine.Quantity;
  IF NOT ItemJnlPostBatch.RUN(ItemJnlLine) THEN BEGIN
    COMMIT;
    ERROR(GETLASTERRORTEXT);
  END ELSE BEGIN  //Dient zum Ausdrucken und zum Abbuchen
   ..
  END;
END;

Das funktioniert alles.
Nun möchte ich diese Funktion erweitern.
Wenn der zugebuchte Artikel im "Decklagen-Artikelnr." einen Inhalt hinterlegt hat, soll diese zu Buchung wieder abgebucht werden und mit einer anderen Artikelnummer wieder zugebucht werden. (Brauche das leider so)
Dafür habe ich diesen Code eingebaut
Code:
IF Item."Decklagen-Artikelnr." <> '' THEN BEGIN
      //Lamellen Artikel Abbuchung
     
      ItemJnlLine.INIT;
      ItemJnlLine.VALIDATE("Journal Template Name", 'ARTIKEL');
      ItemJnlLine.VALIDATE("Journal Batch Name", 'H1L2AB');
      ItemJnlLine.SetUpNewLine(ItemJnlLine); //Dadurch wird unter anderen die Belegnr. generiert!
      ItemJnlLine.VALIDATE("Line No.",10);
      ItemJnlLine.VALIDATE("Entry Type",ItemJnlLine."Entry Type"::"Negative Adjmt.");
      ItemJnlLine.VALIDATE("Posting Date",TODAY);     
      ItemJnlLine.VALIDATE("Chargen Nr. Eingabe",Chargennr);
      IF ItemJnlLine.INSERT(TRUE) THEN BEGIN
        Zubuchungsmenge := ItemJnlLine."Quantity (Base)";
        Zubuchungslagerplatz := ItemJnlLine."Bin Code";
        Zubuchungsbemerkung := ItemJnlLine.Bemerkung;
        IF NOT ItemJnlPostBatch.RUN(ItemJnlLine) THEN     
          ERROR(GETLASTERRORTEXT);
      END;
     
      //Decklage Zubuchung
     
      ItemJnlLine.INIT;
      ItemJnlLine.VALIDATE("Journal Template Name", 'ARTIKEL');
      ItemJnlLine.VALIDATE("Journal Batch Name", 'H1L2ZU');
      ItemJnlLine.VALIDATE("Line No.",10);
      ItemJnlLine.VALIDATE("Posting Date",TODAY);
      ItemJnlLine.VALIDATE("Item No.",Item."Decklagen-Artikelnr.");
      ItemJnlLine.VALIDATE("Location Code",'SCHEUCHER');
      ItemJnlLine.VALIDATE("Bin Code",Zubuchungslagerplatz);
      ItemJnlLine.VALIDATE("Quantity (Base)",Zubuchungsmenge);
      ItemJnlLine.Bemerkung := Zubuchungsbemerkung;
      ItemJnlLine.VALIDATE("Posting Line",TRUE);
      IF ItemJnlLine.INSERT(TRUE) THEN BEGIN
        Chargennr := ItemJnlLine."Lot No.";
        IF NOT ItemJnlPostBatch.RUN(ItemJnlLine) THEN     
          ERROR(GETLASTERRORTEXT)
        ELSE BEGIN
          PDFFilename := "3TierMgtm".ServerTempFileName('pdf');
          ItemLedgerEntry.RESET;
          ItemLedgerEntry.SETRANGE("Lot No.",Chargennr);
          IF ItemLedgerEntry.FINDFIRST THEN BEGIN
            REPORT.SAVEASPDF(50034, PDFFilename, ItemLedgerEntry);

            Path := PDFFilename;
            GetPathFilename(Path, FileN);

            CLEAR(PrinterSelection);
            IF PrinterSelection.GET(USERID, 50034) THEN;

            Printing.PrintPDFFoxitReader(Path + FileN, PrinterSelection."Printer Name");
          END;
        END;
      END;
     
    END


Und hier kommt nun das Problem, wo Navision meint es sollte ein Commit eingebaut werden.

Habe schon versucht an mehreren Stellen das zu machen. Leider ohne Erfolg.
Bzw. wäre mir lieber es ohne Commit lösen zu können.
Habt ihr eine Idee wie ich das machen könnte.

Danke
stony

Re: Buchungsfrage mit Code (Commit)

9. Juni 2020 07:09

hi,

wo genau meint denn NAV, dass ein Commit notwendig wäre!?
Eine Fehlermeldung/Message (ich kann mir schon denken welche!) wäre toll - sodass man dies auch später über die Suche findet.

Code:

IF ItemJnlLine.INSERT(TRUE) THEN BEGIN
   Chargennr := ItemJnlLine."Lot No.";
--> hier ggf. das Commit
   IF NOT ItemJnlPostBatch.RUN(ItemJnlLine) THEN
      ERROR(GETLASTERRORTEXT)