아래 엑셀과 같은 결과를 만들려고 해요..
COSP에서 데이터를 읽어오면, WGT01~WGT12까지의 매달 금액 데이터가 있습니다.
그중에서 사용자가 3~6월 데이터에 대해 실행한다고 하면,
WGT03의 값을 일단 읽고, 매달 100원씩 12월까지 감가 상각을 한다고 계산을 하는거예요.
그리고 4월에 대한 값을 WGT04에서 읽고 4월~12월씩 매달 100원씩 삭감하는 형식이죠.
그럼 총 3,4,5,6월의 4개의 레코드가 생성이 되겠죠..
코딩을 해봤는데..값은 제대로 나오기는 하는데 영..복잡한 코딩이 되버렸네요 ㅠㅠ
좀 간단하게, 퍼포먼스 좋게 만드는 방법은 없을까요?
제발 부탁드립니다!!
DATA: wa TYPE cosp,
wa1 TYPE cosp,
it LIKE TABLE OF wa.
DATA: lv_mon(2),
lv_month(2),
lv_index(2) TYPE n,
lv_index2(2) TYPE n,
fname(10) TYPE c.
DATA: bmon(2) VALUE '03',
emon(2) VALUE '06'.
DATA: price TYPE cosp-wtg001.
* 해당 월만큼만 실행
lv_mon = emon - bmon + 1.
FIELD-SYMBOLS: <fs> TYPE ANY.
SELECT SINGLE * FROM cosp
INTO CORRESPONDING FIELDS OF wa
WHERE objnr = 'KS1000P1110'.
* 원하는 개월수만큼 실행함(3~6월까지 4번 실행)
DO lv_mon TIMES.
lv_index = bmon + sy-index - 1.
CONCATENATE 'WA-WTG0' lv_index INTO fname.
ASSIGN (fname) TO <fs>.
CASE fname.
WHEN 'WA-WTG001'.
wa1-wtg001 = <fs>.
WHEN 'WA-WTG002'.
wa1-wtg002 = <fs>.
WHEN 'WA-WTG003'.
wa1-wtg003 = <fs>.
WHEN 'WA-WTG004'.
wa1-wtg004 = <fs>.
WHEN 'WA-WTG005'.
wa1-wtg005 = <fs>.
WHEN 'WA-WTG006'.
wa1-wtg006 = <fs>.
WHEN 'WA-WTG007'.
wa1-wtg007 = <fs>.
WHEN 'WA-WTG008'.
wa1-wtg008 = <fs>.
WHEN 'WA-WTG009'.
wa1-wtg009 = <fs>.
WHEN 'WA-WTG010'.
wa1-wtg010 = <fs>.
WHEN 'WA-WTG0011'.
wa1-wtg011 = <fs>.
WHEN 'WA-WTG012'.
wa1-wtg012 = <fs>.
ENDCASE.
* 해당월부터 12 월까지 감가 상각
CLEAR: lv_month.
lv_month = 12 - lv_index.
lv_index2 = lv_index.
price = <fs>.
DO lv_month TIMES.
lv_index2 = lv_index2 + 1.
CONCATENATE 'WA1-WTG0' lv_index2 INTO fname.
price = price - 100.
CASE fname.
WHEN 'WA1-WTG001'.
wa1-wtg001 = price.
WHEN 'WA1-WTG002'.
wa1-wtg002 = price.
WHEN 'WA1-WTG003'.
wa1-wtg003 = price.
WHEN 'WA1-WTG004'.
wa1-wtg004 = price.
WHEN 'WA1-WTG005'.
wa1-wtg005 = price.
WHEN 'WA1-WTG006'.
wa1-wtg006 = price.
WHEN 'WA1-WTG007'.
wa1-wtg007 = price.
WHEN 'WA1-WTG008'.
wa1-wtg008 = price.
WHEN 'WA1-WTG009'.
wa1-wtg009 = price.
WHEN 'WA1-WTG010'.
wa1-wtg010 = price.
WHEN 'WA1-WTG0011'.
wa1-wtg011 = price.
WHEN 'WA1-WTG012'.
wa1-wtg012 = price.
ENDCASE.
ENDDO.
APPEND wa1 TO it.
CLEAR: wa1.
ENDDO.
학교 과제같은 느낌이 드네여. .ㅋㅋ
필드 심볼 하나 추가하셔서 case문만 변경하였습니다. (이미 다 하신것같은데.. ^^;;)
테스트는 안해봐서 잘 멀겟네여... ㅋㅋ
* 원하는 개월수만큼 실행함(3~6월까지 4번 실행)
DO lv_mon TIMES.
lv_index = bmon + sy-index - 1.
CONCATENATE 'WA-WTG0' lv_index INTO fname.
ASSIGN (fname) TO <fs>.
CONCATENATE 'WA1-WTG0' lv_index INTO fname.
ASSIGN (fname) TO <fs2>.
<fs2> = <fs1>.
* 해당월부터 12 월까지 감가 상각
CLEAR: lv_month.
lv_month = 12 - lv_index.
lv_index2 = lv_index.
price = <fs>.
DO lv_month TIMES.
lv_index2 = lv_index2 + 1.
CONCATENATE 'WA1-WTG0' lv_index2 INTO fname.
ASSIGN (fname) TO <fs2>.
price = price - 100.
<fs2> = price.
ENDDO.
APPEND wa1 TO it.
CLEAR: wa1.
ENDDO.