Version Laufende Nummer in einer Tabelle

Getting started ... Alles für einen gelungenen Start.
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

Version Laufende Nummer in einer Tabelle

Beitrag von HH_ABAP (Specialist / 262 / 144 / 1 ) »
Hallo,

ich sollte in einer Tabelle Zähler haben, weil mehrere Versionen zu einer Meldung möglich sind.
Wie kann ich das programmieren?
Bitte siehe den Screenshot.

Vielen Dank & Grüße
HH_ABAP
Grafik.png

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Version Laufende Nummer in einer Tabelle

Beitrag von DeathAndPain (Top Expert / 1952 / 259 / 413 ) »
Wenn ich das richtig verstehe, willst Du in die Tabelle Einträge einfügen, bei denen QMNUM gleich ist und willst dann jeweils eine neue Nummer für VERSION haben?

Dafür gibt es zwei Lösungsansätze: einen einfachen und einen professionellen.

Der einfache sieht so aus:

Code: Alles auswählen.

DATA hoechste_versionsnummer type LFNUM.

SELECT MAX( VERSION ) into hoechste_versionsnummer FROM ZTABELLE
 WHERE QMNUM = DeineQMNUM.

ADD 1 TO hoechste_versionsnummer. " Damit hast Du die nächste freie Nummer
Der professionelle Ansatz sieht so aus, dass Du in der Transaktion SNUM ein Nummernkreisobjekt anlegst. Dann kannst Du Dir mit dem Funktionsbaustein NUMBER_GET_NEXT immer die nächste freie Nummer geben lassen. Das hat auch den Vorteil, dass es keine Probleme gibt, falls zwei Anwender genau zeitgleich einen neuen Datensatz anlegen wollen (bei obigem Code könnte es dann theoretisch passieren, dass beide dieselbe freie Nummer erhalten).

Re: Version Laufende Nummer in einer Tabelle

Beitrag von msfox (Specialist / 366 / 56 / 76 ) »
Wie soll das mit dem Nummerkreis gehen?
Dieser zählt doch die Nummer immer um eins hoch.
Die Tabelle kann nun aber so aussehen:

QMNUM VERSION
A 1
A 2
A 3
B 1
B 2

Nun soll B mit neuer Version eingefügt werden. NUMBER_GET_NEXT würde hier aber vermutlich 4 liefern. Das ist nicht gewollt, da 3 für B die nächste Version ist.
...außer, man legt für jede QMNUM ein eigenes Nummerkreisobjekt an, das ist aber vermutlich übertrieben...

Re: Version Laufende Nummer in einer Tabelle

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Ich schätze, du solltest dir mal den Änderungsdienst anschauen und prüfen, ob der a) für Meldungen funktioniert und b) für euch in Frage kommt.

Re: Version Laufende Nummer in einer Tabelle

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
DeathAndPain hat geschrieben:
26.04.2019 15:26
Wenn ich das richtig verstehe, willst Du in die Tabelle Einträge einfügen, bei denen QMNUM gleich ist und willst dann jeweils eine neue Nummer für VERSION haben?

Dafür gibt es zwei Lösungsansätze: einen einfachen und einen professionellen.

Der einfache sieht so aus:

Code: Alles auswählen.

DATA hoechste_versionsnummer type LFNUM.

SELECT MAX( VERSION ) into hoechste_versionsnummer FROM ZTABELLE
 WHERE QMNUM = DeineQMNUM.

ADD 1 TO hoechste_versionsnummer. " Damit hast Du die nächste freie Nummer
(....) Das hat auch den Vorteil, dass es keine Probleme gibt, falls zwei Anwender genau zeitgleich einen neuen Datensatz anlegen wollen (bei obigem Code könnte es dann theoretisch passieren, dass beide dieselbe freie Nummer erhalten).
Dazu macht man obige Anweisung erst unmittelbar vor dem Update und fertig. Wenn man natürlich die Nummer zieht und dann erst durch den Prozess läuft, ist klar dass jeder andere dieselbe Nummer bekommt.

Nummernkreisobjekte sind ziemlich oversized....


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Version Laufende Nummer in einer Tabelle

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
ralf.wenzel hat geschrieben:
27.04.2019 16:09
Nummernkreisobjekte sind ziemlich oversized....
??? Fünf Clicks und fertig

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
DeathAndPain

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Version Laufende Nummer in einer Tabelle

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Ja, und dann muss ich den NUMBER_GET_NEXT aufrufen. Im Vergleich zu einem einzigen SELECT finde ich das etwas oversized. Nummernkreisobjekte würde ich für sowas wie Belegnummern vergeben, aber nicht für Positionsnummern, die wirklich nur eine laufende Nummer darstellen (wie diese Versionsnummer), die ich auch noch ganz am Schluss vergeben kann.

