aktuellste Tabellen Zeile oben stehen lassen

17. April 2009 13:07

Hallo,

ich habe mal wieder ein Problem, was ich irgendwie nicht hinbekomme.

Problem 1:
In einer Packkarte (60022) werden per Auswahlfeld neue Artikel hinzugefügt, sei es über Scanner, Auswahl oder direkt Eingabe.
Dieser Artikel wird nach Überprüfung in der Karton-Subform (60023) als neue Zeile hinzugefügt.

Das Problem ist dabei, dass er immer bei der ersten Position stehen bleibt. Da wir die Karte so angepasst haben, dass sie so gut wie komplett ohne Maus läuft, müsste nun auch sinnvoller weise, die oberste Zeile, immer die jenige Zeile sein, die als letztes hin zu kam, da man beim packen ja sehen soll, welcher Artikel grad dazukam und ob die Menge stimmt.
Derzeit ist es jedoch so, dass neue Zeilen unten anschließen und ab der 8. Zeile sieht man nicht mehr was dazu kam, da der Focus immer noch in der ersten Zeile steht.

Mein erster Ansatz war einfach die Sortorder von Ascending auf Descending zu setzen, das bringt aber nix, dann kommen neue Zeilen halt oben drauf und verschwinden oben aus dem Sichtfeld.
Anschließend habe ich diverse Versuche mit FIND gestartet, lustigerweise zeigte er mir dabei aber immer nur alle aktuellen Zeilen, jedoch mit dem Inhalt des über FIND gefundenen Record.
Mein letzter Versuch lief über die GETPOSITION und SETPOSITION Methode, aber auch die brachte mir keine Erfolg und scheint wohl auch dafür nicht vorgesehen zu sein.

Nun hoffe ich, dass Ihr mir da weiterhelfen könnt.
Ich kann mir nicht vorstellen, dass das so schwierig sein soll, übersehe ich einfach ne Propertie? Habe da nur die SourceTablePlacement Propertie in der Richtung gefunden, aber dafür müsste die Form ja nach jedem Input neugestartet werden, dass kann auch nicht sinnvoll sein.
Oder gibt’s da einen anderen sinnvollen Weg?


Eine zweite Frage; wie gesagt, die Forms sind so konstruiert, dass sie möglichst ohne Maus auskommen.
Hinzu kommt, es gibt eigentlich auch nur ne Viertel Tastatur (ein Numpad mit ein paar Extra Tasten.)
Nun kommt es in der Auswahlsubform, sowie auch in der Karton-Subform zu Situationen, wo man nach unten und oben scrollen muss, statt nur zum nächsten Control oder nach Rechts (Tab). Gibt es eine Möglichkeit in diesen Formen den Tasten, die gleichen Funktionen wie den Pfeiltaten zu zu weisen?

Ich danke schon mal Allen, die es geschafft haben bis hier hin durchzulesen,
und hoffe, dass mir jemand helfen kann.

Gruß,
der Steffen

Re: aktuellste Tabellen Zeile oben stehen lassen

17. April 2009 13:33

Wie nun: springt der Cursor nach dem Einfügen einer neuen Zeile immer wieder nach oben, oder meinst du, dass der Cursor auf der ersten Zeile steht, sobald du einen Datensatz vor- oder zurückspringst (oder die Form soeben geöffnet hast)?

Re: aktuellste Tabellen Zeile oben stehen lassen

17. April 2009 13:54

Als Beispiel in der Subform sind 5 Zeilen zu sehen.

Erst kommt ein Karton, dann nach und nach neue Artikel.
Das Problem ist, dass der Focus im Feld jedoch immer auf dem Karton stehen bleibt, und ab einer bestimmten Anzahl an neuen Artikeln kann man die neuste Zeile dann gar nicht mehr sehen. Ich versuche das mal Grafisch darzustellen :-D, die Linien grenzen den sichtbaren Bereich ein.
so ist es derzeit:
Code:
____________________
>karton
 Artikel1
 Artikel2
 Artikel3
____________________                 
 Artikel4
 Artikel5


so sollte es sinnvoll sein:

Code:
 Karton
 Artikel1
____________________
 Artikel2
 Artikel3
 Artikel4
>Artikel5
_____________________


so sieht das alles in der Praxis aus Kartonkarte,wenn man jetzt einen neuen Artikel hinzufügen würde, würde er im nicht mehr sichtbaren Bereich sein.

Re: aktuellste Tabellen Zeile oben stehen lassen

17. April 2009 13:59

Steffen hat geschrieben:wenn man jetzt einen neuen Artikel hinzufügen würde, würde er im nicht mehr sichtbaren Bereich sein.

Also springt er nach dem Einfügen einer neuen Zeile immer wieder in die oberste?

