안녕하세요..
EASY ABAP 를 통해서 여러 고수님들 도움을 많이 받고 있습니다. 다시 한번 감사드립니다.
이번에도 역시 도움을 받고자 이렇게 글을 올립니다...
제가 하려고 하는 작업은 인터널 테이블 IT_TEMP의 특정 레코드에 대한 필드 값을 모두 변경하는 겁니다.
현재까지 진행된 것은 function을 하나 만들어서 아래 조회 조건 값을 던지면 보정 값을 가지고 나오는데까지는 코딩을 완료하였습니다..이제 IT_TEMP의 특정 레코드에 필드 값을 모두 변경해야 하는데..여기에서 막혀서 진행이 안되고 있습니다..아무리 생각해도 어떻게 해야될지를 모르겠네요..
조언 좀 부탁드립니다..
조회 조건 값
YEAR : 2009
MONTH : 01 ~ 12 ( 04 ~ 06, 07 ~ 09 등으로도 조회 가능)
1. 인터널 TABLE (IT_TEMP)
필드 | VERSION | A-1 | A-2 | A-3 | A-4 | A-5 | A-6 | A-7 | A-8 | A-9 | A-10 | A-11 | A-12 |
레코드1 | 301 | 2000 | 2000 | 2000 | 2000 | 2000 | 2000 | 2000 | 2000 | 2000 | 2000 | 2000 | 2000 |
레코드2 | 302 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 |
레코드3 | 303 | 0 | 0 | 37 | 0 | 70 | 80 | 67 | 0 | 0 | 0 | 45 | 0 |
레코드4 | 304 | 2001 | 2001 | 2001 | 2001 | 2001 | 2001 | 2001 | 2001 | 2001 | 2001 | 2001 | 2001 |
레코드5 | 305 | 400 | 400 | 400 | 400 | 400 | 400 | 400 | 400 | 400 | 400 | 400 | 400 |
----> IT_TEMP-VERSION = '303'인 레코드의 A-1부터 A-12까지의 값을 펑션을 돌려서 나온 값으로 보정하려고 합니다. A-1부터 A-12까지 값을 변경하려고 하는 이유는 조회 조건값에사 2009.01 ~ 2009.12가 입력이 되었기 때문입니다.. 만약에 조회 값에서 2009.04 ~ 2009.06이 입력이 된다면 IT_TEMP-VERSION = '303'인 레코드의 A-4부터 A-6의 값을 변경해야 합니다...
2. Function module : ZZ_OUTPUT
- IMPORT : MONTH (예 : 200901로 단일 값만 입력 가능)
- EXPORT : AMT (예 : 200)
여러 고수님들의 도움 부탁드립니다..
도움이 되실지 모르겠네요.
DATA : BEGIN OF st_data,
version TYPE c LENGTH 3,
a-1 TYPE i,
a-2 TYPE i,
a-3 TYPE i,
a-4 TYPE i,
a-5 TYPE i,
a-6 TYPE i,
a-7 TYPE i,
a-8 TYPE i,
a-9 TYPE i,
a-10 TYPE i,
a-11 TYPE i,
a-12 TYPE i,
END OF st_data,
it_data LIKE SORTED TABLE OF st_data WITH UNIQUE KEY version.
st_data-version = '303'. INSERT st_data INTO TABLE it_data.
st_data-version = '302'. INSERT st_data INTO TABLE it_data.
* Single value change
CALL FUNCTION 'YTEST_FFFFF'
EXPORTING
version = '302'
month = '200911'
amt = '200'
CHANGING
t_data = it_data.
* Multi value change
st_data-version = '303'.
st_data-a-1 = 100.
st_data-a-5 = 200.
st_data-a-8 = 300.
MODIFY TABLE it_data FROM st_data.
[Function module - Source]
FUNCTION ytest_fffff.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(VERSION) TYPE CLIKE
*" REFERENCE(MONTH) TYPE NUM6
*" REFERENCE(AMT) TYPE I
*" EXPORTING
*" REFERENCE(E_RESULT) TYPE MSGTX
*" CHANGING
*" REFERENCE(T_DATA) TYPE ANY TABLE
*"----------------------------------------------------------------------
DATA ldref TYPE REF TO data.
DATA l_fname TYPE fname.
FIELD-SYMBOLS : <lfs_data>,
<lfs_field>.
CLEAR e_result.
* Create structure
CREATE DATA ldref LIKE LINE OF t_data.
ASSIGN ldref->* TO <lfs_data>.
* Version
ASSIGN COMPONENT 'VERSION'
OF STRUCTURE <lfs_data>
TO <lfs_field>.
IF <lfs_field> IS ASSIGNED.
<lfs_field> = version.
UNASSIGN <lfs_field>.
ENDIF.
* Amt
IF month+4(2) >= 10.
CONCATENATE 'A-' month+4(2) INTO l_fname.
ELSE.
CONCATENATE 'A-' month+5(1) INTO l_fname.
ENDIF.
ASSIGN COMPONENT l_fname
OF STRUCTURE <lfs_data>
TO <lfs_field>.
IF <lfs_field> IS ASSIGNED.
<lfs_field> = amt.
ENDIF.
* 해당 버전에 업데이트
MODIFY TABLE t_data FROM <lfs_data>
TRANSPORTING (l_fname).
CHECK sy-subrc IS NOT INITIAL.
e_result = '조건에 해당하는 데이터가 없습니다'.
ENDFUNCTION.