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

Help with Read Table

Former Member
0 Likes
761

Hi experts,

I need to display the value of my IT_HIRED then display the value of IT_LEAVE into their corresponding PERNR.

But my code shows only the first value from my IT_LEAVE and it does not read the next value.

Help Please

Thanks.


PERNR |HIRED DATE | LEAVE DATE

100001 | 01/01/2013 | 02/03/2013

100001 | 01/25/2014 | 05/05/2014

100001 | 01/25/2014 |


Here is the code.

SELECT PERNR PERSK BEGDA

      INTO CORRESPONDING FIELDS OF TABLE IT_PA0001

      FROM PA0001

      WHERE ( PERSK = 'C1' OR PERSK = 'C2'

           OR PERSK = 'D1' OR PERSK = 'D2'

           OR PERSK = 'E1' OR PERSK = 'E2'

           OR PERSK = 'F1' OR PERSK = 'F2'

           OR PERSK = 'G1' OR PERSK = 'G2' ).


    "  IF HIRING IS INITIAL AND SEPERATE IS INITIAL.

    SELECT PERNR BEGDA ENDDA MASSN MASSG

      FROM PA0000

      INTO CORRESPONDING FIELDS OF TABLE IT_PA0000

      FOR ALL ENTRIES IN IT_PA0001

      WHERE PERNR = IT_PA0001-PERNR

      AND ( MASSN = 'E3' OR MASSN = 'D0' OR MASSN = 'E1' OR MASSN = 'E2' OR MASSN = 'D9' )

      AND BEGDA BETWEEN HIRING-LOW AND HIRING-HIGH.

    "AND ENDDA BETWEEN SEPERATE-LOW AND SEPERATE-HIGH.

    "ENDIF.

    IF SY-SUBRC EQ 0.

      LOOP AT IT_PA0000 INTO WA_PA0000.

        "IT_REPORT-PERNUM = WA_PA0000-PERNR.

        IF WA_PA0000-MASSN = 'D0' OR WA_PA0000-MASSN = 'E3'.

          SELECT PERNR BEGDA ENDDA MASSN MASSG                       "<----------IT FOR HIRING DATE

            INTO IT_HIRE

            FROM PA0000

            WHERE  PERNR = WA_PA0000-PERNR

            AND BEGDA = WA_PA0000-BEGDA.

            IT_REPORT-DATEHIRED = GV_BEGDA.


            APPEND IT_HIRE.

            CLEAR IT_HIRE.


          ENDSELECT.


        ELSEIF WA_PA0000-MASSN = 'D9' OR WA_PA0000-MASSN = 'E1' OR WA_PA0000-MASSN = 'E2'.

          SELECT PERNR BEGDA ENDDA MASSN MASSG                          "<----------IT  FOR LEAVING DATE

           INTO IT_LEAVE

           FROM PA0000

           WHERE  PERNR = WA_PA0000-PERNR

           AND BEGDA = WA_PA0000-BEGDA.

            IT_REPORT-DATEHIRED = GV_BEGDA.


            APPEND IT_LEAVE.

            CLEAR IT_LEAVE.

          ENDSELECT.

        ENDIF.

      ENDLOOP.

    ENDIF.


    LOOP AT IT_HIRE INTO WA_HIRE.

      IT_REPORT-PERNUM = WA_HIRE-PERNR.

      IT_REPORT-DATEHIRED = WA_HIRE-BEGDA.


      READ TABLE IT_LEAVE WITH KEY PERNR = WA_HIRE-PERNR.

        IF SY-SUBRC = 0.

            IT_REPORT-DATESEP = IT_LEAVE-BEGDA.

        ENDIF.


      APPEND IT_REPORT.

      CLEAR IT_REPORT.


    ENDLOOP.

  ENDIF.

5 REPLIES 5
Read only

FredericGirod
Active Contributor
0 Likes
725

    LOOP AT IT_HIRE INTO WA_HIRE.

      IT_REPORT-PERNUM = WA_HIRE-PERNR.

      IT_REPORT-DATEHIRED = WA_HIRE-BEGDA.


      LOOP AT IT_LEAVE WHERE PERNR = WA_HIRE-PERNR.

            IT_REPORT-DATESEP = IT_LEAVE-BEGDA.

        APPEND IT_REPORT.

        CLEAR IT_REPORT.

       ENDLOOP.


    ENDLOOP.


