Seite 1 von 1

Webservice buchen Item Journal Line

Verfasst: 6. Mai 2019 20:02
von stony
Hallo,
wir haben eine C#-Programm, welches über Webservice die Tabelle Item Journal Line befüllt. (und auch andere Tabellen)
Danach wird auch über dem Webservice eine Funktion in einer Codeunit aufgerufen, welche diese Buchung durchführt.
Aktuell haben wir ca. 30 mal dieses Programm im Einsatz.
Nun werden über diesen Programm auch anderen NAV-Tabellen gelesen bzw. beschrieben.

Leider kommt es nun an manchen Tag vor, das wir ca. 20 Mal den Fehler bekommen:
The operation could not complete because a record was locked by another user. Please retry the activity.
Dieser Fehler bekommen wir auch teilweise, wenn wir Daten aus Tabellen lesen.
Z.B. haben wir eine eigene Tabelle für unsere Fertigungsaufträge, diese werden sowohl von NAV als auch von diesem Programm bearbeitet.

Anbei die NAV-Code, welcher z.B. eine Buchung durchführt und eine Etikett ausdruckt.
Bin mir nicht sicher ob hier das COMMIT vielleicht das Problem macht.

Wo könnte ich eine Beispiel-Code finden, welcher so eine Buchung durchführt und auch eine Fehler abfängt.

Code:
TempItemJournalLine.RESET;
TempItemJournalLine.SETRANGE("Item No.",Artikelnr);
IF TempItemJournalLine.FINDLAST THEN BEGIN
  IF NOT ItemJnlPostBatch.RUN(TempItemJournalLine) THEN BEGIN
    COMMIT;
    ERROR(GETLASTERRORTEXT);
  END ELSE BEGIN  //Dient zum Ausdrucken

    CLEAR(ItemLedgerEntry);
    PDFFilename := "3TierMgtm".ServerTempFileName('pdf');

    ItemLedgerEntry.RESET;
    ItemLedgerEntry.SETRANGE("Posting Date",TODAY);
    ItemLedgerEntry.SETRANGE("Item No.",Artikelnr);

    IF ItemLedgerEntry.FINDLAST THEN BEGIN   
      ItemLedgerEntry2.RESET;
      ItemLedgerEntry2.SETRANGE("Entry No.",ItemLedgerEntry."Entry No.");
        IF ItemLedgerEntry2.FINDLAST THEN BEGIN

        REPORT.SAVEASPDF(50002, PDFFilename, ItemLedgerEntry2);

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

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

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


Danke und lg
stony

Re: Webservice buchen Item Journal Line

Verfasst: 7. Mai 2019 07:43
von fiddi
Hallo,

dein größtes Problem dürfte sein, dass du nach dem Buchen kein COMMIT machst.
Das Drucken dauert zu lange und blockiert deine Tabellen. Daher dürfte es sinnvoll sein, vor dem Druck einen COMMIT durchzuführen.

Gruß Fiddi

Re: Webservice buchen Item Journal Line

Verfasst: 7. Mai 2019 09:39
von Mathes
...vielleicht bring auch ein SETCURRENTKEY auf den passenden Key vor den Artikelposten etwas Performanceverbesserung