subscreen 설정 + internal 테이블 업데이트방법들

rjdqn·2024년 8월 5일

abap

목록 보기
7/13

SAPMZ5A1460


100번 메인 스크린에 좌측 저거 버튼 클릭해 subscreen 자리를 설정한다.

이름은 SUB으로 준다.


110번 레이아웃도 설정해준다.

110번 attribute는 꼭 subscreen으로.

sub 자리에 subscreen을 부르는데 현 프로그램의 0110번을 부른다.
그리고 pai에서 다시 call subscreen한다.

매번 select말고 internal 테이블에 저장하는 여러방식

top

PROGRAM sapmz5a1460.

*공통
DATA: gv_subrc TYPE sy-subrc,
      ok_code  TYPE sy-ucomm.

* 단위
DATA: gv_meins TYPE t006-msehi,
      gv_mseht TYPE t006a-mseht.

" Header Line 있는 Internal Table
* gt_t006a[]: internal table.
* 단위 미리 읽어놓기위해 사용
DATA: BEGIN OF gt_t006a OCCURS 0,
        msehi TYPE t006a-msehi,
        mseht TYPE t006a-mseht,
      END OF gt_t006a.

" 위에 begin of로 선언한거랑 똑같음.
DATA: gt_t006a TYPE zs5a00501_t,
      gs_t006a LIKE LINE OF gt_t006a.


msehi : id
mseht : text

1. 매번 select하기

PERFORM get_meins_text USING gv_meins CHANGING gv_mseht.
FORM get_meins_text  USING VALUE(pv_meins) "type
                     CHANGING cv_mseht. "type

  SELECT SINGLE mseht FROM t006a
    INTO cv_mseht
    WHERE msehi = pv_meins.
ENDFORM.

매번 검색을 한다. select문을 항상 실행하게 된다.

2. internal table 활용 - 한번에 모조리&헤더테이블

      "첫번째 방법 - 헤더테이블
      PERFORM get_meins_text01 TABLES gt_t006a
                                USING gv_meins
                             CHANGING gv_mseht.
FORM get_meins_text01 TABLES pt_t006a LIKE gt_t006a[]  "pt_t006a: 헤더라인 있는 인터널 테이블
                      USING p_meins
                      CHANGING p_mseht.

  CLEAR pt_t006a. "pt_t006a: struct
  READ TABLE pt_t006a WITH KEY msehi = p_meins.   
  "pt_t006a 헤더라인 있기때문에 into 안써도 자동으로 헤더라인으로 들어가는듯하다
  
  IF sy-subrc = 0.
    p_mseht = pt_t006a-mseht.
  ENDIF.
ENDFORM.

한번에 모든 db에서 모든 정보를 internal table에 저장한다
최초 실행 시 부하가 좀 크겠지만 이후 편하다.

3. internal table 활용 - 매 검색시&table type

" 두번째 방법 - table type 이용
      PERFORM get_meins_text02 USING gv_meins
                             CHANGING gv_mseht gt_t006a.
FORM get_meins_text02  USING    VALUE(p_meins)
                      CHANGING p_mseht
                              pt_t006a TYPE zs5a00501_t .

  DATA ls_t006a LIKE LINE OF pt_t006a.

  READ TABLE pt_t006a WITH KEY msehi = p_meins
  INTO ls_t006a.

  IF sy-subrc = 0.
    p_mseht = ls_t006a-mseht.
    RETURN.
  ENDIF.

  " read table 실행결과 없으면 검색하여 append
  SELECT SINGLE msehi mseht
          FROM t006a
          INTO CORRESPONDING FIELDS OF ls_t006a
         WHERE spras = sy-langu
           AND msehi = p_meins.


  IF sy-subrc = 0.
    p_mseht = ls_t006a-mseht.
    APPEND ls_t006a TO pt_t006a.
    SORT pt_t006a BY msehi.
  ENDIF.
ENDFORM.

평소에 하던 방법으로
1) internal table 검색 -> 있으면 internal table에서 정보 가져옴
2) 인터널에 없으면 -> select해오고 그걸 internal에 append해줌.

profile
대학생

0개의 댓글