Buchungsfrage mit Code (Commit)

Bild Microsoft Dynamics NAV 2017

Buchungsfrage mit Code (Commit)

Beitragvon stony » 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: Alles auswählen
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: Alles auswählen
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
stony
 
Beiträge: 1100
Registriert: 24. April 2006 11:31
Bezug zu Microsoft Dynamics: End-Anwender

Re: Buchungsfrage mit Code (Commit)

Beitragvon sweikelt » 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: Alles auswählen

IF ItemJnlLine.INSERT(TRUE) THEN BEGIN
   Chargennr := ItemJnlLine."Lot No.";
--> hier ggf. das Commit
   IF NOT ItemJnlPostBatch.RUN(ItemJnlLine) THEN
      ERROR(GETLASTERRORTEXT)
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC


ZurĂĽck zu NAV 2017

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron