ein kleines Exzerpt aus dem SMOD -> COCCA001 inkl. Anonymisierung (schön DSVGO-konform bleiben! ;-) )
*&---------------------------------------------------------------------*
*& Include ZXK01U01
*&---------------------------------------------------------------------*
*
http://fico-forum.de/fico_forum/thread.p...=512&page=1* ATSCHBEN, 19.02.2016
DATA: lt_auth TYPE TABLE OF zco_cc_rep_auth,
lv_verak_user TYPE csks-verak_user,
lv_allowed(1).
STATICS: lv_class TYPE usr02-class.
TYPES: BEGIN OF ts_zbud,
kostl TYPE kostl,
kosar TYPE kosar,
zdate TYPE zdate,
uname TYPE uname,
END OF ts_zbud.
DATA: lv_kosar TYPE csks-kosar, "für KP26
ls_zbud TYPE ts_zbud.
CASE auth_object.
WHEN 'K_REPO_CCA'.
IF lv_class IS INITIAL.
SELECT SINGLE class
FROM usr02
INTO lv_class
WHERE bname = sy-uname.
ENDIF.
CASE lv_class.
WHEN 'MESSIAS'. "mir derfen ois!
WHEN 'SUENDER'.
"in der Holding prüfen wir nur die ZCO_CC_REP_AUTH, und auch nur für HOLDING-Kostenstellen
IF kostl(4) = '1500' OR kostl(6) = '001500'.
CLEAR lv_allowed.
* 1) hat User eine *-Berechtigung in ZCO_CC_REP_AUTH?
IF lt_auth IS INITIAL.
SELECT *
FROM zco_cc_rep_auth
INTO TABLE lt_auth
WHERE uname = sy-uname.
ENDIF.
READ TABLE lt_auth TRANSPORTING NO FIELDS
WITH KEY kostl = '*'.
IF sy-subrc = 0.
lv_allowed = abap_true.
ENDIF.
* 2) hat User eine Kostenstellenberechtigung in ZCO_CC_REP_AUTH?
IF lv_allowed = abap_false.
READ TABLE lt_auth TRANSPORTING NO FIELDS
WITH KEY kostl = kostl.
IF sy-subrc = 0.
lv_allowed = abap_true.
ENDIF.
ENDIF.
IF lv_allowed = abap_false.
MESSAGE 'No authorization!' TYPE 'I' RAISING user_not_authorized.
ENDIF.
ENDIF.
WHEN OTHERS.
IF kostl(4) = '1532' OR kostl(6) = '001532' OR
kostl(4) = '1534' OR kostl(6) = '001534' OR
kostl(4) = '1535' OR kostl(6) = '001535' OR
kostl(4) = '1133' OR kostl(6) = '001133'. "vorerst mal nur für die Phariäser (Ticket CHG0039265)
CLEAR lv_allowed.
* 1) Ist User = verantwortlicher User in Kostenstellenstamm?
SELECT SINGLE verak_user
FROM csks
INTO lv_verak_user
WHERE kokrs = kokrs
AND kostl = kostl.
IF lv_verak_user = sy-uname.
lv_allowed = abap_true.
ENDIF.
* 2) hat User eine *-Berechtigung in ZCO_CC_REP_AUTH?
IF lv_allowed = abap_false.
IF lt_auth IS INITIAL.
SELECT *
FROM zco_cc_rep_auth
INTO TABLE lt_auth
WHERE uname = sy-uname.
ENDIF.
READ TABLE lt_auth TRANSPORTING NO FIELDS
WITH KEY kostl = '*'.
IF sy-subrc = 0.
lv_allowed = abap_true.
ENDIF.
ENDIF.
* 3) hat User eine Kostenstellenberechtigung in ZCO_CC_REP_AUTH?
IF lv_allowed = abap_false.
READ TABLE lt_auth TRANSPORTING NO FIELDS
WITH KEY kostl = kostl.
IF sy-subrc = 0.
lv_allowed = abap_true.
ENDIF.
ENDIF.
IF lv_allowed = abap_false.
MESSAGE 'No authorization!' TYPE 'I' RAISING user_not_authorized.
ENDIF.
ENDIF.
ENDCASE.
ENDCASE.
IF sy-tcode = 'KP26' OR sy-tcode = 'KP06'.
CASE auth_object.
WHEN 'K_CSKS_PLA'.
CLEAR: lv_kosar.
IF kostl IS NOT INITIAL OR kostl = '*'.
SELECT SINGLE kosar FROM csks INTO lv_kosar
WHERE kokrs = kokrs
AND kostl = kostl.
IF sy-subrc = 0 AND lv_kosar = 'F'.
ls_zbud-kostl = kostl.
ls_zbud-kosar = lv_kosar.
ls_zbud-zdate = sy-datum.
ls_zbud-uname = sy-uname.
MODIFY zbud_kst FROM ls_zbud.
ENDIF.
ENDIF.
ENDCASE.
ENDIF.