Всем привет, возникла следующая проблемка.
Есть программа с выгрузкой в Excel, если запускать её из системы напрямую - всё ок.
Также данная программа может быть запущена по RFC, под тех. пользователем с типом "сервис". Под ним возникает проблемка - excel не выгружается. Причём даже сообщение выдаётся, что мол " N байтов перенесено", но при этом ничего не происходит. Находил в этой теме что была похожая проблема с проставлением флага sy-oncom, но протестировать это не могу, т.к. у этого тех пользователя нет полномочий на отладку, а если пытаюсь работать с этой программой по трастовому соединению(под своим пользователем) - всё также выгружается корректно.
Есть подозрение что это связано с необходимостью запуска скрипта на машине пользователя, можете посоветовать, в каком направлении лучше копать?
При трассировке нашёл, что еще идет проверка следующего объекта полномочий, под трастовым проходит успешно, под сервисным - ошибка. Но почему объект S_develop, разве у пользователя должны быть полномочия на этот объект?
Code:
Знач. полномочий
OBJTYPE : DEBUG
ACTVT : 02
DEVCLASS :
OBJNAME :
P_GROUP :
type : RF
name : Z*
reason3 : X
contextid : 00136000BBEC9FA19C091EDA91FADE15228D437A
Объект полномочий
Объект полномочий : S_DEVELOP
SY-SUBRC : 4 ( Нет полномочий )
Программа : Z*
Строка : 2 662
Актуальная транзакция :
Число ЗначПолном : 9
UPDATE: Для теста создали диалогового пользователя с такими же полномочиями - всё работает... Т.е. проблема в типе пользователя.
UPDATE2: Пока поправил так, добавил проверку на версию гуи для сервисного пользователя в методе initparams, может кому-то тоже пригодится
Code:
SELECT SINGLE ustyp
INTO l_ustyp
FROM usr02
WHERE bname = sy-uname.
IF sy-subrc = 0 AND l_ustyp <> 'A'.
"не диалог. пользователь в фоне
* сервисный пользователь тоже может быть в gui
* проверяем для сервисного, доступен ли нам gui
IF l_ustyp = 'S'.
DATA: VERSION_TABLE TYPE FILETABLE,
RC TYPE I.
cl_gui_frontend_services=>get_gui_version( CHANGING version_table = version_table
rc = rc
EXCEPTIONS others = 7 ).
IF rc is not initial or sy-subrc <> 0.
close_form = 'X'. "не выдаем сообщение
ENDIF.
ELSE.
close_form = 'X'. "не выдаем сообщение
ENDIF.
ENDIF.