Code: Alles auswählen.
REPORT Z_AUFGABE1_WOSSNER_B.
TYPES: BEGIN OF ty_result_struct, " Struktur erstellen
matnr TYPE matnr,
maktx TYPE maktx,
werks TYPE werks_D,
END OF ty_result_struct.
DATA: lv_ersda TYPE ersda,
lv_spras TYPE spras,
lv_mtart TYPE mtart,
lt_result TYPE TABLE OF ty_result_struct,
ls_result TYPE ty_result_struct,
GD_MAKTX TYPE maktx,
GD_MATNR TYPE matnr,
GD_INDEX TYPE i,
ok_code TYPE sy-ucomm, " Definieren von Variablen (Button Dynpro)
save_ok LIKE ok_code.
GD_INDEX = 1.
CONTROLS DYNPRO_TABLE TYPE TABLEVIEW USING SCREEN 1001.
SELECTION-SCREEN BEGIN OF BLOCK block1.
SELECT-OPTIONS:
material FOR ls_result-matnr, " Selection Screen 'Materialnummer'
beschr FOR ls_result-maktx NO INTERVALS NO-EXTENSION, " Selection Screen 'Materialkurztext'
werk FOR ls_result-werks NO INTERVALS NO-EXTENSION, " Selection Screen 'Werk'
kind FOR lv_mtart NO INTERVALS NO-EXTENSION, " Selection Screen 'Materialart'
date FOR lv_ersda NO INTERVALS NO-EXTENSION, " Selection Screen 'Erstelldatum'
language FOR lv_spras NO INTERVALS NO-EXTENSION DEFAULT 'DE'. " Selection Screen 'Sprache'
SELECTION-SCREEN END OF BLOCK BLOCK1.
START-OF-SELECTION. " Aufrufen des Dynpros
SELECT mara~matnr, makt~maktx, marc~werks " Selektieren von matnr, maktx und werks
FROM mara
INNER JOIN makt ON mara~matnr = makt~matnr " Selektieren und Vergleich von matnr in mara und makt
INNER JOIN marc ON mara~matnr = marc~matnr " Selektieren und Vergleich von matnr in mara und marc
INTO CORRESPONDING FIELDS OF @ls_result
UP TO 100 ROWS " Begrenzen der Datenmenge
WHERE mara~matnr In @material " Selektieren von Daten welche zu Selection passen
AND makt~maktx In @beschr
AND mara~ersda In @date
AND mara~mtart In @kind
AND makt~spras In @language.
ENDSELECT.
AUTHORITY-CHECK OBJECT 'M_MATE_WRK' " Werk Zugriff
ID 'ACTVT' FIELD '03' " '3' = Anzeigen
ID 'WERKS' FIELD ls_result-werks. " Werk vergleichen
IF sy-subrc = 0. " Berechtigung fuer dieses Werk ist vorhanden -> Eintrag in Ergebnistabelle uebernehmen
APPEND ls_result TO lt_result.
ENDIF.
CALL SCREEN '1001'.
* MODULE read_data OUTPUT.
READ TABLE lt_result INTO ls_result INDEX GD_INDEX. " Daten in Workarea übergeben
GD_MATNR = ls_result-matnr. " Globalen Variablen Werte zu ordnen
GD_MAKTX = ls_result-maktx.
EXIT.
*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.
MODULE change_index OUTPUT.
CASE sy-ucomm.
WHEN 'BUTTON_NEXT'.
CHECK gd_index < lines( lt_result ).
GD_INDEX = GD_INDEX + 1. " gd_index um 1 erhöhen
READ TABLE lt_result INTO ls_result INDEX GD_INDEX. " Erneutes Ausführen von Read_Data
GD_MATNR = ls_result-matnr.
GD_MAKTX = ls_result-maktx.
When 'BUTTON_PREVIOUS'.
CHECK GD_INDEX > 1. " Verhindern von einem gd_index von > 1
GD_INDEX = GD_INDEX - 1. " gd_index um 1 erniedrigen
READ TABLE lt_result INTO ls_result INDEX GD_INDEX. " Erneutes Ausführen von Read_Data
GD_MATNR = ls_result-matnr.
GD_MAKTX = ls_result-maktx.
ENDCASE.
ENDMODULE.
Code: Alles auswählen.
PROCESS BEFORE output.
MODULE init_screen_100.
MODULE change_index.
PROCESS AFTER input.
MODULE user_command_0100.
Code: Alles auswählen.
REPORT Z_AUFGABE1_WOSSNER_B.
TYPES: BEGIN OF ty_result_struct, " Struktur erstellen
matnr TYPE matnr,
maktx TYPE maktx,
werks TYPE werks_D,
END OF ty_result_struct.
DATA: lv_ersda TYPE ersda,
lv_spras TYPE spras,
lv_mtart TYPE mtart,
lt_result TYPE TABLE OF ty_result_struct,
ls_result TYPE ty_result_struct,
GD_MAKTX TYPE maktx,
GD_MATNR TYPE matnr,
GD_INDEX TYPE i,
ok_code TYPE sy-ucomm, " Definieren von Variablen (Button Dynpro)
save_ok LIKE ok_code.
SELECTION-SCREEN BEGIN OF BLOCK block1.
SELECT-OPTIONS:
material FOR ls_result-matnr, " Selection Screen 'Materialnummer'
beschr FOR ls_result-maktx NO INTERVALS NO-EXTENSION, " Selection Screen 'Materialkurztext'
werk FOR ls_result-werks NO INTERVALS NO-EXTENSION, " Selection Screen 'Werk'
kind FOR lv_mtart NO INTERVALS NO-EXTENSION, " Selection Screen 'Materialart'
date FOR lv_ersda NO INTERVALS NO-EXTENSION, " Selection Screen 'Erstelldatum'
language FOR lv_spras NO INTERVALS NO-EXTENSION DEFAULT 'DE'. " Selection Screen 'Sprache'
SELECTION-SCREEN END OF BLOCK BLOCK1.
START-OF-SELECTION. " Aufrufen des Dynpros
SELECT mara~matnr, makt~maktx, marc~werks " Selektieren von matnr, maktx und werks
FROM mara
INNER JOIN makt ON mara~matnr = makt~matnr " Selektieren und Vergleich von matnr in mara und makt
INNER JOIN marc ON mara~matnr = marc~matnr " Selektieren und Vergleich von matnr in mara und marc
INTO CORRESPONDING FIELDS OF @ls_result
UP TO 100 ROWS " Begrenzen der Datenmenge
WHERE mara~matnr In @material " Selektieren von Daten welche zu Selection passen
AND makt~maktx In @beschr
AND mara~ersda In @date
AND mara~mtart In @kind
AND makt~spras In @language.
AUTHORITY-CHECK OBJECT 'M_MATE_WRK' " Werk Zugriff
ID 'ACTVT' FIELD '03' " '3' = Anzeigen
ID 'WERKS' FIELD ls_result-werks. " Werk vergleichen
IF sy-subrc = 0. " Berechtigung fuer dieses Werk ist vorhanden -> Eintrag in Ergebnistabelle uebernehmen
APPEND ls_result TO lt_result.
ENDIF.
ENDSELECT.
END-OF-SELECTION.
GD_INDEX = 1.
CALL SCREEN '1001'.
MODULE read_data OUTPUT.
READ TABLE lt_result INTO ls_result INDEX GD_INDEX. " Daten in Workarea übergeben
GD_MATNR = ls_result-matnr. " Globalen Variablen Werte zu ordnen
GD_MAKTX = ls_result-maktx.
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'.
LEAVE SCREEN. " Zurück zum Selection Screen
WHEN 'BUTTON_NEXT'.
CHECK gd_index < lines( lt_result ).
GD_INDEX = GD_INDEX + 1. " gd_index um 1 erhöhen
When 'BUTTON_PREVIOUS'.
CHECK GD_INDEX > 1. " Verhindern von einem gd_index von > 1
GD_INDEX = GD_INDEX - 1. " gd_index um 1 erniedrigen
ENDCASE.
ENDMODULE.
Code: Alles auswählen.
PROCESS BEFORE output.
MODULE init_screen_100.
MODULE read_data.
PROCESS AFTER input.
MODULE user_command_0100.
Eine Lösung welche nicht funktioniert Danke für deinen Versuch mir zu helfen und damit verbundene Arroganz gegenüber einem Anfänger welcher versucht hat, die Vorschläge und Tipps zu integrieren. Wenn jedoch 10x geschrieben wird ich solle 'Call Screen' durch 'Leave Screen' ersetzen und dies nicht funktioniert, dann sollte man dies auch mal akzeptieren. Selbst mit deiner "Lösung" funktioniert Leave Screen nicht.a-dead-trousers hat geschrieben:Sorry, aber ich glaub Vorschläge genügen bei dir nicht.
Du stehst echt auf der Leitung. Ich weiß nicht wie viele Vorschläge du hier bereits bekommen hast und trotzdem hast du kaum was davon berücksichtigt oder richtig zusammengefügt.
Daher hier die Lösung für dein Problem:
Code: Alles auswählen.
* PBO
PROCESS BEFORE OUTPUT.
MODULE init_screen_100.
LOOP AT itab
WITH CONTROL dynpro_table
CURSOR tc_itab-current_line.
MODULE change_index.
ENDLOOP.
*PAI
PROCESS AFTER INPUT.
LOOP AT itab.
module daten_uebernehmen.
ENDLOOP.
MODULE user_command_0100.
Da kann ich Thanatos82 nur zustimmen...Thanatos82 hat geschrieben:Moin,
zunächst einmal: wenn du dich hier im Forum etwas umschauen würdest, hättest du schnell in vielen Beiträgen erkennen können, dass die Hinweise und Vorschläge von ADT immer hilfreich, wenn nicht sogar exakt die gesuchte Lösung waren. Hier von Aroganz zu sprechen, weil jemanden, der dir offensichtlich schon mehrfach versucht hat zu helfen und so herablassend zu behandeln widerspricht in meinen Augen jeglicher Netikette... Wenn dir schon jemand eine Lösung zur Verfügung stellt, dann sollte man dies Lösung erst einmal implementieren, sie testen und im Debugger schauen warum es immer noch hakt, dann seinen beginnenden Entwickler-Verstand nutzen um eventuell selbst den Fehler zu finden. Sollte dies nicht zum Ziel führen kann man nochmal nachfragen mit dem Hinweis, dass trotz der Lösung etwas noch nicht funktioniert.
Aber zu deinem Problem:
Wenn ich mir die Ablauflogik deines Dynpros anschaue und an die Deklaration eines TableControls von dir denke, welches du weiter oben getätigt hast, dann fehlen da ganz bestimmte Sachen, sowohl im PBO als auch im PAI meiner Meinung nach.
Code: Alles auswählen.
* PBO PROCESS BEFORE OUTPUT. MODULE init_screen_100. LOOP AT itab WITH CONTROL dynpro_table CURSOR tc_itab-current_line. MODULE change_index. ENDLOOP. *PAI PROCESS AFTER INPUT. LOOP AT itab. module daten_uebernehmen. ENDLOOP. MODULE user_command_0100.
Code: Alles auswählen.
SELECT mara~matnr, makt~maktx, marc~werks " Selektieren von matnr, maktx und werks
FROM mara
INNER JOIN makt ON mara~matnr = makt~matnr " Selektieren und Vergleich von matnr in mara und makt
INNER JOIN marc ON mara~matnr = marc~matnr " Selektieren und Vergleich von matnr in mara und marc
INTO CORRESPONDING FIELDS OF @ls_result
UP TO 100 ROWS " Begrenzen der Datenmenge
WHERE mara~matnr In @material " Selektieren von Daten welche zu Selection passen
AND makt~maktx In @beschr
AND mara~ersda In @date
AND mara~mtart In @kind
AND makt~spras In @language.
ENDSELECT.
AUTHORITY-CHECK OBJECT 'M_MATE_WRK' " Werk Zugriff
ID 'ACTVT' FIELD '03' " '3' = Anzeigen
ID 'WERKS' FIELD ls_result-werks. " Werk vergleichen
IF sy-subrc = 0. " Berechtigung fuer dieses Werk ist vorhanden -> Eintrag in Ergebnistabelle uebernehmen
APPEND ls_result TO lt_result.
ENDIF.
Naja, ganz so nett war ich zu Anfang auch nichtThanatos82 hat geschrieben:zunächst einmal: wenn du dich hier im Forum etwas umschauen würdest, hättest du schnell in vielen Beiträgen erkennen können, dass die Hinweise und Vorschläge von ADT immer hilfreich, wenn nicht sogar exakt die gesuchte Lösung waren. Hier von Aroganz zu sprechen, weil jemanden, der dir offensichtlich schon mehrfach versucht hat zu helfen und so herablassend zu behandeln widerspricht in meinen Augen jeglicher Netikette... Wenn dir schon jemand eine Lösung zur Verfügung stellt, dann sollte man dies Lösung erst einmal implementieren, sie testen und im Debugger schauen warum es immer noch hakt, dann seinen beginnenden Entwickler-Verstand nutzen um eventuell selbst den Fehler zu finden. Sollte dies nicht zum Ziel führen kann man nochmal nachfragen mit dem Hinweis, dass trotz der Lösung etwas noch nicht funktioniert.
ABAP Hilfe hat geschrieben:Variante 1
LEAVE SCREEN.
Wirkung
Die Variante LEAVE SCREEN ruft das aktuelle Folge-Dynpro auf. Dieses ist entweder statisch in den Eigenschaften des aktuellen Dynpros festgelegt oder wurde zuvor durch die Anweisung SET SCREEN gesetzt.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ewx
Schön und gut jedoch bekomme ich weiterhin die Fehlermeldung "Das Selektionsbild wurde nicht per Call Selection-Screen aufgerufen!"LEAVE SCREEN.
Wirkung
Die Variante LEAVE SCREEN ruft das aktuelle Folge-Dynpro auf. Dieses ist entweder statisch in den Eigenschaften des aktuellen Dynpros festgelegt oder wurde zuvor durch die Anweisung SET SCREEN gesetzt.
Wie rufst du den Report auf? Per SA38/SE38, SUBMIT, oder mittels Transaktion?Schäfer_anfänger hat geschrieben:Schön und gut jedoch bekomme ich weiterhin die Fehlermeldung "Das Selektionsbild wurde nicht per Call Selection-Screen aufgerufen!"