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

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


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

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


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

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