Как скрыть неиспользуемые подтипы инфо-типа?

Как скрыть неиспользуемые подтипы инфо-типа?

Как долго вы работаете с транзакциями PA20/PA30 в течение рабочего дня? А как долго вы работаете с подтипами инфо-типов в этих же транзакциях? Если предполагается честный ответ, и оказывается, что работаете часто, то вы, безусловно, матерый консультант (хотя какая связь?) И, скорее всего, имеете представление о том, как можно быстро выбирать подтипы инфо-типа, не тратя большого количества времени на это. Ну или того проще, вы помните номера нужных вам подтипов наизусть.

Адресуем этот же вопрос бизнес-пользователям. Ответы на него могут быть разными. Но скорее всего, какая-то группа пользователей будет явно недовольна этим огромным количеством записей в раскрывающемся списке, с которым, "ну совсем неудобно работать". Если такие рассуждения присутствуют у таргет груп, готовьтесь к тому, что вас скоро попросят сократить список подтипов для какого-нибудь инфо-типа, потому что «надоело выбирать нужный, а запомнить их не получается». Итак, как скрыть неиспользуемые подтипы инфо-типа?

Пример того, что может раздражать бизнес-пользователей

Откройте транзакцию PA20/PA30, и выберите, скажем, инфо-тип 0057 с последующим открытием его подтипов

Задача

Допускаем, что есть группа пользователей, которой очень не хочется видеть все подтипы этого инфо-типа, и самый инициативный пользователь настаивает на том, чтобы вы исправили эту ситуацию, оставив в качестве доступных для выбора только три подтипа. Остальных пользователей количество подтипов не смущает.

Решаем задачу

Для начала определимся с группой пользователей. А точнее c тем, как их выделить. Сделать это можно, к примеру, используя SPA/GPA параметры.

См. заметку SPA/GPA параметры в ABAP

Для демонстрации в заметке я создам SPA параметр ZIT0057. Новый параметр необходимо создать в транзакции SE80

Рисунок 1.

Присвойте этот параметр пользователям в транзакции SU3

Рисунок 2.

Стоит отметить, что предложенный в заметке вариант выделения групп пользователей, скажем, не самый удачный. Более красивое и правильное решение для отображения нужного количества подтипов - это считывание информации по значениям полномочий в объектах P_ORGIN или P_ORGXX (если последний используется в ваших процессах)

Создайте внедрение для BAdI HR_F4_GET_SUBTYPE в транзакции SE18

Рисунок 3.

В качестве фильтра для нового внедрения следует указать инфо-тип, для которого выполняются все описанные здесь процедуры.

Рисунок 4.

N.B. Обратите внимание на то, что для BAdI HR_F4_GET_SUBTYPE может существовать только 1 внедрение для 1 инфо-типа. В случае возникновения каких-то проблем с активацией, проверьте, не существует ли уже внедрение для этого же инфо-типа.

Ну а дальше все просто. В моем простеньком примере допускаю наличие вот такого вот кода:

DATA: wa_subty       TYPE subty,
          wa_moabw       TYPE subty,
          wa_stext       TYPE sbttx,
          wa_value_tab   LIKE LINE OF value_tab,
          wa_help_fields LIKE LINE OF help_fields,
          lv_param       TYPE c.
 
    retfield = 'SUBTY'.
 
    CLEAR wa_help_fields.
    REFRESH help_fields.
    wa_help_fields-tabname    = 'T591A'.
    wa_help_fields-fieldname  = 'SUBTY'.
    APPEND wa_help_fields TO help_fields.
 
    wa_help_fields-tabname    = 'T591S'.
    wa_help_fields-fieldname  = 'STEXT'.
    APPEND wa_help_fields TO help_fields.
 
    GET PARAMETER ID 'ZIT0057' FIELD lv_param.
 
    IF lv_param EQ abap_true.
 
      SELECT  subty
      INTO wa_subty
      FROM  t591a
          WHERE  infty = flt_val.
 
        IF ( wa_subty = '1' OR wa_subty = '2' OR wa_subty = '3' ).
          APPEND wa_subty TO value_tab.
          SELECT stext FROM t591s INTO wa_stext WHERE infty = flt_val AND subty = wa_subty AND sprsl = sy-langu.
 
            APPEND wa_stext TO value_tab.
          ENDSELECT.
        ENDIF.
 
 
      ENDSELECT.
    ENDIF.
 
    IF lv_param NE abap_true.
 
      SELECT  subty
      INTO wa_subty
      FROM  t591a
          WHERE  infty = flt_val.
 
        APPEND wa_subty TO value_tab.
        SELECT stext FROM t591s INTO wa_stext WHERE infty = flt_val AND subty = wa_subty AND sprsl = sy-langu.
 
          APPEND wa_stext TO value_tab.
        ENDSELECT.
      ENDSELECT.
 
    ENDIF.

Пример кода можно посмотреть в уже реализованных стандартных реализациях этого BAdI.

Тестируем

Описание кейсов

  • Открытие подтипов инфо-типа 0057 под пользователем в основной записи которого присвоен параметр ZIT0057 со значением «;
  • Изменение значением параметра ZIT0057, и повторное открытие подтипов инфо-типа 0057 под этим же пользователем;
  • Полное удаление параметра ZIT0057 из основной записи пользователя, и открытие подтипов инфо-типа 0057;

Вот такие профитроли.