Eigene Nummer einem Datensatz zuweisen???

Getting started ... Alles für einen gelungenen Start.
16 Beiträge • Seite 1 von 2 (current) Nächste
16 Beiträge Seite 1 von 2 (current) Nächste

Eigene Nummer einem Datensatz zuweisen???

Beitrag von Buerger (ForumUser / 11 / 0 / 0 ) »
Guten Tag!!

Ich sitze gerade an einem Abap-Projekt für die Schule. Dort habe
ich nun ein Formular programmiert, in den die ein Kunde
seine Dateneingeben kann und diese dann in die Datenbank (ZKUNDEN)
übertragen werden.

Code: Alles auswählen.

REPORT ZTEST3.

INCLUDE <icon>
MOVE ´Neues Kundenkonto erstellen´ TO sy-title.
TABLES: ZKUNDEN.

PARAMETERS: 	pkdnr LIKE ZKUNDEN-KUNDEN_NR,
		pvor LIKE ZKUNDEN-VORNAME,
		pnach LIKE ZKUNDEN-NACHNAME,
		pstrasse LIKE ZKUNDEN-STRASSE,
		pplz LIKE ZKUNDEN-PLZ,
		port LIKE ZKUNDEN-ORT,
		pemail LIKE ZKUNDEN-EMAIL,
		ptelefon LIKE ZKUNDEN-TELEFONNUMMER,
		pmobil LIKE ZKUNDEN-MOBIL.

DATA:  wakunden LIKE ZKUNDEN.

START-OF-SELECTION.
wakunden-KUNDEN_NR = pkdnr.
wakunden-VORNAME = pvor.
wakunden-NACHNAME  = pnach.
wakunden-STRASSE = pstrasse.
wakunden-PLZ = pplz.
wakunden-ORT = port.
wakunden-EMAIL = pemail.
wakunden-TELEFONNUMMER = ptelefon.
wakunden-MOBIL = pmobil.
INSERT INTO ZKUNDEN VALUES wakunden.

WRITE: ´Ihre neue Kundennummer ist die: ´, wakunden-KUNDEN_NR.
Wenn ich nun gewissen Daten in die TAbelle eingebe, wird auch ein Datensatz in der
Tabelle "ZKUNDEN" erstellt. Allerdings muss ich dann die Kundenummer immer selbst eingeben.

Ein Kunde kennt aber bei Anlegen eines neuen Kundenkontos ja seine Kundennummer noch
gar nicht. Wie kann ich denn zum Beispiel von irgendwo Kundenummern zuweisen, die ich selbst
vorher erstelle.

Muss ich dafür eine interne Tabelle anlegen, und wenn ja, wie erstelle ich diese in diesem Fall genau?? bzw., wie kann ich es schaffen, dass ich einem Kunden, der ein neues Kundenkonto über das Formular erstellt, eine Nummer oder einen anderen Eintrag, zuweise??

Ich hoffe, hier ist jemand, der das Problem versetht und mir weiter helfen kann.

Ciaoi

Buerger

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


Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Im einfachsten Fall würde ich vorschlagen:

Code: Alles auswählen.

SELECT MAX( kunden_nr ) FROM zkunden
  INTO gv_kunden_nr.

ADD 1 TO gv_kunden_nr.

wa_kunden-kunden_nr = gv_kunden_nr.   "Eventuell vorher noch mit CONVERSION_EXIT_ALPHA_INPUT konvertieren
Komplizierter geht es natürlich mit einem eigenen Nummernkreisobjekt, aber ich denke, das geht ein bisschen weit.

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Buerger (ForumUser / 11 / 0 / 0 ) »
Ich hab mich mal mit dem Nummernkreisobjekt probiert.

Ich habe die Transaktion SNRO aufgerufen. Dort gebe ich dann als nächstes einen Namen für mein Objekt ein ("ZANUMMERN"). Danach klicke ich auf das weiße Blatt "CREATE", gebe einen Short- und LongText ein. Desweiteren gebe ich als:

Subobject data element: ZARTIKEL_NR
Number length domain: NUM8
Warning % 10
Main memory buffering: on
No. of numbers in buffer 10
Group table: ZARTIKEL (eine meiner Tabellen)
Subobject field in group table: LEER
Fld No Range Element: ARTIKEL_NR (der Primärschlüssel der Tabelle ZARTIKEL)
Field int./ex. no. range no.: BEZEICHNUNG / ARTIKEL_TYP

ein und speicher erstmal über die Diskette, was gut klappt.

