Berechtigungsprüfung

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

Berechtigungsprüfung

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
Hey ich bins mal wieder/immernoch.

Ich muss in den folgenden Quellcode eine Berechtigungsprüfung einbauen welche Mitarbeitern nur erlaubt auf Datensätze (Matnr und Maktx) zu zugreifen wenn diese in ihrem Werk "hergestellt" werden. (marc~werks)

Code: Alles auswählen.

REPORT Z_AUFGABE1_WOSSNER_B.

TYPES: BEGIN OF ty_struct1,                                           "Struktur erstellen
          feld1 TYPE matnr,
          feld2 TYPE maktx,
          feld3 TYPE werks_d,
       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,
      zvl_best_verlauf_werks  TYPE werks_d,
      lt_result               TYPE TABLE OF ty_struct1,
      ls_result               TYPE ty_struct1,
      TOP_LINE                TYPE i,
      gd_maktx                TYPE maktx,
      gd_matnr                TYPE matnr,
      gd_index                TYPE i.
      gd_index = 1.

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

CONTROLS 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.

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'
  werk     FOR zvl_best_verlauf_werks NO INTERVALS NO-EXTENSION,                    "Selection Screen 'Werk'
  language FOR zvl_best_verlauf_spras NO INTERVALS NO-EXTENSION DEFAULT 'DE',       "Selection Screen 'Sprache'
  date     FOR zvl_best_verlauf_ersda NO INTERVALS NO-EXTENSION.                    "Selection Screen 'Erstelldatum'

CALL SCREEN '1001'.                                                   "Aufrufen des Dynpros

SELECTION-SCREEN END OF BLOCK BLOCK1.
ENDIF.

*IF language is INITIAL.                                               "Copy and Paste ^^ #unnötig
*  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.





MODULE load_data OUTPUT.                                              "Module (Daten aus Mara auslesen)
SELECT mara~matnr, makt~maktx
  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.

  SELECT marc~werks
  FROM marc
  INTO CORRESPONDING FIELDS OF TABLE  lt_result
  WHERE werks IN werk.

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 read_data OUTPUT.

   READ TABLE lt_result  INTO ls_result INDEX GD_INDEX.               "Daten in Workarea übergeben

   gd_matnr = ls_result-feld1.                                        "Globalen Variablen Werte zu ordnen
   gd_maktx = ls_result-feld2.

   EXIT.


ENDMODULE.

MODULE change_index OUTPUT.
  CASE sy-ucomm.
    WHEN 'BUTTON_NEXT'.
*      CHECK gd_index >= ROWS.
      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-feld1.
   gd_matnr = ls_result-feld2.

    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-feld1.
   gd_maktx = ls_result-feld2.
  ENDCASE.
 ENDMODULE.
Nun bekomme ich aber selbst beim 'Select' von "werks" in lt_result die Fehlermeldung es wären keine korrespondierenden Komponenten vorhanden...

I NEED YOU!
TO HELP ME!
ABAP Anfänger vom allerfeinsten!

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


Re: Berechtigungsprüfung

Beitrag von abuma (Specialist / 102 / 36 / 14 ) »
Huhu Schäfer_anfänger,

ich würde mal sagen deine Struktur zu lt_result passt nicht.

Bei "INTO CORRESPONDING FIELDS OF TABLE ..." müssen die Felder in der Zieltabelle gleich benannt sein wie in der Quelltabelle,
sonst ist ja nicht bekannt, wo die Felder in der Zieltabelle eingefügt werden sollen.

Daher würde ich vorschlagen, dass du deinen Strukturtyp anpasst:

Code: Alles auswählen.

TYPES: BEGIN OF ty_struct1,                                           "Struktur erstellen
          matnr TYPE matnr,
          maktx TYPE maktx,
          werks TYPE werks_d,
       END OF ty_struct1.
Liebe Grüße
abuma

Re: Berechtigungsprüfung

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Wie ich dir auch schon in deinem vorherigen Post gesagt habe:
Nimm BITTE das CALL SELECTION-SCREEN 1000 raus. Du handelst dir damit nur Probleme ein. Korrekt ist LEAVE SCREEN.

Weiters:
- Die Berechtigungsprüfung für den Aufruf des Reports (AUTHORITY-CHECK OBJECT 'M_MATE_STA' ) gehört in den Abschnitt INITIALIZATION.
- Der CALL SCREEN gehört zusammen mit dem SELECT-Statement in das Ereignis START-OF-SELECTION oder END-OF-SELECTION.
(Es funktioniert zwar auch so, ist aber kein guter Programmierstil)

