Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => Тема начата: Sed0Y от Февраль 15, 2012, 01:41:35 pm
-
столкнулся с проблемкой, никак не знаю как ее решить
Проблема в том, что при вызове "AT SELECTION-SCREEN ON VALUE-REQUEST FOR" в процедуре я не могу получить какой radiobutton чекнут
подскажите плз ?!
вот часть кода:
REPORT ZTEST_PROG.
TABLES: aufk.
DATA:
gstsma TYPE tj30t-stsma,
gloc, gkorp TYPE char1 VALUE ''.
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE blok1.
* SELECT-OPTIONS p_tordok FOR aufk-kdauf NO INTERVALS NO-EXTENSION MODIF ID bl1 .
* parameters:
* p_dd1 radiobutton group 1 modif id bl1,
* p_ss1 radiobutton group 1 modif id bl1.
* SELECTION-SCREEN END OF BLOCK b1.
* ...............
* .............
* ..........
* .......
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE blok4.
PARAMETERS:
p_filter TYPE bapi_user_status_text MODIF ID bl4,
p_dd4 radiobutton group STAT modif id bl4,
p_ss4 radiobutton group STAT modif id bl4.
SELECTION-SCREEN END OF BLOCK b4.
SELECTION-SCREEN END OF SCREEN 100.
SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR 10 LINES,
END OF BLOCK mytab.
INITIALIZATION.
mytab-prog = sy-repid.
mytab-dynnr = 100.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_filter .
PERFORM setstatuslist USING 'P_FILTER'.
FORM setstatuslist USING p_type TYPE help_info-dynprofld.
DATA:
lt_status TYPE TABLE OF tj30t,
lt_fields TYPE TABLE OF dfies,
ls_field TYPE dfies,
lv_repid LIKE sy-repid,
lv_dynnr LIKE sy-dynnr.
lv_repid = sy-repid.
lv_dynnr = sy-dynnr.
[b]* IF .
* тут(или в каком-то другом месте) мне неужно в зависимости от того какой радиобутон чекнут присваивать параметру [b]STSMA [/b]значение
* gstsma = 'DDDDP002'.
* ELSE.
* gstsma = 'DDDDP001'.
* ENDIF.
[/b]
SELECT *
FROM tj30t
INTO CORRESPONDING FIELDS OF TABLE lt_status
WHERE stsma = 'DDDDP002'. " gstsma
SORT lt_status BY estat.
ls_field-tabname = 'TJ30T'.
ls_field-fieldname = 'TXT04'.
APPEND ls_field TO lt_fields.
ls_field-fieldname = 'TXT30'.
APPEND ls_field TO lt_fields.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'TXT04'
dynpprog = lv_repid
dynpnr = lv_dynnr
dynprofield = p_type
value_org = 'S'
TABLES
value_tab = lt_status
field_tab = lt_fields.
ENDFORM.
-
Что-то я не понял в чем проблема, ну проверь p_dd4 = 'X' значит он нажать, если p_ss4 = 'X', тогда этот нажат и всех проблем.
-
Что-то я не понял в чем проблема, ну проверь p_dd4 = 'X' значит он нажать, если p_ss4 = 'X', тогда этот нажат и всех проблем.
а то, что в "FORM setstatuslist..." (p_dd4 и p_ss4) <> 'X'
-
а то, что в "FORM setstatuslist..." (p_dd4 и p_ss4) <> 'X'
Ну напиши p_dd4 radiobutton group STAT modif id bl4 default 'X', для первой кнопки. И если это не поможет, тогда добавь для каждой строки еще и типа USER-COMMAND rbt.
-
Ну напиши p_dd4 radiobutton group STAT modif id bl4 default 'X', для первой кнопки. И если это не поможет, тогда добавь для каждой строки еще и типа USER-COMMAND rbt.
default 'X' - мне явно не нужен, т.к. в PERFORM setstatuslist я должен в зависимости от того какой радиобутон чекнут выбирать данные ....
плюс остается не изменяемым при вызове "VALUE-REQUEST "
а вот если добавить в для каждой строки USER-COMMAND rbt то пишет "USER-COMMAND" may only occur in the first parameter of a radio button group ."
а если добавить в одной (и первой) то тоже нет результата, помогло такой вариант:
......
PARAMETERS:
p_filter TYPE bapi_user_status_text MODIF ID bl4,
p_dd4 radiobutton group STAT modif id bl4 [b]USER-COMMAND rbt1[/b],
p_ss4 radiobutton group STAT modif id bl4 [b]DEFAULT 'X'[/b].
.....
Получается, что на один radiobutton group можно только 1 USER-COMMAND?
2Uukrul - и снова СПАСИБО.
-
Вот так нужно объявлять:
PARAMETERS: p_dd4 RADIOBUTTON GROUP stat MODIF ID bl4 USER-COMMAND xxx DEFAULT 'X'.
Без USER-COMMAND положение бегунка в п/п можно отловить только в том случае, если после перемещения переключателя нажать Enter (т.е. записать значения в поля экрана, а не просто ввести в поля), а уже затем нажимать F4 в нужном поле для вызова SH. Если использовать просто ... DEFAULT 'X', то без нажатия Enter программа всегда будет показывать значение, присвоенное по умолчанию, даже если бегунок перевели в положение P_SS4.
P.S. Да, верно. USER-COMMAND вешается на группу положений переключателя.
UPD: А без DEFAULT, просто с USER-COMMAND, если переключатель не трогать и Enter не нажимать, то программа значений "не видит" (например, первый запуск и сразу F4 в первом поле). ;)
-
и 2Dmitriy - СПАСИБО.
теперь все отлично работает!
-
P.S. Да, верно. USER-COMMAND вешается на группу положений переключателя.
А ну да я это забыл.. а по поводу DEFAULT это только предустановка значения при запуске, дальше переключай как хочешь.