Коллеги, добрый день.
Возникла необходимость выводить модальное окно в процессе работы программы с возможностью выбора значения из неё (например по двойному клику).
Т.е., по сути, аналог ФМ F4IF_INT_TABLE_VALUE_REQUEST с той лишь разницей, что данный ФМ возвращает значение в привязанное к нему поле экрана, а модальное окно должно будет возвращать это значение непосредственно в виде переменной. Нашёл один из вариантов реализации такого окна с помощью класса:
Code:
CLASS my_cl_salv_pop_up DEFINITION .
PUBLIC SECTION .
CLASS-DATA: BEGIN OF st_double_click .
CLASS-DATA: row TYPE salv_de_row ,
column TYPE salv_de_column .
CLASS-DATA: END OF st_double_click .
CLASS-METHODS: popup
IMPORTING
start_line TYPE i DEFAULT 2
end_line TYPE i DEFAULT 15
start_column TYPE i DEFAULT 25
end_column TYPE i DEFAULT 150
popup TYPE boolean DEFAULT ' '
value(t_table) TYPE table .
CLASS-METHODS: double_click FOR EVENT double_click OF cl_salv_events_table
IMPORTING row column.
ENDCLASS. "my_cl_salv_pop_up DEFINITION
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
CLASS my_cl_salv_pop_up IMPLEMENTATION .
METHOD popup .
DATA: ob_salv_table TYPE REF TO cl_salv_table.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = ob_salv_table
CHANGING
t_table = t_table ).
CATCH cx_salv_msg.
ENDTRY.
CHECK ob_salv_table IS BOUND.
ob_salv_table->set_screen_popup(
start_column = start_column
end_column = end_column
start_line = start_line
end_line = end_line ).
DATA: ob_salv_events TYPE REF TO cl_salv_events_table.
ob_salv_events = ob_salv_table->get_event( ).
SET HANDLER double_click FOR ob_salv_events .
ob_salv_table->display( ) .
ENDMETHOD . "popup
*----------------------------------------------------------------------*
METHOD double_click .
st_double_click-row = row .
st_double_click-column = column .
ENDMETHOD . "raise_double_click
*----------------------------------------------------------------------*
ENDCLASS. "my_cl_salv_pop_up IMPLEMENTATION
Собственно, вызов данного окна должен выглядеть как то так: my_cl_salv_pop_up=>popup( EXPORTING t_table = *таблица на вывод* ) .
Но, когда пробую использовать всю эту конструкцию в программе, ловлю эксепшн: Move_cast_error. Я так понимаю, ему что то не нравится с приведением типов, но я уже пробовал разные виды таблиц - одна и та же проблема (и, поидее, такое объявление: value(t_table) TYPE table ведь должно с любой таблицей работать? ).
В моем случае вызов выглядит так:
my_cl_salv_pop_up=>popup( EXPORTING t_table = lt_t012bnk ) .
где lt_t012bnk TYPE TABLE OF t012k-bankn, а bankn - это char18.
На момент вызова таблица содержит значения (на скрине - r_data) и, по сути, является банальным списком из одного столбца.
Что там идёт не так - не могу разобраться(
Буду благодарен, если кто-нибудь подскажет альтернативный способ вывода такой модалки (желательно без рисования доп. экранов) или поможет разобраться с этим.
На всякий случай, вот как выглядит эксепшн: