Application Development 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: 

can we send multiple fields in AT END OF statement.

0 Kudos

Hi,

can we send multiple fields in AT END OF statement.

for example ...at end of banfn bnfpo.

i nee the two fields at the same time.

6 REPLIES 6

Former Member
0 Kudos

Yes you can use multiple fields with AT END OF. Use either AND or OR for multiple field specification.

Just figured it cannot be used.

Regards,

Vikranth

Edited by: Vikranth.Reddy on Sep 14, 2009 6:59 PM

Former Member
0 Kudos

Hi ,

We cannot pass Multiple fields at end of .

thanks,

Venkat

Former Member
0 Kudos

No it is not possible.

But why you want that?

suppose your itab structure is like

BANFN BNFPO ...

if you are using

AT END OF BNFPO " i.e. right most field in the itab for which you want to check

it will trigger if BNFPO is changed as well as BANFN is changed.

I think it will solve your problem.

Regards

Shiba Prasad Dutta

_IvanFemia_
Active Contributor
0 Kudos

Hi,

Statements AT FIRST,NEW,LAST,END OF compare all the fields on the right of the field specified, for example you have a structure like:

FIELD1,

FIELD2,

FIELD3,

FIELD4

Stamement AT END OF FIELD3, checks for the last triple FIELD group FIELD1,FIELD2, FIELD3; so if you wanna check the last banfn bnfpo record use a structure with this two field at the begginnig of your itab structure.

DATA: BEGIN OF lt_itab,
banfn TYPE BANFN,
bnfpo TYPE BNFPO,
"any other fields
END OF lt_itab.

"move your itab to the new itab

SORT  lt_itab BY banfn bnfpo.

LOOP AT lt_itab ASSIGNING <ls_itab>.

AT END OF bnfpo.
"you code
ENDAT.
ENDLOOP.

This is a pseudo code, there could be some syntax errors.

Regards

Ivan

0 Kudos

HI,

Thanks Ivan, I use the same concept here.

To Describe it in Real world example I have One Program to clear "At END".

To count GRN in respect to gate entery first it depands on exise than on challan

and at last it depend on PO number.

REPORT PROGRAM

REPORT  ZMM_GRN_DOC_PRINT.

********************************

*          STRUCTURES          *

********************************

TYPES : BEGIN OF ty_head,

          genum TYPE zgenum1,

          crdat TYPE erdat,

          crzet TYPE zrzet,

          dname TYPE zdname,

          truck TYPE ztruck,

         END OF ty_head,

         BEGIN OF ty_makt,

           matnr TYPE matnr,

           maktx TYPE maktx,

         END OF ty_makt,

         BEGIN OF ty_marm,

           matnr TYPE matnr,

           meinh TYPE meinh,

         END OF ty_marm,

         BEGIN OF ty_ekko,

           ebeln TYPE ebeln,

           aedat TYPE aedat,

         END OF ty_ekko ,

         BEGIN OF ty_final,

*          exinv TYPE j_1irdoc1,

           chlno TYPE zchalno,

           ebeln TYPE ebeln,

           exinv TYPE j_1irdoc1,

           matnr TYPE matnr,

           chmen TYPE zchmen,

           invno TYPE vbeln_vf,

           ebelp TYPE ebelp,

           exstu TYPE zexstu,

           remge TYPE zremge,

           maktx TYPE maktx,

           meinh TYPE meinh,

           aedat TYPE aedat,

           sr_no type sy-tabix,

           wbill type zwbill,

           chldt type zchldt,

         END OF ty_final.

********************************

*          WORK AREA           *

********************************

DATA : wa_head TYPE zmm_head_ge,

        it_makt TYPE STANDARD TABLE OF ty_makt,

        wa_makt TYPE ty_makt,

        it_marm TYPE STANDARD TABLE OF ty_marm,

        wa_marm TYPE ty_marm,

        it_ekko TYPE STANDARD TABLE OF ty_ekko,

        wa_ekko TYPE ty_ekko,

        it_item TYPE STANDARD TABLE OF zgate_item with header line,

        wa_item TYPE zgate_item ,

        it_final TYPE STANDARD TABLE OF ty_final with header line,

        wa_final TYPE ty_final ,

        it_final1 type STANDARD TABLE of zmm_item_ge with header line,

        wa_final1 type zmm_item_ge,

*       it_final1 type standard table of ty_final1 with header line,

*       wa_final1 type ty_final1,

        lv_adr1 TYPE zadr1,

        lv_adr2 TYPE zadr1,

        lv_adr3 TYPE zadr1,

        gv_fm_name TYPE rs38l_fnam.

********************************

*      SELECTION-SCREEN        *

********************************

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS : p_gate  TYPE zgenum1 OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION .

   PERFORM fetch_data.

   PERFORM display_data.

*&---------------------------------------------------------------------*

*&      Form  FETCH_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM fetch_data .

************ HEADER LEVEL DATA

   SELECT SINGLE genum

                 crdat

                 crzet

                 dname

                 truck

                 gesid

            FROM zgate_head

            INTO wa_head

            WHERE genum EQ p_gate .

   IF sy-subrc EQ 0.

     SELECT SINGLE adr1

                   adr2

                   adr1 INTO (lv_adr1,

                              lv_adr2,

                              lv_adr3)

         FROM zsys_res

         WHERE zsysipadd = wa_head-gesid .

************ ITEM LEVEL DATA

     SELECT * FROM zgate_item

         INTO TABLE it_item

         WHERE genum EQ p_gate .

     IF sy-subrc EQ 0.

************ MATERIAL DESCRIPTION

       SELECT matnr maktx FROM makt

                 INTO TABLE it_makt

                 FOR ALL ENTRIES IN it_item

                 WHERE matnr EQ it_item-matnr .

************ UOM ON THE BASIS OF MATERIAL

       SELECT matnr meinh FROM marm

                 INTO TABLE it_marm

                 FOR ALL ENTRIES IN it_item

                 WHERE matnr EQ it_item-matnr .

*********** DATE FROM EKKO

       SELECT ebeln aedat FROM ekko

               INTO TABLE it_ekko

               FOR ALL ENTRIES IN it_item

               WHERE ebeln EQ it_item-ebeln .

********** EXTRACT DATA FROM ALL TABLES AND PUT INTO A SINGLE TABLE

       LOOP AT it_item INTO wa_item.

         wa_final-sr_no = sy-tabix .

         MOVE-CORRESPONDING wa_item TO wa_final.

         READ TABLE it_makt INTO wa_makt WITH KEY matnr = wa_item-matnr .

         IF sy-subrc EQ 0.

           wa_final-maktx = wa_makt-maktx.

         ENDIF.

         READ TABLE it_marm INTO wa_marm WITH KEY matnr = wa_item-matnr.

         IF sy-subrc EQ 0.

           wa_final-meinh = wa_marm-meinh.

         ENDIF.

         READ TABLE it_ekko INTO wa_ekko WITH KEY ebeln = wa_item-ebeln .

         IF sy-subrc EQ 0.

           wa_final-aedat = wa_ekko-aedat.

         ENDIF.

         APPEND wa_final TO it_final.

       ENDLOOP.

     ENDIF.

   ENDIF.

ENDFORM.                    " FETCH_DATA

*&---------------------------------------------------------------------*

*&      Form  DISPLAY_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM display_data .

  data: control type ssfctrlop,

        ls_output  TYPE ssfcompop,

       ls_param type SSFCTRLOP.

     CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

       EXPORTING

         formname                 = 'ZMM_GRN_DOC_PRINT'

*       VARIANT                  = ' '

*       DIRECT_CALL              = ' '

      IMPORTING

       FM_NAME                    = GV_FM_NAME

      EXCEPTIONS

        NO_FORM                   = 1

        NO_FUNCTION_MODULE        = 2

        OTHERS                    = 3

               .

if sy-subrc <> 0.

      MESSAGE  ID sy-msgid TYPE sy-msgty NUMBER sy-msgno  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .

ENDIF.

      control-no_dialog = 'X'.

      control-preview   = 'X'.

      control-no_open   = 'X'.

      control-no_close  = 'X'.

*   ls_out_control-TDNOPREV = 'X'.

*   ls_out_control-TDIEXIT = 'X'.

*   ls_out_control-TDIMMED = 'X'.

*   ls_out_control-TDNEWID = 'X'.

*   ls_param-NO_DIALOG = 'X'.

      CALL FUNCTION 'SSF_OPEN'

       EXPORTING

*        ARCHIVE_PARAMETERS       =

*        USER_SETTINGS            = 'X'

*        MAIL_SENDER              =

*        MAIL_RECIPIENT           =

*        MAIL_APPL_OBJ            =

*        OUTPUT_OPTIONS           =

         CONTROL_PARAMETERS       = CONTROL

*      IMPORTING

*        JOB_OUTPUT_OPTIONS       =

       EXCEPTIONS

         FORMATTING_ERROR         = 1

         INTERNAL_ERROR           = 2

         SEND_ERROR               = 3

         USER_CANCELED            = 4

         OTHERS                   = 5

                .

      IF sy-subrc <> 0.

