Einzelne Zeile auslesen

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

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

Einzelne Zeile auslesen

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
Hallo

Ich wollte mich hier erkundigen ob ihr mir zufällig sagen könnt, wie ich einen einzelnen Datensatz bestehend aus Matnr und Maktx selecten kann. Bedeutet ich suche mit einem Selection Screen nach passenden Daten und will dann nur einen Datensatz bestehend aus Matnr und Maktx ausgeben. Dann auf weiter klicken und den nächsten passenden (falls vorhanden) ausgeben lassen.

Code: Alles auswählen.

ONTROLS DYNPRO_TABLE TYPE TABLEVIEW USING SCREEN 1001.

AUTHORITY-CHECK OBJECT 'M_MATE_STA'                                   "Materialstamm Zugrif
  ID 'ACTVT' FIELD '03'                                               "'3' = Anzeigen
  ID 'STATM' DUMMY.                                                   "Pflegestatus (unwichtig)
IF sy-subrc NE 0.                                                      
   MESSAGE: 'Berechtigung nicht vorhanden' TYPE 'E'.                  "Error Ausgabe
ELSE.

TYPES: BEGIN OF ty_struct1,                                           "Struktur erstellen
          feld1 TYPE matnr,
          feld2 TYPE maktx,
       END OF ty_struct1.

DATA: zvl_best_verlauf_matnr  TYPE matnr,                             "Definieren von Variablen (Allgemein)
      zvl_best_verlauf_maktx  TYPE maktx,
      zvl_best_verlauf_ersda  TYPE ersda,
      zvl_best_verlauf_spras  TYPE spras,
      zvl_best_verlauf_mtart  TYPE mtart,
      lt_result               TYPE TABLE OF ty_struct1,
      ls_result               TYPE ty_struct1,
      TOP_LINE                TYPE i.

DATA: ok_code TYPE sy-ucomm,                                          "Definieren von Variablen (Button Dynpro) 
      save_ok LIKE ok_code.



SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-se1.
  SELECT-OPTIONS:
  material FOR zvl_best_verlauf_matnr,                                "Selection Screen 'Materialnummer'
  beschr   FOR zvl_best_verlauf_maktx NO INTERVALS NO-EXTENSION,      "Selection Screen 'Artikelbezeichnung'
  art      FOR zvl_best_verlauf_mtart NO INTERVALS NO-EXTENSION,      "Selection Screen 'Materialart'
  language FOR zvl_best_verlauf_spras NO INTERVALS NO-EXTENSION,      "Selection Screen 'Sprache'
  date     FOR zvl_best_verlauf_ersda NO INTERVALS NO-EXTENSION.      "Selection Screen 'Erstelldatum'

SELECTION-SCREEN END OF BLOCK BLOCK1.
ENDIF.

IF language is INITIAL.                                               "Copy and Paste ^^
  DATA language_line LIKE LINE OF language.
  language_line-low = sy-langu.
  language_line-sign = 'I'.
  language_line-option = 'EQ'.
  APPEND language_line TO language.
 ENDIF.

CALL SCREEN '1001'.                                                   "Aufrufen des Dynpros



MODULE Load_data OUTPUT.                                              "Module (Daten aus Mara auslesen)
SELECT mara~matnr, maktx "spras, mtart, ersda
  FROM mara
  INNER JOIN makt ON makt~matnr = mara~matnr                          "Matnr in Mara und Makt vorhanden
  INTO TABLE @lt_result                                   
  UP TO 100 ROWS                                                      "Begrenzen der Datenmenge
  WHERE mara~matnr              In @material
  AND   makt~maktx              In @beschr
  AND   ersda                   In @date
  AND   mtart                   In @art
  AND   makt~spras              In @language.
ENDMODULE.

MODULE user_command_0100 INPUT.                                       "Module (Dynpro Button: Return, Exit)
  save_ok = ok_code.
  CLEAR ok_code.                                                      "'ok_code' leeren (Sicher gehen)
  CASE save_ok.
  WHEN 'BUTTON_EXIT'.
      LEAVE PROGRAM.                                                  "Programm beenden
  WHEN 'BUTTON_RETURN'. 
      CALL SELECTION-SCREEN 1000.                                     "Selection Screen aufrufen
  ENDCASE.
 ENDMODULE.
