CL_SALV_TABLE - Класс для быстрого вывода ALV-таблицы на экран

Автор Uukrul, Грудень 13, 2010, 03:05:06 ДП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Uukrul

Тут случайно надо было получить выделенные строки из этой таблицы, вроде как сначала все просто


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

#101
Да без get_metadata не работает.
Я вот так написал получение строк.
gc_selections->get_selected_rows( RECEIVING value  = lt_rows ).

Uukrul

Цитата: Kastain від Лютий 11, 2016, 09:24:34 ДП
Да без get_metadata не работает.
Я вот так написал получение строк.
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

Коллеги, добрый день.
Помогите, пожалуйста, разобраться в этом классе с методами SET_DECIMALS_COLUMN и SET_DECIMALS. Требуется сформатировать вывод под определенное количество десятичных знаков в одном из столбцов таблицы.

Uukrul

Цитата: JohnHurricane від Березень 11, 2016, 12:44:13 ПП
Помогите, пожалуйста, разобраться в этом классе с методами SET_DECIMALS_COLUMN и SET_DECIMALS. Требуется сформатировать вывод под определенное количество десятичных знаков в одном из столбцов таблицы.
Ну оно теоретически будет работать только для полей которые не ссылаются на единицы измерения. Т.е. если у вас там поле количество и оно ссылочное на единицу измерения, то эти методы работать кажется не будут.

JohnHurricane

Цитата: Uukrul від Березень 11, 2016, 07:06:33 ПП
Ну оно теоретически будет работать только для полей которые не ссылаются на единицы измерения. Т.е. если у вас там поле количество и оно ссылочное на единицу измерения, то эти методы работать кажется не будут.

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

Uukrul

Цитата: JohnHurricane від Березень 14, 2016, 07:18:01 ДП
Тип поля ATFLV - не ссылочное и без ЕИ, просто с плавающей запятой. Почему-то все равно складывается впечатление, что методы не хотят работать. Вы не пробовали с ними работать?
Ну если честно то проще конечно задать такую вещь через правильное определение поля в словаре данных, а этот тип у вас с плавающей точкой, так что если я правильно понимаю то, что вы хотите сделать, то попробуйте сделать так:

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

Цитата: Uukrul від Грудень 13, 2010, 03:06:59 ДП
По быстрому поковырялся с возможностями добавления своих кнопок, похоже, что такой возможности нет, так как объект в качестве имени функции принимает предопределенный набор констант, хотя возможно я не нашел необходимого метода.
Был не прав, есть такая возможность причем она совмещена с возомжностью вывода и стандартных кнопок

gc_alv_table->set_screen_status(
    pfstatus      = '0100'
    report        =  sy-repid
    set_functions = gc_alv_table->c_functions_all ).

в общем указываем свой PF-статус и говорим что надо добавить еще и стандартных кнопок к нему.

ysichov

Еще есть способ добавить кнопки без GUI статусов - подсмотрено у Пола Харди.

Uukrul

Цитата: ysichov від Вересень 27, 2023, 12:11:09 ПП
Еще есть способ добавить кнопки без GUI статусов - подсмотрено у Пола Харди.
Интересный метод однако вот тот опеаратор WRITE " ", который магия намекает, что в одни прекрасный момент это может перестать рабооать. Хотя да метод мнтересный, но полностью кстати согласен с выводами автора по ссылке, что компонент такой себе. Иногда подводных камней больше чем удовльствия от сокращения времени разработки.