[Gelöst] nur satzmarkierte Artikel anzeigen

28. Mai 2008 13:27

hallo zusammen,

bin noch ziemlich neu in navision , also dürfte meine frage für euch kein problem darstellen.
folgendes:
ich habe ein übersichtsformular , in dem einige artikel aufgelistet sind.
nun durchlaufe ich in einer schleife alle artikel und überprüfe einen eintrag.
falls dieser eintrag übereinstimmt , dann wird der artikel in der übersicht satzmarkiert.
zum schluss lasse ich nur die satzmarkierten artikel anzeigen.
die filterung funktioniert , jedoch haut er automatisch immer den letzten artikel in dieser übersicht dazu , obwohl dieser nicht satzmarkiert ist.

dies führt zu einer fehlermeldung , wenn man in die übersicht klickt.
wenn man diese meldung bestätigt , dann werden nur mehr die satzmarkierten angezeigt.

anbei der code:
Code:
IF (PrüfungsFilter = '') THEN BEGIN
  Rec.CLEARMARKS();
  Rec.MARKEDONLY(FALSE);
  CurrForm.UPDATECONTROLS();
END ELSE BEGIN

  CLEAR(Window);
  Window.OPEN(Text001 + '\@1@@@@@@@@@@@@@@@');
  Window.UPDATE(1, 0);
  Rec.CLEARMARKS();
  RecCount := Rec.COUNT();
  RecNo := 0;
  IF (Rec.FIND('-')) THEN BEGIN
    REPEAT
      RecNo += 1;

      Prüfauftragszeile.RESET();
      Prüfauftragszeile.SETRANGE("Prüfauftragsnr.", Rec."Nr.");
      Prüfauftragszeile.SETRANGE(Prüfung, PrüfungsFilter);
      Prüfauftragszeile.SETRANGE(Ergebnisart, Prüfauftragszeile.Ergebnisart::"---");
      IF NOT Prüfauftragszeile.ISEMPTY() THEN
        Rec.MARK(TRUE);

      Window.UPDATE(1, ROUND(RecNo / RecCount * 10000, 1));

    UNTIL(Rec.NEXT() = 0);

    Window.CLOSE();
    Rec.MARKEDONLY(TRUE);
    CurrForm.UPDATECONTROLS();

  END;
END;


wäre echt super , wenn ihr mir da helfen könnt.

vielen dank,
double_o
Zuletzt geändert von double_o am 30. Mai 2008 21:06, insgesamt 1-mal geändert.

28. Mai 2008 13:44

Der Teil hier
Code:
Rec.MARKEDONLY(TRUE);
CurrForm.UPDATECONTROLS();

gehört nicht in die REPEAT-Schleife.

Edit: Sorry, hatte mich verguckt.

Statt UPDATECONTROLS würde ich es zunächst mit einem UPDATE(FALSE); probieren.

28. Mai 2008 18:47

hab den teil in der schleife geändert , und es kommt zu folgender fehlermeldung:

CurrForm.UPDATE kann von hier aus nicht aufgerufen werden.

vg

28. Mai 2008 23:20

double_o hat geschrieben:CurrForm.UPDATE kann von hier aus nicht aufgerufen werden.

In welchem Trigger steht der Programmcode denn?

29. Mai 2008 13:52

programmcode steht im trigger "OnValidate()"

vg

29. Mai 2008 18:58

Setz mal deinen Code statt hier in den OnAfterGetRecord-Trigger.

29. Mai 2008 22:01

funkt leider auch nicht.
ich denke , dass ich meine fehlerbeschreibung etwas ändern bzw. ergänzen muss.
wie es aussieht , möchte er etwas in die source table schreiben oder verändern.
dies ist die fehlermeldung , die ich anfangs kurz erwähnt habe.


"Prüfauftragskopf kann in diesem Formular nicht geändert werden"

vg

29. Mai 2008 22:18

Die Meldung sagt mir in dem Zusammenhang gar nichts ... :-(
Wozu arbeitest du mit dem Statusfenster? Das schluckt ziemlich viel Performance.

Hast du den letzten Test mit oder ohne Update statt Updatecontrols gemacht?

Kommt die Meldung noch, wenn du diesen - und nur diesen - veröffentlichten und kompletten Quelltext komplett auskommentierst?

30. Mai 2008 21:11

anbei der geänderte code.
ich weiss zwar nicht , was er genau macht , es scheint aber zu funktionieren.

Code:


OnAfterValidate()

IF (PrüfungsFilter = '') THEN BEGIN
  Rec.CLEARMARKS();
  Rec.MARKEDONLY(FALSE);
END ELSE BEGIN

  CLEAR(Window);
  Window.OPEN(Text001 + '\@1@@@@@@@@@@@@@@@');
  Window.UPDATE(1, 0);
  Rec.CLEARMARKS();
  RecCount := Rec.COUNT();
  RecNo := 0;
  IF (Rec.FIND('-')) THEN BEGIN
    REPEAT
      RecNo += 1;

      Prüfauftragszeile.RESET();
      Prüfauftragszeile.SETRANGE("Prüfauftragsnr.", Rec."Nr.");
      Prüfauftragszeile.SETRANGE(Prüfung, PrüfungsFilter);
      Prüfauftragszeile.SETRANGE(Ergebnisart, Prüfauftragszeile.Ergebnisart::"---");
      IF NOT Prüfauftragszeile.ISEMPTY() THEN
        Rec.MARK(TRUE);

      Window.UPDATE(1, ROUND(RecNo / RecCount * 10000, 1));

    UNTIL(Rec.NEXT() = 0);

    Window.CLOSE();
    Rec.MARKEDONLY(TRUE);

  END;
  CurrForm.UPDATE(FALSE);
END;


vielen dank nochmals,