Re: aktuellste Tabellen Zeile oben stehen lassen

17. April 2009 14:02

Genau, bzw. bewegt er sich gar nicht von der ersten Zeile weg, er hängt einfach den neuen Artikel unten ran, der Focus bleibt aber immer auf der obersten/ersten Zeile.

Re: aktuellste Tabellen Zeile oben stehen lassen

17. April 2009 14:19

Dann würde ich erst mal suchen, wieso er sich nach dem Insert so seltsam verhält. Es müsste sich irgendwo in dem Insert folgenden Code ein reset oder findfirst verstecken, denn normal ist so ein Benehmen ja nicht.

Re: aktuellste Tabellen Zeile oben stehen lassen

20. April 2009 11:27

Hm, also hab die Tabelle und auch das Validate des Felds, welches die Tabelle füllt, jetzt mal nach speziellen Events in der Richtung durchsucht, jedoch nichts gefunden.
Wenn ein Reset drin stehen würde, wäre doch sowieso die Tabelle immer mit allen bestehenden Zeilen gefüllt und bei nem Findlast/first würde doch nur eine Zeile da stehen.

Umso mehr ich herumprobiere um so mehr nähere ich mich zurzeit dem Problem, einordnen kann ich es jedoch nicht.
Im Prinzip brauchts ja nur ein FIND('+'), jedoch egal wo ich es hinpacke, es wird nicht ausgeführt solange ich nicht explizit in die Subform mit der Tabelle selber wechsel.
Ich habe es jetzt ins onMODIFY der Tabelle und auch ins VALIDATE des Auswahlfeld gepackt, ausgeführt wird es aber nur, wenn ich manuell eine Änderung in der Tabelle durchführe.
Also zB mit der Maus rein klicke und die Menge ändere. Das MODIFY über das Auswahlfeld scheint die ONMODIFY events in der Tabelle zu ignorieren.

Auch wenn ich eine Zeile in der Tabelle markiere und über das Auswahlfeld eine neue hinzufüge, fügt er die neue Zeile kommentarlos ein, die markierte Zeile bleibt aber genauso markiert, bewegt sich nicht und tja, passiert einfach mal gar nix...

So wirklich kann ich mir das nicht erklären.
Ein kurzes ACTIVATE der Subform mit der Tabelle ist natürlich auch im ONVALIDATE des Auswahlfelds vorhanden.

Re: aktuellste Tabellen Zeile oben stehen lassen

20. April 2009 11:46

Steffen hat geschrieben:und bei nem Findlast/first würde doch nur eine Zeile da stehen.

Nee, der Zeiger wird nur auf das erste bzw. letzte Record des gefundenen Sets gestellt.

Vielleicht stelle ich mir das Einfügen der Zeilen bei euch bloß falsch vor. Wenn ich allerdings testweise einen VK-Beleg mit Zeilen fülle, springt er ja auch nicht einfach nach oben. Aber deine Form kann ich ja schlecht testen. Btw: was sagt eigentlich euer MBSC dazu (oder derjenige, der die Form entwickelt hat)?

Und was für einen Primärschlüssel hat die Zeilentabelle deiner Form eigentlich? Nicht, dass da der Grund liegt, aus dem jede neue Zeile automatisch nach oben sortiert wird ...

Re: aktuellste Tabellen Zeile oben stehen lassen

20. April 2009 14:36

Ich glaube wir reden aneinander vorbei.
Wenn ich mir so eine VK Tabelle oder so anschaue, dann arbeitet man in denen ja auch immer in der aktuellen Form. Wenn ich in meinem Fall in der Tabelle, also quasi in der Subform arbeite, dann greifen auch sämtliche modify events. Das Problem ist jedoch, dass ich (ich hoffe auf dem Screenshot erkennt man das) eine Eingabe im Auswahlfeld mache, und er sich aus einer anderen Tabelle dann die Informationen zum ausgewählten Artikel holt und in die Tabelle in der Subform schreibt. Aus irgendeinem Grund greifen aber genau deswegen keinerlei Modify aktivitäten, die ich für die Tabelle unten ausgewählt habe. Mein Cursor bleibt einfach da stehen, wo ich mit der Maus als letztes drin war, als ich die Subform Aktiv bedient habe. Neue Zeilen erscheinen dann einfach eine Zeile dran, der Cursor oder meine letzte aktive Auswahl in der Subform ändern sich dann aber gar nicht. Er springt also nicht wie du denkst, in die oberste Zeile, er macht einfach gar nichts, außer die neue Zeile unten anzufügen. Da wird auch nichts neu sortiert oder Ähnliches. Der Primärschlüssel setzt sich zusammen, aus der Auftragsnr., der kartonnr. und der zeilennr.

