Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Selection screen tabs issue

Former Member
0 Likes
1,704

Hi,

My code is working perfectly.

My problem is, I have 3 check boxes.

If I check these boxes in sequance means P_CHK1, P_CHK2 P_CHK3. it display all tabs and its objects based on checkbox.

but if I check the box P_CHK3 first it display the Third tab but not display its objects.

and after that I check the Box P_CHK2 it display the Second tab but  not display its object but I move tho Tab3 not it display tab3 objects.

code is as below:

TABLES: mkpf, mseg, mchb, mara.

SELECTION-SCREEN : BEGIN OF SCREEN 100 AS SUBSCREEN.

SELECTION-SCREEN : BEGIN OF BLOCK blk11 WITH FRAME TITLE text-r01 .

PARAMETERS : p_rwerks TYPE mseg-werks MODIF ID ch1.

SELECT-OPTIONS : s_rbldat FOR mkpf-bldat MODIF ID ch1,

                  s_rlgort FOR mseg-lgort MODIF ID ch1,

                  s_rmatnr FOR mseg-matnr MODIF ID ch1,

                  s_rcharg FOR mseg-charg MODIF ID ch1,

                  s_rmtart FOR mara-mtart MODIF ID ch1,

                  s_rmatkl FOR mara-matkl MODIF ID ch1,

                  s_rmblnr FOR mkpf-mblnr MODIF ID ch1,

                  s_rsobkz FOR mseg-sobkz MODIF ID ch1.

SELECTION-SCREEN : END OF BLOCK blk11.

SELECTION-SCREEN : END OF SCREEN 100.

SELECTION-SCREEN : BEGIN OF SCREEN 200 AS SUBSCREEN.

SELECTION-SCREEN : BEGIN OF BLOCK blk21 WITH FRAME TITLE text-i01.

PARAMETERS : p_iwerks TYPE mseg-werks MODIF ID ch2.

SELECT-OPTIONS : s_ibldat FOR mkpf-bldat MODIF ID ch2,

                  s_ilgort FOR mseg-lgort MODIF ID ch2,

                  s_imatnr FOR mseg-matnr MODIF ID ch2,

                  s_icharg FOR mseg-charg MODIF ID ch2,

                  s_imtart FOR mara-mtart MODIF ID ch2,

                  s_imatkl FOR mara-matkl MODIF ID ch2,

                  s_imblnr FOR mkpf-mblnr MODIF ID ch2,

                  s_isobkz FOR mseg-sobkz MODIF ID ch2.

SELECTION-SCREEN : END OF BLOCK blk21.

SELECTION-SCREEN : END OF SCREEN 200.

SELECTION-SCREEN : BEGIN OF SCREEN 300 AS SUBSCREEN.

SELECTION-SCREEN : BEGIN OF BLOCK blk31 WITH FRAME TITLE text-s01.

PARAMETERS : p_swerks TYPE mseg-werks MODIF ID ch3.

SELECT-OPTIONS : s_sbldat FOR mkpf-bldat MODIF ID ch3,

                  s_slgort FOR mseg-lgort MODIF ID ch3,

                  s_smatnr FOR mseg-matnr MODIF ID ch3,

                  s_scharg FOR mseg-charg MODIF ID ch3,

                  s_smtart FOR mara-mtart MODIF ID ch3,

                  s_smatkl FOR mara-matkl MODIF ID ch3,

                  s_smblnr FOR mkpf-mblnr MODIF ID ch3,

                  s_ssobkz FOR mseg-sobkz MODIF ID ch3.

SELECTION-SCREEN : END OF BLOCK blk31.

SELECTION-SCREEN : END OF SCREEN 300.

SELECTION-SCREEN : BEGIN OF BLOCK blk1 WITH FRAME TITLE text-m01.

PARAMETERS : p_chk1 AS CHECKBOX USER-COMMAND ch1. "Receipt

PARAMETERS : p_chk2 AS CHECKBOX USER-COMMAND ch2. "Issue