ABAP Anfänger vom allerfeinsten!

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


Re: Einzelne Zeile auslesen

Beitrag von hausi (ForumUser / 56 / 11 / 1 ) »
Hi,

also spontan würde ich sagen - da deine Ergebnisliste ja in einer internen Tabelle zwischengespeichert ist könntest du hier mit einem steploop arbeiten.

Heißt du brauchst 2 Buttons (vor bzw. zurück)
Du hast einen Index in deiner Ergebnisliste
Du gibst an wie viele Ausgabezeilen du hast (bei dir eine)
Mit den beiden Buttons lässt du im steploop den index immer hoch bzw. runter wandern

Ich hoffe das war jetzt nicht zu verwirrend - aber ich bin mir sicher, das gleich eine technisch bessere Lösung um die Ecke kommt :D :?

Re: Einzelne Zeile auslesen

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
hausi hat geschrieben:Hi,

also spontan würde ich sagen - da deine Ergebnisliste ja in einer internen Tabelle zwischengespeichert ist könntest du hier mit einem steploop arbeiten.

Heißt du brauchst 2 Buttons (vor bzw. zurück)
Du hast einen Index in deiner Ergebnisliste
Du gibst an wie viele Ausgabezeilen du hast (bei dir eine)
Mit den beiden Buttons lässt du im steploop den index immer hoch bzw. runter wandern

Ich hoffe das war jetzt nicht zu verwirrend - aber ich bin mir sicher, das gleich eine technisch bessere Lösung um die Ecke kommt :D :?
DIe 2 Buttons habe ich bereits in meinem Dynpro. Jedoch habe ich ehrlich gesagt keine Ahnung wie ich das machen soll xD ja auch durch googlen blick ich s nicht ...
ABAP Anfänger vom allerfeinsten!

Re: Einzelne Zeile auslesen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
hi!

Definiere die Globale Variablen GD_INDEX, GD_MATNR und GD_MAKTX.
Auf dem Dynpro leg die passenden Felder für GD_MATNR und GD_MAKTX an.
Vor dem Aufruf deines Dynpros setzt du GD_INDEX auf 1.
Im PBO wird die Tabelle mit dem Index GD_INDEX ausgelesen und die globalen Felder GD_MATNR bzw. GD_MAKTX damit befüllt.
Im PAI beim Funktionscode NEXT wird GD_INDEX um 1 erhöht und bei PREVIOUS um eins verringert.

Man kann noch Sicherheitsprüfungen einbauen, dass z.B. der GD_INDEX nicht kleiner als 1 und nicht größer als die Anzahl der Zeilen werden darf, aber das hat mit der eigentlichen Logik nichts zu tun.

Wichtiger Hinweis: Bitte mach das CALL SELECTION-SCREEN 1000 weg und verwende stattdessen LEAVE SCREEN, sonst kommt es zu Problemen mit der Aufrufreihenfolge der Dynpros.

lg
ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Einzelne Zeile auslesen

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
a-dead-trousers hat geschrieben:
...
Im PBO wird die Tabelle mit dem Index GD_INDEX ausgelesen und die globalen Felder GD_MATNR bzw. GD_MAKTX damit befüllt.
...
Wie genau ist das gemeint? Sorry ! und vielen Dank :)
ABAP Anfänger vom allerfeinsten!

Re: Einzelne Zeile auslesen

Beitrag von khb (Specialist / 184 / 7 / 1 ) »
Hi.

read TABLE lt_result index gd_index into ls_result.

und jetzt nur noch aus ls_result die globalen Felder füllen.

lg khb

Re: Einzelne Zeile auslesen

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
Also ich habe jetzt folgendes Modul erstellt welches ich in PBO aufrufe.

Code: Alles auswählen.

 MODULE Read_Data OUTPUT.
   READ TABLE lt_result index GD_INDEX INTO ls_result.
   GD_MATNR = ls_result-feld1.         "feld1 ist in meiner Struktur von ls_result die Materialnummer
   GD_MAKTX = ls_result-feld2.