Ach und der jenige, der die Form entwickelt hat, hat schon ewig nix mehr damit zu tun. Die Form wurde auch schon ewig nicht mehr angefasst. Die Navision Pflege/Entwicklung machen mein Kollege und seit kurzer Zeit ich und er kann sich da auch nicht so wirklich nen Reim drausmachen.

Re: aktuellste Tabellen Zeile oben stehen lassen

20. April 2009 15:56

Ja, das war wohl ein wenig aneinander vorbei geredet :wink:

Du gibst also in der Subform gar nichts ein, gell?

Re: aktuellste Tabellen Zeile oben stehen lassen

20. April 2009 15:59

das ist richtig, im normalfall wird dort nix eingegeben.
Änderungen etc. können aber natürlich da durchgeführt werden.

Re: aktuellste Tabellen Zeile oben stehen lassen

20. April 2009 16:19

Wenn ich jetzt alles richtig verstehe, könnte es so gehen:
in der Subform erstellst du eine neue Funktion, die das rec dort neu einliest und mit einem findlast (ggf. noch einem CurrForm.update(false)) endet. In der Mainform nimmst du den SubformLink weg, da dieser nun durch deine Funktion gesetzt wird (also auch Auftrags- und Kartonnummer, falls die beiden bisher über den SubformLink gesetzt wurden).

Und diese Funktion rufst du aus der Mainform auf, wann immer du das brauchst. Also auf jeden Fall im OnAfterGetCurrRecord und nachdem du in das Auswahlfeld etwas eingegeben hast.

Re: aktuellste Tabellen Zeile oben stehen lassen

20. April 2009 16:51

das schaue ich mir Morgen nochmal in Ruhe an, ich denke das auszulagern vielleicht doch ein wenig heftig, mal gucken.

Re: aktuellste Tabellen Zeile oben stehen lassen

29. April 2009 13:07

Da bin ich wieder, also das in ne Funktion auf die Tabelle zu legen, wäre doch ein zu großes Unterfangen, da doch einiges in der Form dahinter steckt und auch der Timer aus den Fugen geraten würde.
Das lassen wir mal, vielleicht kommt ja noch jemand auf nen Wahnsinnstipp, aber erstmal werden wir einfach das Feld vergrößern und somit ein paar mehr Zeilen anzeigen, das ist die einzige Lösung, die uns noch einfällt.

Nun aber noch mal zu dem anderen Problem,
kennt irgendwer eine Lösung, wie ich in einer bestimmten Form Zahlen eine andere Funktion zuweisen kann?
Also, das wenn ich z.B. die 2 drücke, ein Druck auf Pfeil nach unten simuliert wird und nicht die Feldsuche anspringt?

Re: aktuellste Tabellen Zeile oben stehen lassen

29. April 2009 21:18

Steffen hat geschrieben:Da bin ich wieder, also das in ne Funktion auf die Tabelle zu legen, wäre doch ein zu großes Unterfangen, da doch einiges in der Form dahinter steckt und auch der Timer aus den Fugen geraten würde.

Das wären 4 oder 5 Zeilen in der Subform und eine Zeile pro Aufruf in der Mainform. Was ist dir denn daran zu groß? Und was hat das mit welchem Timer zu tun?

Steffen hat geschrieben:kennt irgendwer eine Lösung, wie ich in einer bestimmten Form Zahlen eine andere Funktion zuweisen kann?
Also, das wenn ich z.B. die 2 drücke, ein Druck auf Pfeil nach unten simuliert wird und nicht die Feldsuche anspringt?

Da könnte eine Kombination aus Shortcut auf Funktion und Sendkeys gehen. Die Forensuche hilft dir sicher dabei :)

Re: aktuellste Tabellen Zeile oben stehen lassen

4. Mai 2009 09:10

McClane hat geschrieben:Da könnte eine Kombination aus Shortcut auf Funktion und Sendkeys gehen. Die Forensuche hilft dir sicher dabei :)

Ja, da bin grad dran.
Im Prinzip lege ich hinter einen Button die Funktion

Code:
IF ISCLEAR(WSHShell) THEN
  CREATE(WSHShell);
WSHShell.SendKeys('{DOWN}');


die Caption des Button nenne ich z.B. &8, dann steht auf dem Button 8.

Das Problem ist aber jetzt, zum einen muss man ja ein alt+8 drücken (alt ist auf der Tastatur nicht drauf), zum anderen springt die normale Suche aus Codeunit 1 an.

Ich befinde mich in dem Schritt ja in einer Tabelle, kann ich dort irgendwie die Eingabe abfangen, ähnlich wie es auch die Codeunit 1 macht?