메뉴 건너뛰기

SAP 한국 커뮤니티

loop 내 select 질문.. (코드첨부 주의..)

베어a 2022.11.08 01:11 조회 수 : 588

안녕하세요. 올해 초에 가입하고 처음 글을 쓰고 도움을 구하는 것 같습니다...

 

일을 하면서 도저히 모르겠어서 코드 참고하여 올리게 되었습니다.

 

loop내 select를 지양하고 있는 것을 인지하고 있으며 바깥으로 꺼내는 와중에 

 

READ TABLE ~ WITH KEY를 사용하는 것으로 인지하고 있는데요.

 

그리고 SELECT * 또한 과도하게 데이터를 불러들여 과부하가 걸리는 원인에 대해서는 인지하고 있습니다.

 

현재 LOOP 문에서의 SELECT를 꺼내주시면 감사하겠습니다.. FUCNTION MODULE이라 얽힌 프로그램들이 많고 <= >= 경우 어떠하게 KEY를 선언하는지.. 모르겠습니다..

 

도움 주시면 정말로 감사하겠습니다..

 

 

IF lt_9001 IS NOT INITIAL.

    LOOP AT lt_9001 INTO ls_9001.

      ls_list-pernr = ls_9001-pernr.

      ls_list-orgeh = ls_9001-orgeh.

      ls_list-begda = ls_9001-begda.

      ls_list-endda = ls_9001-endda.

      ls_list-massn = ls_9001-massn.

      ls_list-massg = ls_9001-massg.

      ls_list-aedtm         = ls_9001-aedtm.  " 최종변경일

      ls_list-uname         = ls_9001-uname. "최종변경 사번

      ls_list-title    = ls_9001-appoint.      "발령내용 추가

 

      " 발령유형/사유 Text 취득.

      CALL FUNCTION 'ZHR_GET_MASSN_MASSG'

        EXPORTING

          iv_massn = ls_list-massn

          iv_langu = sy-langu

          iv_massg = ls_list-massg

        IMPORTING

          ev_mntxt = ls_list-mntxt

       ev_mgtxt = ls_list-mgtxt

          ev_psort = ls_list-psort.

 

      "조직txt 취득

      IF ls_9001-zzorgeh IS NOT INITIAL.

        SELECT SINGLE orgtx FROM t527x INTO ls_list-orgtx

          WHERE orgeh = ls_9001-zzorgeh

              AND  sprsl = sy-langu

              AND begda <= ls_9001-begda

              AND endda >= ls_9001-begda.

      ELSE.

        SELECT SINGLE orgtx FROM t527x INTO ls_list-orgtx

          WHERE orgeh = ls_9001-orgeh

              AND  sprsl = sy-langu

              AND begda <= ls_9001-begda

              AND endda >= ls_9001-begda.

      ENDIF.

 

 

      CLEAR: ls_orgeh_info.

      CALL FUNCTION 'ZHR_GET_ORGEH_TEAM'

        EXPORTING

          iv_objid  = ls_list-pernr

          iv_flag   = 'P'

          iv_begda  = ls_list-begda

          iv_endda  = ls_list-begda

          iv_o_text = 'X'

        IMPORTING

          es_info   = ls_orgeh_info.

      ls_list-orgeh = ls_orgeh_info-orgeh.

      ls_list-orgtx = ls_orgeh_info-orgtx.

 

      IF ls_9001-massn = 'A5' OR ls_9001-massn = 'A7'. "위촉 또는 재위촉

        IF ls_9001-endda = '99991231'.

          ls_list-endda = ls_9001-redat.

        ELSE.

          ls_list-endda = ls_9001-endda.

        ENDIF.

      ENDIF.

      IF lv_check_ok IS INITIAL.

        " 겸직일

        SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9002

          FROM pa9002

          WHERE pernr = ls_list-pernr

            AND docno = ls_9001-docno

            AND massn = ls_9001-massn.

        IF sy-subrc = 0.

          IF ls_9002-endda = '99991231'.

            ls_list-endda = ls_9002-redat.

          ELSE.

            ls_list-endda = ls_9002-endda.

          ENDIF.

          lv_check_ok = 'X'.

        ENDIF.

      ENDIF.

 

      IF lv_check_ok IS INITIAL.

        IF ls_9001-massn EQ 'N5'.   "복귀일

 

          SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9003

            FROM pa9003

            WHERE pernr = ls_list-pernr

              AND docno = ls_9001-docno.

          IF sy-subrc = 0.

            IF ls_9003-acdat_e IS NOT INITIAL.

              ls_list-begda = ls_9003-acdat_e.       "복귀발령일

              ls_list-endda = ls_9003-acdat_e.      "복귀발령일

            ENDIF.

            lv_check_ok = 'X'.

          ENDIF.

 

        ELSE.     "파견일

 

          SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9003

            FROM pa9003

            WHERE pernr = ls_list-pernr

              AND massn = ls_9001-massn

              AND begda = ls_9001-begda.

          IF sy-subrc = 0.

            IF ls_9003-endda = '99991231'.

              IF ls_9003-acdat_b IS NOT INITIAL.

                ls_list-begda = ls_9003-acdat_b. " 해외주재 발령일자

              ENDIF.

              ls_list-endda = ls_9003-redat.

            ELSE.

              ls_list-endda = ls_9003-endda.

              IF ls_9003-acdat_e IS NOT INITIAL.

                ls_list-endda = ls_9003-acdat_e. " 복귀 발령일자

              ENDIF.

              IF ls_9003-acdat_b IS NOT INITIAL.

                ls_list-begda = ls_9003-acdat_b. " 해외주재 발령일자

              ENDIF.

            ENDIF.

            lv_check_ok = 'X'.

          ENDIF.

        ENDIF.

      ENDIF.

 

      IF lv_check_ok IS INITIAL.

        "휴직일

        SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9005

          FROM pa9005

          WHERE pernr = ls_list-pernr

            AND docno = ls_9001-docno.

        IF sy-subrc = 0.

          IF ls_9005-endda = '99991231'.

            ls_list-endda = ls_9005-redat.

          ELSE.

            ls_list-endda = ls_9005-endda.

          ENDIF.

          lv_check_ok = 'X'.

        ENDIF.

      ENDIF.

 

 

      CLEAR: ls_9214, lv_endda_t.

      CASE ls_list-massn.

        WHEN 'W3'. " 운항 Rank

          CLEAR ls_9214.

          SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9214

              FROM pa9214

           WHERE pernr = ls_list-pernr

                AND gubun = '1'

                AND begda = ls_9001-begda.

          IF sy-subrc <> 0.

            ls_9214-flight_rank = ls_9001-flight_rank.

          ENDIF.

 

        WHEN 'W1'. "운항 보직

          CLEAR ls_9214.

          SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9214

              FROM pa9214

           WHERE pernr = ls_list-pernr

                AND docno = ls_9001-docno.

          IF sy-subrc <> 0.

            SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9214

                FROM pa9214

             WHERE pernr = ls_list-pernr

                  AND begda = ls_9001-begda

                  AND gubun = '2'.

            IF sy-subrc <> 0.

              ls_9214-flight_task = ls_9001-flight_task.

            ENDIF.

          ENDIF.

 

        WHEN 'W6'. "운항 보직 해임

          CLEAR ls_9214.

          SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9214

              FROM pa9214

           WHERE pernr = ls_list-pernr

                AND docno = ls_9001-docno.

          IF sy-subrc <> 0.

            lv_endda_t = ls_9001-begda - 1.

            SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9214

                FROM pa9214

             WHERE pernr = ls_list-pernr

                  AND endda = lv_endda_t

                  AND gubun = '2'.

            IF sy-subrc <> 0.

              ls_9214-flight_task = ls_9001-flight_task.

            ENDIF.

          ENDIF.

 

        WHEN 'W2'. "운항 교관

          CLEAR ls_9214.

          SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9214

              FROM pa9214

           WHERE pernr = ls_list-pernr

                AND docno = ls_9001-docno

                AND instructor = ls_9001-instructor.

          IF sy-subrc <> 0.

            SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9214

                FROM pa9214

             WHERE pernr = ls_list-pernr

                  AND begda = ls_9001-begda

                  AND gubun = '3'

                  AND instructor = ls_9001-instructor.

            IF sy-subrc <> 0.

              ls_9214-instructor = ls_9001-instructor.

            ENDIF.

          ENDIF.

 

        WHEN 'W7'. "운항 교관 해임

          CLEAR ls_9214.

          SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9214

              FROM pa9214

           WHERE pernr = ls_list-pernr

                AND docno = ls_9001-docno

                AND instructor = ls_9001-instructor.

          IF sy-subrc <> 0.

            lv_endda_t = ls_9001-begda - 1.

            SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_9214

                FROM pa9214

             WHERE pernr = ls_list-pernr

                  AND endda = lv_endda_t

                  AND gubun = '3'

                  AND instructor = ls_9001-instructor.

            IF sy-subrc <> 0.

              ls_9214-instructor = ls_9001-instructor.

          ENDIF.

          ENDIF.

      ENDCASE.

 

 

{ 발령내용 텍스트

      CLEAR ls_temp.

      MOVE-CORRESPONDING ls_list TO ls_temp.

 

**      9001(발령추가) 데이터 기준으로 출력(같은날짜 발령처리)

      IF ls_9001-model IS NOT INITIAL.

        ls_temp-model = ls_9001-model.

      ELSE.

        ls_temp-model  = ls_9214-model.

      ENDIF.

      IF ls_9001-flight_rank IS NOT INITIAL.

        ls_temp-flight_rank = ls_9001-flight_rank.

 

      ELSE.

        ls_temp-flight_rank = ls_9214-flight_rank.

      ENDIF.

      IF ls_9001-flight_task IS NOT INITIAL.

        ls_temp-flight_task = ls_9001-flight_task.

      ELSE.

        ls_temp-flight_task = ls_9214-flight_task.

      ENDIF.

      IF ls_9001-instructor IS NOT INITIAL.

        ls_temp-instructor = ls_9001-instructor.

      ELSE.

        ls_temp-instructor = ls_9214-instructor.

      ENDIF.

 

      PERFORM get_desc_action_content_ep CHANGING lv_erdat ls_temp .

      ls_list-title = ls_temp-title.

 

      APPEND ls_list TO et_list.

      CLEAR: ls_list, ls_9001, ls_9002, ls_9003, ls_9005, lv_check_ok.

    ENDLOOP.

번호 제목 글쓴이 날짜 조회 수
6484 kb11n 변형 설정 문의 [1] 정만 2024.02.06 155
6483 REST API와 외부서버와의 통신에 대해서 질문드립니다 11ll 2024.01.27 349
6482 Perfrom문 더블클릭 시 subroutine 생성 세팅 문의 [1] 쌥존 2024.01.25 361
6481 SAP 개발코드 업로드하는 방법 [1] JJONG 2024.01.19 566
6480 abap에서 변수의 값이 없을때만 값을 넣는 구문이 따로 있나요? [5] 로우랜즈 2024.01.12 370
6479 ZTOAD.nugg 파일 가지고 계신분 공유 부탁 드려 봅니다. [5] file 곰작 2024.01.05 333
6478 commit work 여부와 관련하여... [2] 깨애굴 2023.12.21 1473
6477 F4IF_INT_TABLE_VALUE_REQUEST 함수 관련 질문 [2] susan123 2023.12.21 416
6476 Report Program안에서 Sql 실행 [2] Panthera 2023.12.18 423
6475 excel 업로드 관련 질문 [2] susan123 2023.11.30 409
6474 add_row 버튼 이벤트 연결 [2] 아밥미 2023.11.19 263
6473 CTS에 말아놓을 때 관련 로그랑 계정 ID를 남기는 기능이 있나요? [1] rhosyn 2023.10.31 314
6472 mm description 대량 확인 가능한 tcode 있나요? [1] 5207418 2023.10.30 251
6471 write 이용하여 표 그리기 [3] 아밥미 2023.10.26 1728
6470 AUTHORITY-CHECK OBJECT [1] 537 2023.09.22 723
6469 SAP 언어 설정이 궁금합니다 [1] file sapbegin 2023.09.21 487
6468 유니코드 시스템 한글 처리 문제 file repairbalm 2023.09.14 581
6467 루프 안 필드심볼 사용 시 몇 건 이상부터 속도가 차이날까요 ? [2] 파파야 2023.09.01 431
6466 자재문서 처리 Tcode를 실제 사용자가 최초 접속한 트랜잭션으로 넣을 수 있을까요? [5] 로우랜즈 2023.08.29 278
6465 Subroutine CHANGING vs CHANGING VALUE() [2] susan123 2023.08.14 265