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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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