Report: Skip funktioniert nicht so richtig

21. April 2006 15:20

Hallo zusammen,

mal wieder eine Frage zu einem Report. Ich prüfe eine Tabelle zuvor auf ein Kriterium, wenn ein bestimmter Wert = 0 ist, soll dieser Datensatz übersprungen werden. So sieht der Code aus:
Code:

    AnzahlBSP := 0;
    Rec_BSP.RESET;
    Rec_BSP.SETCURRENTKEY("Gliederungsnr.",Eingangsdatum);
    Rec_BSP.SETRANGE(Rec_BSP."Gliederungsnr.",Structure."Structure No.");
    Rec_BSP.SETRANGE(Rec_BSP.Buchhaltungsjahr, buja);
    AnzahlBSP := Rec_BSP.COUNT;
    IF AnzahlBSP = 0 THEN
      CurrReport.SKIP;

Der Code steht im OnAfterGetRecord Trigger des DataItems "Structure". Leider bringt der Code nicht den gewünschten Effekt. Die Datensätze, deren Wert 0 entspricht, werden trotzdem noch angezeigt. :-x

Any Ideas what's wrong?

21. April 2006 15:46

So spontan würde ich nach den SETRANGE-Befehlen einen FIND ausführen. Ich vermute mal, dass sonst der Wert Count nicht richtig berechnet wird.

21. April 2006 16:49

Du willst doch nur herausfinden, ob die Tabelle Rec_BSP leer ist, um das DataItem zu skippen.

Hier die optimierte Abfrage:
Code:
    AnzahlBSP := 0;
    Rec_BSP.RESET;
    Rec_BSP.SETCURRENTKEY("Gliederungsnr.",Eingangsdatum);
    Rec_BSP.SETRANGE(Rec_BSP."Gliederungsnr.",Structure."Structure No.");
    Rec_BSP.SETRANGE(Rec_BSP.Buchhaltungsjahr, buja);
//    AnzahlBSP := Rec_BSP.COUNT;  // <-- wird nicht mehr benötigt
    IF NOT Rec_BSP.FIND('-') THEN  // <-- geht schneller als ein COUNT
      CurrReport.SKIP;

22. April 2006 13:11

Hallo, danke für Eure Tipps. Ich werde gleich am Montag einen Test durchführen und mich dann wieder melden. Schönes Wochenende. Gruß Markus

24. April 2006 15:03

Hi Timo,

habe Deinen Code ausprobiert. Die Folge ist, dass der Report gar nichts mehr anzeigt. Scheinbar werden alle Records geskipped. Ich möchte mit dem Code verhindern, dass im Report leere Zeilen dargestellt werden. Na ja, ganz leer sind sie ja nicht. In der ersten Spalte steht die Structure No. Aber die restlichen Spalten sind leer.

26. April 2006 13:33

Hi,

Ich würde Dir empfehlen auf dem Report ein Feld zu machen in dem Du das Ergebnis Deiner Abfrage ausgibst.

Code:
    AnzahlBSP := 0;
    Rec_BSP.RESET;
    Rec_BSP.SETCURRENTKEY("Gliederungsnr.",Eingangsdatum);
    Rec_BSP.SETRANGE(Rec_BSP."Gliederungsnr.",Structure."Structure No.");
    Rec_BSP.SETRANGE(Rec_BSP.Buchhaltungsjahr, buja);
    AnzahlBSP := Rec_BSP.COUNT;   
    //IF NOT Rec_BSP.FIND('-') THEN 
    //  CurrReport.SKIP;

"AnzahlBSP" dann in einem Feld in die source expression eintragen.
Dann kannst Du erkennen ob vielleicht Deine Abgrenzung nicht stimmt.