#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).