* Implement suitable error handling here

      ENDIF.

    LOOP AT IT_FINAL.

      MOVE-CORRESPONDING IT_FINAL TO IT_FINAL1.

      APPEND IT_FINAL1.

*          AT END OF : ebeln, chlno , exinv.

         AT END OF : exinv, chlno , ebeln.

*      CALL FUNCTION '/1BCDWB/SF00000268'

        CALL FUNCTION GV_FM_NAME

        EXPORTING

          CONTROL_PARAMETERS          = CONTROL

          OUTPUT_OPTIONS              = ls_output

           wa_head                    = wa_head

           lv_adr1                    = lv_adr1

           lv_adr2                    = lv_adr2

           lv_adr3                    = lv_adr3

         TABLES

           it_final                   = it_final1[]

        EXCEPTIONS

          FORMATTING_ERROR           = 1

          INTERNAL_ERROR             = 2

          SEND_ERROR                 = 3

          USER_CANCELED              = 4

          OTHERS                     = 5

                 .

       IF sy-subrc <> 0.

    MESSAGE  ID sy-msgid TYPE sy-msgty NUMBER sy-msgno  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .

       ENDIF.

       REFRESH IT_FINAL1."

        ENDAT.

        ENDAT.

        ENDAT.

       ENDLOOP.

***********************************JHA******

*      LOOP AT IT_FINAL.

*     MOVE-CORRESPONDING IT_FINAL TO IT_FINAL1.

*     APPEND IT_FINAL1.

*

*          AT END OF ebeln.", chlno , ebelp.

*

**AT END OF chlno.

**      CALL FUNCTION '/1BCDWB/SF00000268'

*       CALL FUNCTION GV_FM_NAME

*       EXPORTING

*         CONTROL_PARAMETERS          = CONTROL

*         OUTPUT_OPTIONS              = ls_output

*          wa_head                    = wa_head

*          lv_adr1                    = lv_adr1

*          lv_adr2                    = lv_adr2

*          lv_adr3                    = lv_adr3

*        TABLES

*          it_final                   = it_final1[]

*

*       EXCEPTIONS

*         FORMATTING_ERROR           = 1

*         INTERNAL_ERROR             = 2

*         SEND_ERROR                 = 3

*         USER_CANCELED              = 4

*         OTHERS                     = 5

*                .

*      IF sy-subrc <> 0.

*   MESSAGE  ID sy-msgid TYPE sy-msgty NUMBER sy-msgno  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .

*      ENDIF.

*

*      REFRESH IT_FINAL1."

*

*

**ENDAT.

**     ENDAT.

******************

         CALL FUNCTION 'SSF_CLOSE'

*       IMPORTING

*         JOB_OUTPUT_INFO        =

*       EXCEPTIONS

*         FORMATTING_ERROR       = 1

*         INTERNAL_ERROR         = 2

*         SEND_ERROR             = 3

*         OTHERS                 = 4

                 .

       IF sy-subrc <> 0.

   MESSAGE  ID sy-msgid TYPE sy-msgty NUMBER sy-msgno  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .

       ENDIF.

endform.

Here I use the method of Ivan

Best

Abhijeet Kankani

AbhijeetK
Active Participant
0 Kudos

HI,

Thanks Ivan, I use the same concept here.

To Describe it in Real world example I have One Program to clear "At END".

To count GRN in respect to gate entery first it depands on exise than on challan

and at last it depend on PO number.

REPORT PROGRAM

REPORT  ZMM_GRN_DOC_PRINT.

********************************

*          STRUCTURES          *

********************************

TYPES : BEGIN OF ty_head,

          genum TYPE zgenum1,

          crdat TYPE erdat,

          crzet TYPE zrzet,

          dname TYPE zdname,

          truck TYPE ztruck,

         END OF ty_head,

         BEGIN OF ty_makt,

           matnr TYPE matnr,

           maktx TYPE maktx,

         END OF ty_makt,

         BEGIN OF ty_marm,

           matnr TYPE matnr,

           meinh TYPE meinh,

         END OF ty_marm,

         BEGIN OF ty_ekko,

           ebeln TYPE ebeln,

           aedat TYPE aedat,

         END OF ty_ekko ,

         BEGIN OF ty_final,

