cancel
Showing results for 
Search instead for 
Did you mean: 

Filling a field with values from multiple sources

0 Kudos

Okay, here's the problem:

I need to fill the append field ZZDMBTR in the extractstructure of 2LIS_06_INV.

This is my coding so far.

  TYPES:

BEGIN OF TY_BSEG_NEU.

  TYPES:

  EBELN TYPE BSEG-EBELN,

  EBELP TYPE BSEG-EBELP,

  BELNR TYPE BSEG-BELNR,

  BUKRS TYPE BSEG-BUKRS,

  DMBTR TYPE BSEG-DMBTR,

  GJAHR TYPE BSEG-GJAHR,

END OF TY_BSEG_NEU.

  DATA: LT_MC06M_0ITM TYPE TABLE OF MC06M_0ITM,

        ls_BSEG_NEU TYPE TY_BSEG_NEU,

        lt_BSEG_NEU TYPE TABLE OF TY_BSEG_NEU.

  FIELD-SYMBOLS: <FS_DATA> TYPE MC06M_0ITM.

  LT_MC06M_0ITM[] = C_T_DATA[].

  SELECT EBELN GJAHR EBELP DMBTR BUKRS BELNR FROM BSEG

  INTO CORRESPONDING FIELDS OF TABLE LT_BSEG_NEU

  FOR ALL ENTRIES IN LT_MC06M_0ITM

  WHERE

    BUKRS = LT_MC06M_0ITM-BUKRS AND

    GJAHR = LT_MC06M_0ITM-GJAHR AND

    EBELN = LT_MC06M_0ITM-EBELN AND

    EBELP = LT_MC06M_0ITM-EBELP AND

    BELNR = LT_MC06M_0ITM-BELNR AND

    EBELN <> ''.

  SORT LT_BSEG_NEU BY BUKRS GJAHR EBELN EBELP BELNR.

  LOOP AT LT_MC06M_0ITM ASSIGNING <FS_DATA>.

         clear lS_BSEG_NEU.

         READ TABLE LT_BSEG_NEU INTO LS_BSEG_NEU

            WITH KEY

            BUKRS = <FS_DATA>-BUKRS

            GJAHR = <FS_DATA>-GJAHR

            EBELN = <FS_DATA>-EBELN

            EBELP = <FS_DATA>-EBELP

            BELNR = <FS_DATA>-BELNR

            BINARY SEARCH.

           <FS_DATA>-ZZDMBTR = LS_BSEG_NEU-DMBTR.

   ENDLOOP.

  CLEAR C_T_DATA.

  C_T_DATA[] = LT_MC06M_0ITM[].

Problem here: I know READ can only pull the first value from LT_BSEG_NEU for the given keys but there are often more than one values in the LT_BSEG_NEU for the same key combination (EBELN GJAHR EBELP DMBTR BUKRS BELNR)

I suppose I somehow have to add up the multiple values into a local variable nested in another loop but me being a beginner I have problems wrapping my head around the logic behind.

Can anyone help me out?

View Entire Topic
fcorodriguezl
Contributor
0 Kudos

Hi Anja!

Is not a better solution, but you can try.

Regards.

TYPES:

BEGIN OF TY_BSEG_NEU.

  TYPES:

  EBELN TYPE BSEG-EBELN,

  GJAHR TYPE BSEG-GJAHR,

  EBELP TYPE BSEG-EBELP,

  BUKRS TYPE BSEG-BUKRS,

  BELNR TYPE BSEG-BELNR,

  DMBTR TYPE BSEG-DMBTR,

END OF TY_BSEG_NEU.

DATA: LT_MC06M_0ITM TYPE TABLE OF MC06M_0ITM,

      ls_BSEG_NEU TYPE TY_BSEG_NEU,

      lt_BSEG_NEU TYPE TABLE OF TY_BSEG_NEU.

FIELD-SYMBOLS: <FS_DATA> TYPE MC06M_0ITM.

LT_MC06M_0ITM[] = C_T_DATA[].

SELECT EBELN

       GJAHR

       EBELP

       BUKRS

       BELNR

       DMBTR

FROM BSEG

  INTO TABLE LT_BSEG_NEU

  FOR ALL ENTRIES IN LT_MC06M_0ITM

  WHERE

    BUKRS = LT_MC06M_0ITM-BUKRS AND

    GJAHR = LT_MC06M_0ITM-GJAHR AND

    EBELN = LT_MC06M_0ITM-EBELN AND

    EBELP = LT_MC06M_0ITM-EBELP AND

    BELNR = LT_MC06M_0ITM-BELNR AND

    EBELN <> ''.

  SORT LT_BSEG_NEU BY BUKRS GJAHR EBELN EBELP BELNR.

LOOP AT LT_MC06M_0ITM ASSIGNING <FS_DATA>.

        clear lS_BSEG_NEU.

        READ TABLE LT_BSEG_NEU INTO LS_BSEG_NEU

            WITH KEY

            BUKRS = <FS_DATA>-BUKRS

            GJAHR = <FS_DATA>-GJAHR

            EBELN = <FS_DATA>-EBELN

            EBELP = <FS_DATA>-EBELP

            BELNR = <FS_DATA>-BELNR

            BINARY SEARCH transporting no fields.

     IF SY-SUBRC EQ 0.

        LOOP LT_BSEG_NEU INTO LS_BSEG_NEU WHERE BUKRS = <FS_DATA>-BUKRS

             GJAHR = <FS_DATA>-GJAHR

             EBELN = <FS_DATA>-EBELN

             EBELP = <FS_DATA>-EBELP

             BELNR = <FS_DATA>-BELNR.

  <FS_DATA>-ZZDMBTR = <FS_DATA>-ZZDMBTR + LS_BSEG_NEU-DMBTR.

  ENDLOOP.

     ENDIF.

0 Kudos

I tried it. And it did work after tweaking a bit. Out of curiousity:  what exactly does the "transporting no fields" do?

RafkeMagic
Active Contributor
0 Kudos

it means that it doesn't select any record... it just sets the cursor to the first position of the occurrence of your data specified in the where clause