PARAMETERS : p_chk3 AS CHECKBOX USER-COMMAND ch3. "Stock

SELECTION-SCREEN: BEGIN OF TABBED BLOCK seltab FOR 12 LINES,

                   TAB (20) receipt USER-COMMAND push1 DEFAULT SCREEN 100,

                   TAB (20) issue USER-COMMAND push2 DEFAULT SCREEN 200,

                   TAB (20) stock USER-COMMAND push3 DEFAULT SCREEN 300,

                   END OF BLOCK seltab.

SELECTION-SCREEN : END OF BLOCK blk1.

INITIALIZATION.

   receipt = 'Receipt'.

   issue = 'Issue'.

   stock = 'Stock'.

   seltab-prog = sy-repid.

   seltab-dynnr = 100.

   seltab-activetab = 'BUTTON1'.

AT SELECTION-SCREEN.

   CASE sy-dynnr.

     WHEN 1000.

       CASE sy-ucomm.

         WHEN 'PUSH1'.

           seltab-dynnr = 100.

           seltab-activetab = 'RECEIPT'.

         WHEN 'PUSH2'.

           seltab-dynnr = 200.

           seltab-activetab = 'ISSUE'.

         WHEN 'PUSH3'.

           seltab-dynnr = 300.

           seltab-activetab = 'STOCK'.

       ENDCASE.

   ENDCASE.

AT SELECTION-SCREEN OUTPUT.

   BREAK-POINT.

   LOOP AT SCREEN.

     CASE screen-group1.

       WHEN 'CH1'.

         IF p_chk1 = 'X'.

           screen-active = 1.

         ELSE.

           screen-active = 0.

         ENDIF.

       WHEN 'CH2'.

         IF p_chk2 = 'X'.

           screen-active = 1.

         ELSE.

           screen-active = 0.

         ENDIF.

       WHEN 'CH3'.

         IF p_chk3 = 'X'.

           screen-active = 1.

         ELSE.

           screen-active = 0.

         ENDIF.

       WHEN OTHERS.

     ENDCASE.

     IF screen-name  CS 'P_CHK' OR screen-name(4) = 'SSCR'.

       screen-active = 1.

     ENDIF.

     IF screen-name = 'RECEIPT' AND p_chk1 IS INITIAL.

       screen-invisible = '1'.

     ELSEIF screen-name = 'RECEIPT' AND p_chk1 IS NOT INITIAL.

       SET USER-COMMAND 'PUSH1'.

     ENDIF.

     IF screen-name = 'ISSUE' AND p_chk2 IS INITIAL.

       screen-invisible = '1'.

     ELSEIF screen-name = 'ISSUE' AND p_chk2 IS NOT INITIAL.

       SET USER-COMMAND 'PUSH2'.

     ENDIF.

     IF screen-name = 'STOCK' AND p_chk3 IS INITIAL.

       screen-invisible = '1'.

     ELSEIF screen-name = 'STOCK' AND p_chk3 IS INITIAL.

       SET USER-COMMAND 'PUSH3'.

     ENDIF.

     MODIFY SCREEN.

   ENDLOOP.

1 ACCEPTED SOLUTION
Read only

sivaganesh_krishnan
Contributor
0 Likes
1,179

HI Narendra,

Try like this,  Change the AT SELECTION OUTPUT code as below , it works

   LOOP AT SCREEN.

     CASE screen-group1.

       WHEN 'CH1'.

         IF p_chk1 = 'X'.

           screen-active = 1.

*         ELSE.
**           screen-active = 0.

         ENDIF.

       WHEN 'CH2'.

         IF p_chk2 = 'X'.

           screen-active = 1.
*         ELSE.
*           screen-active = 0.

         ENDIF.

       WHEN 'CH3'.


         IF p_chk3 = 'X'.

           screen-active = 1.

