Positionsnummer lfd vergeben
Hallo,
ich habe eine Tabelle mit Namen Auftrag, in der alle Kopfdaten wie Kundenname, Datum Lieferung usw. stehen.
Zur Tabelle Auftrag gehört eine Untertabelle Position, in der die zu liefernden Produkte stehen.
Nun suche ich einen Weg, wie bei der Eingabe die Positionsnummern automatisch vergeben werden.
Beispiel:
Ich drücke zum ersten Mal auf das "+" (Datensatz hinzufügen), dann erscheint im Feld Position.Positionsnummer der Wert 1.
Beim nächsten hinzuzufügenden Positionssatz die 2 usw.
Kennt jemand einen Weg?
6 Antworten
-
Hallo, eine Möglichkeit ist, in der Positionstabelle ein Funktionsfeld zu erstellen und dort folgenden Code zu hinterlegen:
let myNr := number(VERKNÜPFUNG_AUFTRAG);
let thisNr := number(Nr);
cnt(select POSITIONEN where number(VERKNÜPFUNG_AUFTRAG) = myNr and number(Nr) <= thisNr)
Die Positionen werden dann auch neu durchnummeriert, wenn man eine löscht.
-
Lieber wäre mir jedoch ein Trigger der direkt mit dem Erstellen des Datensatzes aktiv wird.
Gibt es dafür auch eine Lösung?
-
Hallo,
in derlei Fällen verstecke ich die Verknüpfung gerne und ersetze sie durch das Gestaltungselement "Ansicht" mit gleichem Inhalt. Den wegfallenden "+"-Button ersetzte ich durch eine Befehlsschaltfläche, mit der ich einen neuen Datensatz in der Untertabelle erstelle und die gewünschten Einträge direkt eintrage, z. Bsp.:
let my := this;
let newPos := create POSITIONEN;
let myPosNr := cnt(select POSITIONEN where number(VERKNÜPFUNG_AUFTRAG) = my and number(Nr) <= newPos);
newPos.(Position := myPosNr);
popupRecord(newPos)
(ohne Gewähr, Tabellen- und Feldnamen sind anzupassen)
lg, Torsten
-
Hallo liebes Forum,
auf meiner Suche nach einer Passenden Lösung für mein Problem, bin ich auf diesen Beitrag hier gestoßen. Grundsätzlich nutze ich für meine Problematik nahezu exakt den oben dargestellten Skript:
let myNr := number(VERKNÜPFUNG_AUFTRAG);
let thisNr := number(Nr);
cnt(select POSITIONEN where number(VERKNÜPFUNG_AUFTRAG) = myNr and number(Nr) <= thisNr)
Nun versuche ich diesen so anzupassen, dass die ausgewählten Positionen - welche mitunter einen bestimmten Wert gleich/doppelt aufweisen - genau jene Dopplungen in der Zählung zusammenfassen, als Einheit sehen und dann mit der zwei weiterzählen.
Praktisches Bsp.:
Ich hab vier Datensätze die (automatisch) durchnummeriert werden müssen.
Von diesen vier Datensätzen enthalten zwei, einen übereinstimmenden Wert.
Nun soll der Code diese Beiden Datensätze mit der Nummer 1 versehen und dann bei den anderen beiden (abweichenden) Werten, normal weiterzählen.Sprich: 1,1,2,3,(...)
Der Code kommt in ein Funktionsfeld.
Viele Dank vorab und Grüße aus dem Vogtland
-
Hallo Deniz. Für ein Funktionsfeld sehe ich schwarz. Da wird es zirculäre Referencen geben. Da der Wert der laufenden Nummer verglichen werden muß. Ich schlage Dir vor, ein Zahlenfeld anzulegen (Pos) und in dem Feld, welcher die Werte enthält (WERT) im Trigger nach Änderung das Script einzutragen. Jetzt wird bei jedem neuen Wert eine fortlaufende Nummer vergeben und die mehrfachen Werte bekommen die gleiche Nummer. Mirko
for j in (select Positionen)[Pos = null] order by number(Nr) do let myPosNr := last(((select Positionen) order by Pos).Pos) + 1; let vname := j.WERT; let nummer := text(number(j.Nr)); let duploArray := for i in (select Positionen)[WERT = vname] do i.number(Nr) end; if contains(concat(duploArray), nummer) and number(j.Nr) != min(duploArray) then j.(Pos := last(((select Positionen) order by Pos)[WERT = vname].Pos)) else j.(Pos := myPosNr) end end
Content aside
- vor 2 JahrenZuletzt aktiv
- 6Antworten
- 1658Ansichten
-
2
Folge bereits