Автор Тема: CL_SALV_TABLE - Класс для быстрого вывода ALV-таблицы на экран  (Прочитано 183301 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Тут случайно надо было получить выделенные строки из этой таблицы, вроде как сначала все просто

Код: You are not allowed to view links. Register or Login
DATA: gc_selection TYPE REF TO cl_salv_selections.
DATA: lt_rows      TYPE salv_t_row.

* Получаем объект обработки выделения и задаем выделение множества строк
gc_selection = gc_alv_table->get_selections( ).
gc_selection->set_selection_mode( cl_salv_selections=>multiple ).

* Далее по коду, для получения выделенных строк, нужно сделать следующее
* 1. Обязательно вызвать общий метод обновления данных
gc_alv_table->get_metadata( ).

* 2. Только после этого вызвать метод получения строк, иначе результат будет нулевой.
lt_rows[] = gc_selection->get_selected_rows( ).

Оффлайн Kastain

  • Newbie
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYears
Да без get_metadata не работает.
Я вот так написал получение строк.
 
Код: You are not allowed to view links. Register or Login
gc_selections->get_selected_rows( RECEIVING value  = lt_rows ).
« Последнее редактирование: Февраль 11, 2016, 09:33:49 am от Kastain »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Да без get_metadata не работает.
Я вот так написал получение строк.
 
Код: You are not allowed to view links. Register or Login
gc_selections->get_selected_rows( RECEIVING value  = lt_rows ).
Ну твоя строка с моей: lt_rows[] = gc_selection->get_selected_rows( ) идентичны, тут как говорится кому как удобно, некоторые например еще так пишут: CALL METHOD gc_selections->get_selected_rows( RECEIVING value  = lt_rows ). и тоже будет работать. Кстати можно и так написать  lt_rows = gc_selection->get_selected_rows( ), т.е. не ставить квадратные скобки после lt_rows. Я их ставлю, чтобы наглядно было видно, что возвращается таблица результатов, а не структура. В общем тут как кому удобно так и оформляет текст. В новых ядрах можно вообще так написать:

LOOP AT gc_selection->get_selected_rows( ) INTO data(ls_rows).
  <Обработка выбранных строк>.
ENDLOOP.

Оффлайн JohnHurricane

  • Newbie
  • *
  • Сообщений: 2
  • Репутация: +0/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYears
Коллеги, добрый день.
Помогите, пожалуйста, разобраться в этом классе с методами SET_DECIMALS_COLUMN и SET_DECIMALS. Требуется сформатировать вывод под определенное количество десятичных знаков в одном из столбцов таблицы.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Помогите, пожалуйста, разобраться в этом классе с методами SET_DECIMALS_COLUMN и SET_DECIMALS. Требуется сформатировать вывод под определенное количество десятичных знаков в одном из столбцов таблицы.
Ну оно теоретически будет работать только для полей которые не ссылаются на единицы измерения. Т.е. если у вас там поле количество и оно ссылочное на единицу измерения, то эти методы работать кажется не будут.

Оффлайн JohnHurricane

  • Newbie
  • *
  • Сообщений: 2
  • Репутация: +0/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Ну оно теоретически будет работать только для полей которые не ссылаются на единицы измерения. Т.е. если у вас там поле количество и оно ссылочное на единицу измерения, то эти методы работать кажется не будут.

Тип поля ATFLV - не ссылочное и без ЕИ, просто с плавающей запятой. Почему-то все равно складывается впечатление, что методы не хотят работать. Вы не пробовали с ними работать?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Тип поля ATFLV - не ссылочное и без ЕИ, просто с плавающей запятой. Почему-то все равно складывается впечатление, что методы не хотят работать. Вы не пробовали с ними работать?
Ну если честно то проще конечно задать такую вещь через правильное определение поля в словаре данных, а этот тип у вас с плавающей точкой, так что если я правильно понимаю то, что вы хотите сделать, то попробуйте сделать так:
Код: You are not allowed to view links. Register or Login
DATA: BEGIN OF gt_mkpf OCCURS 10,
      sel(1) TYPE c,
      amount TYPE atflv.
        INCLUDE STRUCTURE mkpf.
DATA: my_field(5) TYPE c,

* Получим каталог полей таблицы
  gc_columns = gc_alv_table->get_columns( ).

* Получим поле по имени
  gc_colwork->set_decimals( '5.2' ).
  gc_colwork->set_edit_mask( '_____' ).

* Вывести ALV-таблицу на экран
  gc_alv_table->display( ).

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
По быстрому поковырялся с возможностями добавления своих кнопок, похоже, что такой возможности нет, так как объект в качестве имени функции принимает предопределенный набор констант, хотя возможно я не нашел необходимого метода.
Был не прав, есть такая возможность причем она совмещена с возомжностью вывода и стандартных кнопок
Код: You are not allowed to view links. Register or Login
gc_alv_table->set_screen_status(
    pfstatus      = '0100'
    report        =  sy-repid
    set_functions = gc_alv_table->c_functions_all ).
в общем указываем свой PF-статус и говорим что надо добавить еще и стандартных кнопок к нему.

Оффлайн ysichov

  • Newbie
  • *
  • Сообщений: 40
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Еще есть You are not allowed to view links. Register or Login добавить кнопки без GUI статусов - подсмотрено у Пола Харди.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Еще есть You are not allowed to view links. Register or Login добавить кнопки без GUI статусов - подсмотрено у Пола Харди.
Интересный метод однако вот тот опеаратор WRITE " ", который магия намекает, что в одни прекрасный момент это может перестать рабооать. Хотя да метод мнтересный, но полностью кстати согласен с выводами автора по ссылке, что компонент такой себе. Иногда подводных камней больше чем удовльствия от сокращения времени разработки.

Sapforum.Biz