SAP SALV всегда показывает длинный текст в заголовке столбца
Я использую SALV для отображения внутренней таблицы. Поэтому я оптимизирую столбцы и устанавливаю текст столбца. Когда SALV отображает заголовок столбца, всегда отображается краткий текст, поскольку значение в столбце является только boole_d ('X').
Я попытался SET_OUTPUT_LENGTH, чтобы установить фиксированную ширину столбца. Также удален короткий текст и добавлен только средний или длинный текст. Столбец остается маленьким для отображения длинного текста.
Первоначальный отчет был написан кем-то другим, и мне пришлось настроить некоторые столбцы. Таким образом, фабричный метод вызывался дважды, но я не совсем уверен, почему. Не знаю, вызывает ли это какую-то ошибку в конфигурации.
У кого-нибудь была такая же проблема? Я добавил часть кода для генерации ALV.
[...]
END-OF-SELECTION.
"sALV nach Pernr erzeugen
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_tabpernr
CHANGING
t_table = gt_result.
DATA: go_tabpernr TYPE REF TO cl_salv_table.
DATA: go_tabdepart TYPE REF TO cl_salv_table.
go_tabpernr->get_columns( )->set_optimize( abap_true ).
"Überschrift mitgeben
go_tabpernr->get_columns( )->get_column( 'TEXT01')->set_medium_text( 'Department' ).
go_tabpernr->get_columns( )->get_column( 'AUSTRITT')->set_medium_text( 'Austritt' ).
go_tabpernr->get_columns( )->get_column( 'AUSTRITT')->set_short_text( 'Aust.' ).
go_tabpernr->get_columns( )->get_column( 'LZK')->set_short_text( 'LZK' ).
go_tabpernr->get_columns( )->get_column( 'LZK')->set_medium_text( 'Langzeitkrank' ).
go_tabpernr->get_columns( )->get_column( 'AUSGESTEUERT')->set_medium_text( 'Ausgesteuert' ).
go_tabpernr->get_columns( )->get_column( 'AUSGESTEUERT')->set_short_text( 'Aus.' ).
go_tabpernr->get_columns( )->get_column( 'WEINGLIED')->set_short_text( 'Eingl.' ).
go_tabpernr->get_columns( )->get_column( 'WEINGLIED')->set_medium_text( 'Wiedereingl.' ).
go_tabpernr->get_columns( )->get_column( 'WEINGLIED')->set_long_text( 'Wiedereingliederung' ).
go_tabpernr->get_columns( )->get_column( 'NPLUS_TEXT')->set_medium_text( 'N+' ).
go_tabpernr->get_columns( )->get_column( 'NPLUS_TEXT')->set_short_text( 'N+' ).
"Darstellung anpassen
go_tabpernr->get_display_settings( )->set_striped_pattern( abap_true ).
"Funktionen freischalten
go_tabpernr->get_functions( )->set_all( abap_true ).
"Gruppierung und Sortierung
SORT gt_result BY pernr DESCENDING . "endda
go_tabpernr->get_sorts( )->clear( ).
""ALV für Department erzeugen (gleiches Vorgehen wie nach pernr)
"sALV erzeugen
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_tabdepart
CHANGING
t_table = gt_result.
go_tabpernr->display( ).
3 ответа
Вы можете изменить ширину столбца с помощью метода SET_OUTPUT_LENGTH для столбца. Например:
DATA(lo_column) = go_tabpernr->get_columns( )->GET_COLUMN( 'LZK' ).
lo_column->SET_MEDIUM_TEXT( 'Langzeitkrank' ).
lo_column->SET_OUTPUT_LENGTH( '20' ).
Чтобы заставить это работать, мне пришлось повернуть настройку оптимизации столбца в false. В классе cl_salv_column также есть метод SET_OPTIMIZED. Возможно, вам придется установить это для каждого столбца, чтобы получить желаемый эффект. В следующем посте более подробно рассказывается об использовании этих SET_OPTIMIZE и SET_OPTIMIZED и о том, как они работают с общим макетом ALV Grid.
В соответствии с этим: https://archive.sap.com/discussions/thread/220953, по-видимому, необходимо (в случае ручной установки коротких / средних / длинных текстов) определить все три из них, а не только краткий текст или короткий / средний. всегда все трое. Не могли бы вы попробовать?
Я читаю вашу ветку и решаю проблему так:
- Устанавливаю оптимизацию столбца;
- После получения данных столбца, как в вашем коде, я установил короткий и средний текст с пустым значением;
- Затем я использовал метод set_fixed_header_text, чтобы добиться того же эффекта, что и «wa_fieldcat-ddictxt = 'L'», но подумав, что прямо сейчас я провел так много тестов, что не уверен, что эта часть действительно необходима, попробуйте без нее и проверьте если вы получите excel с полным текстом заголовка.
lo_columns = lo_alv->get_columns( ).
lo_columns->set_optimize( ).
lo_col_ref = lo_columns->get( ).
LOOP AT lo_col_ref ASSIGNING <fs_col_ref>.
<fs_col_ref>-r_column->set_short_text( '' ).
<fs_col_ref>-r_column->set_medium_text( '' ).
CALL METHOD <fs_col_ref>-r_column->set_fixed_header_text
EXPORTING
value = 'L'.
ENDLOOP.