Skip to Content
0
Sep 19, 2008 at 08:37 PM

Reading repetitive structures in a non-obsolete manner

227 Views

Hi,

I need to read data from a repetitive structure. I have done this many times before in a an older version of SAP using the

DO xx TIMES VARYING structure FROM field_01 NEXT field_02

technique. We recently upgraded to Netweaver 7.0 and I notice that the VARYING addition of the DO statement is now marked as obsolete. Yes, I can still use it, but I prefer to read the structure in a non-obsolete manner. According to the SAP Help, the preferred method of reading a repetitive structure is now using the ASSIGN statement with the INCREMENT option. I tried to change my coding using the new approach, but it comes back with a syntax error because of my situation. The repetitive structure that I need to read has a 2 field repeating structure (the same type of situation that is found in PA0041 or PA0167). Following are my structures:

DATA: BEGIN OF LS_OUTTAB,
        INFTY      TYPE  INFTY,
        ZZLOADID   TYPE  ZZLOADID,
        PERNR      TYPE  PERNR_D, 
        ENDDA      TYPE  ENDDA,
        BEGDA      TYPE  BEGDA,
        PLTYP      TYPE  BEN_TYPE,
        BPLAN      TYPE  BEN_PLAN,
        BOPTI      TYPE  BEN_OPTION,
        DEPCV      TYPE  BEN_DEPCOV,
        PARDT      TYPE  BEN_PARTDT,
        DTY01      TYPE  BEN_DEPTYP,
        DID01      TYPE  BEN_DEPID,
        DTY02      TYPE  BEN_DEPTYP,
        DID02      TYPE  BEN_DEPID,
        DTY03      TYPE  BEN_DEPTYP,
        DID03      TYPE  BEN_DEPID,
        DTY04      TYPE  BEN_DEPTYP,
        DID04      TYPE  BEN_DEPID,
         ...
         ...
        DTY19      TYPE  BEN_DEPTYP,
        DID19      TYPE  BEN_DEPID,
        DTY20      TYPE  BEN_DEPTYP,
        DID20      TYPE  BEN_DEPID,
      END OF LS_OUTTAB.


DATA: BEGIN OF LS_DEP_STRUC,
        DTY     TYPE  BEN_DEPTYP,
        DID     TYPE  BEN_DEPID,
      END OF LS_DEP_STRUC.

I can successfully read the repetitive data structure using the old obsolete way:

DO 20 TIMES VARYING ls_dep_struc FROM LS_OUTTAB-dty01
                                 NEXT LS_OUTTAB-dty02
                                 RANGE LS_OUTTAB.
ENDDO.

I created the following code trying to read it using the new technique:

FIELD-SYMBOLS: <fs_dep_struc> LIKE LS_DEP_STRUC.

WHILE sy-subrc = 0.
  lv_inc = sy-index - 1.
  ASSIGN LS_OUTTAB-dty01 INCREMENT lv_inc
      TO <fs_dep_struc>  CASTING
                         RANGE ls_dep_struc.
  IF sy-subrc = 0.
  ENDIF.
ENDWHILE.

But I received a syntax message saying:

"LS_OUTTAB-DTY01" is too short for "<FS_DEP_STRUC>".

The problem is that I do not know how to reference 2 fields as the memory area of the ASSIGN statement in order to assign to my field symbol. I tried using offset and lengths in the memory area

ASSIGN LS_OUTTAB+60(6) INCREMENT lv_inc
    TO <fs_dep_struc>  CASTING
                       RANGE ls_dep_struc.

But I get a syntax error saying:

You cannot use offset/length addressing in the INCREMENT addition for "LS_OUTTAB-DTY01".

Does anyone have a way to read a two field repetitive structure without using the obsolete option VARYING on the DO command?

Thanks,

Gregg