OnInsert von Tabelle greift bei Leerzeilen nicht

15. November 2019 09:36

Hallo Zusammen,
ich habe folgendes Problem.
Ich möchte zwischen eingefügten Textzeilen und einem Posten in der Sales Line eine Verbindung schaffen. Dafür habe ich in der Tabelle ein neues Integer Feld angelegt.
In den OnInsert der Tabelle Sales Line habe ich Code, der den drüberliegenden Posten (Art, Nr. sind gefüllt) sucht und dessen Line No. in das neue Feld einträgt.
Das funktioniert auch, solange es eine normale Textzeile ist. Textzeile meine ich, Spalten Art, Nr. beide Leer und Description = gefüllt.
Wird jetzt allerdings eine Leerzeile eingefügt und dann eine Textzeile, wird OnInsert nur für die neue Textzeile aufgerufen.
Beispiel:
Doc. No., Line No. Type No. Desc. Parent Line
-------------------------------------------------------------------------------
AN1001 10000 2 R12 Rosen 12er Pack 0
AN1001 20000 0 Farbe rot 10000
AN1001 30000 0 0
AN1001 40000 0 Sorte: Aachener Dom 10000

Beim Debuggen habe ich gesehen, dass ich die Zeilen 40000, 20000 bekomme und die 30000 nicht in meinem Recordset vorhanden ist.

Mein Code ist folgender:
in nLineNo ist die 10000 gespeichert, die bereits davor gefunden worden ist
recSalesLineSiblingLines = Typ Record(Tabelle 37)
Code:
IF nLineNo > 0 THEN
    MESSAGE('Parent is: %1, or %2', nLineNo, recSalesLineSiblingLines."Title No.");
    "Parent Line" := nLineNo;
    recSalesLineSiblingLines.RESET;
    recSalesLineSiblingLines.SETRANGE("Line No.", nLineNo + 1, Rec."Line No.");
    recSalesLineSiblingLines.SETFILTER("Document No.", Rec."Document No.");
    recSalesLineSiblingLines.SETASCENDING("Line No.", FALSE);
    MESSAGE('%1 Kinder gefunden', recSalesLineSiblingLines.COUNT);

    IF recSalesLineSiblingLines.FINDSET THEN
      REPEAT
        recSalesLineSiblingLines."Parent Line" := nLineNo;
        recSalesLineSiblingLines.MODIFY;
      UNTIL recSalesLineSiblingLines.NEXT = 0;

  recSalesLineSiblingLines.SETRANGE("Line No."); //remove the used range

Die Leerzeile wird scheinbar nach der Zeile 40000 eingefügt. In der Datenbank ist diese vorhanden.

Kann mir dabei jemand helfen?

Schöne Grüße
Björn

Re: OnInsert von Tabelle greift bei Leerzeilen nicht

15. November 2019 10:16

Hallo,

hast du die Leerzeile explizit eingefügt, oder einfach nur bei der Eingabe übersprungen?

die Page hat eine Funktion nicht jede Zeile sofort einzufügen wenn du nach unten scrollst und dabei ein paar leere Zeilen überspringst ohne etwas einzugeben.
Erst wenn du in einer Zeile etwas eingibst, werden auch die Leerzeilen erzeugt, evtl. erst nachdem du deine aktuelle Zeile erstellt hast.

Das Thema verknüpfte Zeilen bzw. Zeilen- Abhängigkeiten (z.B. Positionsnummern) in Belegzeilen ist ein sehr heikles Thema. Das stabil und in allen Lebenslagen stabil zu bekommen, während man die Belegzeilen normal erfasst, ist (fast) unmöglich.

Wenn möglich versuche deine verknüpften Zeilen in einer zusätzlichen Page+ (Temp)Tabelle zu erfassen und hinterher in die Belegzeilen einzufügen.

Gruß Fiddi

Re: OnInsert von Tabelle greift bei Leerzeilen nicht

15. November 2019 10:49

Hallo Fiddi,
ich überspringe die Zeilen einfach und mache dann eine Zeile später weiter.

Was mich wundert ist, dass der OnInsert der Tabelle nicht aufgerufen wird, wenn die Leerzeilen eingefügt werden. Ich habe einmal auf der DB gesehen, dass die Textzeile bereits vorhanden ist, die Leerzeile noch nicht. Daher vermute ich auch mal, dass diese im Anschuss erzeugt werden.

Das das ganze Thema sehr fragil ist, musste ich in meinen Reports bereits merken. Viel Aufwand um die zugehörigen Textzeilen zu finden. Das wollte ich jetzt über die DB vereinfachen. Das ist zu mindestens der grobe Plan

Gruß
Björn

Re: OnInsert von Tabelle greift bei Leerzeilen nicht

15. November 2019 18:24

Hat vermutlich mit dem Page Property "Multiple New Lines" (in Kombination mit "DelayedInsert") in der SubPage zu tun.

Re: OnInsert von Tabelle greift bei Leerzeilen nicht

18. November 2019 09:40

Hallo enh,
guter neuer Ansatz, ich werde mal schauen ob ich damit weiter komme.
Irgendwo müssen die Zeilen ja schließlich erzeugt werden und in die DB geschrieben werden.

Gruß
Björn