*         ELSE.
*           screen-active = 0.

         ENDIF.

       WHEN OTHERS.

    ENDCASE.

     IF screen-name  CS 'P_CHK' OR screen-name(4) = 'SSCR'.

       screen-active = 1.

     ENDIF.

     IF screen-name = 'RECEIPT' AND p_chk1 IS INITIAL.

       screen-invisible = '1'.

     ELSEIF screen-name = 'RECEIPT' AND p_chk1 IS NOT INITIAL.

       SET USER-COMMAND 'PUSH1'.

     ENDIF.

     IF screen-name = 'ISSUE' AND p_chk2 IS INITIAL.

       screen-invisible = '1'.

     ELSEIF screen-name = 'ISSUE' AND p_chk2 IS NOT INITIAL.
       SET USER-COMMAND 'PUSH2'.

     ENDIF.
     IF screen-name = 'STOCK' AND p_chk3 IS INITIAL.
       screen-invisible = '1'.


     ELSEIF screen-name = 'STOCK' AND p_chk3 IS INITIAL.

       SET USER-COMMAND 'PUSH3'.

     ENDIF.

     MODIFY SCREEN.


   ENDLOOP.

Regards,

Sivaganesh

6 REPLIES 6
Read only

sivaganesh_krishnan
Contributor
0 Likes
1,180

HI Narendra,

Try like this,  Change the AT SELECTION OUTPUT code as below , it works

   LOOP AT SCREEN.

     CASE screen-group1.

       WHEN 'CH1'.

         IF p_chk1 = 'X'.

           screen-active = 1.

*         ELSE.
**           screen-active = 0.

         ENDIF.

       WHEN 'CH2'.

         IF p_chk2 = 'X'.

           screen-active = 1.
*         ELSE.
*           screen-active = 0.

         ENDIF.

       WHEN 'CH3'.


         IF p_chk3 = 'X'.

           screen-active = 1.

*         ELSE.
*           screen-active = 0.

         ENDIF.

       WHEN OTHERS.

    ENDCASE.

     IF screen-name  CS 'P_CHK' OR screen-name(4) = 'SSCR'.

       screen-active = 1.

     ENDIF.

     IF screen-name = 'RECEIPT' AND p_chk1 IS INITIAL.

       screen-invisible = '1'.

     ELSEIF screen-name = 'RECEIPT' AND p_chk1 IS NOT INITIAL.

       SET USER-COMMAND 'PUSH1'.

     ENDIF.

     IF screen-name = 'ISSUE' AND p_chk2 IS INITIAL.

       screen-invisible = '1'.

     ELSEIF screen-name = 'ISSUE' AND p_chk2 IS NOT INITIAL.
       SET USER-COMMAND 'PUSH2'.

     ENDIF.
     IF screen-name = 'STOCK' AND p_chk3 IS INITIAL.
       screen-invisible = '1'.


     ELSEIF screen-name = 'STOCK' AND p_chk3 IS INITIAL.

       SET USER-COMMAND 'PUSH3'.

     ENDIF.

     MODIFY SCREEN.


   ENDLOOP.

Regards,

Sivaganesh

Read only

0 Likes
1,179

Thanks Sivaganesh,

you logic working perfectly,

thanks.

Read only

vamsixk
Active Participant
0 Likes
1,179

Hi Narendra,

You need to do 2 things to fix ur functionality.

1. Do not tag the CHeckbox definitions with MODIF id  becasuse,

these need to be displayed under all Conditions this way you can do away with this piece of redundant code

*     IF screen-name  CS 'P_CHK' OR screen-name(4) = 'SSCR'.
*       screen-active = 1.
*     ENDIF.

please comment the above code.

2.You can remove all your logic from the

AT selection screen EVENT.

