BDC는 Batch Data Communication의 약자로, Batch 작업으로 Standard table에 있는 마스터성 데이터를 입력, 수정, 삭제를 하거나, Standard process를 진행할 떄 사용된다.
- 기본적인 BDC작업 방법과 예시
예) 코스트센터 신규 입력, 수정
1. KS01에서 리코딩을 먼저 진행한다.
- SHDB (T-CODE) 에서 리코딩을 시작
- Recording - 저장 될 리코딩 이름 / Transaction code - 어디서 리코딩 할지.. 현재 예시의 경우 KS01
- 리코딩이 완성된 화면.
- TOP
*----------------------------------------------------------------------*
* INCLUDE, TABLES *
*----------------------------------------------------------------------*
TABLES : CSKS.
*----------------------------------------------------------------------*
* INTERNAL TABLES *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* GLOBAL VARIABLES *
*----------------------------------------------------------------------*
DATA : GV_COL_POS TYPE I.
DATA : GV_CHK TYPE C.
DATA : GV_ANSWER TYPE C.
DATA : GV_OKCODE TYPE SY-UCOMM.
DATA : G_RATE TYPE C LENGTH 3.
*- ALV Listbox 관련
DATA: GT_DROPDOWN TYPE LVC_T_DRAL,
GS_DROPDOWN TYPE LVC_S_DRAL.
*- F4 관련 테이블
DATA : F4_RETURN LIKE TABLE OF DDSHRETVAL WITH HEADER LINE,
LT_DYNMAPP TYPE TABLE OF DSELC WITH HEADER LINE,
LT_DYNTAB TYPE TABLE OF STRING.
*- BDC 관련
DATA : GS_BDC LIKE BDCDATA,
GT_BDC LIKE TABLE OF BDCDATA.
DATA : GS_MSG LIKE BDCMSGCOLL,
GT_MSG LIKE TABLE OF BDCMSGCOLL.
DATA : GS_OPT TYPE CTU_PARAMS,
GV_MOVE LIKE CTU_PARAMS-DISMODE VALUE 'N',
GV_MESSAGE LIKE BAPIRETURN-MESSAGE.
DATA: gv_curr_year type sy-datum.
*----------------------------------------------------------------------*
* CONSTANTS *
*----------------------------------------------------------------------*
CONTROLS : TAB_ST TYPE TABSTRIP.
CONSTANTS: C_KOKRS TYPE KOKRS VALUE '0001'.
CONSTANTS: C_BUKRS LIKE BKPF-BUKRS VALUE '0001'. "회사코드
CONSTANTS: C_WAERS TYPE WAERS VALUE 'KRW'. "기본통화키
CONSTANTS: C_KRW TYPE WAERS VALUE 'KRW'. "기본통화키
CONSTANTS: C_SPRAS TYPE SPRAS VALUE '3'. "언어
CONSTANTS: C_99991231 TYPE DATBI VALUE '99991231'. "효력종료일
CONSTANTS: C_X TYPE C VALUE 'X'.
CONSTANTS: C_SPACE TYPE C VALUE ' '.
CONSTANTS: C_1 TYPE C VALUE '1'.
*----------------------------------------------------------------------*
* FIELD-SYMBOL *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* DEFINE *
*----------------------------------------------------------------------*
DEFINE CATALOG1.
L_VALUE-KEY = &1 .
L_VALUE-TEXT = &2 .
APPEND L_VALUE TO L_LIST.
CLEAR: L_VALUE.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* SELECT-OPTIONS & PARAMETERS *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-B01.
PARAMETERS : P_KOKRS TYPE KOKRS OBLIGATORY DEFAULT '0001'.
PARAMETERS : P_KOSTL TYPE CSKS-KOSTL.
PARAMETERS : P_KTEXT TYPE CSKT-KTEXT.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-B02.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS : P_CREATE RADIOBUTTON GROUP R1 USER-COMMAND UC DEFAULT 'X'.
SELECTION-SCREEN COMMENT 10(20) TEXT-003 FOR FIELD P_CREATE.
PARAMETERS : P_CHANGE RADIOBUTTON GROUP R1.
SELECTION-SCREEN COMMENT 40(20) TEXT-004 FOR FIELD P_CHANGE.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-B03.
PARAMETERS : P_MODE LIKE RFPDO-ALLGAZMD AS LISTBOX VISIBLE LENGTH 20 DEFAULT 'N'.
SELECTION-SCREEN END OF BLOCK B3.
**-- LAYOUT 설명
SELECTION-SCREEN : COMMENT /01(83) TEXT-C01 MODIF ID C01,
COMMENT /01(83) TEXT-C02 MODIF ID C02.
- F01
*&---------------------------------------------------------------------*
*& Form MODIFY_SCREEN
*&---------------------------------------------------------------------*
FORM MODIFY_SCREEN.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'C02'.
SCREEN-INVISIBLE = 0.
ENDIF.
"관리회계 영역 입력 불가
CASE SCREEN-NAME.
WHEN 'P_KOKRS'.
SCREEN-INPUT = 0.
ENDCASE.
"COMMENT 색상변경
IF SCREEN-GROUP1 = 'C01'.
SCREEN-INTENSIFIED = '1'.
SCREEN-COLOR = '4'.
ENDIF.
"변경모드일 경우
IF P_CHANGE = 'X' AND SCREEN-GROUP1 = 'C02'.
SCREEN-ACTIVE = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form POP_UP
*&---------------------------------------------------------------------*
FORM POP_UP USING P_TEXT P_TITEL CHANGING P_ANSWER.
*- CANC = A, YES = J, NO = N, OPT1 = 1, OPT2 = 2.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
DEFAULTOPTION = 'J' "default 값
TEXTLINE1 = P_TEXT
* TEXTLINE2 = TEXT-002
TITEL = P_TITEL
CANCEL_DISPLAY = 'X'
IMPORTING
ANSWER = P_ANSWER.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form INIT_DATA
*&---------------------------------------------------------------------*
FORM INIT_DATA.
SY-TITLE = '코스트센터 생성 / 변경 프로그램'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form LISTBOX
*&---------------------------------------------------------------------*
FORM LISTBOX.
DATA: L_NAME TYPE VRM_ID,
L_LIST TYPE VRM_VALUES,
L_VALUE LIKE LINE OF L_LIST,
L_TEMP(20).
*- Set Listbox
L_NAME = 'P_MODE'.
CATALOG1: 'A' 'Foreground 실행' ,
'N' 'Background 실행' ,
'E' 'Error Check' .
SORT L_LIST DESCENDING.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = L_NAME
VALUES = L_LIST.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BDC_CALL
*&---------------------------------------------------------------------*
FORM BDC_CALL.
*-- 필수 입력 체크
IF P_KOKRS IS INITIAL.
MESSAGE I000 WITH '관리회계 영역을 입력하시기 바랍니다.'.
GV_CHK = 'X'.
EXIT.
ENDIF.
IF P_KOSTL IS INITIAL.
MESSAGE I000 WITH '코스트센터를 입력하시기 바랍니다.'.
GV_CHK = 'X'.
EXIT.
ENDIF.
IF P_KTEXT IS INITIAL.
MESSAGE I000 WITH '코스트센터명을 입력하시기 바랍니다.'.
GV_CHK = 'X'.
EXIT.
ENDIF.
CHECK GV_CHK IS INITIAL.
CASE 'X'.
WHEN P_CREATE. "코스트센터 생성
PERFORM COST_CREATE.
WHEN P_CHANGE. "코스트센터 변경
PERFORM COST_CHANGE.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DYNPRO
*&---------------------------------------------------------------------*
FORM DYNPRO USING PV_CHECK PV_NAME PV_VALUE.
CLEAR GS_BDC.
IF PV_CHECK = C_X.
GS_BDC-DYNBEGIN = C_X.
GS_BDC-PROGRAM = PV_NAME.
GS_BDC-DYNPRO = PV_VALUE.
APPEND GS_BDC TO GT_BDC.
ELSE.
GS_BDC-FNAM = PV_NAME.
GS_BDC-FVAL = PV_VALUE.
APPEND GS_BDC TO GT_BDC.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form MESSAGE_TEXT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM MESSAGE_TEXT .
CLEAR : GV_MESSAGE.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = GS_MSG-MSGID
MSGNR = GS_MSG-MSGNR
MSGV1 = GS_MSG-MSGV1
MSGV2 = GS_MSG-MSGV2
MSGV3 = GS_MSG-MSGV3
MSGV4 = GS_MSG-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = GV_MESSAGE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form COST_CREATE
*&---------------------------------------------------------------------*
* 코스트센터 생성
*----------------------------------------------------------------------*
FORM COST_CREATE .
*-- 코스트센터 생성여부 체크
SELECT SINGLE *
FROM CSKS
WHERE KOKRS = P_KOKRS
AND KOSTL = P_KOSTL
AND DATBI = C_99991231. "효력 종료일
IF SY-SUBRC = 0.
MESSAGE I000 WITH '이미 존재하는 코스트센터입니다.'.
GV_CHK = 'X'.
ENDIF.
CHECK GV_CHK IS INITIAL.
PERFORM POP_UP USING TEXT-001 "코스트센터 생성을 하시겠습니까?
TEXT-002 "코스트센터 생성 확인
CHANGING GV_ANSWER.
CHECK GV_ANSWER = 'J'.
gv_curr_year = sy-datum(4) && '0101'.
CLEAR : GT_BDC, GT_MSG.
*-- BDC CALL
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0200',
' ' 'BDC_OKCODE' '/00',
' ' 'CSKSZ-KOKRS' P_KOKRS, "관리회계영역
' ' 'CSKSZ-KOSTL' P_KOSTL, "코스트센터명
' ' 'CSKSZ-DATAB_ANFO' gv_curr_year, "효력 시작일(FROM)
' ' 'CSKSZ-DATBI_ANFO' C_99991231. "효력 시작일(TO)
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0299',
' ' 'BDC_OKCODE' '=ADRE',
' ' 'CSKSZ-KTEXT' P_KTEXT, "이름
' ' 'CSKSZ-LTEXT' P_KTEXT, "내역
' ' 'CSKSZ-VERAK' SY-UNAME, "책임자
' ' 'CSKSZ-KOSAR' 'L', "코스트센터 범주
' ' 'CSKSZ-KHINR' '0001', "계층구조 영역
' ' 'CSKSZ-WAERS' 'USD' , "통화키
' ' 'CSKSZ-PRCTR' '9999'. "손익센터
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0299',
' ' 'BDC_OKCODE' '=KOMM',
' ' 'CSKSZ-ANRED' '프로젝트'.
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0299',
' ' 'BDC_OKCODE' '=BU',
' ' 'CSKSZ-SPRAS' 'KO'.
CALL TRANSACTION 'KS01'
USING GT_BDC
MODE P_MODE
MESSAGES INTO GT_MSG.
IF GT_MSG IS INITIAL. "성공시 GT_MSG에 값이 안 들어옴
GV_MESSAGE = '[' && P_KOSTL && '] 코스트센터 생성에 성공했습니다.'.
ELSE.
READ TABLE GT_MSG INTO GS_MSG WITH KEY MSGTYP = 'E'. "에러
IF SY-SUBRC = 0.
PERFORM MESSAGE_TEXT.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form COST_CHANGE
*&---------------------------------------------------------------------*
* 코스트센터 변경
*----------------------------------------------------------------------*
FORM COST_CHANGE .
*-- 코스트센터 마스터 체크
SELECT SINGLE *
FROM CSKS
WHERE KOKRS = P_KOKRS
AND KOSTL = P_KOSTL
AND DATBI = C_99991231. "효력 종료일
IF SY-SUBRC NE 0.
MESSAGE I000 WITH '존재하지 않는 코스트센터입니다.'.
GV_CHK = 'X'.
ENDIF.
CHECK GV_CHK IS INITIAL.
PERFORM POP_UP USING TEXT-005 "코스트센터명을 변경 하시겠습니까?
TEXT-006 "코스트센터명 변경 확인
CHANGING GV_ANSWER.
CHECK GV_ANSWER = 'J'.
CLEAR : GT_BDC, GT_MSG.
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0200',
' ' 'BDC_OKCODE' '/00',
' ' 'CSKSZ-KOKRS' P_KOKRS,
' ' 'CSKSZ-KOSTL' P_KOSTL.
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0299',
' ' 'BDC_OKCODE' '=BU',
' ' 'BDC_SUBSCR' 'SAPLKMA1 0300SUBSCREEN_EINZEL',
' ' 'CSKSZ-KTEXT' P_KTEXT,
' ' 'CSKSZ-LTEXT' P_KTEXT.
CALL TRANSACTION 'KS02' USING GT_BDC MODE P_MODE MESSAGES INTO GT_MSG.
IF GT_MSG IS INITIAL. "성공시 GT_MSG에 값이 안 들어옴
GV_MESSAGE = '[' && P_KOSTL && '] 코스트센터 변경에 성공했습니다.'.
ELSE.
READ TABLE GT_MSG INTO GS_MSG WITH KEY MSGTYP = 'E'. "에러
IF SY-SUBRC = 0.
PERFORM MESSAGE_TEXT.
ELSE.
READ TABLE GT_MSG INTO GS_MSG WITH KEY MSGTYP = 'S'. "변경사항이 없는 경우
PERFORM MESSAGE_TEXT.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM F4_KOSTL
*&---------------------------------------------------------------------*
FORM F4_KOSTL USING : PF_KOSTL.
DATA : BEGIN OF LS_KOSTL,
KOSTL LIKE CSKS-KOSTL,
KTEXT LIKE CSKT-KTEXT,
END OF LS_KOSTL,
LT_KOSTL LIKE TABLE OF LS_KOSTL.
CLEAR : LT_DYNMAPP, LT_DYNTAB.
LT_DYNMAPP-FLDNAME = 'F0001'. "첫번째값
LT_DYNMAPP-DYFLDNAME = PF_KOSTL.
APPEND LT_DYNMAPP.
*- SELECT문
APPEND 'SPRAS = SY-LANGU' TO LT_DYNTAB.
APPEND 'AND KOKRS = P_KOKRS' TO LT_DYNTAB.
APPEND 'AND DATBI = C_99991231' TO LT_DYNTAB.
SELECT KOSTL KTEXT
INTO CORRESPONDING FIELDS OF TABLE LT_KOSTL
FROM CSKT
WHERE (LT_DYNTAB).
SORT LT_KOSTL BY KOSTL.
*-> CALL FUNCTION
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'KOSTL'
DYNPPROG = SY-CPROG
DYNPNR = SY-DYNNR
DYNPROFIELD = LT_DYNMAPP-DYFLDNAME
WINDOW_TITLE = '코스트센터'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = LT_KOSTL
DYNPFLD_MAPPING = LT_DYNMAPP
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form MODIFY_SCREEN
*&---------------------------------------------------------------------*
FORM MODIFY_SCREEN.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'C02'.
SCREEN-INVISIBLE = 0.
ENDIF.
"관리회계 영역 입력 불가
CASE SCREEN-NAME.
WHEN 'P_KOKRS'.
SCREEN-INPUT = 0.
ENDCASE.
"COMMENT 색상변경
IF SCREEN-GROUP1 = 'C01'.
SCREEN-INTENSIFIED = '1'.
SCREEN-COLOR = '4'.
ENDIF.
"변경모드일 경우
IF P_CHANGE = 'X' AND SCREEN-GROUP1 = 'C02'.
SCREEN-ACTIVE = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form POP_UP
*&---------------------------------------------------------------------*
FORM POP_UP USING P_TEXT P_TITEL CHANGING P_ANSWER.
*- CANC = A, YES = J, NO = N, OPT1 = 1, OPT2 = 2.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
DEFAULTOPTION = 'J' "default 값
TEXTLINE1 = P_TEXT
* TEXTLINE2 = TEXT-002
TITEL = P_TITEL
CANCEL_DISPLAY = 'X'
IMPORTING
ANSWER = P_ANSWER.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form INIT_DATA
*&---------------------------------------------------------------------*
FORM INIT_DATA.
SY-TITLE = '코스트센터 생성 / 변경 프로그램'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form LISTBOX
*&---------------------------------------------------------------------*
FORM LISTBOX.
DATA: L_NAME TYPE VRM_ID,
L_LIST TYPE VRM_VALUES,
L_VALUE LIKE LINE OF L_LIST,
L_TEMP(20).
*- Set Listbox
L_NAME = 'P_MODE'.
CATALOG1: 'A' 'Foreground 실행' ,
'N' 'Background 실행' ,
'E' 'Error Check' .
SORT L_LIST DESCENDING.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = L_NAME
VALUES = L_LIST.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BDC_CALL
*&---------------------------------------------------------------------*
FORM BDC_CALL.
*-- 필수 입력 체크
IF P_KOKRS IS INITIAL.
MESSAGE I000 WITH '관리회계 영역을 입력하시기 바랍니다.'.
GV_CHK = 'X'.
EXIT.
ENDIF.
IF P_KOSTL IS INITIAL.
MESSAGE I000 WITH '코스트센터를 입력하시기 바랍니다.'.
GV_CHK = 'X'.
EXIT.
ENDIF.
IF P_KTEXT IS INITIAL.
MESSAGE I000 WITH '코스트센터명을 입력하시기 바랍니다.'.
GV_CHK = 'X'.
EXIT.
ENDIF.
CHECK GV_CHK IS INITIAL.
CASE 'X'.
WHEN P_CREATE. "코스트센터 생성
PERFORM COST_CREATE.
WHEN P_CHANGE. "코스트센터 변경
PERFORM COST_CHANGE.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DYNPRO
*&---------------------------------------------------------------------*
FORM DYNPRO USING PV_CHECK PV_NAME PV_VALUE.
CLEAR GS_BDC.
IF PV_CHECK = C_X.
GS_BDC-DYNBEGIN = C_X.
GS_BDC-PROGRAM = PV_NAME.
GS_BDC-DYNPRO = PV_VALUE.
APPEND GS_BDC TO GT_BDC.
ELSE.
GS_BDC-FNAM = PV_NAME.
GS_BDC-FVAL = PV_VALUE.
APPEND GS_BDC TO GT_BDC.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form MESSAGE_TEXT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM MESSAGE_TEXT .
CLEAR : GV_MESSAGE.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = GS_MSG-MSGID
MSGNR = GS_MSG-MSGNR
MSGV1 = GS_MSG-MSGV1
MSGV2 = GS_MSG-MSGV2
MSGV3 = GS_MSG-MSGV3
MSGV4 = GS_MSG-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = GV_MESSAGE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form COST_CREATE
*&---------------------------------------------------------------------*
* 코스트센터 생성
*----------------------------------------------------------------------*
FORM COST_CREATE .
*-- 코스트센터 생성여부 체크
SELECT SINGLE *
FROM CSKS
WHERE KOKRS = P_KOKRS
AND KOSTL = P_KOSTL
AND DATBI = C_99991231. "효력 종료일
IF SY-SUBRC = 0.
MESSAGE I000 WITH '이미 존재하는 코스트센터입니다.'.
GV_CHK = 'X'.
ENDIF.
CHECK GV_CHK IS INITIAL.
PERFORM POP_UP USING TEXT-001 "코스트센터 생성을 하시겠습니까?
TEXT-002 "코스트센터 생성 확인
CHANGING GV_ANSWER.
CHECK GV_ANSWER = 'J'.
gv_curr_year = sy-datum(4) && '0101'.
CLEAR : GT_BDC, GT_MSG.
*-- BDC CALL
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0200',
' ' 'BDC_OKCODE' '/00',
' ' 'CSKSZ-KOKRS' P_KOKRS, "관리회계영역
' ' 'CSKSZ-KOSTL' P_KOSTL, "코스트센터명
' ' 'CSKSZ-DATAB_ANFO' gv_curr_year, "효력 시작일(FROM)
' ' 'CSKSZ-DATBI_ANFO' C_99991231. "효력 시작일(TO)
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0299',
' ' 'BDC_OKCODE' '=ADRE',
' ' 'CSKSZ-KTEXT' P_KTEXT, "이름
' ' 'CSKSZ-LTEXT' P_KTEXT, "내역
' ' 'CSKSZ-VERAK' SY-UNAME, "책임자
' ' 'CSKSZ-KOSAR' 'L', "코스트센터 범주
' ' 'CSKSZ-KHINR' '0001', "계층구조 영역
' ' 'CSKSZ-WAERS' 'USD' , "통화키
' ' 'CSKSZ-PRCTR' '9999'. "손익센터
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0299',
' ' 'BDC_OKCODE' '=KOMM',
' ' 'CSKSZ-ANRED' '프로젝트'.
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0299',
' ' 'BDC_OKCODE' '=BU',
' ' 'CSKSZ-SPRAS' 'KO'.
CALL TRANSACTION 'KS01'
USING GT_BDC
MODE P_MODE
MESSAGES INTO GT_MSG.
IF GT_MSG IS INITIAL. "성공시 GT_MSG에 값이 안 들어옴
GV_MESSAGE = '[' && P_KOSTL && '] 코스트센터 생성에 성공했습니다.'.
ELSE.
READ TABLE GT_MSG INTO GS_MSG WITH KEY MSGTYP = 'E'. "에러
IF SY-SUBRC = 0.
PERFORM MESSAGE_TEXT.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form COST_CHANGE
*&---------------------------------------------------------------------*
* 코스트센터 변경
*----------------------------------------------------------------------*
FORM COST_CHANGE .
*-- 코스트센터 마스터 체크
SELECT SINGLE *
FROM CSKS
WHERE KOKRS = P_KOKRS
AND KOSTL = P_KOSTL
AND DATBI = C_99991231. "효력 종료일
IF SY-SUBRC NE 0.
MESSAGE I000 WITH '존재하지 않는 코스트센터입니다.'.
GV_CHK = 'X'.
ENDIF.
CHECK GV_CHK IS INITIAL.
PERFORM POP_UP USING TEXT-005 "코스트센터명을 변경 하시겠습니까?
TEXT-006 "코스트센터명 변경 확인
CHANGING GV_ANSWER.
CHECK GV_ANSWER = 'J'.
CLEAR : GT_BDC, GT_MSG.
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0200',
' ' 'BDC_OKCODE' '/00',
' ' 'CSKSZ-KOKRS' P_KOKRS,
' ' 'CSKSZ-KOSTL' P_KOSTL.
PERFORM DYNPRO USING :
'X' 'SAPLKMA1' '0299',
' ' 'BDC_OKCODE' '=BU',
' ' 'BDC_SUBSCR' 'SAPLKMA1 0300SUBSCREEN_EINZEL',
' ' 'CSKSZ-KTEXT' P_KTEXT,
' ' 'CSKSZ-LTEXT' P_KTEXT.
CALL TRANSACTION 'KS02' USING GT_BDC MODE P_MODE MESSAGES INTO GT_MSG.
IF GT_MSG IS INITIAL. "성공시 GT_MSG에 값이 안 들어옴
GV_MESSAGE = '[' && P_KOSTL && '] 코스트센터 변경에 성공했습니다.'.
ELSE.
READ TABLE GT_MSG INTO GS_MSG WITH KEY MSGTYP = 'E'. "에러
IF SY-SUBRC = 0.
PERFORM MESSAGE_TEXT.
ELSE.
READ TABLE GT_MSG INTO GS_MSG WITH KEY MSGTYP = 'S'. "변경사항이 없는 경우
PERFORM MESSAGE_TEXT.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM F4_KOSTL
*&---------------------------------------------------------------------*
FORM F4_KOSTL USING : PF_KOSTL.
DATA : BEGIN OF LS_KOSTL,
KOSTL LIKE CSKS-KOSTL,
KTEXT LIKE CSKT-KTEXT,
END OF LS_KOSTL,
LT_KOSTL LIKE TABLE OF LS_KOSTL.
CLEAR : LT_DYNMAPP, LT_DYNTAB.
LT_DYNMAPP-FLDNAME = 'F0001'. "첫번째값
LT_DYNMAPP-DYFLDNAME = PF_KOSTL.
APPEND LT_DYNMAPP.
*- SELECT문
APPEND 'SPRAS = SY-LANGU' TO LT_DYNTAB.
APPEND 'AND KOKRS = P_KOKRS' TO LT_DYNTAB.
APPEND 'AND DATBI = C_99991231' TO LT_DYNTAB.
SELECT KOSTL KTEXT
INTO CORRESPONDING FIELDS OF TABLE LT_KOSTL
FROM CSKT
WHERE (LT_DYNTAB).
SORT LT_KOSTL BY KOSTL.
*-> CALL FUNCTION
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'KOSTL'
DYNPPROG = SY-CPROG
DYNPNR = SY-DYNNR
DYNPROFIELD = LT_DYNMAPP-DYFLDNAME
WINDOW_TITLE = '코스트센터'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = LT_KOSTL
DYNPFLD_MAPPING = LT_DYNMAPP
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
- MAIN
*----------------------------------------------------------------------*
* INITIALIZATION *
*----------------------------------------------------------------------*
INITIALIZATION.
PERFORM INIT_DATA.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_KOSTL.
PERFORM F4_KOSTL USING : 'P_KOSTL'.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
PERFORM MODIFY_SCREEN.
PERFORM LISTBOX.
*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
CHECK GV_CHK = ''.
PERFORM BDC_CALL.
*----------------------------------------------------------------------*
* END-OF-SELECTION *
*----------------------------------------------------------------------*
END-OF-SELECTION.
CHECK GV_CHK IS INITIAL.
WRITE : GV_MESSAGE.
'SAP > ABAP 기초' 카테고리의 다른 글
(ABAP 기초) 자주 사용 되는 타입, 클래스 모음 (ABAP/ALV) (0) | 2021.10.11 |
---|---|
(ABAP 기초) Standard Application Toolbar 리스트 (0) | 2021.10.10 |
(ABAP) SAP Lock object 정리 (0) | 2021.07.20 |
(ABAP) SAP Global Table (0) | 2021.07.07 |
(ABAP) Dynamic Table 구현 (0) | 2021.07.05 |