Коллеги, добрый день.
Возникла необходимость выводить модальное окно в процессе работы программы с возможностью выбора значения из неё (например по двойному клику).
Т.е., по сути, аналог ФМ 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) и, по сути, является банальным списком из одного столбца.
Что там идёт не так - не могу разобраться(
Буду благодарен, если кто-нибудь подскажет альтернативный способ вывода такой модалки (желательно без рисования доп. экранов) или поможет разобраться с этим.
На всякий случай, вот как выглядит эксепшн:
