Anzeige letzte Zeile in Verkaufshistorie

11. Juni 2006 17:54

Ich versuche in der Verkaufshistorie den Cursor automatisch auf die letzte Zeile zu positionieren, damit der Anwender immer direkt den aktuellsten Eintrag sieht und nicht immer runterscrollen muss. In einer anderen Form konnte ich dies mit
IF FIND('+') THEN; lösen. In der Verkaufshistorie finde ich aber keine Stelle an der ich diesen Befehl erfolgreich einsetzen könnte. Hat jemand eine Idee was ich tun könnte um das Ziel zu erreichen?

Gruß
Winfried Barz

11. Juni 2006 23:01

Wenn Du die Forms gebuchte Rechnungen, gebuchte Lieferungen usw. meinst, dann geh in die Properties der Form und setze die Eigenschaft SourceTablePlacement auf Last. Das zeigt dann immer den letzten Record an, wenn die Form geöffnet wird.

SourceTablePlacement
Use this property to tell the system what record to display when the user opens this form.

Applies to
Forms

Settings
The SourceTablePlacement settings are:

To display..................................... Choose
A specific record ............................. Record
The first record in the table .............. First
The last record in the table .............. Last
The record being shown the last
time the user displayed the form ...... Saved (default)

Comments
If you choose Record, you must use the SourceTableRecord property to define the record
you want the system to display. The system checks this property setting when it opens the
form. The system records the last record a user was viewing and saves this information in
the .zup file, a user-specific file that contains user settings

Noch kein Erfolg gehabt mit diesem Property

12. Juni 2006 08:38

Hallo,
zunächst mal vielen Dank für die schnelle Antwort. Ich habe mal versucht mit dem Property das gewünschte Ergebnis zu erreichen, leider ohne Erfolg. Es geht um die Verkaufshistorie, die ich z.B. beim Debitor über die Schaltfläche "Verkauf" aufrufen kann. Betroffen sind wohl die Forms 7171-7175 und die Codeunit 7171.

Wenn ich das Property SourceTablePlacement in der Form 7171 setze erscheint kein Datensatz mehr. Setze ich es in den Subforms 7172-7175 scheint das keine Wirkung zu zeigen.

Es wäre nett, wenn Du da nochmals drüberschauen könntest, vielleicht fällt dir noch was dazu ein. Das gewünschte Ziel soll einfach nur sein, dass der Anwender, wenn er in die Verkaufshistorie geht in jeder Belegart direkt den jeweils aktuellsten Eintrag sehen kann und nicht den ältesten.

Gruß
Winfried Barz

12. Juni 2006 09:41

Hallo Winfried,

Du musst dazu in den C/AL Code der Form 7171

dort in der Funktion SetSubMenu musst du folgende Zeilen einfügen:
Code:
[...]
        CurrForm.SalesLines.FORM.SETTABLEVIEW(SalesLine);

//hier beginnt die Änderung

        if salesline.findlast then   //oder find(-) wenn noch kein SP1
           currform.saleslines.form.setrecord(salesline);

//ende der Änderung, jetzt sollte der Cursor auf dem letzten Datensatz stehen

      END;
[...]

Läuft leider noch nicht

13. Juni 2006 15:37

Ich habe den Code in der Form 7171 eingefügt. Einziges Ergebnis wenn ich dann z.B. in der Verkaufshistorie die Aufträge anklicke ist die Fehlermeldung "Verkaufszeile kann in diesem Formular nicht verändert werden". Ein Einfluss auf die Position des Cursors ist nicht zu bemerken.

Was mir aufgefallen ist, nach dem eingefügten Code werden ja die Forms 7172-7174 noch durchlaufen und wenn ich das richtig sehe die möglichen anzuzeigenden Inhalte in eine temp. Tabelle eingelesen. Irgendwie verstehe ich den Ablauf in der Verkaufshistorie nicht.

Gruß
Winfried Barz

Diese Lösung funktioniert leider nicht

13. Juni 2006 17:17

Hmmm, ich hab's mir nicht so genau angesehen, aber die 7172-7176 sind Subforms die je nach Auswahl angezeigt werden.
Da mir ein Aufruf dieser Form aus der Debitorenkarte fehlt und auch im Menü finde ich nichts, blieb mir nur der Aufruf direkt aus dem Objektdesigner.
Ich hab es gerade mal ausprobiert, ich habe die gleiche Fehlermeldung, also muss ich wohl irgendwo einen Fehler gemacht haben.
Nimm also die Zeilen wieder raus und mache folgendes:
öffne die Subforms 7172 bis 7176 aus dem Objektdesigner mit Design und setze jeweils die Property SourceTablePlacement auf last.
Ich habe es gerade mit der 7172 getestet, wenn ich auf die ersten Optionen links in der 7171 klicke zeigt der mir jeweils den letzten Eintrag an.

....

Kommando zurück, jetzt gehts nicht mehr.....

....sehr merkwürdig...

Die Ursache dieses Phänomens ist, ich hatte die Form 7172 direkt getestet, und nicht als Subform. Wenn die Form aber als Subform geöffnet wird, haben die im Mainform gesetzten Properties und Views Vorrang.
Bei den Forms 7173 - 7176 hätte das allerdings funktioniert....
Im nächsten Posting ist eine bessere Lösung.
Zuletzt geändert von Michael Schumacher am 19. Juni 2006 01:11, insgesamt 2-mal geändert.

eine mögliche Lösung

19. Juni 2006 00:31

Hallo Winfried,
da ich jetzt selbst das Problem zu lösen hatte, hier meine Lösung:

Die sinnvollste Art ist es nämlich, einfach die neuesten noch oben zu sortieren, also descending order.

Dazu setzt du in der Form 7171 für die ersten 5 Anzeigen in der Funktion SetSubMenu
einfach den Befehl Ascending(false) ein:
Code:
        SalesLine.SETRANGE("Document Type",MenuType);
        SalesLine.ASCENDING(false); //sortiert in umgekehrter Reihenfolge
        CurrForm.SalesLines.FORM.SETTABLEVIEW(SalesLine);


für die gebuchten Belege musst du in den Properties des jeweiligen Subform-Controls die Eigenschaft SubFormView von
SORTING(Sell-to Customer No.) auf
SORTING(Sell-to Customer No.) ORDER(Descending) ändern.

nun kannst du die Form 7171 speichern.
Die Belege werden nun in umgekehrter Reihenfolge angezeigt, also der neueste oben.
Leider steht ohne weitere Änderung die Belegnummer aber nun in der untersten Zeile eines Vorgangs.

Um dies zu ändern, musst du auch in den Subforms selber (7172-7176) Hand anlegen:

In der Funktion IsFirstLine musst du die beiden find('-') durch findlast (oder meinetwegen find('+')) ersetzen.
Dann wird zwar immer noch die letzte Zeile zuerst angezeigt, aber in genau dieser Zeile steht dann fettgedruckt die Belegnummer.
Wenn du jetzt auch noch die Property SourceTablePlacement auf first setzt steht der Cursor beim öffnen der Subform auch immer auf der obersten, also neuesten Zeile.

Wenn diese Lösung auch für Dich akzeptabel ist, setze bitte im Topic des Eröffnungspostings ein [gelöst] davor.