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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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