REPORT ZBDC_1607.
DATA : OK_CODE TYPE SYUCOMM. " 변수 ,EXEC , CANC
DATA: GT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: GT_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA : GV_MODE VALUE 'A'. " A모드가 과정을 전부 체크하면서 눈으로 확인을 다함.
DATA : BEGIN OF GS_BDC,
MATNR LIKE MARA-MATNR, " 자재번호
MTART LIKE MARA-MTART, " 자재유형
MBRSH LIKE MARA-MBRSH, " 산업 부문
MEINS LIKE MARA-MEINS, " 단위
NORMT LIKE MARA-NORMT, " 산업 표준 내역
MAKTX LIKE MAKT-MAKTX, " 자재내
END OF GS_BDC.
CALL SCREEN 100.
&---------------------------------------------------------------------
& Module STATUS_0100 OUTPUT
&---------------------------------------------------------------------*
text
----------------------------------------------------------------------
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'S100'.
SET TITLEBAR 'T100'.
ENDMODULE. " STATUS_0100 OUTPUT
&---------------------------------------------------------------------
& Module USER_COMMAND_0100 INPUT
&---------------------------------------------------------------------*
text
----------------------------------------------------------------------
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC' .
LEAVE TO SCREEN 0.
WHEN 'EXEC'. " 실행
PERFORM EXECUTE_BDC.
WHEN 'PICK'. " 더블클릭 F2
SET PARAMETER ID 'MAT' " 메모리 아이디를 MAT에 세팅한다.
FIELD GS_BDC-MATNR. " 필드 GS_BDC-MATNR 에
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
WHEN 'BAPI'.
DATA : GV_BAPI TYPE CHAR10.
gv_bapi 를 프로그램 안에서 안으로 전달한다.
BREAK-POINT.
GV_BAPI = 'GO BDC'.
EXPORT GV_BAPI TO MEMORY ID 'BAA'. " ABAP 메모리 vs SAP
ABAP 메모리는 SAP GUI 를 끄면 메모리가 사라짐.
SET PARAMETER ID 'MAT' FIELD '99999'.
SUBMIT ZBAPI_1607 " bapi 프로그램이름 / submit 을 써서 bapi 프로그램으로 넘어감.
VIA SELECTION-SCREEN
WITH P_MATNR = GS_BDC-MATNR " 자재 번호
WITH P_OLD = 'TEST TEST' " 하드코딩
WITH P_UOM = GS_BDC-MEINS " 기본단위
AND RETURN . " 원래 bdc 프로그램 화면으로 돌아올 수 있다는 뜻.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
&---------------------------------------------------------------------
& Form EXECUTE_BDC
&---------------------------------------------------------------------*
text
----------------------------------------------------------------------
--> p1 text
<-- p2 text
----------------------------------------------------------------------
FORM EXECUTE_BDC .
CLEAR GT_BDCDATA[]. " 동작을 담는거에 인터널 테이블 지워준다.
PERFORM BDC_FLOW USING 'X' 'SAPLMGMM' '0060'. " 화면 0060
PERFORM BDC_FLOW USING ' ' 'RMMG1-MBRSH' GS_BDC-MBRSH.
PERFORM BDC_FLOW USING ' ' 'RMMG1-MTART' GS_BDC-MTART.
PERFORM BDC_FLOW USING ' ' 'BDC_OKCODE' '/00'. " 엔터
PERFORM BDC_FLOW USING 'X' 'SAPLMGMM' '0070'. " 화면 0070 으로 넘어감 (엔터 쳤을대.)
PERFORM BDC_FLOW USING ' ' 'MSICHTAUSW-KZSEL(01)' 'X'.
PERFORM BDC_FLOW USING ' ' 'MSICHTAUSW-KZSEL(02)' 'X'.
PERFORM BDC_FLOW USING ' ' 'MSICHTAUSW-KZSEL(02)' 'X'.
PERFORM BDC_FLOW USING 'X' 'SAPLMGMM' '4004' .
PERFORM BDC_FLOW USING ' ' 'MAKT-MAKTX' GS_BDC-MAKTX.
PERFORM BDC_FLOW USING ' ' 'MARA-MEINS' GS_BDC-MEINS.
PERFORM BDC_FLOW USING ' ' 'MARA-SPART' '01'. " 산업군 하드코딩
PERFORM BDC_FLOW USING ' ' 'BDC_OKCODE' '=SP02'. " 두번째 탭으로 넘어가기
PERFORM BDC_FLOW USING 'X' 'SAPLMGMM' '4004'.
PERFORM BDC_FLOW USING ' ' 'MARA-NORMT' GS_BDC-NORMT. " 표준산업
PERFORM BDC_FLOW USING ' ' 'BDC_OKCODE' '=BU'. " 저장버튼.
CALL TRANSACTION 'MM01'
USING GT_BDCDATA
MODE 'A' " 모드를 A 로 하드코딩 되어있음.
MODE GV_MODE " A , N , E
MESSAGES INTO GT_MESSTAB.
IF SY-SUBRC EQ 0.
GS_BDC-MATNR = SY-MSGV1. " 1번에 번호가 따질것. " 메시지가 ..
ENDIF.
ENDFORM. " EXECUTE_BDC
&---------------------------------------------------------------------
& Form BDC_FLOW
&---------------------------------------------------------------------*
text
----------------------------------------------------------------------
-->DYNBEGIN text
-->FVAL1 text
-->FVAL2 text
----------------------------------------------------------------------
FORM BDC_FLOW USING DYNBEGIN FVAL1 FVAL2. " PROGRAM DYNPRO.
DATA : LV_TYPE TYPE CHAR1.
CLEAR GT_BDCDATA.
IF DYNBEGIN = 'X'.
GT_BDCDATA-DYNBEGIN = 'X'.
GT_BDCDATA-PROGRAM = FVAL1.
GT_BDCDATA-DYNPRO = FVAL2.
ELSE.
GT_BDCDATA-FNAM = FVAL1.
GT_BDCDATA-FVAL = FVAL2.
SHIFT GT_BDCDATA-FVAL LEFT DELETING LEADING SPACE.
ENDIF.
APPEND GT_BDCDATA.
ENDFORM. "BDC_FLOW