Nicht existente Datensätze ausgeben

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Nicht existente Datensätze ausgeben

Beitrag von Beginner014 (ForumUser / 46 / 4 / 0 ) »
Liebes Forum,

ich bin noch ein ziemlicher Neuling in Sachen ABAP und stehe total auf der Leitung.

Ich möchte im Selektionsbildschirm mehrere Materialnummern eingeben und es soll schlicht und einfach nur getestet werden ob diese Materialnummern in der MARA angelegt sind oder nicht.

Die Nummern die nicht angelegt sind, sollen ausgegeben werden. Später soll das ganze noch erweitert werden, doch momentan scheitere ich schon daran. Kann mir jemand vielleicht einen Denkanstoß oder Lösungsansatz geben?

Ich habe eine Struktur definiert in der momentan nur die Matnr. steht. Das erste Problem ist schon einmal, wie ich in den Select Options eine Mehrfachselektion hinbekomme?

Code: Alles auswählen.

START-OF-SELECTION.

  SELECTION-SCREEN BEGIN OF BLOCK anzeige WITH FRAME TITLE text-001.
  SELECT-OPTIONS so_matnr FOR wa_martxt-matnr OBLIGATORY.
  SELECTION-SCREEN END OF BLOCK anzeige.

END-OF-SELECTION.
Danach selektiere ich die eingegeben Materialnummern aus der Mara, doch wie überprüfe ich ob diese vorhanden sind, bzw. gebe die nicht vorhandenen aus? Hätte diese in meine interne Tabelle geschrieben und dann in einem ALV Grid ausgegeben, doch soweit kommt es leider nicht.

Im Grunde ist das ganze wohl relativ einfach aber ich steh wirklich gerade mitten im Wald.

Vielen Dank schon einmal für eure Hilfe!

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


Re: Nicht existente Datensätze ausgeben

Beitrag von Pyro (Specialist / 121 / 14 / 18 ) »
über select-options hat man doch eine Mehrfachselektion ... kommt aber evtl. noch darauf an, wie du deine wa_martxt deklariert hast.

Wenn du die Mehrfachselektion eingebaut hast, dann bekommst du davon ja gleich eine Range zurück, mit der du direkt über IN auf die DB gehen kannst. Aus dieser selektierst du dann in eine kleine extratabelle alle auf die Bedingung passenden MatNummern und gleichst diese in einem Loop mit der Range aus dem so ab (falls nur einzelwerte eingegeben werden dürfen)

Re: Nicht existente Datensätze ausgeben

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hallo Beginner014,

ich würde das in etwa so lösen:

Code: Alles auswählen.

PROGRAM ztest.
TABLES: mara.

"interne Tabelle mit in MARA vorhandenen Materialnummern
TYPES: BEGIN OF t_mara,
  matnr TYPE matnr,
  lvorm TYPE lvoma,
END OF t_mara.

DATA: gt_mara TYPE HASHED TABLE OF t_mara WITH UNIQUE KEY matnr,
      wa_mara LIKE LINE OF gt_mara.

SELECTION-SCREEN BEGIN OF BLOCK anzeige WITH FRAME TITLE text-001.
SELECT-OPTIONS so_matnr FOR mara-matnr NO INTERVALS.
SELECTION-SCREEN END OF BLOCK anzeige.

START-OF-SELECTION.

  IF so_matnr IS INITIAL.
    MESSAGE 'bitte Selektion einschränken!' TYPE 'I' DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.

  "Materialsätze lesen
  SELECT matnr lvorm FROM mara APPENDING TABLE gt_mara
    WHERE matnr IN so_matnr.

  "Ausgeben der Sätze, welche nicht in MARA drin sind
  LOOP AT so_matnr.

    READ TABLE gt_mara INTO wa_mara
    WITH TABLE KEY matnr = so_matnr-low.

    IF sy-subrc = 0 AND wa_mara-lvorm = 'X'.
      WRITE: so_matnr-low, ' ist zum Löschen vorgemerkt'.
      NEW-LINE.
    ELSEIF sy-subrc <> 0.
      WRITE: so_matnr-low, ' ist in MARA nicht vorhanden'.
      NEW-LINE.
    ENDIF.

  ENDLOOP.
Voraussetzung dafür wäre, dass die (über Mehrfachselektion vorgegebenen) zu prüfenden Materialnummern alle einzeln eingegeben werden, also keine Intervalle und auch keine Wildcards verwendet werden. Bei Intervallen und Wildcards hätte man zusätzlich das Problem, dass man sich eine Tabelle mit allen theoretisch möglichen Materialnummern aufbauen müsste. Bei uns sieht eine Materialnummer so aus: X123.4567.89
Solltest du nun bei der Selektion X123.4567* eingeben, so fragst du ja eigentlich eine Range X123.4567.00 - X123.4567.99 ab. Theoretisch machbar wären aber auch solche Nummern wie X123.4567.1A, X123.4567.YZ usw. Diese möchtest du aber in der Auswertung höchstwahrscheinlich nicht sehen.