*   CASE sy-dynnr.
*     WHEN 1000.
*       CASE sy-ucomm.
*         WHEN 'PUSH1'.
*           seltab-dynnr = 100.
*           seltab-activetab = 'RECEIPT'.
*         WHEN 'PUSH2'.
*           seltab-dynnr = 200.
*           seltab-activetab = 'ISSUE'.
*         WHEN 'PUSH3'.
*           seltab-dynnr = 300.
*           seltab-activetab = 'STOCK'.
*       ENDCASE.
*   ENDCASE.

Since everythign is tagged with a MODIF ID anyway this logic is not required.

That's it that should do your job.

it should work like a charm.

Regards,

Vamsi

Read only

Former Member
0 Likes
1,179

Hi,

Thanks you for your reply,

your logic not work. after comment the code.

thanks,

Read only

Former Member
0 Likes
1,179

Hi,

I have refined your code a little bit.

Kindly check if this works. you can bit improve on the logic in AT SELECTION-SCREEN this is something which i came up for now.

.......................

.....................

SELECTION-SCREEN: BEGIN OF TABBED BLOCK seltab FOR 12 LINES,
                  TAB (20) receipt USER-COMMAND push1 DEFAULT SCREEN 100 MODIF ID ch1,
                  TAB (20) issue USER-COMMAND push2 DEFAULT SCREEN 200 MODIF ID ch2,
                  TAB (20) stock USER-COMMAND push3 DEFAULT SCREEN 300 MODIF ID ch3,
                  END OF BLOCK seltab.
SELECTION-SCREEN : END OF BLOCK blk1.

INITIALIZATION.

..................

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.
    IF screen-group1 = 'CH1'.
      IF p_chk1 = ' '.
        screen-invisible = 1.
        screen-active = 0.
      ELSE.
        screen-invisible = 0.
        screen-active = 1.
      ENDIF.
    ENDIF.
    IF screen-group1 = 'CH2'.
      IF p_chk2 = ' '.
        screen-invisible = 1.
        screen-active = 0.
      ELSE.
        screen-invisible = 0.
        screen-active = 1.
      ENDIF.
    ENDIF.
    IF screen-group1 = 'CH3'.
      IF p_chk3 = ' '.
        screen-invisible = 1.
        screen-active = 0.
      ELSE.
        screen-invisible = 0.
        screen-active = 1.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.

AT SELECTION-SCREEN.

  CASE sy-dynnr.
    WHEN 1000.
      CASE sy-ucomm.
        WHEN 'PUSH1' OR 'CH1'.
          IF p_chk1 = 'X'.
            seltab-dynnr = '0100'.
            seltab-activetab = 'RECEIPT'.
          ELSE.
            IF p_chk2 = 'X'.
              seltab-dynnr = '0200'.
              seltab-activetab = 'ISSUE'.
            ELSEIF p_chk3 = 'X'.
              seltab-dynnr = '0300'.
              seltab-activetab = 'STOCK'.
            ENDIF.
          ENDIF.
        WHEN 'PUSH2' OR 'CH2'.
          IF p_chk2 = 'X'.
            seltab-dynnr = '0200'.
            seltab-activetab = 'ISSUE'.
          ELSE.
            IF p_chk1 = 'X'.
              seltab-dynnr = '0100'.
              seltab-activetab = 'RECEIPT'.
            ELSEIF p_chk3 = 'X'.
              seltab-dynnr = '0300'.
              seltab-activetab = 'STOCK'.
            ENDIF.
          ENDIF.
        WHEN 'PUSH3' OR 'CH3'.
          IF p_chk3 = 'X'.
            seltab-dynnr = '0300'.
            seltab-activetab = 'STOCK'.
          ELSE.
            IF p_chk1 = 'X'.
              seltab-dynnr = '0100'.
              seltab-activetab = 'RECEIPT'.
            ELSEIF p_chk2 = 'X'.
              seltab-dynnr = '0200'.
              seltab-activetab = 'ISSUE'.
            ENDIF.
          ENDIF.
      ENDCASE.
ENDCASE.

Read only

0 Likes
1,179

hi,

thank you for your reply,

I have tried your logic, but

your code also not working.

thanks.