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.
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 ...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![]()
Wie genau ist das gemeint? Sorry ! und vielen Danka-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.
...
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.
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.
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
Ist zum Zeitpunkt wo du das SELECT ausführst die Variable LANGUAGE gefüllt?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...
Code: Alles auswählen.
TYPES.
DATA.
SELECTION-SCREEN.
INITIALIZATION.
START-OF-SELECTION.
MODULE.
Vielen vielen Dank! Der Zusatz DEFAULT hat mein Problem vorerst zumindest gelösta-dead-trousers hat geschrieben:Ist zum Zeitpunkt wo du das SELECT ausführst die Variable LANGUAGE gefüllt?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...
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:EDIT: Mit dem Zusatz DEFAULT kannst die Vorbelegung der Sprache auch direkt in der SELECT-OPTIONS machen.Code: Alles auswählen.
TYPES. DATA. SELECTION-SCREEN. INITIALIZATION. START-OF-SELECTION. MODULE.
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