[Gelöst] C/AL Recordset REPEAT UNTIL Verschachtelt ...

3. Januar 2011 15:10

Huhu Zusammen und ein frohes neues Jahr in die Runde!

Ich versuche gerade in die Programmierung und das Erstellen von Berichten einzuarbeiten und habe hier mal einen kleinen Testbericht erstellt wo ich an einer Stelle im Code hänge. Ich habe 2 Recordsets. Zunächst setzte ich auf beide den Key um dann zuerst in der Tabelle Kontakt auf das auf uns angepasste Feld "Provisionsempfänger Nr." zu suchen und zu den gefundenen Kontakten mit dem Provisionsempfänger dann den Debitor zu suchen.

Dazu habe ich 2 "REPEAT UNTIL"-Schleifen verschachtelt. Allerdings wird mir bei der unten stehenden Verschachtelung eine Endlosschleife erzeugt, die nicht abbricht. Lasse ich die innere Schleife weg, funktioniert der Code und ich kann die Provisionsempfänger ausgeben:

Code:
Provisionsempfaenger.SETCURRENTKEY("Provisionsempfänger Nr.");
ProvisionsempfaengerDebitoren.SETCURRENTKEY("Contact No.");

Provisionsempfaenger.SETFILTER("Provisionsempfänger Nr.", Contact."No.");     
IF Provisionsempfaenger.FIND('-') THEN REPEAT

         ProvisionsempfaengerDebitoren.SETFILTER("Contact No.", Provisionsempfaenger."Company No.");
         IF ProvisionsempfaengerDebitoren.FIND('-') THEN REPEAT
             test:=ProvisionsempfaengerDebitoren.COUNT
         UNTIL ProvisionsempfaengerDebitoren.NEXT = 0;

UNTIL Provisionsempfaenger.NEXT = 0;


Muss ich etwas beachten, wenn ich mehrere Schleifen ineinander schachtel? Vieleicht kann mir jemand von euch hier weiterhelfen.
Vielen Dank und mit freundlichen Grüßen
Thomas K.
Zuletzt geändert von Thomas_K am 3. Januar 2011 17:16, insgesamt 2-mal geändert.

Re: C/AL Recordset REPEAT UNTIL Verschachtelt = Endlosschlei

3. Januar 2011 15:23

Grundsätzlich: Für jede Schleife eigene Recordavariablen verwenden. Das machst du auch schon.
Die Schleife über Recordvariable Provisionsempfaenger ist sauber.

Momentan:
Code:
Für jeden Provisionsempfänger
  ProvisionsempfaengerDebitoren.SETFILTER("Contact No.", Provisionsempfaenger."Company No.");
  Für jeden ProvisionsempfaengerDebitoren
    test:=ProvisionsempfaengerDebitoren.COUNT;

Den COUNT solltest du nur einmal absetzen und kannst dir so die zweite Schleife sparen:
Code:
Für jeden Provisionsempfänger
  ProvisionsempfaengerDebitoren.SETFILTER("Contact No.", Provisionsempfaenger."Company No.");
  test:=ProvisionsempfaengerDebitoren.COUNT;


Ich kann in deinem Code allerdings keine Endlosschleife entdecken!

Re: C/AL Recordset REPEAT UNTIL Verschachtelt = Endlosschlei

3. Januar 2011 16:36

Hallo Natalie,

vielen Dank für dein Feedback und dass du dir die Zeit genommen hast über einen Code zu schauen.
Hmm peinlich peinlich ich habe zu früh gepostet, der Übeltäter war die Datensicherung die heute früh noch lief und der Agent auf der Tabelle der Debitoren hing :( Damit hat sich der Filter in der inneren Schleife aufgeängt und der Programmablauf blieb einfach nur stehen ....

Nochmal vielen Dank und liebe Grüße
Thomas K.