제가 테이블을 3개를 만들었습니다.
하나는 모든 자료를 취합하여 display 하려는 테이블 1개
또 하나는 for all entries 하기 위해서 만든 테이블 1개와 비교할 테이블 1개.
이렇게 3개인데요.
제가 아직 for all entries의 개념이 잘 안잡혀 있는것 같아요.
그래서 프로그램을 어떻게 넣어야 할지 모르겠습니다.
우선 소스를 살짝..
통합 테이블 입니다.
DATA : BEGIN OF gs_adlist,
belnr LIKE bkpf-belnr,
gjahr LIKE bkpf-gjahr,
blart LIKE bkpf-blart,
bldat LIKE bkpf-bldat,
budat LIKE bkpf-budat,
monat LIKE bkpf-monat,
xblnr LIKE bkpf-xblnr,
stblg LIKE bkpf-stblg,
stjah LIKE bkpf-stjah,
bktxt LIKE bkpf-bktxt,
waers LIKE bkpf-waers,
kursf LIKE bkpf-kursf,
buzei LIKE bseg-buzei,
bschl LIKE bseg-bschl,
koart LIKE bseg-koart,
umskz LIKE bseg-umskz,
hkont LIKE bseg-hkont,
txt50 LIKE skat-txt50,
shkzg LIKE bseg-shkzg,
dmbtr LIKE bseg-dmbtr,
wrbtr LIKE bseg-wrbtr,
dmbe2 LIKE bsid-dmbe2,
zuonr LIKE bseg-zuonr,
sgtxt LIKE bseg-sgtxt,
kostl LIKE bseg-kostl,
prctr LIKE bsid-prctr,
xauto LIKE bseg-xauto,
saknr LIKE bseg-saknr,
cus_ven TYPE char10,
name1 LIKE kna1-name1,
augdt LIKE bseg-augdt,
augcp LIKE bseg-augcp,
augbl LIKE bseg-augbl,
bstat like bkpf-bstat,
END OF gs_adlist.
두번째 테이블 선언들입니다.
data : gt_bkpf like table of bkpf, <- 이것
gs_bkpf like line of gt_bkpf,
gt_skat like table of skat,
gs_skat like line of gt_skat,
gt_bsid like table of bsid,
gt_bsid2 like gt_bsid,
gs_bsid like line of gt_bsid,
gt_kna1 like table of kna1,
gs_kna1 like line of gt_kna1,
gt_bseg like table of bseg, <- 이것
gs_bseg like line of gt_bseg,
gt_bseg2 like table of bseg,
gs_bseg2 like line of gt_bseg2,
gt_adlist like table of gs_adlist,
gt_fieldcat type slis_t_fieldcat_alv,
gw_fieldcat type slis_fieldcat_alv,
gs_layout type slis_layout_alv,
gs_listheader type slis_t_listheader,
gt_sort type slis_t_sortinfo_alv,
gs_sort type slis_sortinfo_alv.
저 2가지 테이블을
select * from bkpf into table gt_bkpf
where bukrs = p_bukrs
and budat between gs_period-from and gs_period-to
and bstat in p_bstat.
if gt_bkpf[] is initial.
exit.
endif.
refresh gt_bseg.
select * from bseg into table gt_bseg for all entries in gt_bkpf
where bukrs = gt_bkpf-bukrs
and belnr = gt_bkpf-belnr
and gjahr = gt_bkpf-gjahr.
if gt_bseg[] is initial.
exit.
endif.
이렇게 하고 난 후
gt_adlist에 있는 필드들은 bkpf 및 bseg에서 뽑아서 넣고 싶습니다.
loop 를 돌려야 하겠는데
어떻게 해야될 지 감이 전혀 안오네요.^^;
그래서 e-abap에 남깁니다^^;
댓글 5
-
남군
2010.04.14 02:06
-
Abap consultant
2010.04.14 02:23
loop at gt_bkpf into gs_bkpf.
loop at gt_bseg into gs_bseg where bukrs = gs_bkpf-bukrs
and belnr = gs_bkpf-belnr
and gjahr = gs_bkpf-gjahr
and saknr = p_saknr .
move-corresponding gs_bseg to gs_adlist.
move-corresponding gs_bkpf to gs_adlist.
append gs_adlist to gt_adlist. clear gs_adlist .
endloop.
endloop.
제가 처음에 이렇게 짰는데 값이 하나도 안들어가서ㅠ_ㅜ
뭐가 문제인지 모르겠습니다.. 허허허;;;
-
엉큼고냥이
2010.04.14 02:50
bkpf와 bseg테이블 데이터가 1:N 이니 반대로 해야되는거 아닌가요?ㅎ;;
제가 보기엔
SORT gt_bkpf BY bukrs gjahr belnr.
LOOP AT gt_bseg.
READ TABLE gt_bkpf WITH KEY bukrs = gt_bseg-bukrs
gjahr = gt_bseg-gjahr
belnr = gt_bseg-belnr
BINARY SEARCH.
MOVE-CORRESPONDING gt_bseg TO gt_adlist.
MOVE-CORRESPONDING gt_bkpf TO gt_adlist.
APPEND gt_adlist. CLEAR gt_adlist .
ENDLOOP.
-
남군
2010.04.14 02:53
디버깅 뜨면 알수 있을 것 같은데.. 혹시
move-corresponding gs_bseg to gs_adlist.
move-corresponding gs_bkpf to gs_adlist.
부분에서 엎어 치는 거 아닐까요??
그리고 for all entries in gt_bkpf <= 정렬되어 있어야 하고
loop at gt_bkpf into gs_bkpf.
loop at gt_bseg into gs_bseg <= 여기 지나 갈때 subrc가 0으로 떨어지는 지 확인해봐 주세요~~ -
Abap consultant
2010.04.14 21:33
오오옷^^ 좋은 정보 되었습니다.
해결은
LOOP AT gt_bkpf INTO gs_bkpf.
LOOP AT gt_bseg INTO gs_bseg WHERE bukrs = gs_bkpf-bukrs
AND belnr = gs_bkpf-belnr
AND gjahr = gs_bkpf-gjahr.
MOVE-CORRESPONDING gs_bseg TO gs_adlist.
MOVE-CORRESPONDING gs_bkpf TO gs_adlist.
perform load_desc.
APPEND gs_adlist TO gt_adlist. CLEAR gs_adlist .
ENDLOOP.
ENDLOOP.
이렇게 보았습니다^^ 값이 안들어 왔던 이유는 필드 하나를 잘못 설정해서..
데이터가 안들어가는 것이었습니다.^^
남군님 말씀처럼 데이터가 겹치는 부분이 있을 수도 있다는 생각을 잠깐 해보았는데
다행히도 겹치는 부분은 없어서..^^;;; 결론은 제가 값을 잘못된 필드로부터 읽을려고
했다는것이지요^^ 답변 정말 감사합니다!
이중 루프 돌리면 될것 같습니다.
loop at gt_bkpf .
loop at gt_bseg where bukrs = gt_bkpf-bukrs
and belnr = gt_bkpf-belnr
and gjahr = gt_bkpf-gjahr .
move-corresponding gt_bseg to gt_adlist.
move-corresponding gt_bkpf to gt_adlist.
append gt_adlist. clear gt_adlist .
endloop.
endloop.