SAPфорум.RU
https://www.sapboard.ru/forum/

Динамическая выборка таблиц
https://www.sapboard.ru/forum/viewtopic.php?f=13&t=96392
Страница 1 из 4

Автор:  sonics [ Вт, май 15 2018, 14:15 ]
Заголовок сообщения:  Динамическая выборка таблиц

Сама идея - это на начальном экране сделать drop list из таблиц, которые мне нужны, они по структуре одинаковые.
И вывод их.
Идея есть, как это реализовать, но вот с drop-list на селективном экране - тут у меня остались вопросы.
посмотрел пару программ, там не совсем то, что нужно :(
подскажите пожалуйста начало...

Автор:  Serge69 [ Вт, май 15 2018, 14:21 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Сделай домен со списком значений.
и сделай дополнение PARAMETERS ..... TYPE ............... AS LISTBOX VISIBLE LENGTH 70.
Есть еще ФМ 'VRM_SET_VALUES'

Автор:  Kuranov.Dmitry [ Вт, май 15 2018, 14:32 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Code:
TYPE-POOLS: vrm, slist, icon.

PARAMETERS: p_list_a TYPE char3 AS LISTBOX VISIBLE LENGTH 30
  OBLIGATORY DEFAULT '001'
  USER-COMMAND change_p_list_a.        " список

DATA:
      list       TYPE vrm_values,
      value      LIKE LINE OF list.

INITIALIZATION.

CLEAR value.
  REFRESH list.

  value-key  = '001'.
  value-text = 'Текст 1'.
  APPEND value TO list.

  value-key  = '002'.
  value-text = 'Текст2'.
  APPEND value TO list.

  value-key  = '003'.
  value-text = 'Текст3'.
  APPEND value TO list.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = 'P_LIST_A'
      values = list.


START-OF-SELECTION.

WRITE : 'Вы выбрали:',p_list_a.

Автор:  sonics [ Вт, май 15 2018, 15:08 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Code:
SELECTION-SCREEN BEGIN OF BLOCK SELECT-TABLES-BLOCK with frame title text-010.

INITIALIZATION.
CLEAR value.
  REFRESH list.

  value-key  = '001'.
  value-text = 'Текст 1'.
  APPEND value TO list.

  value-key  = '002'.
  value-text = 'Текст2'.
  APPEND value TO list.

  value-key  = '003'.
  value-text = 'Текст3'.
  APPEND value TO list.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = 'P_LIST_A'
      values = list.
SELECTION-SCREEN END OF BLOCK SELECT-TABLES-BLOCK.


нуууу, я не совсем понимаю как с этим еще и работать :(((((

Автор:  Kuranov.Dmitry [ Вт, май 15 2018, 15:15 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

и что не понятного?

1) формируем список ключ - текстовое значение
2) запускаем ФМ VRM_SET_VALUES, который заполняет список
3) после запуска в параметре будет лежать выбранный ключ

Автор:  sonics [ Вт, май 15 2018, 15:22 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Kuranov.Dmitry написал(а):
и что не понятного?

1) формируем список ключ - текстовое значение
2) запускаем ФМ VRM_SET_VALUES, который заполняет список
3) после запуска в параметре будет лежать выбранный ключ


прошу прощения, все отлично работает)

Автор:  sonics [ Вт, май 15 2018, 16:16 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Code:
SELECTION-SCREEN BEGIN OF BLOCK SELECT-TABLES-BLOCK with frame title text-010.


я вложил в такой блок и прописал в текстовых элементах 010 = Сравнение таблиц
но нигде не показывается эта надпись...
второй вопрос:
Code:
SELECTION-SCREEN BEGIN OF BLOCK SELECT-TABLES-BLOCK with frame title text-010.
SELECTION-SCREEN BEGIN OF LINE.
   CLEAR value.
     REFRESH list.

     value-key  = '011'.
     value-text = 'Вчера'.
     APPEND value TO list.

     value-key  = '012'.
     value-text = 'Сегодня'.
     APPEND value TO list.

     value-key  = '013'.
     value-text = 'май 2018'.
     APPEND value TO list.

     CALL FUNCTION 'VRM_SET_VALUES'
       EXPORTING
         id     = 'P_LIST_A'
         values = list.
  SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN BEGIN OF LINE.
    CLEAR value.
    REFRESH list.

    value-key  = '011'.
    value-text = 'Вчера'.
    APPEND value TO list.

    value-key  = '012'.
    value-text = 'Сегодня'.
    APPEND value TO list.

    value-key  = '013'.
    value-text = 'май 2018'.
    APPEND value TO list.

    CALL FUNCTION 'VRM_SET_VALUES'
      EXPORTING
        id     = 'P_LIST_b'
        values = list.
  SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK SELECT-TABLES-BLOCK.

не выводит дроп лист список, только дефаултные значения, которые я прописал в блоке
объявления переменных, переде селекшн скрин:
Code:
REPORT  zpp_copydata_mrp5_vs_12.
TABLES: zppmrp5, zppmrp5_12.

DATA: gt_result_tab TYPE TABLE OF zpp_result_tab_mpr5vs12." WITH HEADER LINE.

TYPE-POOLS: vrm, slist, icon.
  PARAMETERS: p_list_a TYPE char7 AS LISTBOX VISIBLE LENGTH 10
  OBLIGATORY DEFAULT 'Вчера'(011)
  USER-COMMAND change_p_list_a.        " список

  PARAMETERS: p_list_b TYPE char7 AS LISTBOX VISIBLE LENGTH 10
  OBLIGATORY DEFAULT 'Сегодня'(012)
  USER-COMMAND change_p_list_b.        " список
DATA:
      list       TYPE vrm_values,
      value      LIKE LINE OF list.


DATA gs_result_tab LIKE TABLE OF gt_result_tab.
DATA: ok_code LIKE sy-ucomm,
      g_container TYPE scrfname VALUE 'GRID1',
      grid1  TYPE REF TO cl_gui_alv_grid,
      gt_fieldcat TYPE lvc_t_fcat," каталог полей
      gs_layout TYPE lvc_s_layo,
      g_custom_container TYPE REF TO cl_gui_custom_container.
DATA l_elevel like zppmrp5-elevel.
RANGES r_elevel FOR l_elevel.

FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat,
               <gs_result_tab> LIKE LINE OF gt_result_tab.

Автор:  Kuranov.Dmitry [ Вт, май 15 2018, 16:28 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Естественно, у вас полная ерунда написана.

что делает код внутри блока
SELECTION-SCREEN BEGIN OF LINE. ?

зачем вы его туда запихнули?

почитайте курс по ABAP в плане структуры программы

У вас не показывается надпись из text-010 потому что в блоке нет ни одного параметра. и сап видать решил что пустой блок не нужен и можно оптимизировать экран

Автор:  sonics [ Вт, май 15 2018, 16:38 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Тем не менее, в дроп листе только дефаултное значение.

Автор:  Kuranov.Dmitry [ Вт, май 15 2018, 16:40 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

так заполните список.. выше я привел пример как.

заполнить его надо в блоке INITIALIZATION.
и его не надо запихивать в блок

SELECTION-SCREEN BEGIN....
SELECTION-SCREEN END....

Автор:  sonics [ Ср, май 16 2018, 08:37 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Kuranov.Dmitry написал(а):
так заполните список.. выше я привел пример как.

заполнить его надо в блоке INITIALIZATION.
и его не надо запихивать в блок

SELECTION-SCREEN BEGIN....
SELECTION-SCREEN END....

я поставил блок инициализации после селекшн скрин
но сначала у меня выводится таблица, а если нажать esc, то выпадает в экрна выбора.
почему так?
ведь перед инициализацией экран выбора стоит

Автор:  sonics [ Ср, май 16 2018, 08:38 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Осталось только выводить text-001

Автор:  Saperx [ Ср, май 16 2018, 09:01 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Потому что системе пофигу как вы в программе свой код вставляете. Она работает основываясь на событиях селекционного экрана.
Инициализация выполняется всегда до вывода Selection screen, а т.к. у вас нет start-of-selection перед началом основной логики, то система считает что это тоже часть инициализации.

Почитайте про логику селекционного экрана, а то уже не смешно, честно.
Подумайте, почему код ниже не скомпилируется?
Code:
DATA: gt_mseg TYPE TABLE OF mseg.

START-OF-SELECTION.

  PERFORM get_data.

*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_data.
  SELECT * FROM mseg INTO CORRESPONDING FIELDS OF TABLE gt_mseg WHERE mblnr = '1'.
ENDFORM.                    "get_data

IF LINES( gt_mseg[] ) > 0.
  WRITE 'Selection works!'.
ENDIF.

Как можно писать код, не понимая как он работает?

p.s. Страшно как-то становится, вдруг за вами потом придется программы дорабатывать.

Автор:  sonics [ Ср, май 16 2018, 09:04 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Saperx написал(а):
Потому что системе пофигу как вы в программе свой код вставляете. Она работает основываясь на событиях селекционного экрана.
Инициализация выполняется всегда до вывода Selection screen, а т.к. у вас нет start-of-selection перед началом основной логики, то система считает что это тоже часть инициализации.

Почитайте про логику селекционного экрана, а то уже не смешно, честно.
Подумайте, почему код ниже не скомпилируется?
Code:
DATA: gt_mseg TYPE TABLE OF mseg.

START-OF-SELECTION.

  PERFORM get_data.

*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_data.
  SELECT * FROM mseg INTO CORRESPONDING FIELDS OF TABLE gt_mseg WHERE mblnr = '1'.
ENDFORM.                    "get_data

IF LINES( gt_mseg[] ) > 0.
  WRITE 'Selection works!'.
ENDIF.

Как можно писать код, не понимая как он работает?

p.s. Страшно как-то становится, вдруг за вами потом придется программы дорабатывать.

а ведь придется же.... и вправду.....

Автор:  sonics [ Ср, май 16 2018, 09:13 ]
Заголовок сообщения:  Re: Динамическая выборка таблиц

Вроде разобрался... спасибо.. посмотрел примеры программ
осталось разобраться с этим через case :D и выполнение тех или иных действий)
но с этим я еще попробую сам поработать

Страница 1 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/