Доступ и назначение значений в текстовое поле, содержащееся в элементе управления Tabstrip

#abap

#abap

Вопрос:

В ABAP я создал 3 экрана: 0100, 0110, 0120

Экран 0100 представляет собой элемент управления Tabstrip с 2 вкладками (каждая из которых содержит дополнительный экран). Экран 0100 вызывает экран 0110

Экран 0110 содержит два текстовых поля: value1, value2 и кнопка Нажатие кнопки приводит меня к tab2 вкладки, содержащей результат textbox.

Я хочу добавить значения textbox: value1 и textbox: value2 и присвоить результат textbox: result.

Вопрос) Как мне получить доступ к значениям, представленным в TabstripControlTab1-Subscreen-Textbox1(value1) и TabstripControlTab1-Subscreen-Textbox2(value2), и назначить вычисленное значение в TabstripControlTab2-Subscreen-Textbox1(результат)?

Я объявил переменные с теми же именами, что и элементы управления textbox в TopInclude программы: value1, value2, результат все целочисленного типа, но каким-то образом значения в текстовых полях не отражаются в переменных программы ABAP.

Screen0110:

введите описание изображения здесь

Screen0120:

введите описание изображения здесь


Код:***

 Main Program: 

INCLUDE Z_DEMOSCREEN_TOP.    " global Data

*Screen 110 Include:
INCLUDE Z_DEMOSCREEN_STATUS_0100O01.
INCLUDE Z_DEMOSCREEN_USER_COMD_010I01.

*Screen 120 Include:
INCLUDE Z_DEMOSCREEN_STATUS_0110O01.
INCLUDE Z_DEMOSCREEN_USER_CMD_011I01.

START-OF-SELECTION.

CALL SCREEN 100.
  

 *amp;---------------------------------------------------------------------*
*amp; Include Z_DEMOSCREEN_TOP          Module Pool      Z_DEMOSCREEN
*amp;
*amp;---------------------------------------------------------------------*

PROGRAM  Z_DEMOSCREEN.
DATA:
FIRST_VALUE TYPE C,
SECOND_VALUE TYPE I,
RESULT TYPE I,
ok_code LIKE sy-ucomm.
CONTROLS tabstrip TYPE TABSTRIP.
  

 *****Screen 100:*****
PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.
 CALL SUBSCREEN TABSTRIP_TAB1_SUBSCR INCLUDING sy-cprog '0110'.


PROCESS AFTER INPUT.
 MODULE USER_COMMAND_0100.

module USER_COMMAND_0100 input.
  CLEAR: ok_code.
  ok_code = sy-ucomm.

  CASE ok_code.
    WHEN 'TAB1' OR 'TAB2'.
      tabstrip-activetab = ok_code.
    WHEN 'ADD'.
      tabstrip-activetab = 'TAB2'.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'CANCEL'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
  ENDCASE.
endmodule.     
  

 *** Screen 110***
PROCESS BEFORE OUTPUT.
 MODULE STATUS_0200.
*
PROCESS AFTER INPUT.
 MODULE USER_COMMAND_0200.
  

Комментарии:

1. Значения, введенные в полях экрана с именами value1 и value2 , должны быть напрямую перенесены в ваши глобальные переменные value1 и value2 (перенос выполняется путем сопоставления имен), но только если вы определили свой элемент управления tabstrip с режимом подкачки сервера . Если вы определили его с помощью «local paging» и переключаетесь между вкладками, код ABAP не вызывается, значения полей экрана не передаются. Нажатие Enter (или других аналогичных функциональных клавиш) приведет к переносу значений.

2. укажите код и определение экрана

3. в вопрос добавлен код

Ответ №1:

Мне пришлось вызывать оба нижних экрана 110 и 120 в PBO, а в PAI мне пришлось вызывать нижний экран 110

Я предполагаю, что, поскольку простой вызов подэкранных режимов в PBO (без инструкции вызова в PAI) будет вызывать подэкранный режим 110 снова каждый раз, когда я нажимаю кнопку PUSH, удаляя предыдущие записи.

Код для экрана 100

 PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  CALL SUBSCREEN tabstrip_tab1_subscr INCLUDING sy-cprog '0110'.
  CALL SUBSCREEN tabstrip_tab2_subscr INCLUDING sy-cprog '0120'.




PROCESS AFTER INPUT.
  MODULE user_command_0100.
  CALL SUBSCREEN tabstrip_tab1_subscr.
  

Глобальные переменные были перенесены в TOP include.

На экранах 110 и 120 не будет новых меню или кода.

На экране 120 PBO будет выполнено вычисление: Результат = First_Value Second_Value

В PAI я не мог использовать метод полного вызова subscreen:

 CALL SUBSCREEN tabstrip_tab1_subscr INCLUDING sy-cprog '0110'.
  

Почему?

Ответ №2:

Вам нужно указать имя элемента в качестве глобальной переменной, такой как GV_VALUE1 и GV_VALUE2. Графический интерфейс автоматически отображает значения переменных и присваивает введенные значения этим переменным.

Комментарии:

1. Я не включил верхний параметр в свой пул модулей, но я определил переменные: value1, value2 и result в основной программе, определенной с помощью Report <имя отчета>, где вызываются все включаемые. Поля экрана имеют тип int1, а переменные — тип integer (I). По-прежнему переменные не отображаются в поля экрана

2. @gram77 Насколько я знаю INT1 , тип не поддерживается в технологии Dynpro. Вы должны использовать INT4 (только последний соответствует типу I в коде ABAP).