AT LINE-SELECTION

SAP ABAP 2009. 1. 3. 21:45

AT LINE-SELECTION... 오늘 배운것...
리스트에서 특정필드나 텍스트 등을 더블클릭하면 이벤트가 생긴다. 마치 다른 페이지로 이동하는 것처럼...

     LOOP AT itab.
    count = count + 1"루프를 돌때마다 카운트를 1씩 증가시킨다
    zebra = count MOD 2"나누기 2를 해서 0과 1을 얻는다.
    IF zebra = 0.
      FORMAT COLOR 6 INTENSIFIED ON"색 강조
    ELSEIF zebra = 1.
      FORMAT COLOR 6 INTENSIFIED OFF.

    ENDIF.
    HIDE : itab-ebeln, itab-ebelp. "루프를 돌면서 메모리상에 필드값 기
    WRITE :/ sy-vline, (13) itab-ebeln NO-GAP,
                  sy-vline, (9) itab-ebelp NO-GAP NO-ZERO,
                  sy-vline, (13) itab-lifnr NO-GAP,
                  sy-vline, (21) itab-name1 NO-GAP,
*                  sy-vline, (18) itab-matnr NO-GAP,
*                  sy-vline, (31) itab-maktx NO-GAP,
                  sy-vline, (16) itab-menge NO-GAP,
                  sy-vline, (5) itab-meins NO-GAP,
                  sy-vline, (13) itab-netpr NO-GAP,
                  sy-vline, (15) itab-brtwr NO-GAP, sy-vline.
    uline.
    CLEAR itab.
  ENDLOOP.


이것은 라인셀렉션을 위한 HIDE선언부분이다. LOOP문 안에 HIDE해줄 필드를 선언한다. (선생님이 LOOP안에 하란다..)
 HIDE란... 메모리상에 저장되는, 일종의 매개변수같은 역할을하는 영역(?)이다.
HIDE에 저장된 필드들은 다음과 같이 활용된다.

  AT LINE-SELECTION.
*  WRITE :/ itab-ebeln, itab-ebelp.
  CASE sy-lsind. "list index값,.. 화면.. 첫번째화면은 0, 거기서 자재번호 더블클릭해서 나오는 화면이 1번, 또 클릭하면 2번.....이런식이다.
    WHEN 1.
      SELECT mara~matnr mara~ersda mara~ernam makt~maktx
      INTO CORRESPONDING FIELDS OF TABLE itab1
      FROM ekpo INNER JOIN mara ON ekpo~matnr = mara~matnr
              INNER JOIN makt ON mara~matnr = makt~matnr
      WHERE ekpo~ebeln = itab-ebeln AND
                ekpo~ebelp = itab-ebelp.

      LOOP AT itab1.
        WRITE :/ '1:', itab1-matnr, '2:', itab1-ersda, '3:',itab1-ernam, '4:',itab1-maktx.
      ENDLOOP.

    WHEN 2.
      WRITE : 'aslkfjlskjflaksjf', sy-lsind.

  ENDCASE.


쿼리문에서 where절의 조건을 가져오기 위해 HIDE에 저장한 필드들을 매개변수로 쓴 것이다.
내가 짠 소스가 좀 이상해서 과제할때 쿼리는 둘째치고 HIDE문이 안먹혀서 고생을 좀 했다.. 원인은 write문 마지막에 sy-uline 이었다.. 그걸 지우고 그냥 uline하고 해주니 되더라..
쿼리볼까...
EKPO : ebeln, ebelp, matnr
MARA : matnr
MAKT : matnr
EKPO의 ebeln 과 ebelp를 where조건으로 쓰고.. matnr필드만을 가지고 세 테이블을 조인하면 되는 것이다..(테이블 분석이 용이치 않아 많이 해맸다..)
itab1의 다른 인터널테이블을 생성해 필드들을 알맞게 선언해주고 into ~ table itab1 해주면 되는것이다.
세 개의 테이블을 조인하는것..까다로운 줄 알았는데.. 그냥 밑에 또 조인하면 되는거구나..


SY-LSIND 시스템변수는 view하는 list의 현재 값을 갖고있다. 그러니까 맨처음 F8로 실행되는 view화면은 0이되고...(0부터시작).. 거기서 특정필드를 더블클릭해 보이는 페이지는 SY-LSIND = 1 이 되는것이다. 그것을 또 클릭하면 2 가 되고... 이것을 이용해 CASE..WHEN 문을 이용해 로직을 짤 수 있다.
 
AND