Code: Alles auswählen.

TYPES: ...

DATA: ...

CONTROLS ...

SELECTION-SCREEN BEGIN OF BLOCK ...

SELECTION-SCREEN END OF BLOCK ...

INITIALIZATION.
AUTHORITY-CHECK OBJECT 'M_MATE_STA'                      
  ID 'ACTVT' FIELD '03'                                      
  ID 'STATM' DUMMY.                                             
IF sy-subrc NE 0.
   MESSAGE: 'Berechtigung nicht vorhanden' TYPE 'E'.                  "Error Ausgabe
ENDIF.

START-OF-SELECTION.
SELECT ...

GD_INDEX = 1.

CALL SCREEN ...

MODULE user_command_0100.
  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.                                     "Aktuelles Dynpro verlassen
  ENDCASE.
 ENDMODULE.

MODULE read_data...

MODULE change_index...
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: Berechtigungsprüfung

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
a-dead-trousers hat geschrieben:Wie ich dir auch schon in deinem vorherigen Post gesagt habe:
Nimm BITTE das CALL SELECTION-SCREEN 1000 raus. Du handelst dir damit nur Probleme ein. Korrekt ist LEAVE SCREEN.
Mach ich danke :)
Zuletzt geändert von Schäfer_anfänger am 19.01.2017 10:47, insgesamt 1-mal geändert.
ABAP Anfänger vom allerfeinsten!

Re: Berechtigungsprüfung

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Hallo Schäfer,

du hast die Zeitpunkte und Selektionsbilder noch nicht verstanden.

Bau dir mal folgendes Programm im System nach - da hast du nirgends ein CALL SELECTION-SCREEN 1000 - aber es macht doch das was es soll.

Code: Alles auswählen.

REPORT.
PARAMETERS p_i TYPE i.
WRITE:/ sy-uzeit.
Und dann vergleiche das mal mit dem Programm, was das selbe macht - damit wird klar warum a-d-t auf die Zeitpunkte pocht.

Code: Alles auswählen.

REPORT.
WRITE:/ sy-uzeit.
PARAMETERS p_i TYPE i.
oder noch gemeiner:

Code: Alles auswählen.

REPORT.

END-OF-SELECTION.
  WRITE:/ 'END-OF-SELECTION.'.

START-OF-SELECTION.
  WRITE:/ 'START-OF-SELECTION.'.

END-OF-SELECTION.
  WRITE:/ 'END-OF-SELECTION.'.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Berechtigungsprüfung

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Deswegen ja meine Hinweis mit den Report-Ereignissen und der Aufteilung.
Normalerweise wird beim Aufruf des Reports automatisch Dynpro 1000 aufgerufen.
Durch F8 (Ausführen) wird dann die Verarbeitung von START-OF-SELECTION bzw. END-OF-SELECTION aufgerufen.
Danach erfolgt automatisch wieder der Rücksprung auf das Dynpro 1000.

Durch den CALL SCREEN 1001 wird nun ein neues Dynpro aufgerufen und wenn du dort dann CALL SELECTION-SCREEN 1000 machst wird wieder das Dynpro 1000 aufgerufen.
Das geht ca. 5 bis 10 Mal gut, dann kommt ein Kurzdump. Der Dynpro-Stack schaut dann so aus: 1000->1001->1000->1001->1000 usw.
Warum die Rückkehr mit LEAVE SCREEN bei dir nicht funktioniert ist wahrscheinlich dem Umstand geschuldet, dass du das CALL SCREEN im SELECTION-SCREEN bzw. in einem IF defniert hast.
Stell dir die SELECTION-SCREEN Anweisungen als globale Datendefinition vor. Daherum ein IF zu bauen bringt nix bzw. kann zu Fehlern führen.

Ich geb zu die Report-Ereignisse sind ein Überbleibsel aus der Steinzeit von ABAP, sind aber bei Reports (leider) nach wie vor State-Of-The-Art. Also mach dich damit etwas besser vertraut und setze sie korrekt ein.

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: Berechtigungsprüfung

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
a-dead-trousers hat geschrieben:Deswegen ja meine Hinweis mit den Report-Ereignissen und der Aufteilung.
Normalerweise wird beim Aufruf des Reports automatisch Dynpro 1000 aufgerufen.
Durch F8 (Ausführen) wird dann die Verarbeitung von START-OF-SELECTION bzw. END-OF-SELECTION aufgerufen.
Danach erfolgt automatisch wieder der Rücksprung auf das Dynpro 1000.

Durch den CALL SCREEN 1001 wird nun ein neues Dynpro aufgerufen und wenn du dort dann CALL SELECTION-SCREEN 1000 machst wird wieder das Dynpro 1000 aufgerufen.
Das geht ca. 5 bis 10 Mal gut, dann kommt ein Kurzdump. Der Dynpro-Stack schaut dann so aus: 1000->1001->1000->1001->1000 usw.
Warum die Rückkehr mit LEAVE SCREEN bei dir nicht funktioniert ist wahrscheinlich dem Umstand geschuldet, dass du das CALL SCREEN im SELECTION-SCREEN bzw. in einem IF defniert hast.
Stell dir die SELECTION-SCREEN Anweisungen als globale Datendefinition vor. Daherum ein IF zu bauen bringt nix bzw. kann zu Fehlern führen.

Ich geb zu die Report-Ereignisse sind ein Überbleibsel aus der Steinzeit von ABAP, sind aber bei Reports (leider) nach wie vor State-Of-The-Art. Also mach dich damit etwas besser vertraut und setze sie korrekt ein.

lg ADT
Sieht aktuell wie folgt aus:

Code: Alles auswählen.

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.
ENDIF.


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,
  werk     FOR zvl_wrk_material_werks NO INTERVALS NO-EXTENSION,                    "Selection Screen 'Materialart'
  language FOR zvl_best_verlauf_spras NO INTERVALS NO-EXTENSION DEFAULT 'DE',       "Selection Screen 'Sprache'
  date     FOR zvl_best_verlauf_ersda NO INTERVALS NO-EXTENSION.                    "Selection Screen 'Erstelldatum'

  

SELECTION-SCREEN END OF BLOCK BLOCK1.
CALL SCREEN '1001'.                                                                 "Aufrufen des Dynpros

Und ich habe das Call Screen '1000' durch Leave Screen ersetzt.
Funktioniert jedoch nicht
ABAP Anfänger vom allerfeinsten!

Re: Berechtigungsprüfung

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
Also ich habe jetzt die Berechtigungsprüfung wie folgt erstellt:

Code: Alles auswählen.

REPORT Z_AUFGABE1_WOSSNER_B.

TYPES: BEGIN OF ty_struct1,                                           "Struktur erstellen
          matnr TYPE matnr,
          maktx TYPE maktx,
          werks TYPE werks_D,
       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,
      zvl_wrk_material_werks  TYPE werks_d,
      lt_result               TYPE TABLE OF ty_struct1,
      ls_result               TYPE ty_struct1,
      lt_authen               TYPE TABLE OF ty_struct1,
      ls_authen               TYPE ty_struct1,
      TOP_LINE                TYPE i,
      GD_MAKTX                TYPE maktx,
      GD_MATNR                TYPE matnr,
      GD_INDEX                TYPE i.
      GD_INDEX = 1.

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

CONTROLS DYNPRO_TABLE TYPE TABLEVIEW USING SCREEN 1001.
LOOP AT lt_authen INTO ls_authen.
  ENDLOOP.
AUTHORITY-CHECK OBJECT 'M_MATE_WRK'                                   "Werk Zugriff
  ID 'ACTVT' FIELD '03'                                               "'3' = Anzeigen
  ID 'WERKS' FIELD ls_authen-werks.                                  
IF sy-subrc NE 0.
   MESSAGE: 'Berechtigung nicht vorhanden' TYPE 'E'.                  "Error Ausgabe
ELSE.
ENDIF.


Jedoch habe ich ja nun das Problem, dass sobald ich auf einen Datensatz keinen Zugriff habe. Alle Datensätze gesperrt werden. Da durch Error ja da das Programm beendet wird. Hat vielleicht jemand ne Idee wie ich das nur auf die einzelnen Datensätze aus anderen Werken begrenzen kann? :)
ABAP Anfänger vom allerfeinsten!

Re: Berechtigungsprüfung

Beitrag von abuma (Specialist / 102 / 36 / 14 ) »
Soweit ich das sehe beschäftigst du effektiv seit dem 10.01.2017 mit ABAP?
http://www.abapforum.com/forum/viewtopi ... 696#p80696

Wie lange hast du denn Zeit deine Aufgabe zu bearbeiten?
Kannst du solche Themen nicht auch mit Kollegen besprechen?