*          exinv TYPE j_1irdoc1,

           chlno TYPE zchalno,

           ebeln TYPE ebeln,

           exinv TYPE j_1irdoc1,

           matnr TYPE matnr,

           chmen TYPE zchmen,

           invno TYPE vbeln_vf,

           ebelp TYPE ebelp,

           exstu TYPE zexstu,

           remge TYPE zremge,

           maktx TYPE maktx,

           meinh TYPE meinh,

           aedat TYPE aedat,

           sr_no type sy-tabix,

           wbill type zwbill,

           chldt type zchldt,

         END OF ty_final.

********************************

*          WORK AREA           *

********************************

DATA : wa_head TYPE zmm_head_ge,

        it_makt TYPE STANDARD TABLE OF ty_makt,

        wa_makt TYPE ty_makt,

        it_marm TYPE STANDARD TABLE OF ty_marm,

        wa_marm TYPE ty_marm,

        it_ekko TYPE STANDARD TABLE OF ty_ekko,

        wa_ekko TYPE ty_ekko,

        it_item TYPE STANDARD TABLE OF zgate_item with header line,

        wa_item TYPE zgate_item ,

        it_final TYPE STANDARD TABLE OF ty_final with header line,

        wa_final TYPE ty_final ,

        it_final1 type STANDARD TABLE of zmm_item_ge with header line,

        wa_final1 type zmm_item_ge,

*       it_final1 type standard table of ty_final1 with header line,

*       wa_final1 type ty_final1,

        lv_adr1 TYPE zadr1,

        lv_adr2 TYPE zadr1,

        lv_adr3 TYPE zadr1,

        gv_fm_name TYPE rs38l_fnam.

********************************

*      SELECTION-SCREEN        *

********************************

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS : p_gate  TYPE zgenum1 OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION .

   PERFORM fetch_data.

   PERFORM display_data.

*&---------------------------------------------------------------------*

*&      Form  FETCH_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM fetch_data .

************ HEADER LEVEL DATA

   SELECT SINGLE genum

                 crdat

                 crzet

                 dname

                 truck

                 gesid

            FROM zgate_head

            INTO wa_head

            WHERE genum EQ p_gate .

   IF sy-subrc EQ 0.

     SELECT SINGLE adr1

                   adr2

                   adr1 INTO (lv_adr1,

                              lv_adr2,

                              lv_adr3)

         FROM zsys_res

         WHERE zsysipadd = wa_head-gesid .

************ ITEM LEVEL DATA

     SELECT * FROM zgate_item

         INTO TABLE it_item

         WHERE genum EQ p_gate .

     IF sy-subrc EQ 0.

************ MATERIAL DESCRIPTION

       SELECT matnr maktx FROM makt

                 INTO TABLE it_makt

                 FOR ALL ENTRIES IN it_item

                 WHERE matnr EQ it_item-matnr .

************ UOM ON THE BASIS OF MATERIAL

       SELECT matnr meinh FROM marm

                 INTO TABLE it_marm

                 FOR ALL ENTRIES IN it_item

                 WHERE matnr EQ it_item-matnr .

*********** DATE FROM EKKO

       SELECT ebeln aedat FROM ekko

               INTO TABLE it_ekko

               FOR ALL ENTRIES IN it_item

               WHERE ebeln EQ it_item-ebeln .

********** EXTRACT DATA FROM ALL TABLES AND PUT INTO A SINGLE TABLE

       LOOP AT it_item INTO wa_item.

         wa_final-sr_no = sy-tabix .

         MOVE-CORRESPONDING wa_item TO wa_final.

         READ TABLE it_makt INTO wa_makt WITH KEY matnr = wa_item-matnr .

         IF sy-subrc EQ 0.

           wa_final-maktx = wa_makt-maktx.

         ENDIF.

         READ TABLE it_marm INTO wa_marm WITH KEY matnr = wa_item-matnr.

         IF sy-subrc EQ 0.

           wa_final-meinh = wa_marm-meinh.

         ENDIF.

         READ TABLE it_ekko INTO wa_ekko WITH KEY ebeln = wa_item-ebeln .

         IF sy-subrc EQ 0.

           wa_final-aedat = wa_ekko-aedat.

         ENDIF.

         APPEND wa_final TO it_final.

       ENDLOOP.

     ENDIF.

   ENDIF.

ENDFORM.                    " FETCH_DATA

*&---------------------------------------------------------------------*

*&      Form  DISPLAY_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM display_data .

  data: control type ssfctrlop,

        ls_output  TYPE ssfcompop,

       ls_param type SSFCTRLOP.

     CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

       EXPORTING

         formname                 = 'ZMM_GRN_DOC_PRINT'

*       VARIANT                  = ' '

*       DIRECT_CALL              = ' '

      IMPORTING

       FM_NAME                    = GV_FM_NAME

      EXCEPTIONS

        NO_FORM                   = 1

        NO_FUNCTION_MODULE        = 2

        OTHERS                    = 3

               .

