다름이 아니라..BDC 프로그램을 짜다 막히는 부분이 있어서요..
제가 하려는 프로그램이 해당년월에 원단위를 다운받는건데요.
해당년월에 기종별로 다운을 받다보니 파일 전송을 계속 클릭을 해야하는 불편함이 있어서요..
레코딩을 돌려보니..
PERFORM DYNPRO USING :
'X' 'ZPBDC043' '1000', "
' ' 'S_LFGJA' ITAB-S_LFGJA, "연도
' ' 'S_LFMON' ITAB-S_LFMON, "월
' ' 'BDC_OKCODE' '=ONLI'. "
*&--- VIEW Select Screen
PERFORM DYNPRO USING :
'X' 'SAPLGRAP' '0200', "
' ' 'BDC_OKCODE' '=SEND'.
요렇게 나왔습니다..
제가 필요한건
PERFORM DYNPRO USING :
'X' 'SAPLGRAP' '0200', "
' ' 'BDC_OKCODE' '=SEND'.
이부분만 해당년월의 기종 대수만큼만 돌아가면 되거든요..
LOOP문을 쓰니 에러가 너서요..
좋은 방법이 없을까요..
고수님들의 조언 기다릴꼐요..
환절기 감기 조심하시구요..
꾸벅
* e-abap님에 의해서 게시물 이동되었습니다 (2007-10-04 13:30)
댓글 8
-
지의
2007.10.04 22:00
-
강철구
2007.10.04 22:10
반복적으로 돌려서 하게되면 그 해당월에 관련된 기종만 돌아갑니다.
다른 월에 기종이 많아지면 더이상 돌아가질 않아서요..
기종이 많아 질때마다 프로그램을 수정할 수 가 없어서요..
좋은 방법이 없을까요??ㅠ.ㅠ
-
지의
2007.10.04 23:45
죄송.. 님 뭔 말 하는지 모르겠어요.. 저도 일단은 허접인 관계로..
소스 보여주세요 Loop 시작점 부터 BDC Call 시점까지 전부 보여주세욤..
-
담데기
2007.10.05 00:39
BDC 다시 따시구요....
계속 해보시고 그래도 안되신다면...
BDC 프로그램을... 올려주시는게 빠를것 같네요.
철구님이 쓰신 글만 보고는 다 이해할수가없네요.
-
담데기
2007.10.05 00:47
창이 뜰때마다 계속 클릭을 해야하는 불편함을 줄이려면
타입 LIKE ctu_params-dismode VALUE 'A',
타입 LIKE ctu_params-updmode VALUE 'S'.
이렇게 정의하세요.
-
강철구
2007.10.05 18:05
제가 하려던 질문이요..
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE ATAB
FROM ZP05W1
WHERE LFGJA = itab-lfgja
AND LFMON = itab-lfmon
LOOP AT ATAB.
CLEAR bTAB. REFRESH BTAB.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE BTAB
FROM ZP05W2
WHERE LFGJA = ATAB-LFGJA
AND LFMON = ATAB-LFMON
AND MODEL = ATAB-MODEL.
DESCRIBE TABLE BTAB LINES ROW_COUNT.
IF row_count = 0.
EXIT.
ENDIF.
CONCATENATE file s_lfgja s_lfmon mtab-model fexcel INTO fname.
CALL FUNCTION 'DOWNLOAD'
EXPORTING
filename = fname
filetype = ftype
TABLES
data_tab = itab.
ENDLOOP.
이런식으로 자료를 검색해서 해당년월에 기종을 가져오는거예요..
제가 레코딩 한거는
PERFORM DYNPRO USING :
'X' 'ZPBDC043' '1000', "
' ' 'S_LFGJA' ITAB-S_LFGJA, "연도
' ' 'S_LFMON' ITAB-S_LFMON, "월
' ' 'BDC_OKCODE' '=ONLI'. "
*&--- VIEW Select Screen
PERFORM DYNPRO USING :
'X' 'SAPLGRAP' '0200', "
' ' 'BDC_OKCODE' '=SEND'.
요렇게 됩니다..
프로그램이 한기종이 끝나면 다시 전송경로를 물어보는 팝업창이 뜨거든요..
그때 해주는 부분이
*&--- VIEW Select Screen
PERFORM DYNPRO USING :
'X' 'SAPLGRAP' '0200', "
' ' 'BDC_OKCODE' '=SEND'.
이부분입니다..
근데 이렇게 하니까 해당년월에 한 기종만 다운이 되서요..
기종이 몇개 되질 않으면
PERFORM DYNPRO USING :
'X' 'SAPLGRAP' '0200', "
' ' 'BDC_OKCODE' '=SEND'.
요놈만 반복해서 써주면 되는데..워낙 기종이 많다 보니까..
다운받을때 마다 프로그램을 수정할 수 가 없어서요..
그래서
PERFORM DYNPRO USING :
'X' 'SAPLGRAP' '0200', "
' ' 'BDC_OKCODE' '=SEND'.
요놈만 반복해서 작업할 수 있는 방법이 있나해서요..
한번 봐주세요.. -
담데기
2007.10.05 19:46
프로그램만 따로 돌려보셨나요? 혹시 원하는 값이 바로 얻어지시는지 궁금하네요.
프로그램 보다 보니깐 좀 이상해서요.
현재 알려주신 내용을 풀이 해보면,
다운 로드 받는 테이블 = ITAB.
조건 ITAB 테이블의 필드 중 - lfgja (년) - lfmon (월)
에 해당하는 ZP05W1 값 가져오는 테이블 = ATAB.
조건 ATAB 테이블의 필드 중 - lfgja (년) - lfmon (월) - model (기종)
에 해당하는 ZP05W1 값 가져오는 테이블 = BTAB.
이렇게 총 3개 테이블이 있고 최종적으로 BTAB을 가져오는데...
의문이 드는것이 있네요.
ITAB 이 여러라인을 받는 인터널 테이블인가요? 아님 한줄짜리 스트럭쳐 인가요?
현재 강철구님이 쓰신 내용을 보면, 스트럭쳐로된 한줄짜리 테이블이고 그 값으로 년 월을 읽어와 ATAB을 채우는데요. (만약 ITAB이 여러라인이면 루프문을 돌려서 ATAB값을 받았겠죠??)
여기서 더 나아가 생기는 의문은..
ATAB의 년과 월 필드가 BTAB의 년 월 필드와 동일하지 않나요?
만약, 그렇다면!!
한줄짜리로 읽어온 ITAB 테이블로 바로 BTAB을 구하시면 빠르실텐데... 구지 ATAB을 루프 돌리신다는게 이해가 안가네요.
그리고 강철구님이 정말 마지막에 얻고자 하는 값이.
FNAME(아마도 타입이 string이겠죠?) 여러줄짜리 인터널 테이블인데요.
그렇다면 마지막엔
DESCRIBE TABLE BTAB LINES ROW_COUNT.
IF ROW_COUNT = 0.
EXIT.
else.
perform ABC changing Fname.
ENDIF.
form ABC changing Fname.
LOOP row_count.
CONCATENATE
FILE S_LFGJA S_LFMON MTAB-MODEL FEXCEL INTO FNAME.
append fname.
endloop.
endform.
이렇게 나올것 같은데....
그리고
PERFORM DYNPRO USING :
'X' 'SAPLGRAP' '0200', "
' ' 'BDC_OKCODE' '=SEND'.
이건 스크린 200번을 띄워서 OK 또는 확인처럼 버튼을 누르시는것만 해당되기 때문에..
보충내용을 덫붙여서 해야할텐데....
우선 프로그램부터 이해가 안가니.. 제가 뭐라고 딱! 집어드리기가 힘드네요.
-
강철구
2007.10.05 20:10
죄송해요..제가 프로그램을 수정하던걸 올려서요..ㅠ.ㅠ
원래 코드가 이렇게 됩니다..
REPORT zpbdc043 NO STANDARD PAGE HEADING
LINE-SIZE 450
LINE-COUNT 64(1)
MESSAGE-ID zp00.
START-OF-SELECTION.
CLEAR mtab. REFRESH mtab.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE mtab
FROM zp05w1
WHERE lfgja = s_lfgja
AND lfmon = s_lfmon.
LOOP AT mtab.
CLEAR itab. REFRESH itab.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE itab
FROM zp05w2
WHERE lfgja = mtab-lfgja
AND lfmon = mtab-lfmon
AND model = mtab-model.
DESCRIBE TABLE itab LINES row_count.
IF row_count = 0.
CONTINUE.
ENDIF.
CONCATENATE file s_lfgja s_lfmon mtab-model fexcel INTO fname.
CALL FUNCTION 'DOWNLOAD'
EXPORTING
filename = fname
filetype = ftype
TABLES
data_tab = itab.
ENDLOOP.
<
PERFORM DYNPRO USING :
'X' 'SAPLGRAP' '0200', "
' ' 'BDC_OKCODE' '=SEND'.
요놈만 반복적으로 하려고 하는데..
잘 안되네요..
아님 프로그램에서 function 을 만들어서 하는게 좋을까요??
마땅히 배울때도 없고..ㅠ.ㅠ
귀찮으시더라도 한번만 더 봐주세요..
트랜잭션이 뭔지는 모르겠으나..
직접 실행해보시고 필요하다는 부분만 반복적으로 BDC 를 만들어 보세요.. 그게 되나.. ㅋ
되면.. 그 BDC 레코딩 뜰 거를 가지고 다시 코딩해보세요.
수고하세요.