Soweit ich das verstehe, müsstest du alle Datensätze zu der der User keine Berechtigung hat überspringen.
Derzeit frägst du in deinem Coding allerdings den letzten Datensatz ab und machst darauf eine Berechtigungsprüfung:

Code: Alles auswählen.

LOOP AT lt_authen INTO ls_authen.
  ENDLOOP.
AUTHORITY-CHECK OBJECT 'M_MATE_WRK'                                   "Werk Zugriff
  ID 'ACTVT' FIELD '03'                                               "'3' = Anzeigen
  ID 'WERKS' FIELD ls_authen-werks.                                  
IF sy-subrc NE 0.
   MESSAGE: 'Berechtigung nicht vorhanden' TYPE 'E'.                  "Error Ausgabe
ELSE.
ENDIF.
Den Loop verstehe ich an dieser Stelle nicht wirklich, da du wie oben bereits erwähnt die Tabelle komplett durchläufst und am Ende sozusagen nur den letzten Datensatz ausliest und die Berechtigungsprüfung daraufhin durchführst.

Ich hätte die ganze Thematik am Anfang meiner Ausbildung ehrlich gesagt nicht verstanden, da es einfach alles noch zu viel ist, wenn man keine Erfahrung mit ABAP bzw. auch SAP hat.

Als erstes sollte man sich die Zeit nehmen und alles was man nicht versteht nachlesen oder Kollegen hinzuziehen, die einem solche Dinge zeigen und erklären.
Fragen kostet nichts, so ist es zumindest bei mir in der Firma.

Liebe Grüße
abuma

Re: Berechtigungsprüfung

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
abuma hat geschrieben:Soweit ich das sehe beschäftigst du effektiv seit dem 10.01.2017 mit ABAP?
http://www.abapforum.com/forum/viewtopi ... 696#p80696

Wie lange hast du denn Zeit deine Aufgabe zu bearbeiten?
Kannst du solche Themen nicht auch mit Kollegen besprechen?

Soweit ich das verstehe, müsstest du alle Datensätze zu der der User keine Berechtigung hat überspringen.
Derzeit frägst du in deinem Coding allerdings den letzten Datensatz ab und machst darauf eine Berechtigungsprüfung:

Code: Alles auswählen.

LOOP AT lt_authen INTO ls_authen.
  ENDLOOP.
AUTHORITY-CHECK OBJECT 'M_MATE_WRK'                                   "Werk Zugriff
  ID 'ACTVT' FIELD '03'                                               "'3' = Anzeigen
  ID 'WERKS' FIELD ls_authen-werks.                                  
IF sy-subrc NE 0.
   MESSAGE: 'Berechtigung nicht vorhanden' TYPE 'E'.                  "Error Ausgabe
ELSE.
ENDIF.
Den Loop verstehe ich an dieser Stelle nicht wirklich, da du wie oben bereits erwähnt die Tabelle komplett durchläufst und am Ende sozusagen nur den letzten Datensatz ausliest und die Berechtigungsprüfung daraufhin durchführst.

Ich hätte die ganze Thematik am Anfang meiner Ausbildung ehrlich gesagt nicht verstanden, da es einfach alles noch zu viel ist, wenn man keine Erfahrung mit ABAP bzw. auch SAP hat.

Als erstes sollte man sich die Zeit nehmen und alles was man nicht versteht nachlesen oder Kollegen hinzuziehen, die einem solche Dinge zeigen und erklären.
Fragen kostet nichts, so ist es zumindest bei mir in der Firma.

Liebe Grüße
abuma
Jo hab seit dem Zeitpunkt ABAP. Natürlich kann ich Kollegen fragen, jedoch ist der Kollege krank und die anderen dauerhaft in Terminen, was das Ganze nicht vereinfacht. Darum frage ich ja hier schließlich ist es ja so: Fragen kostet nichts.
ABAP Anfänger vom allerfeinsten!

Re: Berechtigungsprüfung

Beitrag von abuma (Specialist / 102 / 36 / 14 ) »
Ok. Es meist einfacher wenn man sowas direkt erklärt bekommt, statt über das Forum.
Vor allem wenn man sich mit der Thematik noch nicht so auskennt.
Aber wenn keiner ansprechbar ist, ist es natürlich schon verständlich dass du auf diesem Weg eine Antwort auf deine Fragen suchst.

Wenn du deine Prüfung pro Werk benötigst, dann muss du die Berechtigungsprüfung innerhalb von START-OF-SELECTION und END-OF-SELECTION machen.
Vergleiche nachfolgendes Programm:

Code: Alles auswählen.

* Datendeklaration
TYPES: BEGIN OF ty_result_str,
         matnr TYPE matnr,
         maktx TYPE maktx,
         werks TYPE werks_d,
       END OF ty_result_str.

DATA: ls_result TYPE ty_result_str,
      lt_result LIKE TABLE OF ls_result.

* Selektionsmaske
SELECTION-SCREEN BEGIN OF BLOCK blocka.
SELECT-OPTIONS: so_matnr FOR ls_result-matnr,
                so_maktx FOR ls_result-maktx,
                so_werks FOR ls_result-werks.
SELECTION-SCREEN END OF BLOCK blocka.

* Selektion
START-OF-SELECTION.
  " Auslesen von Tabelle MARA, MAKTX und WERKS
  " mit SELECT - ENDSELECT
  SELECT mara~matnr, makt~maktx, marc~werks
    FROM mara INNER JOIN makt
    ON mara~matnr = makt~matnr
    INNER JOIN marc
    ON mara~matnr = marc~matnr
    INTO CORRESPONDING FIELDS OF @ls_result
    UP TO 100 ROWS
    WHERE mara~matnr IN @so_matnr
      AND makt~maktx IN @so_maktx
      AND marc~werks IN @so_werks.

* Berechtigungspruefung
    AUTHORITY-CHECK OBJECT 'M_MATE_WRK'  "Werk Zugriff
      ID 'ACTVT' FIELD '03'                                  "'3' = Anzeigen
      ID 'WERKS' FIELD ls_result-werks.

    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.

* Ergebnis-Ausgabe
  LOOP AT lt_result INTO ls_result.
    WRITE:/ ls_result-matnr, ' | ', ls_result-maktx, ' | ', ls_result-werks.
  ENDLOOP.
Liebe Grüße
abuma

Re: Berechtigungsprüfung

Beitrag von Schäfer_anfänger (ForumUser / 38 / 1 / 0 ) »
abuma hat geschrieben: Wenn du deine Prüfung pro Werk benötigst, dann muss du die Berechtigungsprüfung innerhalb von START-OF-SELECTION und END-OF-SELECTION machen.
Vergleiche nachfolgendes Programm:
Wie ist das gemeint?:) Ich muss halt jeden Datensatz überprüfen ob dieser in dem Werk angelegt wurde. Vielen Dank für deine Hilfe :)
ABAP Anfänger vom allerfeinsten!

Re: Berechtigungsprüfung

Beitrag von abuma (Specialist / 102 / 36 / 14 ) »
Schäfer_anfänger hat geschrieben:
abuma hat geschrieben: Wenn du deine Prüfung pro Werk benötigst, dann muss du die Berechtigungsprüfung innerhalb von START-OF-SELECTION und END-OF-SELECTION machen.
Vergleiche nachfolgendes Programm:
Wie ist das gemeint?:) Ich muss halt jeden Datensatz überprüfen ob dieser in dem Werk angelegt wurde. Vielen Dank für deine Hilfe :)
Lege mein Beispielprogramm mal in der SE38 an.
Denke daran wenn du den Quellcode einfügst musst du ganz oben noch "REPORT <dein_programmname>." eingeben, sodass du diesen auch ausführen kannst.

Weißt du wie man debuggt?
Denn dann kannst du dir die Variablen zur Laufzeit ansehen und schauen was passiert und verstehst vielleicht besser wie das mit der Berechtigungsprüfung in deinem Programm ablaufen könnte.

Liebe Grüße
abuma

Seite 1 von 1

Vergleichbare Themen

4
Antw.
3285
Views
Berechtigungsprüfung in HCM
von Tellerchen58 » 27.12.2010 14:32 • Verfasst in Dialogprogrammierung
0
Antw.
2605
Views
Berechtigungsprüfung PNP
von ginotico » 07.05.2008 09:30 • Verfasst in Human Resources
4
Antw.
2317
Views
KOH1: Berechtigungsprüfung
von Frank Zet. » 01.03.2017 10:40 • Verfasst in Sonstige Module
2
Antw.
1419
Views
Berechtigungsprüfung vor SQL-Abfrage
von km216 » 04.11.2011 15:01 • Verfasst in ABAP® für Anfänger
2
Antw.
1566
Views
Frage zur Berechtigungsprüfung
von rizzi79 » 20.03.2005 21:07 • Verfasst in ABAP® Core

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 / 255

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 / 255

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