Текущее время: Вс, июл 27 2025, 09:47

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Как самому внести значение в строку итогов в ALV ?
СообщениеДобавлено: Ср, июн 29 2011, 07:52 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 06:40
Сообщения: 60
Откуда: Белебей !
Пол: Мужской
Всем привет.

Нужда такая: в стандартную строку итогов в ALV нужно внести значение в определенное поле. Значение это расчитывается не как сумма, а по отдельной формуле. ALV объектная.
Изучая работу ALV в отладчике обнаружил что в ней есть атрибут-таблица MT_DATA. В ней содержится то, что выводится на экране в ALV, в том числе строки и итоги. Если в определенный момент (в дебрях системного кода ALV (через /hs) ), перед самим выводом, в отладчике поменять данные в этой таблице, то изменения выводятся на экране (в итогах не сумма, а моё значение).
Проблема в том, что эта таблица заного формируется после таких событий как: AFTER_USER_COMMAND, AFTER_REFRESH.
Возможно ли решить такую задачу и модифицировать этот атрибут-таблицу перед самим выводом?

Могу показать, в каком месте переформируется этот атрибут-таблица.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как самому внести значение в строку итогов в ALV ?  Тема решена
СообщениеДобавлено: Ср, июн 29 2011, 08:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Правильное использование поиска - залог быстрого нахождения ответа
ALV subtotals - как получить ссылки на строки из которых состоит сабтотал?

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как самому внести значение в строку итогов в ALV ?
СообщениеДобавлено: Ср, июн 29 2011, 14:55 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 06:40
Сообщения: 60
Откуда: Белебей !
Пол: Мужской
Спасибо.
Сделал ссылку к итогам. Меняю значения в них, но эти итоги заного пересчитываются после обработки события :( .
Нашел атрибут ALV->m_init_toolbar, так вот, когда он равен X (менял значение в отладчике), то итоги не пересчитываются, но этот атрибут внутренний, и его никак не поменять Абапом и не нашел метода, в котором он менялся бы.
Так что юзеры получат нужные им итоги только в смартформе.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как самому внести значение в строку итогов в ALV ?
СообщениеДобавлено: Ср, июн 29 2011, 15:57 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
REFRESH_TABLE_DISPLAY вызываете? Работаете в событие AFTER_REFRESH?
На всяк случай, еще есть событие subtotal_text, но get_subtotals думаю получше будет.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как самому внести значение в строку итогов в ALV ?
СообщениеДобавлено: Чт, июн 30 2011, 07:58 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 06:40
Сообщения: 60
Откуда: Белебей !
Пол: Мужской
Разобрался! Оказывается использование метода REFRESH_TABLE_DISPLAY заного вызывает событие after_refresh, и получалось зацикливание. Сделал флаг-условие для однократного вызова REFRESH_TABLE_DISPLAY и всё заработало как надо. :lol:

Code:
METHODS itog
            FOR EVENT after_refresh OF cl_gui_alv_grid.
METHOD itog.
    DATA: total TYPE REF TO data,
          subtotal1 TYPE REF TO data,
          subtotal2 TYPE REF TO data,
          rf,
          ls_tot TYPE out_type,
          c_layo       TYPE lvc_t_fcat.

    FIELD-SYMBOLS:
    <total> TYPE table,
    <tool>  TYPE c.

    CHECK refr = ''.

    CALL METHOD ca_alv->get_subtotals
      IMPORTING
        ep_collect00 = total
        ep_collect01 = subtotal1
        ep_collect02 = subtotal2.

    ASSIGN total->* TO <total>.
    LOOP AT <total> INTO ls_tot.
      CHECK cv_vip_itog IS NOT INITIAL.
      ls_tot-zppm = ls_tot-zbrakc * 1000000 / cv_vip_itog->*.
      MODIFY <total> FROM ls_tot.
    ENDLOOP.

    ASSIGN subtotal1->* TO <total>.
    LOOP AT <total> INTO ls_tot.
      FREE ls_tot-zppm.
      MODIFY <total> FROM ls_tot.
    ENDLOOP.
    ASSIGN subtotal2->* TO <total>.
    LOOP AT <total> INTO ls_tot.
      FREE ls_tot-zppm.
      MODIFY <total> FROM ls_tot.
    ENDLOOP.

    refr = 'X'.
    CALL METHOD ca_alv->refresh_table_display
      EXPORTING
        i_soft_refresh = 'X'.
    FREE refr.

  ENDMETHOD.                    "itog


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

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


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

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


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

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