Как скрыть столбец управления таблицей?

Следующий код в PBO не работает, чтобы полностью скрыть столбец.

LOOP AT SCREEN.

    IF SCREEN-NAME EQ 'GT_SO-POSNR'
      SCREEN-INPUT = 0.
      SCREEN-ACTIVE = 0.
      SCREEN-INVISIBLE = 1.
      MODIFY SCREEN.
    ENDIF.
ENDLOOP.

Но выше отключается столбец, а не скрывается. Любая помощь, как скрыть столбец?


person Pasan Eeriyagama    schedule 28.06.2013    source источник


Ответы (4)


Используйте поле INVISIBLE таблицы COLS в структуре, определенной оператором CONTROLS. Вся структура задокументирована здесь. В вашей системе должен быть образец программы с именем RSDEMO02, который позволяет вам изменять свойства табличного элемента управления и проверять результаты при этом.

person vwegert    schedule 28.06.2013
comment
Привет. Любое другое имущество, кроме невидимого? Я попробовал INVISIBLE, но не повезло, он не делает его невидимым, вместо этого он преобразует содержимое в «*********», я думаю, это предназначено для того, чтобы сделать содержимое невидимым? Вероятно, поле Like Password.. Но мне нужно скрыть весь столбец с данными и заголовком. Спасибо. - person Pasan Eeriyagama; 01.07.2013

У нас была такая же проблема в нашем проекте, и мы придумываем, как это сделать.

См. ниже образец:

PROCESS BEFORE OUTPUT.
MODULE STATUS.
LOOP WITH CONTROL TABCTRL.
  MODULE MODIFY_100.
ENDLOOP.


MODULE MODIFY_100 OUTPUT.
  DATA wa_tabctrl TYPE cxtab_column .

* loop at the table control
  LOOP AT TABCTRL-COLS INTO WA_TABCTRL.
    IF WA_TABCTRL-NAME =  'POSNR'.  
*     once you get to the desired screen, flag the INVISIBLE field for the table control, not the SCREEN table.             
      WA_TABCTRL-INVISIBLE =  'X'. 
*     Modify the table for table control
      MODIFY TABCTRL-COLS FROM WA_TABCTRL.
     ENDIF.
  ENDLOOP.

ENDMODULE.
person Ice    schedule 12.09.2014

Проверьте, как вы пытаетесь скрыть конкретный столбец. Всякий раз, когда у вас есть элемент управления Table на экране, для него создается структура CXTAB. Таким образом, отключить поле не так просто, как написать имя внутренней таблицы, за которым следует имя столбца.

Ваш код должен быть примерно таким

PROCESS BEFORE OUTPUT.
MODULE STATUS.
LOOP WITH CONTROL TABCTRL.
  MODULE MODIFY_100.
ENDLOOP.


MODULE MODIFY_100 OUTPUT.
  DATA wa_tabctrl TYPE cxtab_column .

  LOOP AT TABCTRL-COLS INTO WA_TABCTRL.
    IF WA_TABCTRL-NAME =  'POSNR'.                    
      WA_TABCTRL-SCREEN-INVISIBLE =  '1'. 
      MODIFY TABCTRL-COLS FROM WA_TABCTRL.
    ENDIF.
  ENDLOOP.

ENDMODULE.
person Rahul Kadukar    schedule 10.12.2013

Нет необходимости перебирать содержимое элемента управления таблицей, чтобы скрыть столбец для каждой строки отдельно, поскольку определение столбцов является центральным для табличного представления.

Более чистое и гораздо более эффективное решение может выглядеть так:

*********************************
* PBO include
*********************************
PROCESS BEFORE OUTPUT.
  MODULE hide_column_0100.

*********************************
MODULE hide_column_0100 OUTPUT.
  PERFORM hide_column.
ENDMODULE.

*********************************
* form include
*********************************
FORM hide_column.
  FIELD-SYMBOL <col> TYPE cxtab_column.
  LOOP AT table_control_0100-cols ASSIGNING <col>.
    IF <col>-screen-name = 'HIDE'.
      <col>-invisible = 1.
    ENDIF.
  ENDLOOP.
ENDFORM.

Лучше поместить код в собственную подпрограмму (FORM), чтобы избежать ненужных глобальных переменных (например, для рабочей области LOOP). Часто забывают, что код MODULE относится к глобальной области видимости.

person kybos    schedule 21.07.2020