根据销售组和销售办事处检查用户权限。
思路:如果用户在选择屏幕上选择了客户账户(客户编号),就通过客户编号找到对应的销售组和销售办事处,如果用户没有选择客户账户,那就等同于选择了全部销售组和销售办事处,然后循环检查是否有权限。
SE38:RFITEMAR, FORM sel_account_check 隐式增强
FORM sel_account_check.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form SEL_ACCOUNT_CHECK, Anfang A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 2 ZFBL5N_1. "active version
TYPES:BEGIN OF TY_TAB01,
VKBUR TYPE TVKBT-VKBUR,
END OF TY_TAB01.
DATA:LW_TAB01 TYPE TY_TAB01,
LT_TAB01 TYPE TABLE OF TY_TAB01.
TYPES:BEGIN OF TY_TAB02,
VKGRP TYPE TVKGR-VKGRP,
END OF TY_TAB02.
DATA:LW_TAB02 TYPE TY_TAB02,
LT_TAB02 TYPE TABLE OF TY_TAB02.
DATA:GF_MESSAGE TYPE STRING.
DATA:LW_KNVV TYPE KNVV,
LT_KNVV TYPE TABLE OF KNVV.
DATA:LW_VKGRP TYPE KNVV,
LT_VKGRP TYPE TABLE OF KNVV.
DATA:LW_VKBUR TYPE KNVV,
LT_VKBUR TYPE TABLE OF KNVV.
READ TABLE DD_KUNNR INDEX 1.
IF SY-SUBRC = 0.
SELECT KUNNR VKORG VTWEG SPART VKGRP VKBUR FROM KNVV INTO CORRESPONDING FIELDS OF TABLE LT_KNVV WHERE KUNNR IN DD_KUNNR.
LT_VKGRP = LT_KNVV.
SORT LT_VKGRP BY VKGRP.
DELETE ADJACENT DUPLICATES FROM LT_VKGRP COMPARING VKGRP.
LOOP AT LT_VKGRP INTO LW_VKGRP.
LW_TAB02-VKGRP = LW_VKGRP-VKGRP.
APPEND LW_TAB02 TO LT_TAB02.
ENDLOOP.
LT_VKBUR = LT_KNVV.
SORT LT_VKBUR BY VKBUR.
DELETE ADJACENT DUPLICATES FROM LT_VKBUR COMPARING VKBUR.
LOOP AT LT_VKBUR INTO LW_VKBUR.
LW_TAB01-VKBUR = LW_VKGRP-VKBUR.
APPEND LW_TAB01 TO LT_TAB01.
ENDLOOP.
ELSE.
* SELECT A~VKORG
* INTO CORRESPONDING FIELDS OF TABLE LT_TAB01
* FROM TVKO AS A
* WHERE A~VKORG IN S_VKORG.
SELECT A~VKGRP
INTO CORRESPONDING FIELDS OF TABLE LT_TAB02
FROM TVKGR AS A .
SELECT VKBUR INTO CORRESPONDING FIELDS OF TABLE LT_TAB01
FROM TVKBT
WHERE SPRAS = '1'.
ENDIF.
* LOOP AT LT_TAB01 INTO LW_TAB01.
* AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
* ID 'VKORG' FIELD LW_TAB01-VKORG.
* IF SY-SUBRC <> 0.
* CONCATENATE '您没有销售组织' LW_TAB01-VKORG '的权限' INTO GF_MESSAGE.
* MESSAGE GF_MESSAGE TYPE 'E'.
* ENDIF.
* ENDLOOP.
LOOP AT LT_TAB02 INTO LW_TAB02.
AUTHORITY-CHECK OBJECT 'Z_VBAK_Z1'
ID 'VKGRP' FIELD LW_TAB02-VKGRP.
IF SY-SUBRC <> 0.
CONCATENATE '您没有销售组' LW_TAB02-VKGRP '的权限' INTO GF_MESSAGE.
MESSAGE GF_MESSAGE TYPE 'E'.
ENDIF.
ENDLOOP.
LOOP AT LT_TAB01 INTO LW_TAB01.
AUTHORITY-CHECK OBJECT 'Z_VBAK_Z1'
ID 'VKBUR' FIELD LW_TAB01-VKBUR.
IF SY-SUBRC <> 0.
CONCATENATE '您没有销售办事处' LW_TAB01-VKBUR '的权限' INTO GF_MESSAGE.
MESSAGE GF_MESSAGE TYPE 'E'.
ENDIF.
ENDLOOP.
ENDENHANCEMENT.
*$*$-End: (1)---------------------------------------------------------------------------------$*$*
DATA: ld_lines LIKE sy-index,
ld_single_account TYPE c,
ld_single_bukrs TYPE c.
READ TABLE dd_kunnr INDEX 1.
IF sy-subrc NE 0.
READ TABLE dd_bukrs INDEX 1.
IF sy-subrc NE 0.
MESSAGE w019.
ENDIF.
ENDIF.
READ TABLE dd_kunnr INDEX 1.
IF sy-subrc EQ 0.
LOOP AT dd_kunnr TRANSPORTING NO FIELDS
WHERE option NE 'EQ' OR
sign NE 'I'.
EXIT.
ENDLOOP.
subrc = sy-subrc. "Arbeitsvorrat: subrc ne 0
ELSE.
subrc = 0.
ENDIF.
IF subrc EQ 0.
SELECT SINGLE kunnr FROM knb1 INTO knb1-kunnr
WHERE kunnr IN dd_kunnr
AND bukrs IN dd_bukrs.
ELSE.
SELECT kunnr FROM knb1 INTO knb1-kunnr
UP TO 1 ROWS
FOR ALL ENTRIES IN dd_kunnr
WHERE kunnr EQ dd_kunnr-low
AND bukrs IN dd_bukrs.
ENDSELECT.
ENDIF.
IF sy-subrc NE 0.
READ TABLE dd_bukrs INDEX 1 INTO dd_bukrs. "1569654
MESSAGE e030(msitem).
ENDIF.
CLEAR knb1.
*...write dd_kunnr und dd_bukrs into memory
*...(important later for Dispute-Management).
EXPORT dd_kunnr TO MEMORY ID 'FILITEXTS_KUNNR'.
EXPORT dd_bukrs TO MEMORY ID 'FILITEXTS_BUKRS'.
*...find out, if single accounts and company codes have been selected..*
*...(important for header display).....................................*
CLEAR ld_single_account.
DESCRIBE TABLE dd_kunnr LINES ld_lines.
IF ld_lines EQ 1.
READ TABLE dd_kunnr INDEX 1.
IF ( dd_kunnr-sign EQ 'I' AND dd_kunnr-option EQ 'EQ' ) OR
( dd_kunnr-sign EQ 'I' AND dd_kunnr-option EQ 'BT' AND
dd_kunnr-low EQ dd_kunnr-high ).
ld_single_account = 'X'.
ENDIF.
ENDIF.
CLEAR ld_single_bukrs.
DESCRIBE TABLE dd_bukrs LINES ld_lines.
IF ld_lines EQ 1.
READ TABLE dd_bukrs INDEX 1.
IF ( dd_bukrs-sign EQ 'I' AND dd_bukrs-option EQ 'EQ' ) OR
( dd_bukrs-sign EQ 'I' AND dd_bukrs-option EQ 'BT' AND
dd_bukrs-low EQ dd_bukrs-high ).
ld_single_bukrs = 'X'.
ENDIF.
ENDIF.
EXPORT ld_single_bukrs ld_single_account TO MEMORY ID
'FILITEXTS_SINGLE'.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(2) Form SEL_ACCOUNT_CHECK, Ende A
*$*$-Start: (2)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1 ZFBL5N_1. "active version
ENDENHANCEMENT.
*$*$-End: (2)---------------------------------------------------------------------------------$*$*
ENDFORM. "sel_account_check