В случае, если таблица выбора содержит общие записи, интервалы, исключенные записи или исключенные интервалы, вы должны сначала получить список компаний, соответствующих таблице выбора (с помощью WHERE ... IN selectiontable
; IN
будет работать со всеми этими типами фильтров), затем выполните проверку полномочий для каждой из реальных компаний.
Например, я предполагаю, что компании должны быть взяты из таблицы T001
:
SELECT bukrs FROM t001 WHERE bukrs IN pnpbukrs INTO TABLE @DATA(companies).
LOOP AT companies ASSIGNING FIELD-SYMBOL(<company>).
AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
ID 'BUKRS' FIELD <company>.
IF sy-subrc <> 0.
" this company is not authorized, do something
ENDIF.
ENDLOOP.
PS# 1: Если цель состоит только в том, чтобы выбрать авторизованные данные из данной таблицы, вы можете использовать класс CL_AUTH_OBJECTS_TO_SQL
(> = 7.50)
PS # 2: для AUTHORITY-CHECK
бесполезно упоминать FOR USER sy-uname
, так как это настройка по умолчанию.