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.
Другие вопросы по тегам