if sy-subrc <> 0.

      MESSAGE  ID sy-msgid TYPE sy-msgty NUMBER sy-msgno  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .

ENDIF.

      control-no_dialog = 'X'.

      control-preview   = 'X'.

      control-no_open   = 'X'.

      control-no_close  = 'X'.

*   ls_out_control-TDNOPREV = 'X'.

*   ls_out_control-TDIEXIT = 'X'.

*   ls_out_control-TDIMMED = 'X'.

*   ls_out_control-TDNEWID = 'X'.

*   ls_param-NO_DIALOG = 'X'.

      CALL FUNCTION 'SSF_OPEN'

       EXPORTING

*        ARCHIVE_PARAMETERS       =

*        USER_SETTINGS            = 'X'

*        MAIL_SENDER              =

*        MAIL_RECIPIENT           =

*        MAIL_APPL_OBJ            =

*        OUTPUT_OPTIONS           =

         CONTROL_PARAMETERS       = CONTROL

*      IMPORTING

*        JOB_OUTPUT_OPTIONS       =

       EXCEPTIONS

         FORMATTING_ERROR         = 1

         INTERNAL_ERROR           = 2

         SEND_ERROR               = 3

         USER_CANCELED            = 4

         OTHERS                   = 5

                .

      IF sy-subrc <> 0.

* Implement suitable error handling here

      ENDIF.

    LOOP AT IT_FINAL.

      MOVE-CORRESPONDING IT_FINAL TO IT_FINAL1.

      APPEND IT_FINAL1.

*          AT END OF : ebeln, chlno , exinv.

         AT END OF : exinv, chlno , ebeln.

*      CALL FUNCTION '/1BCDWB/SF00000268'

        CALL FUNCTION GV_FM_NAME

        EXPORTING

          CONTROL_PARAMETERS          = CONTROL

          OUTPUT_OPTIONS              = ls_output

           wa_head                    = wa_head

           lv_adr1                    = lv_adr1

           lv_adr2                    = lv_adr2

           lv_adr3                    = lv_adr3

         TABLES

           it_final                   = it_final1[]

        EXCEPTIONS

          FORMATTING_ERROR           = 1

          INTERNAL_ERROR             = 2

          SEND_ERROR                 = 3

          USER_CANCELED              = 4

          OTHERS                     = 5

                 .

       IF sy-subrc <> 0.

    MESSAGE  ID sy-msgid TYPE sy-msgty NUMBER sy-msgno  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .

       ENDIF.

       REFRESH IT_FINAL1."

        ENDAT.

        ENDAT.

        ENDAT.

       ENDLOOP.

***********************************JHA******

*      LOOP AT IT_FINAL.

*     MOVE-CORRESPONDING IT_FINAL TO IT_FINAL1.

*     APPEND IT_FINAL1.

*

*          AT END OF ebeln.", chlno , ebelp.

*

**AT END OF chlno.

**      CALL FUNCTION '/1BCDWB/SF00000268'

*       CALL FUNCTION GV_FM_NAME

*       EXPORTING

*         CONTROL_PARAMETERS          = CONTROL

*         OUTPUT_OPTIONS              = ls_output

*          wa_head                    = wa_head

*          lv_adr1                    = lv_adr1

*          lv_adr2                    = lv_adr2

*          lv_adr3                    = lv_adr3

*        TABLES

*          it_final                   = it_final1[]

*

*       EXCEPTIONS

*         FORMATTING_ERROR           = 1

*         INTERNAL_ERROR             = 2

*         SEND_ERROR                 = 3

*         USER_CANCELED              = 4

*         OTHERS                     = 5

*                .

*      IF sy-subrc <> 0.

*   MESSAGE  ID sy-msgid TYPE sy-msgty NUMBER sy-msgno  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .

*      ENDIF.

*

*      REFRESH IT_FINAL1."

*

*

**ENDAT.

**     ENDAT.

******************

         CALL FUNCTION 'SSF_CLOSE'

*       IMPORTING

*         JOB_OUTPUT_INFO        =

*       EXCEPTIONS

*         FORMATTING_ERROR       = 1

*         INTERNAL_ERROR         = 2

*         SEND_ERROR             = 3

*         OTHERS                 = 4

                 .

       IF sy-subrc <> 0.

   MESSAGE  ID sy-msgid TYPE sy-msgty NUMBER sy-msgno  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .

       ENDIF.

endform.

Here I use the method of Ivan

Best

Abhijeet Kankani