read give only one answer (if the condition is true)

regards

fred

Read only

0 Likes
725

    LOOP AT IT_HIRE INTO WA_HIRE.

      IT_REPORT-PERNUM = WA_HIRE-PERNR.

      IT_REPORT-DATEHIRED = WA_HIRE-BEGDA.

      CLEAR IT_REPORT-DATESEP.


      LOOP AT IT_LEAVE WHERE PERNR = WA_HIRE-PERNR.

          IF IT_LEAVE-BEGDA GT IT_REPORT-DATESEP

          OR IT_REPORT-DATESEP IS INITIAL.

            IT_REPORT-DATESEP = IT_LEAVE-BEGDA.

          ENDIF.

       ENDLOOP.

        APPEND IT_REPORT.

        CLEAR IT_REPORT.

    ENDLOOP.

this gets the latest date only.. but if you want the earliest date... use LT instead of GT.

Read only

Former Member
0 Likes
725

IF SY-SUBRC EQ 0.

      LOOP AT IT_PA0000 INTO WA_PA0000.


        "IT_REPORT-PERNUM = WA_PA0000-PERNR.


        IF WA_PA0000-MASSN = 'D0' OR WA_PA0000-MASSN = 'E3'.

          SELECT PERNR BEGDA ENDDA MASSN MASSG                       "<----------IT FOR HIRING DATE

            INTO IT_HIRE

            FROM PA0000

            WHERE  PERNR = WA_PA0000-PERNR

            AND BEGDA = WA_PA0000-BEGDA.

                           it_hire-pernr = wa_pa0000-penr.

                          it_hire-begda = wa_pa0000-begda.

                          it_hire-endda = wa_pa0000-endda.

                          it_hire-massn= wa_pa0000-massn.

                          it_hire-massc = wa_pa0000-massc.

                           

            IT_REPORT-DATEHIRED = GV_BEGDA.


            APPEND IT_HIRE.

            CLEAR IT_HIRE.

     

          ENDSELECT.


        ELSEIF WA_PA0000-MASSN = 'D9' OR WA_PA0000-MASSN = 'E1' OR WA_PA0000-MASSN = 'E2'.

          SELECT PERNR BEGDA ENDDA MASSN MASSG                          "<----------IT  FOR LEAVING DATE

           INTO IT_LEAVE

           FROM PA0000

           WHERE  PERNR = WA_PA0000-PERNR

           AND BEGDA = WA_PA0000-BEGDA.

            IT_REPORT-DATEHIRED = GV_BEGDA.

Do it similarly here as above

        it_leave-pernr = wa_pa0001-pernr.

etc...

            APPEND IT_LEAVE.

            CLEAR IT_LEAVE.

          ENDSELECT.

        ENDIF.

* Clear work area - Important.

                      clear wa_pa0000    


      ENDLOOP.

Also clear the work area and leave table in this last loop too.

  LOOP AT IT_HIRE INTO WA_HIRE.

      IT_REPORT-PERNUM = WA_HIRE-PERNR.

      IT_REPORT-DATEHIRED = WA_HIRE-BEGDA.


      READ TABLE IT_LEAVE WITH KEY PERNR = WA_HIRE-PERNR.

        IF SY-SUBRC = 0.

            IT_REPORT-DATESEP = IT_LEAVE-BEGDA.

        ENDIF.


      APPEND IT_REPORT.

      CLEAR IT_REPORT.

    clear wa_hire.

     clear it_leave.

ENDLOOP.

Clear it_leave. That is probably the reason why you are not getting the updated leave values.

Message was edited by: Susmitha Susan Thomas

Read only

Former Member
0 Likes
725

Hi,

Don't use Read statement , use Loop inside loop for 2nd Record.

LOOP AT IT_HIRE INTO WA_HIRE.
      IT_REPORT-PERNUM = WA_HIRE-PERNR.
      IT_REPORT-DATEHIRED = WA_HIRE-BEGDA.

