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

About LOOP AT SCREEN

Former Member
0 Likes
993

I want to add some code to user exit USEREXIT_FIELD_MODIFICATION in TCODE VA01 for setting screen attribute of field VBAP-KDMAT.

But in the PBO module MODULE FELDAUSWAHL OUTPUT, the field VBAP-KDMAT won't execute this user exit. But other field in the same screen with VBAP-KDMAT can execute this user exit. So once step into this user exit ,i loop at current screen(NO:4900).And change the attribute of field VBAP-KDMAT.But after execute this user exit. The loop at screen in module MODULE FELDAUSWAHL OUTPUT lose its correct index.The next screen element will not change any more.

This is a nested loop at screen. I guess whether nested loop at screen will work.

Can some explain it to me? Thanks.

3 REPLIES 3
Read only

Former Member
0 Likes
741
MODULE FELDAUSWAHL OUTPUT.

  DATA: MPOOL LIKE SY-REPID,
        DYNGR LIKE SY-DYNGR,
        LOOP(3) VALUE 'LOO',           " MODIF 2 für Step-Loop-Ident.
        DA_DISPLAY_STATUS LIKE SY-SUBRC.

  DATA: L_SD_SALES_BASIC_EXIT TYPE REF TO IF_EX_BADI_SD_SALES_BASIC,
            ACTIVE TYPE XFELD.

  MPOOL = SY-REPID.
  DYNGR = SY-DYNGR.

*-Modifikation des Dynpros zu SY-DYNGR -------------------------------*
  LOOP AT SCREEN.
* CMDS - Collaborative Management of Delivery Schedules
* if CMDS is active for item, some fields must not be open for
* manual input anymore
    IF ( T185V-PANEL EQ FCODE_LIEFERABRUF OR
         T185V-PANEL EQ FCODE_LIEFERABRUF_EINTEILUNG OR
         T185V-PANEL EQ FCODE_EINGANG_LAB OR
         T185V-PANEL EQ FCODE_FREIGABE_LAB OR
         T185V-PANEL EQ FCODE_FEINABRUF OR
         T185V-PANEL EQ FCODE_FEINABRUF_EINTEILUNG OR
         T185V-PANEL EQ FCODE_EINGANG_FAB OR
         T185V-PANEL EQ FCODE_FREIGABE_FAB OR
         T185V-PANEL EQ FCODE_PLANABRUF OR
         T185V-PANEL EQ FCODE_PLANABRUF_EINTEILUNG OR
         T185V-PANEL EQ FCODE_DETAIL1_EINTEILUNG OR
         T185V-PANEL EQ 'EID2' OR
         SCREEN-NAME(4) EQ 'VBLB' OR
         SCREEN-NAME(4) EQ 'VBEP' ) AND
         SCREEN-INPUT NE 0 AND NOT
         ITEM_CMDS_ACTIVE IS INITIAL AND NOT
         SCREEN-NAME EQ 'RV45A-VBEP_SELKZ'.
      CHECK CALL_BAPI IS INITIAL.
      SCREEN-INPUT = 0.
      MODIFY SCREEN.
    ENDIF.

*-STEP-LOOP wird erst bei Abarbeitung der Loop-Zeilen modifiziert ----*
    IF SCREEN-GROUP2 EQ LOOP.
      CHECK SY-STEPL NE 0.
*-Spezielle Feldauswahl für leere Loop-Zeilen ------------------------*
      IF RV45A-ZEILE_LEER NE SPACE AND
         SCREEN-GROUP3 NE SPACE.
        PERFORM FELDAUSWAHL_LEERE_ZEILEN.
      ENDIF.
      CHECK RV45A-ZEILE_LEER IS INITIAL.
    ELSE.
      CHECK SY-STEPL EQ 0.
    ENDIF.
*- Betriebswirtschaftlich nicht sinnvoll zu modifiziernde Regeln -----*
    IF SCREEN-GROUP3 NE SPACE.
      PERFORM FELDAUSWAHL_SONDERREGELN.
    ENDIF.
    PERFORM FELDAUSWAHL_STATUS USING SCREEN-NAME
                               CHANGING DA_DISPLAY_STATUS.

* change of revenue recognition fields only allowed as long as
* no revenue recognized

    PERFORM FIELDMODIFICATION_REV_REG.

* Call SD Sales BAdI
    CALL FUNCTION 'GET_HANDLE_SD_SALES_BASIC'
      IMPORTING
        HANDLE = L_SD_SALES_BASIC_EXIT
        ACTIVE = ACTIVE.

    IF ACTIVE = CHARX.
      CALL METHOD L_SD_SALES_BASIC_EXIT->MAINTAIN_SCREEN
        EXPORTING
          FT180    = T180
          FVBAK    = VBAK
          FVBAP    = VBAP
          FXVBUP   = XVBUP[]
          FXVBUK   = XVBUK[]
          FXVBAP   = XVBAP[]
          FXVBPA   = XVBPA[]
        CHANGING
          F_SCREEN = SCREEN.
    ENDIF.

    CALL CUSTOMER-FUNCTION '004'
         EXPORTING
              I_SCREEN_NAME      = SCREEN-NAME
              I_VBAP             = VBAP
              I_VBUP             = XVBUP
              I_SCREEN_GROUP4    = SCREEN-GROUP4
              I_T180_AKTYP       = T180-AKTYP
         CHANGING
              C_SCREEN_ACTIVE    = SCREEN-ACTIVE
              C_SCREEN_INVISIBLE = SCREEN-INVISIBLE
              C_SCREEN_INPUT     = SCREEN-INPUT.

* end   Revenue Recognition Project

* Userexit
    <b>PERFORM USEREXIT_FIELD_MODIFICATION.</b>

    MODIFY SCREEN.

* Spaltenauswahl für Tabstrips aus Tablecontrol ableiten
    PERFORM TCTRL_SPALTENAUSWAHL.

  ENDLOOP.
  CLEAR RV45A-ZEILE_LEER.
if data_read_from_archive = 'X'. " ARCHIVE
message s302 with vbak-vbeln.    " ARCHIVE
endif.                           " ARCHIVE
ENDMODULE.                    "FELDAUSWAHL OUTPUT

Message was edited by:

Chris Xu

Read only

0 Likes
741

Below is the code i add to user exit. Thanks.

FORM USEREXIT_FIELD_MODIFICATION.

DATA: l_v_screen TYPE SCREEN.

CHECK SY-DYNNR EQ '4900'.
MOVE screen TO l_v_screen.
LOOP AT SCREEN.
  CHECK screen-name   EQ 'VBAP-KDMAT' AND
              screen-group2 EQ 'LOO'.
  SCREEN-INPUT = 0.
  MODIFY SCREEN.
  EXIT.
ENDLOOP.
MOVE l_v_screen TO screen.
ENDFORM.

Message was edited by:

Chris Xu

Read only

0 Likes
741

Can anyone help me? Thanks very much.