Wir machen das im aktuellen Projekt auch so: Untersuchungsauftragnr. per Nummernkreisobjekt, Counter per SELECT MAX+1.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Version Laufende Nummer in einer Tabelle

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
ralf.wenzel hat geschrieben:
28.04.2019 21:26
Ja, und dann muss ich den NUMBER_GET_NEXT aufrufen. Im Vergleich zu einem einzigen SELECT finde ich das etwas oversized. Nummernkreisobjekte würde ich für sowas wie Belegnummern vergeben, aber nicht für Positionsnummern, die wirklich nur eine laufende Nummer darstellen (wie diese Versionsnummer), die ich auch noch ganz am Schluss vergeben kann.

Wir machen das im aktuellen Projekt auch so: Untersuchungsauftragnr. per Nummernkreisobjekt, Counter per SELECT MAX+1.


Ralf
Mea culpa. Leider hat Ralf völlig recht. Für Positionsnummern sind Nummerkreise definitiv nicht das Mittel der Wahl. Evtl. dann dafür sorgen, dass die Hauptnummer ( QMNUM ) vom Programm gesperrt wird - dann kann kein Anderer reinpfuschen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Version Laufende Nummer in einer Tabelle

Beitrag von IHe (Specialist / 150 / 36 / 49 ) »
Moinsens,

wenn eine neue Zeile mit neuer lfd.Nr. in die Tabelle eingefügt werden soll reicht es wie schon erwähnt die nächste lfd.Nr. direkt vorher per Select zu ermitteln. Beim Datenbank-INSERT dann sy-subrc=4 abfangen und ggf. die lfd.Nr. einen hochzählen (oder nächste lfd.Nr. neu ermitteln), das sollte doch reichen.
Ingo Hoffmann

ECC|S/4HANA|BTP
dbh SAP Solutions

Re: Version Laufende Nummer in einer Tabelle

Beitrag von DeathAndPain (Top Expert / 1952 / 259 / 413 ) »
Es stimmt schon, dass ein Nummernkreisobjekt für ein positionsnummernartiges Feld keinen Sinn macht. Ich bin aber ganz klar ein Fan von einer ordentlichen Belegsperre anstatt UPDATE direkt nach SELECT und beten, dass nie ein anderer Benutzer genau daziwschentrifft (Ralf) oder blindem Update und weiter hochzählen, wenn ich auf die Nase falle (IHe). Zumal der Fragesteller von "Versionen einer Meldung" gesprochen hat. Da sollte es auf jeden Fall Sinn machen, die Meldung vor dem Erstellen einer neuen Version zu sperren und nicht zwei Benutzer zeitgleich unterschiedliche neue Versionen erstellen zu lassen, bei denen dann ausgewürfelt wird, wer später speichert und sich mit seiner Version demnach durchsetzt.

Also, HH_ABAP, über Sperrobjekte belesen und ein passendes für Deine Meldungen implementieren: https://help.sap.com/saphelp_nwmobile71 ... ameset.htm

Re: Version Laufende Nummer in einer Tabelle

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Ich hab gerade nochmal nachgesehen, weil es in meinem Kopf klingelte: Wir sperren die MAX+1 in der Tat, um zu verhindern, dass jemand anderes sich die auch noch greift.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2822
Views
Variablenname + Laufende Nummer verbinden
von metbo » 15.04.2010 15:10 • Verfasst in ABAP® für Anfänger
5
Antw.
6397
Views
Bilanzstrukturen laufende Einstellungen
von Blueshape » 17.01.2008 14:29 • Verfasst in Financials
0
Antw.
1060
Views
HRFOMRS / SMARTFORMS laufende Bezüge - Andruck Jahressumme
von Sammi16 » 17.09.2007 10:50 • Verfasst in Human Resources
1
Antw.
1481
Views
Prozessauftrag - Nummer fehlt
von KleinerEisbaer » 13.09.2007 11:37 • Verfasst in ABAP® für Anfänger
0
Antw.
2153
Views
Materialfindung über EAN-Nummer
von Saga » 19.07.2006 11:07 • Verfasst in Sales and Distribution

Aktuelle Forenbeiträge

Regex in where
vor 8 Stunden von edwin 7 / 166
Daten an Tabelle binden
vor 22 Stunden von Bright4.5 3 / 1487

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Regex in where
vor 8 Stunden von edwin 7 / 166
Daten an Tabelle binden
vor 22 Stunden von Bright4.5 3 / 1487

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822