TABLES: spfli, scarr.
DATA: BEGIN OF itab_spfli OCCURS 0.
INCLUDE STRUCTURE spfli.
DATA: END OF itab_spfli.
DATA: BEGIN OF itab_scarr OCCURS 0.
INCLUDE STRUCTURE scarr.
DATA: END OF itab_scarr.
DATA : BEGIN OF itab OCCURS 0,
carrid LIKE spfli-carrid,
carrname LIKE scarr-carrname,
connid LIKE spfli-connid,
cityto LIKE spfli-cityto,
cityfrom LIKE spfli-cityfrom,
END OF itab.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE itab_spfli
FROM spfli
WHERE carrid IN s_carrid.
SELECT carrid carrname
INTO CORRESPONDING FIELDS OF TABLE itab_scarr
FROM scarr
FOR ALL ENTRIES IN itab_spfli
WHERE carrid = itab_spfli-carrid AND
carrname IN s_carrna.
LOOP AT itab_spfli.
MOVE-CORRESPONDING itab_spfli TO itab.
CLEAR itab_scarr.
READ TABLE itab_scarr WITH KEY carrid = itab_spfli-carrid.
itab-carrname = itab_scarr-carrname .
APPEND itab.
CLEAR itab.
ENDLOOP.
IF NOT itab[] IS INITIAL.
SET PF-STATUS 'MENUBAR'.
LOOP AT itab.
WRITE:/ sy-vline,
(10) itab-carrid,
sy-vline,
(08) itab-carrname,
sy-vline,
(20) itab-connid,
sy-vline,
(08) itab-cityto,
sy-vline,
(20) itab-cityfrom,
sy-vline.
ENDLOOP.
ENDIF.
1.
위 소스 중에 SET PF-STATUS 'MENUBAR'.가 있는데
보통 call screen 100으로 해서
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'MENUBAR'.
SET TITLEBAR 'TITLE'.
ENDMODULE. " STATUS_0100 OUTPUT
위 소스에 삽입해서 만들었는데...
첫번째방법 두번째방법의 차이점은 어떻게 되나요?
2. 위 소스중에 아래 내용이 잇는데 아래내용을 빼고 결과를 보니
데이터가 않나와 아래 내용을 작성하니 결과에 데이터가 나오더군요.
아래 내용을 쓰는 이유가 뭔가요?
아래내용을 사용하지 않아도 데이터가 나올 것같은데 않나오니
좀 설명부탁합니다.
LOOP AT itab_spfli.
MOVE-CORRESPONDING itab_spfli TO itab.
CLEAR itab_scarr.
READ TABLE itab_scarr WITH KEY carrid = itab_spfli-carrid.
itab-carrname = itab_scarr-carrname .
APPEND itab.
CLEAR itab.
ENDLOOP.
댓글 6
-
화니
2009.02.21 20:27
-
로미오
2009.02.21 20:36
답변감사합니다. 근디 디버깅을 걸어보니 itab_spfli에는 데이터가 들어가는데
itab_scarr 데이터가 들어있지 않은데 출력은 나오네요.
왜그럴까요?
-
화니
2009.02.21 21:07
carname이 나온다는 이야기이신가요? 일단 itab_spfli를 기준으로 itab을 만들기때문에 itab_spfli에만 데이터가 들어 있으면 데이터는 나옵니다. 그런데 carname은 안나올거 같습니다. -
로미오
2009.02.22 08:25
itab_scarr 에 데이터가 안들어가니 당연히 carname도 없겠죠. 뭐가 문제인지 알수가 없네요.
그런데 출력은 되니..
-
아카드05
2009.02.23 20:21
ITAB_SPFLI에 있는 내용과 여기에 ITAB_SCARR의 CARRNAME 필드 값까지 추가하여 ITAB에 넣고, ITAB을 통해 WRITE하는 방식입니다.
READ TABLE itab_scarr 구문에서 itab_scarr 에 해당 데이타가 없으면 다음 문장이 실행 안되는 것으로 오해하시는거같은데요..
위 구문은 itab_scarr 에 해당 데이타가 있던 없던간에 다음 문장이 실행됩니다.
itab_scarr에 해당 데이타가 있을 경우에만 ITAB에 APPEND하려고 하신다면,
아래와 같이 SY-SUBRC 체크 구문을 추가하셔야 합니다.
...........
...........
CLEAR itab_scarr.
READ TABLE itab_scarr WITH KEY carrid = itab_spfli-carrid.
IF SY-SUBRC = 0.
itab-carrname = itab_scarr-carrname .
APPEND itab.
ENDIF.
CLEAR itab.
...........
...........
-
로미오
2009.02.25 07:03
감사합니다.^^
2. 아래 write 문에서 사용하는 internal table 이 itab이므로 안나오는 겁니다.
위 loop는 itab_scarr 에서 carname을 가져와서 화면에 표시하기 위해서 있는 겁니다.
itab_spfli 와 itab_scarr 를 이용해서 itab_spfli 를 화면에 표시하되 itab_scarr-carname을 표시하는 로직입니다.