Текущее время: Вт, июн 24 2025, 00:53

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Получение индексов выделенных строк subtotal в alv отчете
СообщениеДобавлено: Ср, апр 01 2015, 00:26 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 06 2014, 21:38
Сообщения: 14
Добрый день!

Подскажите, пожалуйста, как можно получить данные выделенных строк (subtotal) в alv отчете ?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Получение индексов выделенных строк subtotal в alv отчете
СообщениеДобавлено: Пт, апр 03 2015, 10:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Если речь об обычном гриде CL_GUI_ALV_GRID, то при вызове get_selected_rows возвращается таблица типа lvc_t_row, в которой первое поле rowtype как раз показывает что это: обычная строка, субтотал, тотал

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение индексов выделенных строк subtotal в alv отчете  Тема решена
СообщениеДобавлено: Ср, май 20 2015, 09:48 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 06 2014, 21:38
Сообщения: 14
У строк subtotal отрицательные индексы.

Выход нашли через расширение класса cl_gui_alv_grid . Добавили метод, в который возвращает параметры private атрибутов mt_data, mt_info. По ним можно найти значение выделенных строк.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Получение индексов выделенных строк subtotal в alv отчете
СообщениеДобавлено: Ср, май 20 2015, 14:15 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Небольшой пример без расширения ALV Grid, так сказать стандартными средствами. Не во всех случаях будет именно этот вариант работать, но может кому поможет с общей концепцией.

Code:
TYPES: slis.

DATA: itab      TYPE TABLE OF spfli,
      gs_layout TYPE lvc_s_layo,
      gt_fcat   TYPE lvc_t_fcat,
      gs_fcat   TYPE lvc_s_fcat,
      gt_sort   TYPE lvc_t_sort,
      wa_sort   TYPE lvc_s_sort.

START-OF-SELECTION.
  SELECT * FROM spfli INTO TABLE itab
    WHERE distid = 'KM'.

END-OF-SELECTION.
  " Включаем множественный выбор
  gs_layout-box_fname = 'MANDT'.

  " Создаем каталог полей для создания подитогов
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'SPFLI'
    CHANGING
      ct_fieldcat      = gt_fcat.


  " Суммируем расстояния по пунктам назначения
  " Собственно Итог
  LOOP AT gt_fcat INTO gs_fcat.
    CASE gs_fcat-fieldname.
      WHEN 'DISTANCE'.
        gs_fcat-do_sum = 'X'.
        MODIFY gt_fcat FROM gs_fcat.

    ENDCASE.
  ENDLOOP.

  " и Подитог
  REFRESH gt_sort.
  CLEAR wa_sort.
  wa_sort-fieldname = 'CITYFROM'.
  wa_sort-down = 'X'.
  wa_sort-subtot = 'X'.
  APPEND wa_sort TO gt_sort.

  " Вывод
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-cprog
      i_callback_user_command  = 'USER_COMMAND'
      i_callback_pf_status_set = 'SET_PF_STATUS'
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fcat
      it_sort_lvc              = gt_sort
    TABLES
      t_outtab                 = itab.


FORM set_pf_status  USING extab TYPE slis_t_extab.
  " Статус MAIN содержит только одну кнопку GET и команды выхода
  SET PF-STATUS 'MAIN'.
ENDFORM.

FORM user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.

  CASE r_ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      SET SCREEN 0.
      LEAVE SCREEN.

    WHEN 'GET'.
      FIELD-SYMBOLS <subtotals> TYPE spfli_tab.

      DATA: l_grid          TYPE REF TO cl_gui_alv_grid,
            dref0           TYPE REF TO data,
            dref1           TYPE REF TO data,
            t_subtotals_get TYPE spfli_tab,
            t_rows          TYPE lvc_t_row,
            s_row           TYPE lvc_s_row,
            wa_spfli        TYPE spfli.

      " RS_SELFIELD-SUMINDEX может содержать индекс строки с
      " подитогами при DOUBLE_CLICK по ней, но мы будем играться
      " с ООП и множественным выбором подитогов через CTRL

      " Получение инстанции ALV GRID
      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          e_grid = l_grid.

      IF l_grid IS NOT INITIAL.
        " Берем любые выделенные строки
        CALL METHOD l_grid->get_selected_rows
          IMPORTING
            et_index_rows = t_rows.

        " Получаем информацию по подитогам - они будут в DREF1
        " В DREF0 - итоги. Если будет несколько уровней сортировки
        " потребуются дополнительные параметры импорта этого метода
        CALL METHOD l_grid->get_subtotals
          IMPORTING
            ep_collect00 = dref0    " Key 1
            ep_collect01 = dref1.   " Key 1 + Key 2

        ASSIGN dref1->* TO <subtotals>.

        " GET_SUBTOTALS не учитывает параметры сортировки,
        " сортируем вручную
        LOOP AT gt_sort INTO wa_sort.
          CASE 'X'.
            WHEN wa_sort-down.
              SORT <subtotals> BY (wa_sort-fieldname) DESCENDING.

            WHEN wa_sort-up.
              SORT <subtotals> BY (wa_sort-fieldname) ASCENDING.

          ENDCASE.
        ENDLOOP.

        " По выделенным строкам находим подитоги
        LOOP AT t_rows INTO s_row WHERE rowtype IS NOT INITIAL.
          READ TABLE <subtotals> INTO wa_spfli INDEX s_row-index.
          IF sy-subrc IS INITIAL.
            APPEND wa_spfli TO t_subtotals_get.
          ENDIF.
        ENDLOOP.

        IF t_subtotals_get IS NOT INITIAL.
          CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
            EXPORTING
              i_structure_name = 'SPFLI'
              i_grid_title     = 'Выбранные подитоги'
            TABLES
              t_outtab         = t_subtotals_get.
        ENDIF.

      ENDIF.

  ENDCASE.

ENDFORM.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение индексов выделенных строк subtotal в alv отчете
СообщениеДобавлено: Ср, май 20 2015, 17:57 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 18 2010, 15:38
Сообщения: 97
Ager написал(а):
У строк subtotal отрицательные индексы.

Выход нашли через расширение класса cl_gui_alv_grid . Добавили метод, в который возвращает параметры private атрибутов mt_data, mt_info. По ним можно найти значение выделенных строк.

расширение - это modificaiton or iheritance?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Получение индексов выделенных строк subtotal в alv отчете
СообщениеДобавлено: Ср, май 20 2015, 23:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Ager написал(а):
Добрый день!

Подскажите, пожалуйста, как можно получить данные выделенных строк (subtotal) в alv отчете ?

А зачем?

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение индексов выделенных строк subtotal в alv отчете
СообщениеДобавлено: Чт, май 21 2015, 10:06 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 06 2014, 21:38
Сообщения: 14
Удав написал(а):
А зачем?


Требование заказчика.
У него должна была быть возможность работать с отчетом в настроенном формате , который подразумевает наличие только строк subtotal и total.


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

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Мы такую задачу решили динамической группировкой по внутренней таблице перед выводом информации на экран.
Субтотал позволяет делать группировку максимум по 10 полям.

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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