p.s: auch wenn das so klingt, START-OF-SELECTION steht nicht für die Stelle, an der man seinen Selektionsbildschrim deklariert. Siehe dazu
http://help.sap.com//saphelp_47x200/hel ... ameset.htm

Folgende Benutzer bedankten sich beim Autor Alexander D. für den Beitrag:
Beginner014

schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Nicht existente Datensätze ausgeben

Beitrag von Beginner014 (ForumUser / 46 / 4 / 0 ) »
Vielen Dank für eure Hilfe,

das ganze funktioniert jetzt tatsächlich wie es sollte :)

Ich wollte es nun noch so erweitern, dass erst MARA auf die eingegebenen Nummern geprüft wird, gibt es diese prüft er in der MAKT ob ein Kurztext mit übergebenem Sprachenschlüssel existiert. Falls nicht gibt er mir ebenfalls einen Fehler aus.

Leider funktioniert das nicht so wie ich mir das überlegt hatte:

Code: Alles auswählen.

LOOP AT so_matnr.

    READ TABLE gt_mara INTO wa_mara
    WITH TABLE KEY matnr = so_matnr-LOW.

    IF sy-subrc = 0.

      READ TABLE gt_makt INTO wa_makt
      WITH TABLE KEY matnr = so_matnr-LOW.

      IF sy-subrc <> 0.
        WRITE: so_matnr-LOW, 'Text missing'.
        NEW-LINE.
      ENDIF.
    ELSEIF sy-subrc <> 0.
      WRITE: so_matnr-LOW, 'Basic Data missing.'.
      NEW-LINE.
    ENDIF.

  ENDLOOP.
Bei dem READ TABLE im If Block hätte ich rein theoretisch das WITH TABLE KEY noch mit der Anweisung

Code: Alles auswählen.

AND spras = so_spras
ergänzt. Das funktioniert allerdings nicht.
So wie es jetzt da steht bringt er allerdings immer die Fehlermeldung 'Text missing', obwohl welche vorhanden wären.

Re: Nicht existente Datensätze ausgeben

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
guten Morgen,

hast du denn die interne Tabelle GT_MAKT vorher gefülllt, so wie ich das mit GT_MARA gemacht habe? Wenn nicht, so kannst du auch direkt die MAKT lesen, das geht dann aber mit einem SELECT und nicht mit READ TABLE. Diese Vorgehensweise hat den Nachteil, dass man so oft lesend auf die Tabelle zugreift wie man Datensätze hat.

Weiterhin kommt es noch darauf an, wie du im Programm den Sprachenschlüssel vorgibst. Man könnte automatisch auf die Sprache zugreifen mit der man gerade im System angemeldet ist. Man kann die Sprache aber auch als ein weiteres Feld (PARAMETER) bzw. Mehrfachselektion (SELECT-OPTIONS) auf dem Selektionsbildschirm festlegen.

der Code variiert dann von Fall zu Fall:

Code: Alles auswählen.

* lesen aus der MAKT mit Anmeldesprache
      SELECT * FROM MAKT WHERE matnr = so_matnr-LOW AND spras = sy-langu.

* lesen aus der MAKT mit einem Sprachschlüssel (PARAMETER)
      SELECT * FROM MAKT WHERE matnr = so_matnr-LOW AND spras = p_spras.

* lesen aus der MAKT mit einem Sprachschlüssel (SELECT-OPTIONS)
      SELECT * FROM MAKT WHERE matnr = so_matnr-LOW AND spras = so_spras-LOW.

* lesen aus der MAKT mit Mehrfachselektion (SELECT-OPTIONS)
      SELECT * FROM MAKT WHERE matnr = so_matnr-LOW AND spras IN so_spras.
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Nicht existente Datensätze ausgeben

Beitrag von Beginner014 (ForumUser / 46 / 4 / 0 ) »
Hallo Alexander,

genau ich hatte vorher die Tabelle gt_makt gefüllt, genau wie du es mit der mara getan hast.

Der Sprachenschlüssel ist ein Feld auf meinem Selektionsbildschirm. (Keine Mehrfachselektion, habe es trotzdem als Select-Option definiert!?)

Vielen vielen Dank für deine Hilfe!

Seite 1 von 1

Vergleichbare Themen

8
Antw.
3975
Views
write ausgeben vor Selektionsbildschirm ausgeben
von bohne » 14.02.2006 12:50 • Verfasst in ABAP® für Anfänger
4
Antw.
6419
Views
Datensätze zählen
von KatSeh » 14.10.2004 08:15 • Verfasst in ABAP® für Anfänger
3
Antw.
2598
Views
Datensätze in LSMW verdichten
von czschunke » 14.07.2019 22:21 • Verfasst in ABAP® für Anfänger
0
Antw.
1030
Views
Datensätze in der Startroutine verschmelzen
von Janni » 26.06.2013 09:57 • Verfasst in ABAP® für Anfänger
2
Antw.
1932
Views
Zu viele Datensätze in Ausgabe
von samson » 13.11.2005 13:15 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 72
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141