Klicke ich nun auf die Diskette zum speichern, so wird hierbei ein Fehler angezeigt:

"DOMAIN ZARTIKEL_NR of data elment ZARTIKEL_NR does not have value table"

Leider weiß ich noch nicht, ob ich die Felder richtig ausgefüllt habe, Wisst ihr warum dieser Fehler auftaucht?? Hab ich irgendwas bei der Pflege des Datentypen bzw. der Domain vergessen??

Ich würde mich sehr freuen, wenn mir dort wieder jemand weiter helfen kann.

Cu

Buerger

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Buerger (ForumUser / 11 / 0 / 0 ) »
Okidoki,

ich habe das es hinbekommen, die Nummern einzurichten. Nun versuche ich Sie in meinen Code zu integrieren, was bisher so aussieht.

Code: Alles auswählen.


CALL FUNCTION 'NUMBER_GET_NEXT'
    EXPORTING
        nr_range_nr = '01'
        object = KUNDEN_NR (dies ist mein primärschlüsselfeld in der Tabelle)
   IMPORTING
        number = pkdnr.

Nun wirft das Programm mir folgenden Fehler:

--------- Field "KUNDEN_NR" is unknown. It is neither in one of the specified tables nor defined by a "DATA" statement ---------

Was bedeutet dieser Fehler?? Oder was mache ich falsch, wenn ich

Code: Alles auswählen.

object = KUNDEN_NR (dies ist mein primärschlüsselfeld in der Tabelle)
aufrufe??

Muss ich eventuell was an meiner Domain (ZKUNDEN_NR) bzw. an meinem Feld KUNDEN_NR in der Tabelle ZKUNDEN ändern??

Ciaoi

Buerger

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Buerger (ForumUser / 11 / 0 / 0 ) »
OK, auch dieses Problem konnte ich lösen. Die Zeile muss so aussehen:

Code: Alles auswählen.


object = ZKUNDEN-KUNDEN_NR

Das ganze lässt sich nun ohne Fehler kompilieren. Allerdings kommt nun immer ein Fehler, wenn ich das Kundenformular ausfülle und auf bestätigen drücke:

"CALL_FUNCTION_CONFLICT_TYPE

The call to the function module "NUMBER_GET_NEXT" is incorrect:

The function module interface allows you to specify only field of a particular type under OBJECT. The field "ZKUNDEN-KUNDEN_NR" specified hier has a different field type."

Ich hoffe, dass jemand von Euch weiß, wie ich hier jetzt weiterkomme, denn ich glaube, dass ich ziemlich nah an meinem ZIel bin.

Also, auf viele nützliche Antworten. ;)

Ciaoi

Buerger

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Ich hoffe, daß eine nützliche Antwort reicht. :wink:

Code: Alles auswählen.

OBJECT = 'ZANUMMERN'
sollte eher richtig sein.

Und als IMPORTING-Parameter dann die nächste freie Nummer entgegen nehmen.

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von inab (ForumUser / 69 / 0 / 6 ) »
Hallo,

schau Dir vielleicht auch mal die Doku zu dem F-Baustein Number_get_next an !

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Buerger (ForumUser / 11 / 0 / 0 ) »
Ratazong hat geschrieben:

Code: Alles auswählen.

OBJECT = 'ZANUMMERN'
Also das hat super geklappt. Nun legt mir das Programm schon einmal einen Kunden an, mit den Daten die ich im Formular dann eingebe und speicher. Tja, leider kann er noch nicht mehr Kunden anlegen, was wohl mit der Funktion "NUMBER_GET_NEXT" zusammen hängt.... ich denke, dort fehlt mir nun wohl noch ein zusatz. ich werd mir jetzt erstmal die funktion genauer anschauen.

Vielleicht habt ihr ja noch bzw. schon eine Idee, woran es liegen könnte, dass bisher erst ein kunde angelegt bzw. in der datenbank gespeichert werden kann!?

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Buerger (ForumUser / 11 / 0 / 0 ) »
Leider komme ich wieder mal nicht weiter....

Mein Programm legt mir nun, nach Angabe der Daten im Formular, einen Kunden mit einer Kundennummer ein. Starte ich dann das Programm neue, kann ich in dem dann wiedergeöffneten Kundenformular weitere Daten eingeben. Gebe ich diese nun ein und sicher diese wieder, so wird mir aber leider kein neuer Kunde angelegt. Dies ist mein aktueller Quellcode:

Code: Alles auswählen.


