Текущее время: Пн, июл 28 2025, 15:19

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Пн, авг 30 2010, 16:29 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, май 05 2010, 11:22
Сообщения: 69
Добрый день, господа.
Подскажите, пожалуйста, как можно перебрать значения селекционного экрана для проверки полномочий?
Дело в том, что значения селекционного экрана находятся во внутренней таблице вида:
| Строка | SIGN | OPTION | LOW | HIGH |,
где соответственно представлены и значения по строчно и/или диапазоны значений с селекционного экрана, и мне необходимо для проверки полномочий перебрать кажное значение этого диапазона. что-то типа этого:
Code:
LOOP AT  MS_WERKS.
   AUTHORITY-CHECK OBJECT 'ZZLGORT'
      ID 'WERKS'  FIELD WERKS
      ID 'ZLGORT' FIELD LGORT
      ID 'ACTVT'  FIELD '03'.
    IF sy-subrc <> 0.
      MESSAGE 'У Вас не достаточно полномочий' TYPE 'E'.
    ENDIF.
ENDLOOP.
только представленный код не правильно написан, т.к. я не понимаю как вытащить из MS_WERKS нужные значения.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Пн, авг 30 2010, 17:37 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
можно вот так:
Code:
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_lgort
FROM T001L
WHERE werks IN ms_werks
  AND lgort IN ms_lgort. "(!)

LOOP AT lt_lgort INTO ls_lgort.
   AUTHORITY-CHECK OBJECT 'ZZLGORT'
      ID 'WERKS'  FIELD ls_lgort-WERKS
      ID 'ZLGORT' FIELD ls_lgort-LGORT
      ID 'ACTVT'  FIELD '03'.
  CHECK SY-SUBRC <> 0.
  no_auth = 'X'.
  DELETE lt_lgort INDEX sy-tabix.
ENDLOOP.
IF lt_lgort[] IS INITIAL.
  IF no_auth = 'X'.
    MESSAGE e208(00) WITH 'Нет полномочий на выбранные заводы/склады'.
  ELSE.
    MESSAGE e208(00) WITH 'Заводы/склады не найдены'.
  ENDIF.
ELSEIF no_auth = 'X'.
  MESSAGE e208(00) WITH 'Список заводов/складов ограничен соответствующими полномочиями'.
ENDIF.
 
 


ЗЫ: Пользуйтесь встроенной справкой и сайтом help.sap.com.

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Пн, авг 30 2010, 18:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Цитата:
ЗЫ: Пользуйтесь встроенной справкой и сайтом help.sap.com.

Это скорей приём, такого в справке не найдешь! :)

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Пн, авг 30 2010, 21:10 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
viewtopic.php?f=13&t=61737
Дежавю...

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Вт, авг 31 2010, 10:26 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, май 05 2010, 11:22
Сообщения: 69
2удав. Спасибо огромное только у меня возникает ошибка:
"The IN operator with "MS_LGORT" is followed neither by an internal table nor by a value list." при проверке во Фрагменте Кодировки AT SECTION-SCREEN
сделал следующее:
секция DATA:
Code:
TABLES T001L.
TYPES : BEGIN OF stype_organ,
          werks      LIKE  t001l-werks,
          lgort      LIKE  t001l-lgort,
          lgobe      LIKE  t001l-lgobe,
        END   OF stype_organ,
stab_organ type standard table of stype_organ with default key.
DATA: gt_organ       TYPE  stab_organ,
      gs_organ       TYPE  stype_organ.

ФрагментКодировки AT SECTION-SCREEN:
Code:
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_organ
FROM T001L
WHERE werks IN ms_werks
  AND lgort IN ms_lgort. "(!)
LOOP AT gt_organ INTO gs_organ.
   AUTHORITY-CHECK OBJECT 'ZZLGORT'
      ID 'WERKS'  FIELD gs_organ-WERKS
      ID 'ZLGORT' FIELD gs_organ-LGORT
      ID 'ACTVT'  FIELD '03'.
  CHECK SY-SUBRC <> 0.
  no_auth = 'X'.
  DELETE gt_organ INDEX sy-tabix.
ENDLOOP.
IF gt_organ[] IS INITIAL.
  IF no_auth = 'X'.
    MESSAGE e208(00) WITH 'Нет полномочий на выбранные заводы/склады'.
  ELSE.
    MESSAGE e208(00) WITH 'Заводы/склады не найдены'.
  ENDIF.
ELSEIF no_auth = 'X'.
  MESSAGE e208(00) WITH 'Список заводов/складов ограничен соответствующими полномочиями'.
ENDIF.

что не так?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле  Тема решена
СообщениеДобавлено: Вт, авг 31 2010, 10:43 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, ноя 01 2004, 12:17
Сообщения: 298
Пол: Мужской
А Вы определили ms_lgort как SELECT-OPTION?

если ограничения по складу не нужны, можно так:
Code:
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_organ
FROM T001L
WHERE werks IN ms_werks


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Вт, авг 31 2010, 11:57 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, май 05 2010, 11:22
Сообщения: 69
2 RA. Спасибо разобрался.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Ср, сен 01 2010, 15:29 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, май 05 2010, 11:22
Сообщения: 69
Прошу прощения, но в процессе тестирования выявил следующую ошибку.
Поскольку проверка полномочий вызывается на селекционом экране, то в ситуациях когда например указан диапазон складов 0100-0200 и выданы полномочия только на 0100 и на 0200 код не сообщает об ошибках.
В процессе выполнения, строка "DELETE gt_organ INDEX sy-tabix." конечно удаляет лишние склады, оставляя только те на которые полномочия есть. Но это интересно только когда проверяются полномочия уже при получении списка, а для селекта они не подходят...
Если кому интересно для селекционных экранов сделал так:
Code:
IF ms_lgort[] IS INITIAL.
  SET  CURSOR  FIELD 'MS_LGORT-LOW'.
  MESSAGE e233(m3). " Укажите склад.
ENDIF.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_organ FROM T001L
  WHERE lgort IN ms_lgort.
LOOP AT gt_organ INTO gs_organ.
  AUTHORITY-CHECK OBJECT 'ZZLGORT'
    ID 'ZLGORT' FIELD gs_organ-LGORT
    ID 'ACTVT'  FIELD '03'.
  IF NOT sy-subrc IS INITIAL.
    SET  CURSOR  FIELD 'MS_LGORT-LOW'.
    MESSAGE  e860(m3) WITH gs_organ-LGORT." У Вас нет полномочий на просмотр данных по складу номер &.
  ENDIF.
ENDLOOP.
IF gt_organ[] IS INITIAL.
  SET  CURSOR  FIELD 'MS_LGORT-LOW'.
  IF MS_LGORT-LOW IS INITIAL.
    MESSAGE e103(m3) WITH MS_LGORT-HIGH MS_WERKS-HIGH." Склада & на заводе & нет.
  ELSE.
    MESSAGE e103(m3) WITH MS_LGORT-LOW MS_WERKS-LOW.
  ENDIF.
ENDIF.
аналогично по заводам.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Ср, сен 01 2010, 16:14 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, ноя 01 2004, 12:17
Сообщения: 298
Пол: Мужской
Честно говоря ничего не понял.

Цитата:
проверка полномочий вызывается на селекционом экране

Цитата:
код не сообщает об ошибках

Цитата:
проверяются полномочия уже при получении списка


Предложенный код отвечает на Вашу тему: "Перебор значений селекционного экрана в цикле".


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Ср, сен 01 2010, 16:54 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, май 05 2010, 11:22
Сообщения: 69
RA написал:
Честно говоря ничего не понял.