ENDMODULE.
Jedoch gibt mein Ausgabefeld keinen Wert aus? Habe ich es vielleicht falsch benannt?
Und das "Leave Screen" schließt doch einfach mein Dynpro?
ABAP Anfänger vom allerfeinsten!

Re: Einzelne Zeile auslesen

Beitrag von hausi (ForumUser / 56 / 11 / 1 ) »
ich versuchs mal - in der Hoffnung dass dieser Code dich etwas weiterbringt

Code: Alles auswählen.

 MODULE Read_Data OUTPUT. >>> PBO
   
   GD_INDEX = 1.

   READ TABLE lt_result index GD_INDEX INTO ls_result.
   GD_MATNR = ls_result-feld1.         "feld1 ist in meiner Struktur von ls_result die Materialnummer
   GD_MAKTX = ls_result-feld2.
ENDMODULE.

MODULE change_index OUTPUT.   >>> PAI
   
CASE sy-ucomm.
     WHEN button_next.
         gd_index = gd_index + 1.
     WHEN button_prev.
        CHECK gd_index > 1.  " Hier eine Prüfung einbauen dass der Index nicht unter 1 fällt >> Meldung "Ersten Eintrag erreicht" oder so
        gd_index = gd_index - 1.
ENDCASE
ENDMODULE.
Allerdings arbeite ich meist mit Forms (es darf mich gerne jemand aufklären warum welche Variante besser ist), das würde dann so aussehen:

Code: Alles auswählen.

 
" Define in Include für Forms
FORM Read_Data. 
   
   GD_INDEX = 1.

   READ TABLE lt_result index GD_INDEX INTO ls_result.
   GD_MATNR = ls_result-feld1.         "feld1 ist in meiner Struktur von ls_result die Materialnummer
   GD_MAKTX = ls_result-feld2.
ENDFORM. 

" Aufruf im PBO
PERFORM read_data.

" Aufruf im PAI 
CASE sy-ucomm.
     WHEN button_next.
         gd_index = gd_index + 1.
     WHEN button_prev.
        CHECK gd_index > 1.  " Hier eine Prüfung einbauen dass der Index nicht unter 1 fällt >> Meldung "Ersten Eintrag erreicht" oder so
        gd_index = gd_index - 1.
ENDCASE.
PERFORM read_data.   " Im PAI nach Index-Änderung nochmals ausführen

Re: Einzelne Zeile auslesen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
GD_INDEX = 1 darf NICHT im PBO gesetzt werden sondern muss davor (vor dem CALL SCREEN) erfolgen.
Im Dynpro darfst du keine "Ausgabefelder" sondern musst "Ein-Ausgabefelder" verwenden und diese auf "nicht eingabebereit" setzen.
BUTTON_NEXT und BUTTON_PREV sind das Variablen? Wenn ja müssen sie dem Funktionscode vom GUI-Status bzw. einem Button vom Dynpro entsprechen.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Einzelne Zeile auslesen

Beitrag von hausi (ForumUser / 56 / 11 / 1 ) »
Hups du hast natürlich vollkommen Recht - bei meiner Variante würde ich immer '1' im index haben :oops:

Selbstverständlich muss sie dann vor dem CALL SCREEN gesetzt werden.
In meinem Beispiel sind Button_next und Button_prev ucomms (=Funktionscodes) die hinter den Buttons liegen wie du es beschrieben hast. Daher frage ich mit meinem
CASE dann einfach ab welcher ucomm (Funktionscode) ausgelöst wurde. :P

Danke für den Hinweis ADT :D

Re: Einzelne Zeile auslesen

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
Ich habe das ganze jetzt soweit wie vorgeschlagen durchgeführt. Jedoch wird mir zwar nun in den Ausgabefeldern eine Materialnummer angezeigt und bei Maktx auch ein Text. Jedoch wird beim betätigen des Buttons um zum nächsten Datensatz zu wechseln nur die Ausgabesprache des Maktx geändert...
ABAP Anfänger vom allerfeinsten!

Re: Einzelne Zeile auslesen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Schäfer_anfänger hat geschrieben:Jedoch wird beim betätigen des Buttons um zum nächsten Datensatz zu wechseln nur die Ausgabesprache des Maktx geändert...
Ist zum Zeitpunkt wo du das SELECT ausführst die Variable LANGUAGE gefüllt?
Ich würde auf nein tippen und in deiner Internen Tabelle sind einfach zu jedem Material alle Sprachen drinnen.

Das SELECT würde ich auch nicht in einem PBO-Modul durchführen sondern wie auch das GD_INDEX = 1 vor dem CALL SCREEN machen.
Weiters würde ich dir empfehlen mit den Report-Eregnissen zu arbeiten:
In START-OF-SELECTION die ganzen Verarbeitungen machen.
In INITIALIZATION die Vorbelegung der Felder (IF language is INITIAL.) und die Prüfung auf Berechtigung.

Der Aufbau sollte ungefähr dann so sein:

Code: Alles auswählen.

TYPES.

DATA.

SELECTION-SCREEN.

INITIALIZATION.

START-OF-SELECTION.

MODULE.
EDIT: Mit dem Zusatz DEFAULT kannst die Vorbelegung der Sprache auch direkt in der SELECT-OPTIONS machen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Einzelne Zeile auslesen

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
a-dead-trousers hat geschrieben:
Schäfer_anfänger hat geschrieben:Jedoch wird beim betätigen des Buttons um zum nächsten Datensatz zu wechseln nur die Ausgabesprache des Maktx geändert...
Ist zum Zeitpunkt wo du das SELECT ausführst die Variable LANGUAGE gefüllt?
Ich würde auf nein tippen und in deiner Internen Tabelle sind einfach zu jedem Material alle Sprachen drinnen.

Das SELECT würde ich auch nicht in einem PBO-Modul durchführen sondern wie auch das GD_INDEX = 1 vor dem CALL SCREEN machen.
Weiters würde ich dir empfehlen mit den Report-Eregnissen zu arbeiten:
In START-OF-SELECTION die ganzen Verarbeitungen machen.
In INITIALIZATION die Vorbelegung der Felder (IF language is INITIAL.) und die Prüfung auf Berechtigung.

Der Aufbau sollte ungefähr dann so sein:

Code: Alles auswählen.

TYPES.

DATA.

SELECTION-SCREEN.

INITIALIZATION.

START-OF-SELECTION.

MODULE.
EDIT: Mit dem Zusatz DEFAULT kannst die Vorbelegung der Sprache auch direkt in der SELECT-OPTIONS machen.
Vielen vielen Dank! Der Zusatz DEFAULT hat mein Problem vorerst zumindest gelöst :)
ABAP Anfänger vom allerfeinsten!

Re: Einzelne Zeile auslesen

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
Noch eine Frage :D Ist es möglich den 'Button_Next' zu begrenzen? So dass ich nicht mehr weiter klicken kann, wenn alle Datensätze bereits durchgegangen wurden :) Ich benutze ja 'UP TO 100 ROWS' kann ich das iwie in eine Variable übergeben und dann mit 'CHECK' überprüfen zu lassen? Oder wie begrenze ich das Ganze wenn ich kein 'UP TO ... ROWS' nutze?
ABAP Anfänger vom allerfeinsten!

Re: Einzelne Zeile auslesen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »

Code: Alles auswählen.

IF gd_index LT lines( lt_result ). "Für Button_next
* bzw.
IF gd_index GT 1. "Für button_previous
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Vergleichbare Themen

4
Antw.
5059
Views
ALV Einzelne Zeile Editierbar
von SaskuAc » 27.09.2018 07:52 • Verfasst in ABAP® Core
3
Antw.
4636
Views
ALV-Grid: einzelne Zeile editieren
von OliTe » 19.07.2005 12:20 • Verfasst in ABAP® für Anfänger
2
Antw.
4588
Views
einzelne zeile im alv grid editierbar machen
von marina » 01.12.2005 16:24 • Verfasst in ABAP® für Anfänger
2
Antw.
6122
Views
AT LINE SELECTION - Doppelklick auf einzelne Zeile
von becker » 01.03.2010 17:19 • Verfasst in ABAP® für Anfänger
2
Antw.
2034
Views
Einzelne Zeile editierbar machen ALV-Grid
von hmaxi96 » 11.01.2017 10:42 • 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

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140