REPORT ZTEST3.

INCLUDE <icon>.

MOVE 'Neues Kundenkonto erstellen' TO sy-title.

TABLES: ZKUNDEN.

DATA: itskunden TYPE TABLE OF ZKUNDEN with header line.

SELECT KUNDEN_NR INTO TABLE itskunden
FROM ZKUNDEN.

PARAMETERS: pkdnr LIKE ZKUNDEN-KUNDEN_NR,
pvor LIKE ZKUNDEN-VORNAME,
pnach LIKE ZKUNDEN-NACHNAME,
pstrasse LIKE ZKUNDEN-STRASSE,
pplz LIKE ZKUNDEN-PLZ,
port LIKE ZKUNDEN-ORT,
pemail LIKE ZKUNDEN-EMAIL,
ptelefon LIKE ZKUNDEN-TELEFONNUMMER,
pmobil LIKE ZKUNDEN-MOBIL.

DATA wakunden LIKE ZKUNDEN.

START-OF-SELECTION.
wakunden-KUNDEN_NR = pkdnr.
wakunden-VORNAME = pvor.
wakunden-NACHNAME = pnach.
wakunden-STRASSE = pstrasse.
wakunden-PLZ = pplz.
wakunden-ORT = port.
wakunden-EMAIL = pemail.
wakunden-TELEFONNUMMER = ptelefon.
wakunden-MOBIL = pmobil.

IF wakunden-KUNDEN_NR IS INITIAL.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '01'
object = 'ZANUMMERN'
IMPORTING
number = wakunden-KUNDEN_NR.
ENDIF.
INSERT INTO ZKUNDEN VALUES wakunden.

WRITE: wakunden-KUNDEN_NR.

Ich weiß zur Zeit mal leider wieder einfach nicht mehr weiter, da ich schon sämtlich Sachen umgeschrieben hab und es immer noch nicht klappt.....

Kann mir vielleicht nochmal jemand helfen und weiß eventuell wo mein Problem liegt?? Also, warum er mir nur einen Kundensatz in der Tabelle erzeugen kann??

Ich wäre Euch sehr sehr dankbar.

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von inab (ForumUser / 69 / 0 / 6 ) »
Hallo,

bekommst Du eine Fehlermeldung ??

Ich würde ausserdem noch eine Fehlerbehandlung für den F-Baustein-Aufruf einbauen, und für den insert einbauen falls da mal etwas schief geht !


Gruss

Ingo

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Buerger (ForumUser / 11 / 0 / 0 ) »
Nein, eine Fehlermeldung bekomme ich leider nicht.

Er fügt nur keinen Datensatz in die Tabelle ein. Ich möchte ja einfach nur eine Eingabemaske erzeugen, wovon die Eingaben dann in
die Datenbank geschrieben werden. Leider klappt das aber nicht mit diesem Code...

Hast Du / hat jemand anderes eventuell eine Idee wie ich das machen kann bzw. wie ich den Code dafür umschreiben muss??


Ciaoi

Buerger

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von inab (ForumUser / 69 / 0 / 6 ) »
HAllo Buerger,


ad 1: Was bezwekst Du mit dem Statement SELECT KUNDEN_NR INTO TABLE itskunden FROM ZKUNDEN. ?? Du benutzt die Daten nirgendwo !!
ad 2: Zu Testtwecken setze bau doch bitte einmal nach dem Funktionsbausteinaufruf ein kommando Write:/Sy-subrc. und nach dem Insert das gleiche kommando ein. Dein Write-Statement
WRITE: wakunden-KUNDEN_NR. wandle bitte um in WRITE: / wakunden-KUNDEN_NR.

Bin mal gespannt auf die Ausgabe beim ersten und zweiten Lauf des Progarmms !

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Vielleicht hilft ja auch ein

Code: Alles auswählen.

COMMIT WORK.
am Ende.

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Buerger (ForumUser / 11 / 0 / 0 ) »
Hi,

zu erst eimal zu ad 2:

Die Ausgabe sieht so aus:

0
0
900103 (aktuelle Kundennummer, wird bei jedem Aufruf um 1 hochgezählt)

Da ich das Programm schon bzw. den Nummernkreis schon oft aufgerufen habe steht die Nummer schon bei 900103. Nach einem weiteren Aufruf und einem weiteren Füllen der Maske bzw. Parameters mit anschließender Speicherung würde Sie dann um 1 erhöht auf 900104 stehen.

