Текущее время: Пн, авг 04 2025, 10:49

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Как определить BUKRS пользователя?
СообщениеДобавлено: Чт, мар 20 2008, 18:22 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2008, 13:41
Сообщения: 22
Откуда: Moscow
Господа, требуется определить BUKRS текущего пользователя

я это реализую так:

Code:
DATA: BEGIN OF tbl_bukrs_t,
          BUKRS like t001-BUKRS,
          BUTXT like t001-BUTXT.
DATA: END OF tbl_bukrs_t.
data: tbl_bukrs LIKE tbl_bukrs_t OCCURS 0 WITH HEADER LINE.

PERFORM get_bukrs.
data: p_bukrs type ZRE_IM_IKENES-BUKRS." VALUE '0190'."'0706'.
PERFORM get_my_bukrs.


где

Code:
form get_bukrs.
  select BUKRS BUTXT INTO CORRESPONDING FIELDS OF TABLE tbl_bukrs FROM t001.
ENDFORM.

form get_my_bukrs.

  DATA: BEGIN OF tbl_act_t,
          act(2) TYPE c.
  DATA: END OF tbl_act_t.
  data: tbl_act LIKE tbl_act_t OCCURS 0 WITH HEADER LINE.

  CLEAR tbl_act.

  tbl_act-act = '01'.
  APPEND tbl_act.
  tbl_act-act = '02'.
  APPEND tbl_act.
  tbl_act-act = '03'.
  APPEND tbl_act.
  tbl_act-act = '06'.
  APPEND tbl_act.
  tbl_act-act = '07'.
  APPEND tbl_act.
  tbl_act-act = '08'.
  APPEND tbl_act.
  tbl_act-act = '22'.
  APPEND tbl_act.
  tbl_act-act = '23'.
  APPEND tbl_act.
  tbl_act-act = '27'.
  APPEND tbl_act.
  tbl_act-act = '28'.
  APPEND tbl_act.
  tbl_act-act = '29'.
  APPEND tbl_act.
  tbl_act-act = '43'.
  APPEND tbl_act.
  tbl_act-act = '77'.
  APPEND tbl_act.
  tbl_act-act = 'C4'.
  APPEND tbl_act.


  LOOP AT tbl_bukrs.
    LOOP at tbl_act.
      AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
           ID 'BUKRS' FIELD tbl_bukrs-BUKRS
           ID 'ACTVT' FIELD tbl_act-act.
      if sy-subrc <> 0.
        p_bukrs = 'X'.
      else.
        p_bukrs = tbl_bukrs-BUKRS.
      endif.
    endloop.
  ENDLOOP.
ENDFORM.



В итоге в p_bukrs должна (по моему мнению) содержаться требуемая величина. Однако для пользователя всегда получается p_bukrs = 'X'.

В чем косяк и вообще прально ли я подхожу к решению задачи?
Подскажите пожалста как решить. Требуется просто позарез.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 20 2008, 19:04 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
До аппенда надо tbl_bukrs-BUKRS заполнить, а то у Вас одни операции в цикле проверяются без конкретного объекта.

ЗЫ сорри. не весь код увидел


Последний раз редактировалось John Doe Чт, мар 20 2008, 19:10, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 20 2008, 19:05 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, авг 22 2005, 14:50
Сообщения: 1285
Откуда: с работы
Пол: Женский
1. если внедрены кадры - ищите по pa0105 табельный номер вашего юзера, по табельному номеру ищите в pa0001 букрс, действующий на сегодня. В идеале пользоваться стандартными функциями, типо rh_get_infty

2. Если хотите узнать, какие букрсы разрешены вашему юзеру (а вдруг их несколько?) то задавайте вопрос по-другому.

3. Ваш Х значит что у последней букрсы не разрешена активити C4. Если хотите букрсу видеть, сделайте екзит после p_bukrs = tbl_bukrs-BUKRS.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 21 2008, 11:34 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Думаю что надо написать так:
Code:
  LOOP AT tbl_bukrs.
    LOOP at tbl_act.
      AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
           ID 'BUKRS' FIELD tbl_bukrs-BUKRS
           ID 'ACTVT' FIELD tbl_act-act.
      if sy-subrc <> 0.
        p_bukrs = 'X'.
       else.
        p_bukrs = tbl_bukrs-BUKRS.
        exit.
      endif.
    endloop.
    if not p_bukrs is inital. exit. endif.
  ENDLOOP.


А то у вас получается результат проверки по последней БЕ и последней операции.

Правда в этом случае выберется только первая БЕ, а ведь полномочия могут быть и на несколько.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 21 2008, 13:34 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, сен 22 2004, 08:42
Сообщения: 1079
Откуда: Москва
Пол: Мужской
SET/GET Параметры пользователя хранятся в таблице USR05 поле PARVA.
Code:
select * from usr05
   where bname = sy-uname
      and parid = 'BUK'


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 24 2008, 11:51 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2008, 13:41
Сообщения: 22
Откуда: Moscow
DKiyanov написал:
Думаю что надо написать так:
Code:
  LOOP AT tbl_bukrs.
    LOOP at tbl_act.
      AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
           ID 'BUKRS' FIELD tbl_bukrs-BUKRS
           ID 'ACTVT' FIELD tbl_act-act.
      if sy-subrc <> 0.
        p_bukrs = 'X'.
       else.
        p_bukrs = tbl_bukrs-BUKRS.
        exit.
      endif.
    endloop.
    if not p_bukrs is inital. exit. endif.
  ENDLOOP.


А то у вас получается результат проверки по последней БЕ и последней операции.

Правда в этом случае выберется только первая БЕ, а ведь полномочия могут быть и на несколько.


Спасибо большое.
Могу сказать ещё в довесок, что следует закоментить строку
Code:
p_bukrs = 'X'.


или вставить вместо неё код, который прервёт дальнейшее выполнение программы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 24 2008, 13:17 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Tony-m написал(а):
Спасибо большое.
Могу сказать ещё в довесок, что следует закоментить строку
Code:
p_bukrs = 'X'.


или вставить вместо неё код, который прервёт дальнейшее выполнение программы.

А если у пользователя присутствуют полномочия на несколько БЕ? Получится некорректно...
Можно сложить все БЕ по которым пользователь прошел авторизацию в табличку type bukrs.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 24 2008, 13:39 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2008, 13:41
Сообщения: 22
Откуда: Moscow
John Doe написал:
А если у пользователя присутствуют полномочия на несколько БЕ? Получится некорректно...
Можно сложить все БЕ по которым пользователь прошел авторизацию в табличку type bukrs.


- это да. Тока в моём случае там только один букрс и всё.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB