FORM select_header .
CLEAR gr_input1. REFRESH gr_input1.
CLEAR gr_input2. REFRESH gr_input2.
CLEAR gr_input3. REFRESH gr_input3.
CLEAR gr_input4. REFRESH gr_input4.
CLEAR gr_input5. REFRESH gr_input5.
CLEAR gr_input6. REFRESH gr_input6.
CLEAR gr_input7. REFRESH gr_input7.
CLEAR gr_input8. REFRESH gr_input8.
CLEAR gr_input9. REFRESH gr_input9.
IF gv_input1 NE space.
gr_input1-sign = 'I'.
gr_input1-option = 'EQ'.
gr_input1-low = gv_input1.
gr_input1-high = space.
APPEND gr_input1. CLEAR gr_input1.
ENDIF.
IF gv_input2 NE space.
gr_input2-sign = 'I'.
gr_input2-option = 'EQ'.
gr_input2-low = gv_input2.
gr_input2-high = space.
APPEND gr_input2. CLEAR gr_input2.
ENDIF.
IF gv_input3 NE space.
gr_input3-sign = 'I'.
gr_input3-option = 'EQ'.
gr_input3-low = gv_input3.
gr_input3-high = space.
APPEND gr_input3. CLEAR gr_input3.
ENDIF.
IF gv_input4 NE space.
gr_input4-sign = 'I'.
gr_input4-option = 'EQ'.
gr_input4-low = gv_input4.
gr_input4-high = space.
APPEND gr_input4. CLEAR gr_input4.
ENDIF.
IF gv_input5 NE space.
gr_input5-sign = 'I'.
gr_input5-option = 'EQ'.
gr_input5-low = gv_input5.
gr_input5-high = space.
APPEND gr_input5. CLEAR gr_input5.
ENDIF.
IF gv_input6 NE space.
gr_input6-sign = 'I'.
gr_input6-option = 'EQ'.
gr_input6-low = gv_input6.
gr_input6-high = space.
APPEND gr_input6. CLEAR gr_input6.
ENDIF.
IF gv_input7 NE space.
gr_input7-sign = 'I'.
gr_input7-option = 'EQ'.
gr_input7-low = gv_input7.
gr_input7-high = space.
APPEND gr_input7. CLEAR gr_input7.
ENDIF.
IF gv_input8 NE space.
gr_input8-sign = 'I'.
gr_input8-option = 'EQ'.
gr_input8-low = gv_input8.
gr_input8-high = space.
APPEND gr_input8. CLEAR gr_input8.
ENDIF.
IF gv_input9 NE space.
gr_input9-sign = 'I'.
gr_input9-option = 'EQ'.
gr_input9-low = gv_input9.
gr_input9-high = space.
APPEND gr_input9. CLEAR gr_input9.
ENDIF.
CLEAR : gt_header. REFRESH : gt_header.
* CLEAR : gs_header.
SELECT zh~z_vbeln AS vbeln
zi~z_posnr AS posnr
zh~z_werks AS werks
zp~z_name1 AS name1
zc~z_kunnr AS kunnr
zc~z_name1 AS name2
zi~z_lfimg AS lfimg
zi~z_netwr AS netwr
zh~z_erdat AS erdat
FROM zheader AS zh INNER JOIN zitem AS zi
ON zh~mandt EQ zi~mandt
AND zh~z_vbeln EQ zi~z_vbeln
INNER JOIN zplant AS zp
ON zh~mandt EQ zp~mandt
AND zh~z_werks EQ zp~z_werks
INNER JOIN zcustomer AS zc
ON zh~mandt EQ zc~mandt
AND zh~z_kunnr EQ zc~z_kunnr
INTO CORRESPONDING FIELDS OF TABLE gt_header
WHERE zh~z_vbeln IN gr_input1
AND zi~z_posnr IN gr_input2
AND zh~z_werks IN gr_input3
AND zp~z_name1 IN gr_input4
AND zh~z_kunnr IN gr_input5
AND zc~z_name1 IN gr_input6
AND zi~z_lfimg IN gr_input7
AND zi~z_netwr IN gr_input8
AND zh~z_erdat IN gr_input9.
ENDFORM.
마지막 WHERE 부분에서 gr_input 들이 디버깅하면 값이 안들어옵니다.
gr_input9의 값만 들어오네요. 다른것들도 같이 선언했는데 왜 값이 안들어 올가요??
잘못 선언한게 있는지 함 봐주세요 ㅠㅠ
댓글 7
-
hongman
2007.11.24 01:01
-
hongman
2007.11.24 01:05
참고로...코드가 넘 기네요....팁입니다. 아시겠지만..
DEFINE set_ranges.
if &1 ne space.
&2-sign = 'I'.
&2-option = 'EQ'.
&2-low = &1.
&2-high = space.
append &2. clear &2.
endif.
END-OF-DEFINITION.
set_ranges gv_input1 gr_input1.
set_ranges gv_input2 gr_input2.
set_ranges gv_input3 gr_input3.......
-
rain
2007.11.24 01:06
gv_inputn 값들도 안들어오네요 9번만 들어오고.. 같이 선언했는데...
TABLES : zplant,
zcustomer,
zheader,
zitem.
DATA : BEGIN OF gs_header,
mark TYPE char1,
vbeln TYPE zheader-z_vbeln,
posnr TYPE zitem-z_posnr,
werks TYPE zheader-z_werks,
name1 TYPE zplant-z_name1,
kunnr TYPE zheader-z_kunnr,
name2 TYPE zcustomer-z_name1,
lfimg TYPE zitem-z_lfimg,
netwr TYPE zitem-z_netwr,
erdat TYPE zheader-z_erdat,
END OF gs_header.
DATA : gt_header LIKE gs_header OCCURS 0 WITH HEADER LINE.
DATA : ok_code LIKE sy-ucomm.
DATA : gv_input1 LIKE zheader-z_vbeln,
gv_input2 LIKE zitem-z_posnr,
gv_input3 LIKE zheader-z_werks,
gv_input4 LIKE zplant-z_name1,
gv_input5 LIKE zheader-z_kunnr,
gv_input6 LIKE zcustomer-z_name1,
gv_input7 LIKE zitem-z_lfimg,
gv_input8 LIKE zitem-z_netwr,
gv_input9 LIKE zheader-z_erdat.
RANGES : gr_input1 FOR gv_input1,
gr_input2 FOR gv_input2,
gr_input3 FOR gv_input3,
gr_input4 FOR gv_input4,
gr_input5 FOR gv_input5,
gr_input6 FOR gv_input6,
gr_input7 FOR gv_input7,
gr_input8 FOR gv_input8,
gr_input9 FOR gv_input9.
CONTROLS tc_0200 TYPE TABLEVIEW USING SCREEN 0200.
-
윤군친구(bsp개발자)
2007.11.24 01:22
data 입출력 및 연계과장 로직이 하나도 안보이네요..
선언과 IF 로직으로는 어디서 잘못됬는지 안보여요...
data 입력및 연계과정 소스가 있어야 할듯하네요.
-
지의
2007.11.24 01:54
일단...
IF gv_input1 NE space.
gr_input1-sign = 'I'.
gr_input1-option = 'EQ'.
gr_input1-low = gv_input1.
gr_input1-high = space.
APPEND gr_input1. CLEAR gr_input1.
ENDIF.
이 소스에 대한 이해는 gv_input1 이라는 필드에 데이타가 없을 때 (아시겠지만)
gr_input1 이라는 range 변수에 값을 넣어주는 과정입니다.
즉 조건절에 해당 값들이 gv_input1 이라는 변수에 값이 있고 없고에 따라 들어갈수도 있고 없을 수도 있습니다.
이 range 변수는 조건절에 걸 때 값이 한 라인도 존재하지 않는다면 전체 데이타를 검색하게끔 되어 있고
라인이 하나 이상이 있다면 해당 데이타를 가져오게 되어 있습니다.
즉...
sign option low high
I eq 0001
이라고 하면 0001 에 대한 값만 찾을꺼고
sign option low high
I bt 0001 0005
이라고 하면 0001 부터 0005 에 대한 값들을 찾을꺼고
sign option low high
I cp 000*
라고 하면 000으로 시작하는 모든 값들을 찾을 겁니다.
즉 슨 range 에 라인이 없는 부분은 전체 데이타를 가져오니 무시하시고
라인이 있는 부분에 대해서만 테이블에 해당 데이타가 존재하는지 확인하면 되겠죠.
확인을 해서 데이타가 존재하는 것을 봤다면
이제는 조건 절에 값이 잘못 된게 아니라 쿼리 자체에 문제가 있는 겁니다.
제일 처음 의심되는 것은 찾을 데이타가 있는 필드와 인터널 테이블에 넣어줄 필드의 이름이 같은가? 하는 문제가 있꼬
두번째로는 gv_input1 과 gr_input1 이 같은 필드를 참조했는가? 그리고 조건절에 걸은 필드와 gr_input1 의 필드가 같은가?
세번째로는 inner join 으로 찾아야 했는가 또는 left outer join 으로 찾아야 했는가? 입니다.
제 생각으로는 세번째 같군요.
자 inner join 조건절을 보시면
FROM zheader AS zh INNER JOIN zitem AS zi
ON zh~mandt EQ zi~mandt
AND zh~z_vbeln EQ zi~z_vbeln
zheader 라는 테이블에 데이타를 기준으로 zitem 라는 테이블의 데이타를 조회하여 같은 값이 있냐는 문장이라는건 아시겠죠.
on zh~filed 로 준 부분이 기준이 되는 데이타이고 eq zi~field 로 준 부분이 같은 값이 있는가 하고 점검하는 부분입니다.
inner join 을 특성 상 같은 기준이 되는 테이블의 데이타에서 검색하고자 하는 테이블의 데이타와 같은 것이 없으면
데이타를 기준이 되는 테이블에서 찾더라도 검색되는 테이블에서는 데이타를 찾지 못했기 때문에
결과적으로는 데이타를 못 찾았다고 나오게 됩니다.
그 반대로 left outer join 을 사용하게 되면 기준이 되는 테이블에 데이타를 검색되는 테이블에서 데이타를 찾든 못 찾든 간에
일단 기준이 되는 테이블에 데이타가 있기 때문에 데이타를 가져왔다고 하게 되겠죠.
즉 슨, 지금 검색하시려는 조건절에 값이 4개의 테이블에 inner join 을 통해 모두 값이 있는가? 하는 것을 찾아보세요.
만약에 없다면 left outer join 을 사용하셔야 겠죠.
P.S : 일단 쿼리가 맞는거 같은데 데이타가 안 나오면 조건절에 값들을 살펴보시고 해당 테이블 들에 데이타를
해단 조건절로 해서 쭉 찾아보세요. 그래서 쿼리를 어떻게 고쳐야 할지 판단하시는게 공부하는데 좋을 것 같습니다.
수고하세요.
-
지의
2007.11.24 01:55
아.. 참고로 테이블 만드는 곳은 SE11 이고 테이블의 데이타를 보는 곳은 SE16 입니다. 아시겠지만... 노파심에..
좋은 하루 보내세요.
-
rain
2007.11.24 04:21
IF NOT gv_input9 IS INITIAL.
gr_input9-sign = 'I'.
gr_input9-option = 'EQ'.
gr_input9-low = gv_input9.
gr_input9-high = space.
APPEND gr_input9. CLEAR gr_input9.
ENDIF.
input9 값이 날짜라서 값을 변경해줬더니 지대 돌아가네요
hongman님 윤군친구님 지의님 감사합니다~~
코딩상 별 문제점은 보이질 않는데요....
gv_input 들에 값은 넘어오나여?...