Er hat also eine Kundennummer in de Tabelle wakunden gepackt. Die bräuchte ich ja wie die anderen Daten adnn nur noch in die Tabelle "ZKUNDEN" bringen, oder??

zu ad1:

Die Tabelle itskunden, macht hier keinen Sinn, das stimmt. War von mir noch aus einer alten Fassung des Programm. Werde ich jetzt mit rausnehmen.

Muss ich denn jetzt nur noch die Werte in die Tabelle ZKUNDEN bringen (siehe auch Frage 1) oder muss ich jetzt noch was anderes an Quellcode verändern vorher?

Re: Eigene Nummer einem Datensatz zuweisen???

Beitrag von Buerger (ForumUser / 11 / 0 / 0 ) »
So, es läuft, wie ich es mir vorstelle...

Vielen Dank erstmal an Euch alle für die Hilfe ;)

Hier ist mal der Quellcode:

Code: Alles auswählen.


REPORT ZTEST4.

INCLUDE <icon>.

MOVE ´Neues Kundenkonto erstellen´ TO sy-title.

TABLES: ZKUNDEN.

PARAMETERS: 	pkdnr LIKE ZKUNDEN-KUNDEN_NR,
		pvor LIKE ZKUNDEN-VORNAME,
		pnach LIKE ZKUNDEN-NACHNAME,
		pstrasse LIKE ZKUNDEN-STRASSE,
		pplz LIKE ZKUNDEN-PLZ,
		port LIKE ZKUNDEN-ORT,
		pemail LIKE ZKUNDEN-EMAIL,
		ptelefon LIKE ZKUNDEN-TELEFONNUMMER,
		pmobil LIKE ZKUNDEN-MOBIL.

DATA wakunden LIKE ZKUNDEN.

START-OF-SELECTION.
Wakunden-KUNDEN_NR = pkdnr.
Wakunden-VORNAME = pvor.
Wakunden-NACHNAME = pnach.
Wakunden-STRASSE = pstrasse.
Wakunden-PLZ = pplz.
Wakunden-ORT = port.
Wakunden-EMAIL = pemail.
Wakunden-TELEFONNUMMER = ptelefon.

IF wakunden-KUNDEN_NR IS INITIAL.

CALL FUNCTION ´NUMBER_GET_NEXT´
EXPORTING
Nr_range_nr = ´01´
Object = ´ZANUMMERN´
IMPORTING
Number = wakunden-KUNDEN_NR.
ENDIF.

MOVE wakunden TO ZKUNDEN.

WRITE: / wakunden-KUNDEN_NR.

Habt ihr noch ne Idee, wie ich schon bei Eingabe eines neuen Datensatzes überprüfen kann, ob der Datzensatz in der Tabelle ZTABLE schon vorhanden ist?? Muss ich dafür die interne Tabelle "wakunden" benutzen??

Viele Grüße

Buerger

Vergleichbare Themen

4
Antw.
5328
Views
Neuer Datensatz (fortlaufende Nummer)
von ServantOfSonata » 09.12.2015 14:40 • Verfasst in ABAP® für Anfänger
7
Antw.
13160
Views
SQL letzter Datensatz
von kostonstyle » 05.09.2008 14:17 • Verfasst in ABAP® für Anfänger
1
Antw.
1857
Views
Prozessauftrag - Nummer fehlt
von KleinerEisbaer » 13.09.2007 11:37 • Verfasst in ABAP® für Anfänger
0
Antw.
2707
Views
Materialfindung über EAN-Nummer
von Saga » 19.07.2006 11:07 • Verfasst in Sales and Distribution
5
Antw.
4944
Views
Aktuellster Datensatz aus Infotyp
von ostpower » 19.08.2011 16:15 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

BAPI zur ABSO?
vor 20 Stunden von DeathAndPain 2 / 400
Materialstammerweiterung: Neuer Reiter
vor einer Woche von DeathAndPain gelöst 4 / 1032
Ermittlung der Arbeitstage (Mosid)
vor einer Woche von Radinator 11 / 46711
LSMW-Problem
vor 3 Wochen von DeathAndPain gelöst 6 / 4594

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

BAPI zur ABSO?
vor 20 Stunden von DeathAndPain 2 / 400
Materialstammerweiterung: Neuer Reiter
vor einer Woche von DeathAndPain gelöst 4 / 1032
Ermittlung der Arbeitstage (Mosid)
vor einer Woche von Radinator 11 / 46711
LSMW-Problem
vor 3 Wochen von DeathAndPain gelöst 6 / 4594