Loop  at IT_LEAVE where  PERNR = WA_HIRE-PERNR.
      IT_REPORT-DATESEP = IT_LEAVE-BEGDA.
      APPEND IT_REPORT.

Endloop.

      CLEAR IT_REPORT.


    ENDLOOP.

Regards,

Salil Chavan

Read only

Former Member
0 Likes
725

Hi Jepoy,

Loop has to be used for reading the values of internal table IT_LEAVE.

Use parallel cursor technique to improve the performance.

Modifications are done in your coding and are highlighted.

SELECT PERNR PERSK BEGDA

      INTO CORRESPONDING FIELDS OF TABLE IT_PA0001

      FROM PA0001

      WHERE ( PERSK = 'C1' OR PERSK = 'C2'

           OR PERSK = 'D1' OR PERSK = 'D2'

           OR PERSK = 'E1' OR PERSK = 'E2'

           OR PERSK = 'F1' OR PERSK = 'F2'

           OR PERSK = 'G1' OR PERSK = 'G2' ).


    "  IF HIRING IS INITIAL AND SEPERATE IS INITIAL.

    SELECT PERNR BEGDA ENDDA MASSN MASSG

      FROM PA0000

      INTO CORRESPONDING FIELDS OF TABLE IT_PA0000

      FOR ALL ENTRIES IN IT_PA0001

      WHERE PERNR = IT_PA0001-PERNR

      AND ( MASSN = 'E3' OR MASSN = 'D0' OR MASSN = 'E1' OR MASSN = 'E2' OR MASSN = 'D9' )

      AND BEGDA BETWEEN HIRING-LOW AND HIRING-HIGH.

    "AND ENDDA BETWEEN SEPERATE-LOW AND SEPERATE-HIGH.

    "ENDIF.

    IF SY-SUBRC EQ 0.

      LOOP AT IT_PA0000 INTO WA_PA0000.

        "IT_REPORT-PERNUM = WA_PA0000-PERNR.

        IF WA_PA0000-MASSN = 'D0' OR WA_PA0000-MASSN = 'E3'.

          SELECT PERNR BEGDA ENDDA MASSN MASSG                       "<----------IT FOR HIRING DATE

            INTO IT_HIRE

            FROM PA0000

            WHERE  PERNR = WA_PA0000-PERNR

            AND BEGDA = WA_PA0000-BEGDA.

            IT_REPORT-DATEHIRED = GV_BEGDA.


            APPEND IT_HIRE.

            CLEAR IT_HIRE.


          ENDSELECT.


        ELSEIF WA_PA0000-MASSN = 'D9' OR WA_PA0000-MASSN = 'E1' OR WA_PA0000-MASSN = 'E2'.

          SELECT PERNR BEGDA ENDDA MASSN MASSG                          "<----------IT  FOR LEAVING DATE

           INTO IT_LEAVE

           FROM PA0000

           WHERE  PERNR = WA_PA0000-PERNR

           AND BEGDA = WA_PA0000-BEGDA.

            IT_REPORT-DATEHIRED = GV_BEGDA.


            APPEND IT_LEAVE.

            CLEAR IT_LEAVE.

          ENDSELECT.

        ENDIF.

      ENDLOOP.

    ENDIF.

         

          sort:  it_hire by pernr,

                     it_leave by pernr.

    LOOP AT IT_HIRE INTO WA_HIRE.

      IT_REPORT-PERNUM = WA_HIRE-PERNR.

      IT_REPORT-DATEHIRED = WA_HIRE-BEGDA.


      READ TABLE IT_LEAVE WITH KEY PERNR = WA_HIRE-PERNR

               transporting no fields binary search.

        IF SY-SUBRC = 0.

                      loop at it_leave assigning from sy-tabix.

                         if it_leave-pernr = it_hire-pernr.

            IT_REPORT-DATESEP = IT_LEAVE-BEGDA.

            append it_report.

            clear it_report.  

                          else.

                              exit.

                      endloop.


        ENDIF.


      APPEND IT_REPORT.      "No need

     CLEAR IT_REPORT.     "No need


    ENDLOOP.

  ENDIF.

Thanks & Regards,

T. Prasanna Kumar