А чего тут не понятного? Если я делаю проверку полномочий на селекционном экране то предложенный Удавом код в чистом виде не подходит, т.е. при нажатии enter я не получу сообщение об ошибке. это проверенный факт. я так об этом и написал. это на две первые цитаты.
по третьей цитате, из кода Удава, я на основании результата проверки полномочий могу уже отбирать данные. т.е. данный код должен размещается не в секции AT SELECTION-SCREEN..., а где-нибудь в GET MARD. Тогда будет все ОК.
Если конечно читать буквально, то предложенный код конечно переберает значения селекционного экрана. кто бы с этим спорил.
Что бы было всем понятно. Задача стояла, добавить проверку полномочий на завод и склад, заполненные на селекционном экране при нажатии ENTER.
И с помощью участников форума достигут успех. За что огромное спасибо.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Чт, сен 02 2010, 09:28 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
userID написал(а):
Прошу прощения, но в процессе тестирования выявил следующую ошибку.
Поскольку проверка полномочий вызывается на селекционом экране, то в ситуациях когда например указан диапазон складов 0100-0200 и выданы полномочия только на 0100 и на 0200 код не сообщает об ошибках.
...

Не понятно только зачем грузить пользователя безполезной информацией??? Если у него есть полномочия на склад 0100 0150 0200, почему у него должна болеть голова из-за отсутствия полномочий на 0110 0160 0199??? Зачем ему лишний раз напоминать о существовании данных складов???

_________________
"После" - не значит "вследствие"


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Чт, сен 02 2010, 09:41 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
userID написал(а):
Если я делаю проверку полномочий на селекционном экране то предложенный Удавом код в чистом виде не подходит, т.е. при нажатии enter я не получу сообщение об ошибке. это проверенный факт.

А как же
Code:
ELSEIF no_auth = 'X'.
  MESSAGE e208(00) WITH 'Список заводов/складов ограничен соответствующими полномочиями'.
ENDIF.

:)
Можно конечно собрать и вывести все склады, по которым нет полномочий, например с помощью конкатенации в одну строку.
Но это и без подсказки можно сделать ;)

Также хочу обратить внимание, что в приведенном вами коде
Code:
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_organ FROM T001L
  WHERE lgort IN ms_lgort.

не анализируется ключевое поле WERKS. Это приведет к тому, что проверяться будут не склады, привязанные к заводам, а все возможные склады. Следовательно, сообщения об ошибках могут быть некорректными.
Кроме этого, ошибка будет выскакивать каждый раз только на один склад, т.е. пользователь не увидит сразу все склады, на которые отсутствуют полномочия...

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Чт, сен 02 2010, 11:21 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, май 05 2010, 11:22
Сообщения: 69
Почему мне ни кто не верит :shock:
Code:
ELSEIF no_auth = 'X'.
  MESSAGE e208(00) WITH 'Список заводов/складов ограничен соответствующими полномочиями'.
ENDIF.

пример:
есть полномочия на два склада 0100 и 0200, так вот если я указываю диапазон от 0100 до 0200 то сообщений об отсутствии полномочий я не получу.
По поводу связки завод-склад соглашусь, Вы правы, но я убрал условие про завод, т.к. данный код я пишу в отдельные SECTION-SCREEN для завода свой, для склада свой (возможно станет понятней, делается это все в инфонаборе). и у меня возникала ошибка
Цитата:
2удав. Спасибо огромное только у меня возникает ошибка: "The IN operator with "MS_LGORT" is followed neither by an internal table nor by a value list."
как исправитья не знаю поэтому ограничился условиями завод для завода, склад для склада.
Поскольку я любитель, и делаю какие-то вещи с помощью ваших подсказок и анализирования других кодов, прошу меня не судить так сильно.
И если есть красивый, вариант подскажите как сделать.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Чт, сен 02 2010, 11:57 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
userID написал(а):
есть полномочия на два склада 0100 и 0200, так вот если я указываю диапазон от 0100 до 0200 то сообщений об отсутствии полномочий я не получу.

Только в том случае, если в T001L нет складов между 0100 и 0200 для заводов, указанных в MS_WERKS :wink:

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перебор значений селекционного экрана в цикле
СообщениеДобавлено: Чт, сен 02 2010, 12:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
userID написал(а):
2удав. Спасибо огромное только у меня возникает ошибка: "The IN operator with "MS_LGORT" is followed neither by an internal table nor by a value list."

Какую ЛБД вы используете и что указано в операторе NODES?

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

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


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

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


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

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