08-10-2009 10:50 AM
Hi all
I have a requirement where if the value input on a selection screen field is some 'X' then the next field should get disabled immmediately...
i have many blocks in the selection scrren.. but the two fields i'm referring to are in the same block..
i have tried loop at screen at selection screen output.. but it is not working..
i would like someone to tell me how to capture the value entered in the field as 'X' dynamically and write logic to disable the next field..
i have searched through the forums.. but haven't found solution to this requirement..
Thanks in advance.
Shilpa
08-10-2009 11:02 AM
Hi Shilpa,
You have the syntax for USER-COMMAND in a parameter.. This event will be triggered as soon as the value is changed and will go through the rest of the selection-screen events..
This can very well be used for the dynamic function u want.
PARAMETERS: p_opt1 RADIOBUTTON GROUP rb1 USER-COMMAND ONLI DEFAULT 'X',
p_opt2 RADIOBUTTON GROUP rb1.
then u only need to check radiobutton value..
same can be done with checkboxes too..
hope it helps.
08-10-2009 11:06 AM
try the following logic
selection screen declarations
SELECTION-SCREEN BEGIN OF BLOCK SL WITH FRAME TITLE TEXT-001.
PARAMETERS : P_R1 TYPE C USER-COMMAND R1 RADIOBUTTON GROUP R1 DEFAULT 'X'.
SELECT-OPTIONS S_AUFNR FOR AUFK-AUFNR.
PARAMETERS : P_R2 TYPE CHAR1 RADIOBUTTON GROUP R1.
SELECTION-SCREEN END OF BLOCK SL.
code for hiding(the fields will be hiiden when user clicks on 2nd radio button)
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
CASE C_X.
WHEN P_R2.
IF SCREEN-NAME = 'S_AUFNR' OR SCREEN-NAME = '%_S_AUFNR_%_APP_%-TEXT' OR SCREEN-NAME = '%_S_AUFNR_%_APP_%-OPTI_PUSH'
OR SCREEN-NAME = 'S_AUFNR-LOW' OR SCREEN-NAME = '%_S_AUFNR_%_APP_%-TO_TEXT'
OR SCREEN-NAME = 'S_AUFNR-HIGH' OR SCREEN-NAME = '%_S_AUFNR_%_APP_%-VALU_PUSH'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDCASE.
ENDLOOP.
08-10-2009 11:07 AM
Hi,
You can try like this,
SELECT-OPTIONS: s_bukrs FOR t001-bukrs MODIF ID abc,
s_werks FOR t001w-werks MODIF ID xyz.
AT SELECTION-SCREEN OUTPUT.
loop at screen.
if s_bukrs-low = 'X'.
if screen-group1 = 'XYZ'.
screen-input = 0.
modify screen.
endif.
endif.
endloop.
Regards,
Vik
08-10-2009 12:32 PM
Hello Shilpa ,
PARAMETERS : P_R1(2) TYPE C RADIOBUTTON GROUP R1.
AT SELECTION-SCREEN OUTPUT.
IF p_r1 EQ 'X'.
LOOP AT SCREEN.
IF screen-name = 'P1' or 'P2'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
Vanu
08-10-2009 12:39 PM
Hi,
Try this
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01.
PARAMETERS: P_VBELN TYPE VBAK-VBELN,
P_CHECK AS CHECKBOX USER-COMMAND FLAG,
P_FPATH TYPE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK B1.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF P_CHECK EQ 'X'.
IF SCREEN-NAME EQ 'P_FPATH'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.
ELSE.
IF SCREEN-NAME EQ 'P_FPATH'.
SCREEN-INPUT = '1'.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
08-10-2009 12:49 PM
Hi try this code.
REPORT ztest_notepad.
tables : kna1,ekko,vbrk.
PARAMETERS : SALES RADIOBUTTON GROUP VIJJ USER-COMMAND VJY ,
PUR RADIOBUTTON GROUP VIJJ ,
BILL RADIOBUTTON GROUP VIJJ ,
TOTAL AS CHECKBOX.
SELECT-OPTIONS : S_CUSTNO FOR KNA1-KUNNR MODIF ID AKP DEFAULT 1000 TO 1033,
S_PONO FOR EKKO-EBELN MODIF ID VKP,
S_BNO FOR VBRK-VBELN MODIF ID PKP.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SALES = 'X'.
IF SCREEN-GROUP1 = 'VKP'.
SCREEN-INPUT = 0.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
IF SCREEN-GROUP1 = 'PKP'.
SCREEN-INPUT = 0.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ELSEIF PUR = 'X'.
IF SCREEN-GROUP1 = 'PKP'.
SCREEN-INPUT = 0.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
IF SCREEN-GROUP1 = 'AKP'.
SCREEN-INPUT = 0.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ELSEIF BILL = 'X'.
IF SCREEN-GROUP1 = 'AKP'.
SCREEN-INPUT = 0.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
IF SCREEN-GROUP1 = 'VKP'.
SCREEN-INPUT = 0.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
Regards,
Vijay
08-10-2009 12:52 PM
Hi Shilpa,
you can follow coding in that way:
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.
PARAMETERS: rb_psv RADIOBUTTON GROUP rbg1 USER-COMMAND abc
DEFAULT 'X',
rb_asv RADIOBUTTON GROUP rbg1,
po_psv LIKE ibipparms-path MODIF ID aaa,
po_asv LIKE ibipparms-path MODIF ID bbb.
SELECTION-SCREEN END OF BLOCK a.
AT SELECTION-SCREEN OUTPUT.
PERFORM screen_modification.
FORM screen_modification .
IF rb_asv = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'AAA'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT SCREEN.
IF screen-group1 = 'BBB'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " SCREEN_MODIFICATION
Hope this can solve your problems.
Regards,
Tutun
08-10-2009 12:54 PM
Declare the PARAMETER [AS CHECKBOX and add a dummy USER-COMMAND|http://help.sap.com/abapdocu/en/ABAPPARAMETERS_SCREEN.htm#!ABAP_ADDITION_4@4@]. So the PAI will be triggered when changed. You will manage the screen attributes of the depending fields in the PBO (AT SELECTION-SCREEN OUTPUT) as usual via [LOOP AT SCREEN|http://help.sap.com/abapdocu/en/ABAPLOOP_AT_SCREEN.htm].
Regards,
Raymond
08-10-2009 1:36 PM
Hi Shilpa ,
I had faced a similar issue a month back, my requirement was similar to u, it was i had two fields on my selection screen, field 1 and field2.
if i enter a value in field1 the other should get converted to an output field i.e in the 2nd field no input would be possible i will remain just a output field.
and vise-versa.
I had used following piece of code---->>>>
SELECTION-SCREEN BEGIN OF BLOCK AA WITH FRAME TITLE TEXT-001.
PARAMETERS : P_EBELN LIKE EKKO-EBELN ." At selection screen."OBLIGATORY. " PONUMBER
SELECTION-SCREEN END OF BLOCK AA.
SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME TITLE TEXT-003.
PARAMETERS : P_LIFNR LIKE LFA1-LIFNR .
SELECTION-SCREEN END OF BLOCK A.
*********************
P_EBELN IS FIELD1
P_LIFNR IS FIELD2
*********************
THEN I CALLED A MODAL DAILOG BOX IN AT SELECTION-SCREEN OUTPUT, WHICH CONSIST OF --IN WHICH FIELD U WANT TO MAKE ENTRY, IF I SELECT FIELD1, THEN FIELD2 GETS IN OUTPUT MODE, IF I SELECT FIELD 2 THEN FIELD1 GETS IN OUTPUT MODE.
AT SELECTION-SCREEN OUTPUT.
if p_ebeln is initial and P_LIFNR is initial.
call screen 300 STARTING AT 75 4 ENDING AT 122 9.
endif.
***********************************************************************
SCREEN 300 PBO AND PAI ARE AS FOLLOWS--->
MODULE STATUS_0300 OUTPUT.
SET PF-STATUS '300'.
SET TITLEBAR '300'.
ENDMODULE. " STATUS_0300 OUTPUT
&----
*& Module USER_COMMAND_0300 INPUT
&----
text
----
MODULE USER_COMMAND_0300 INPUT.
data LV1_ucomm type sy-ucomm.
LV1_ucomm = sy-ucomm.
CASE LV1_ucomm.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN 'CONTINUE'.
set screen '0'.
leave screen.
ENDCASE.
ENDMODULE. " USER_COMMAND_0300 INPUT
08-10-2009 1:44 PM
I AM CONTINUING WITH MY LAST POST......
then i added a code to AT SELECTION SCREEN OUTPUT.
as follows---->>>>
if p_ebeln is initial and P_LIFNR is initial.
call screen 300 STARTING AT 75 4 ENDING AT 122 9.
endif.
*******************************************new code
IF RAD-RAD1 = 'X'.
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_LIFNR'.
SCREEN-INPUT = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSEIF RAD-RAD2 = 'X'.
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_EBELN'.
SCREEN-INPUT = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
here RAD-RAD1 AND RAD-RAD2 ARE THE RADIO BUTTONS THAT I DEFINED ON THE MODAL DIALOG BOX SCREEN 300.
SEE ABOVE IF RAD-RAD1 I.E FIELD1 IS SELECTED IN SCREEN 300 THEN FIELD2 BECOMES A OUTPUT FIELD ELSE IF I SELECT RAD-RAD2 I.E FIELD2 THEN FIELD1 BECOMES A OUTPUT FIELD.
LIKE THIS U CAN MAKE CHANGES TO THE SELECTION SCREEN FIELD BEFORE THEY GET OUTPUT ON THE SELECTION SCREEN, HOPE THIS HELPS U RESOLVE UR ISSUE.
Regards,
Akash Rana