본문 바로가기

Abap

F02

*&---------------------------------------------------------------------*
*&  Include           YABAP18_TEMP_F02
*&---------------------------------------------------------------------*
*1.  SMW0 FILE DOWNLOAD                          - DOWN_SMW0_FILE
*2.  1000번 화면에 버튼 추가                     - SET_SCREEN_ICON
*3.  문서파일 실행                               - EXECUTE_FILE
*4.  F4 FILE PATH                                - F4_FILE_PATH
*5.  EXCEL UPLOAD                                - UPLOAD_EXCEL_FILE
*    EXCEL ITAB 을 GT_OUTTAB으로                 - MOVE_DATA
*6.  몇개월 전후의 날짜                          - ADD_MONTH_TO_DATE
*7.  생산오더로 시스템 상태를 읽음               - BAPI_BUS2002_GET_STATUS
*8.  코스트센터 그룹으로 코스트센터(KOSTL) 조회  - BAPI_COSTCENTERGROUP_GETDETAIL
*9.  코스트센터 그룹 목록 조회                   - BAPI_COSTCENTERGROUP_GETLIST
*10. 원그요소그룹으로 원가요소(KSTAR) 목록 조회  - BAPI_COSTELEMENTGRP_GETDETAIL
*11. 코스트엘리먼트그룹 목록 조회                - BAPI_COSTELEMENTGRP_GETLIST
*12. 오더그룹으로 오더(AUFNR) 목록 조회          - BAPI_INTERNALORDRGRP_GETDETAIL
*13. BAPI TRANSACTION                            - BAPI_TRANSACTION
*14. 날짜 년,월,일 + - 계산                      - CALC_DATE_IN_INTERVAL
*15. 자산번호 조회 AUFNR                         - CALL_AS03
*16. 자산 상세 내역 조회 AUFNR                   - CALL_AW01N
*17. WBS코드 조회 POSNR                          - CALL_CJ03
*18. CMOD 조회                                   - CALL_CMOD
*19. 생산오더 조회 AUFNR                         - CALL_CO03
*20. DMS문서 조회                                - CALL_CV03N
*21. 전표 조회 BELNR                             - CALL_FB03
*22. 고객조회 KUNNR                              - CALL_FD03
*23. 거래처 조회 LIFNR                           - CALL_FK03
*24. MAINTENANCE ORDER조회 AUFNR                 - CALL_IW33
*25. 코스트 엘리먼트 조회 KOKRS KSTAR            - CALL_KA03
*26. 코스트 엘리먼트 그룹 조회 KOKRS KSGRU       - CALL_KAH3
*27. 개별항목 조회 BELNR PERIO ERKRS KOKRS       - CALL_KE24
*28. 내부오더,투자오더 조회 EAUFN                - CALL_KO03
*29. 코스트 센터 조회 KOSTL KOKRS                - CALL_KS03
*30. 관리회계 CO 전표 조회 KOKRS BELNR           - CALL_KSB5
*31. 코스트센터그룹 조회 KOKRS KSGRU             - CALL_KSH3
*32. 자재문서 조회 MBLNR MJAHR                   - CALL_MB03
*33. 재고 소요량 조회 MATNR WERKS                - CALL_MD04
*34. 구매오더 조회 EBELN                         - CALL_ME23N
*35. 자재 조회 MATNR WERKS                       - CALL_MM03
*36. 장기계획 재고 소요량 조회 PLSCN MATNR WERKS - CALL_MS04
*37. 배치 조회 MATNR CHARG WERKS LGORT           - CALL_MSC3N
*38. INSPECTION LOT 조회 PRUEFLOS                - CALL_QA03
*39. 사용결정 조회                               - CALL_QA13
*40. CALL SMOD                                   - CALL_SMOD
*41. 사용자 정보 조회 SU01                       - CALL_SU01D
*41. 판매오더 조회 VBELN                         - CALL_VA03
*42. 빌링문서 조회 VBELN                         - CALL_VF03
*43. 납품문서 조회 VBELN                         - CALL_VL03N
*44. 고객 CUSTOMER 조회 KUNNR                    - CALL_XD03
*45. VENDOR 조회                                 - CALL_XK03
*46. 날짜를 체크하고 각 유저별 포맷으로 변환     - CHK_GLOBAL_DATE
*47. 오더 상태 조회 AUFNR                        - CHK_ORDER_STATUS
*48. CONV_EXIT_ALPHA_INPUT
*49. CONV_EXIT_ALPHA_OUTPUT
*50. CONV_EXIT_ATINN_INPUT
*51. CONV_EXIT_ATINN_INPUT
*52. CONV_EXIT_MATN1_INPUT
*53. CONV_EXIT_MATN1_OUTPUT
*54. CONV_EXIT_NUMCV_INPUT
*55. CONV_EXIT_NUMCV_OUTPUT
*56. FLTP TYPE 값을 CHAR TYPE DMFH QUSRUD        - CONV_FLTP_TO_CHAR
*57. 통화 변경 - LOCAL                           - CONV_TO_LOC_CURR
*58. 통화 변경                                   - CONV_TO_FOR_CURR
*59. 통화별로 표시된 금액을 SAP TABLE 입력 형식으로 변 - CURR_AMT_IDOC_TO_SAP
*60. SAP 금액을 통화별로 표시된 금액으로 변경    - CURR_AMT_SAP_TO_IDOC
*61. 통화의 FACTOR 를 반환                       - CURR_CONV_FACTOR
*62. 날짜 정합성 체크                            - DATE_CHECK_PLAUSIBILITY
*63. 테이블 정보                                 - DDIF_FIELDINFO_GET
*64. 화면 필드의 값을 읽음                       - DYNP_VALUES_READ
*65. 화면 필드 업데이트. 단일값                  - DYNP_VALUES_UPD
*66. 화면 필드 업데이트. 여러값                  - DYNP_VALUES_UPD_M
*67. 로컬PC에 파일이 존재하는지 체크             - FILE_EXIST
*68. DOMAIN VALUE                                - GET_DOMAIN_TAB
*69. DOMAIN TEXT                                 - GET_DOMAIN_TEXT
*70. 언어별 도메인 내역                          - GET_FIELD_DESC
*71. 파일명 읽는 팝업                            - GET_FILE_NAME
*72. 여러 파일 선택 가능한 팝업                  - GET_FILE_NAME_MULTI
*73. FILE NAME을 경로, 파일명, 확장자로 나눔     - GET_FILE_NAME_SPLIT
*74. FILE NAME을 경로, 파일명(확장자없는) 확장자로 나눔 - GET_FILE_NAME_SPLIT_2
*75. 해당일자의 말일                             - GET_LAST_DAY_OF_MONTH
*76. 오더 상태                                   - GET_ORDER_STATUS
*77. 검사로트번호로 사용결정코드를 구함          - GET_UD_CODE
*78. SAP USER ID로 이름을 읽어옴                 - GET_SAP_USER_NAME
*79. GUI_DOWNLOAD
*80. SMW0에 등록된 양식파일을 다운로드           - GUI_DOWNLOAD_SMW0
*81. 휴일인지 체크하고 이전, 다음일로 반환       - HOLIDAY_GET
*82. 백그라운드 JOB을 CLOSE(실행) 한다.          - JOB_CLOSE
*83. 백그라운드 JOB을 생성한다.                  - JOB_OPEN
*84. - K_HIERARCHY_TABLES_READ
*85. 코스트 센터에 대한 오브젝트 번호            - KOSTL_OBJECT_KEY_GET
*86. MESSAGE를 ITAB에 추가한다.                  - MESSAGE_APPEND_IT
*87. BAPI 수행후 MESSAGE를 한문장으로 만든다     - MSG_BUILD_BAPI
*88. BDC 수행 후 MESSAGE를 한문장으로 만든다.    - MESSAGE_BUILD_BDC
*89. SYSTEM 메세지를 한문장으로 만든다.          - MESSAGE_TEXT_BUILD
*90. BAPI 수행후 MESSAGE를 팝업으로 띄운다.      - MSG_POP_BAPI
*91. BDC 수행후 MESSAGE를 팝업으로 띄운다.       - MSG_POP_BDC
*92. FI 구조체 MESSAGE를 팝업으로 띄운다.        - MSG_POP_FI
*93. SYST의 MESSAGE 정보를 BAPI 메세지 정보로 변경 - MSG_SYST_TO_BAPI
*94. NUMBER RANGE 생성, SNRO                     - NUMBER_GET_NEXT
*95. INPUT 값이 숫자만으로 되어있는지 체크.      - NUMERIC_CHECK
*96. 팝업 확인창                                 - POPUP_CONF
*97. 팝업 확인창 , 버튼이름 지정                 - POPUP_CONF2
*98. 팝업 확인창 , 버튼이름과 아이콘 지정        - POPUP_CONF3
*99. 진행 상태 메시지 표시                       - PROGRESS_DISPLAY
*100. '-' 부호를 앞으로 보냄                     - PUT_SIGN_IN_FRONT
*101. 환율을 RETURN                              - READ_EXCHANGE_RATE
*102. 텍스트 조회                                - READ_TEXT
*103. 텍스트 저장                                - SAVE_TEXT
*104. 텍스트 삭제                                - DELETE_TEXT
*105. 반올림, 올림, 내림                         - ROUND
*106. INCLUDE 프로그램을 던지면 MAIN프로그램 리턴 - RS_GET_MAINPROGRAMS
*107. OBJECT (프로그램 OR FUNCTION) 조회         - RS_TOOL_ACCESS
*108. 원가요소 범주 조회 KOKRS KSTAR             - SEL_CSKB_KATYP
*109. 공급업체 정보 LIFNR                        - SEL_LFA1
*110. 자재에 대한 저장위치데이터 재고 구함       - SEL_MARD
*111. 사번으로 이름 조회                         - SEL_PA0001_SNAME
*112. WBS(작업분할구조) 요소 마스터 데이터에서 오브젝트 번호 조회 - SEL_PRPS_OBJNR
*113. 회사코드로 통화 조회                       - SEL_T001_WAERS
*114. 저장위치내역으로 저장위치 조회             - SEL_T001L
*115. 시스템 상태 4자리 코드로 시스템 상태 코드 조회 - SEL_TJ02T
*116. 관리회계영역으로 경영 단위 조회 KOKRS ERKRS - SEL_TKA01_ERKRS
*117. 통계주요 지표 조회 KOKRS STAGR MSEHI        - SEL_TKA03_MSEHI
*118. - SELECT_OPTIONS_RESTRICT
*119. DB LOG 기록                                 - SET_DB_LOG
*120. 테이블 필드정보로 CONVERSION 수행           - SMAN_IF_CONVERT_TO
*121. SMARTFORMS FUNCTION MODULE 이름을 구함      - SSF_FUNCTION_MODULE_NAME
*122. 문자열의 길이를 구함                        - STRING_LENGTH
*123. 문자 변경                                   - STRING_REPLACE
*124. 문자 변경 (날짜)                            - STRING_REPLACE_DATE
*125. - TR_OBJECT_JUMP_TO_TOOL
*126. ROLE 내역 AGR_NAME                          - TXT_AGR_NAME
*127. 특성 내역 ATNAM ATBEZ                       - TXT_ATNAM
*128. 오더 유형 내역 조회 AUART (PP)              - TXT_AUART_PP
*129. 오더 유형 내역 조회(SD) AUART BEZEI         - TXT_AUART_SD
*130. 오더 내역 AUFNR                             - TXT_AUFNR
*131. 오더 사유 내역 AUGRU BEZEI                  - TXT_AUGRU
*132. 평가클래스 내역 BKLAS BKBEZ                 - TXT_BKLAS
*133. 전표유형 내역 BLART                         - TXT_BLART
*134. 회사코드 내역                               - TXT_BUKRS
*135. 사업장 내역 BUPLA                           - TXT_BUPLA
*136. 이동유형 내역 BWART                         - TXT_BWART
*137. DMS 문서 텍스트                             - TXT_DOKNR
*138. 외부자재그룹 내역 EKTWG EWBEZ               - TXT_EXTWG
*139. 예산관리센터 내역 FIKRS FICTR BEZEICH       - TXT_FICTR
*140. FUNCTION 내역                               - TXT_FUNCNAME
*141. 이동사유 내역 BWART GRUND GRTXT             - TXT_GRUND
*142. 사업영역 내역 GSBER GTEXT                   - TXT_GSBER
*143. - TXT_HERKUNFT
*144. 유지보수 액티비티 유형명 ILART              - TXT_ILART
*145. 고객 그룹 내역 KDGRP                        - TXT_KDGRP
*146. 관리회계영역 내역 KOKRS BEZEI               - TXT_KOKRS
*147. 코스트센터 내역 KOKRS KOSTL LTEXT           - TXT_KOSTL
*148. 원가요소 내역 KTOPL KSTAR                   - TXT_KSTAR
*149. 고객 내역 KUNNR                             - TXT_KUNNR
*150. 공급업체 내역 LIFNR                         - TXT_LIFNR
*151. 유동성 항목 내역 LQPOS S_TEXT               - TXT_LQPOS
*152. 자재그룹 내역(포장자재)MAGRV BEZEI          - TXT_MAGRV
*153. 자재그룹 내역 MATKL WGBEZ                   - TXT_MATKL
*154. 자재내역 MATNR MAKTX                        - TXT_MATNR
*155. 자재유형 내역 MTART MTBEZ                   - TXT_MTART
*156. 평가그룹내역 ORDNR ORD4X ORDTX              - TXT_ORD4X
*157. 조직 단위 내역 ORGEH ENDDA ORGTX            - TXT_ORGEH
*158. 사원그룹 내역 PERSG                         - TXT_PERSG
*159. 사원 하위그룹 내역 PERSK                    - TXT_PERSK
*160. 손익센터 내역 KOKRS PRCTR                   - TXT_PRCTR
*161. 생산계층 내역 PRODH VTEXT                   - TXT_PRODH
*162. 프로그램 내역 PROGNAME                      - TXT_PROGNAME
*163. 프로세스 범주 내역 PTYP                     - TXT_PTYP
*164. 검사 카탈로그 코드 내역 KATALOGART CODEGRUPPE KURZTEXT - TXT_QCODE
*165. 검사 카탈로그 코드 그룹 내역 KATALOGART CODEGRUPPE KURZTEXT - TXT_QCODEGRP
*166. - TXT_RCOMP
*167. 계정 내역 KTOPL SAKNR TXT20 TXT50           - TXT_SAKNR
*168. 섹션 코드 내역 BUKRS SECCODE                - TXT_SECCODE
*169. 세트클래스 내역 SETCLS SETCLASS DESCRIPT    - TXT_SETCLASS
*170. 세트 내역 SETCLASS SUBCLASS SETNAME DESCRIPT - TXT_SETNAME
*171. - TXT_SFHAART
*172. 조직단위 : 판매제품군 내역 SPART            - TXT_SPART
*173. 통계주요지표 내역 KOKRS STAGR BEZEI         - TXT_STAGR
*174. TABLE 내역 TABNAME DDTEXT                   - TXT_TABNAME
*175. T-CODE 내역 TCODE                           - TXT_TCODE
*176. REQUEST/TASK 내역 TRKORR AS4TEXT            - TXT_TRKORR
*177. 지급 방법 보충 내역 UZAWE                   - TXT_UZAWE
*178. CO 버전 내역 VERSN                          - TXT_VERSN
*179. 판매조직명 VKORG                            - TXT_VKORG
*180. 유통경로 내역 VTWEG                         - TXT_VTWEG
*181. 플랜트 내역 WERKS                           - TXT_WERKS
*182. SUI 그룹 내역 WWDIV BEZEK                   - TXT_WWDIV
*183. 작업장/작업장 내역 AUFNR ARBPL ARBTX        - WORKSTATION_READ
*184. BDC 입력                                    - DYNPRO
*185. SMARTFORMS                                  - PRINT_SMARTFORMS
*186. OLE DATA DOWNLOAD                           - DOWN_OLE_DATA
*187. 로컬 파일 삭제                              - CLOSE_FILE
*188. SMW0 파일을 다운로드                        - CREATE_FILE
*189. GUI DOWNLOAD                                - DOWNLOAD
*190. ALV CELL의 수정/조회 모드 변경              - ALV_CELL_EDIT
*191. 텍스트에서 특수문자 및 심볼 제거            - DELETE_SYMBOM
*192. F4 VARIANT                                  - F4_VARIANT
*193. F4 HELP TABLE                               - F4_HELP_TEBLE
*194. CLASS 특성 정보                             - CLAF_CLASSIFICATION_OF_OBJECTS
*196. BATCH CHECK                                 - BATCH_CHECK
*197. ENTER event                                 - ENTER
*198. 자재별 재고                                 - GET_LABST
*199. 재고 자재+플랜트+저장위치+배치              - GET_LABST_2
*200. 재고 자재+플랜트+저장위치 MB5B 사용         - GET_LABST_3
*&---------------------------------------------------------------------*
*&      Form  DOWN_SMW0_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LV_OBJID  text
*      <--P_LS_RETURN  text
*----------------------------------------------------------------------*
FORM DOWN_SMW0_FILE  USING    P_OBJID TYPE WWWDATA-OBJID
                     CHANGING PS_RETURN TYPE BAPIRET2 .

  CONSTANTS: CO_E(1) VALUE 'E'.

  DATA : LS_WWWDATA_ITEM TYPE WWWDATATAB.  "DATA TABLE
  DATA : LT_MIME         LIKE W3MIME OCCURS 100 WITH HEADER LINE.

  DATA : LV_FILENAME  TYPE STRING,
         LV_PATH      TYPE STRING,
         LV_FULLPATH  TYPE STRING,
         LV_FILESIZE(10),
         LV_SIZE      TYPE I.

  DATA : LV_DEFAULT_EXTENSION TYPE STRING.
*-- Check File ID
  SELECT SINGLE *
    FROM WWWDATA
    INTO CORRESPONDING FIELDS OF LS_WWWDATA_ITEM
    WHERE OBJID = P_OBJID.

  IF SY-SUBRC NE 0.
    PS_RETURN-TYPE = CO_E.
    PS_RETURN-MESSAGE = TEXT-E01. "문서가 존재하지 않습니다.
    EXIT.
  ENDIF.

*-- Import Web Objects
  CALL FUNCTION 'WWWDATA_IMPORT'
    EXPORTING
      KEY               = LS_WWWDATA_ITEM
    TABLES
      MIME              = LT_MIME
    EXCEPTIONS
      WRONG_OBJECT_TYPE = 1
      IMPORT_ERROR      = 2
      OTHERS            = 3.


*-- Read a Parameter from Table WWWPARAMS
  CALL FUNCTION 'WWWPARAMS_READ'
    EXPORTING
      RELID = LS_WWWDATA_ITEM-RELID
      OBJID = LS_WWWDATA_ITEM-OBJID
      NAME  = 'filesize'
    IMPORTING
      VALUE = LV_FILESIZE.

  SELECT SINGLE VALUE
    INTO LV_DEFAULT_EXTENSION
    FROM WWWPARAMS
    WHERE RELID EQ LS_WWWDATA_ITEM-RELID
      AND OBJID EQ LS_WWWDATA_ITEM-OBJID
      AND NAME  EQ 'fileextension'.
  IF SY-SUBRC EQ 0.
    REPLACE ALL OCCURRENCES OF '.' IN LV_DEFAULT_EXTENSION WITH ''.
    CONDENSE LV_DEFAULT_EXTENSION NO-GAPS.
  ELSE.
    LV_DEFAULT_EXTENSION = 'XLSX'.
  ENDIF.

*-- Shows a File Save Dialog
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    EXPORTING
      DEFAULT_EXTENSION = LV_DEFAULT_EXTENSION
    CHANGING
      FILENAME          = LV_FILENAME
      PATH              = LV_PATH
      FULLPATH          = LV_FULLPATH.

  LV_SIZE = LV_FILESIZE.

*-- FILE NAME 체크.
  CHECK LV_FULLPATH IS NOT INITIAL.

*-- Download an Internal Table to the PC
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      FILENAME     = LV_FULLPATH
      FILETYPE     = 'BIN'
      BIN_FILESIZE = LV_SIZE
    TABLES
      DATA_TAB     = LT_MIME.

*-- Download 파일 Excel 실행
  CALL FUNCTION 'WS_EXECUTE'
    EXPORTING
      COMMANDLINE = LV_FULLPATH
      PROGRAM     = 'EXCEL.EXE'.


ENDFORM.                    " DOWN_SMW0_FILE

*&---------------------------------------------------------------------*
*&      Form  SET_SCR_ICON
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_SCREEN_ICON USING VALUE(PV_ICON)
                           VALUE(PV_TEXT)
                           VALUE(PV_POS).

  FIELD-SYMBOLS : <LFS_SRC>  TYPE ANY.

  DATA : LV_FLD    TYPE STRING.

** 버튼 순서기준의 화면 필드가 Assign
  CONCATENATE 'SSCRFIELDS-FUNCTXT_' PV_POS INTO LV_FLD.
  ASSIGN (LV_FLD) TO <LFS_SRC>.

** Icon + 텍스트
  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      NAME   = PV_ICON
      TEXT   = PV_TEXT
      INFO   = PV_TEXT
    IMPORTING
      RESULT = <LFS_SRC>.

ENDFORM.                    " SET_SCR_ICON

*&---------------------------------------------------------------------*
*&      Form  EXECUTE_FILE
*&---------------------------------------------------------------------*
*  문서파일등을 실행시킨다.
*----------------------------------------------------------------------*
FORM EXECUTE_FILE USING P_FULLPATH.  "전체경로

  DATA: L_FULLPATH TYPE STRING.

  L_FULLPATH = P_FULLPATH.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>EXECUTE
    EXPORTING
      DOCUMENT               = L_FULLPATH
*     APPLICATION            =
*     PARAMETER              =
*     DEFAULT_DIRECTORY      =
*     MAXIMIZED              =
*     MINIMIZED              =
*     SYNCHRONOUS            =
*     OPERATION              = 'OPEN'
    EXCEPTIONS
      CNTL_ERROR             = 1
      ERROR_NO_GUI           = 2
      BAD_PARAMETER          = 3
      FILE_NOT_FOUND         = 4
      PATH_NOT_FOUND         = 5
      FILE_EXTENSION_UNKNOWN = 6
      ERROR_EXECUTE_FAILED   = 7
      SYNCHRONOUS_FAILED     = 8
      NOT_SUPPORTED_BY_GUI   = 9
      OTHERS                 = 10.

  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.                    " EXECUTE_FILE
*&---------------------------------------------------------------------*
*&      Form  F4_FILE_PATH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_P_FILE  text
*----------------------------------------------------------------------*
FORM F4_FILE_PATH  CHANGING    P_FILE.

*-- Get File Location
  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    CHANGING
      FILE_NAME     = P_FILE
    EXCEPTIONS
      MASK_TOO_LONG = 1
      OTHERS        = 2.

  IF SY-SUBRC NE 0.
    "파일 이름을 가져 오는 중 오류가 발생했습니다.
    MESSAGE S000 WITH '파일 이름을 가져 오는 중 오류가 발생했습니다.'  DISPLAY LIKE CO_E.
    EXIT.
  ENDIF.

ENDFORM.                    " F4_FILE_PATH
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_EXCEL_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_EXCEL  text
*      -->P_P_FILE  text
*----------------------------------------------------------------------*
FORM UPLOAD_EXCEL_FILE  TABLES PT_INTERN   STRUCTURE ALSMEX_TABLINE
                        USING  P_FILE   LIKE  RLGRAP-FILENAME.
*-- Get Excel Data
  CLEAR : PT_INTERN, PT_INTERN[].

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = P_FILE
      I_BEGIN_COL             = 1
      I_BEGIN_ROW             = 2
      I_END_COL               = 256
      I_END_ROW               = 9999
    TABLES
      INTERN                  = PT_INTERN
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.

  IF SY-SUBRC NE 0.
    "엑셀 파일을 읽을 수 없습니다.
    MESSAGE S000 WITH '엑셀 파일을 읽을 수 없습니다.'  DISPLAY LIKE CO_E.
    STOP.
  ENDIF.

ENDFORM.                    " UPLOAD_EXCEL_FILE
*&---------------------------------------------------------------------*
*&      Form  MOVE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_EXCEL  text
*----------------------------------------------------------------------*
FORM MOVE_DATA   TABLES PT_INTERN STRUCTURE ALSMEX_TABLINE.

  DATA : LV_INDEX TYPE I.
  FIELD-SYMBOLS : <FS>.

*-- Sorting the internal table
  SORT PT_INTERN BY ROW COL.

  CLEAR : GT_OUTTAB, GT_OUTTAB[].
  LOOP AT PT_INTERN.
    MOVE PT_INTERN-COL TO LV_INDEX.

*-- Assigning the each record to an internal table row
    ASSIGN COMPONENT LV_INDEX OF STRUCTURE GT_OUTTAB TO <FS> .

*-- Asigning the field value to a field symbol
    MOVE PT_INTERN-VALUE TO <FS> .

    AT END OF ROW.
      APPEND GT_OUTTAB.
      CLEAR : GT_OUTTAB.
    ENDAT.

  ENDLOOP.

  IF GT_OUTTAB[] IS INITIAL.
    "Data is not found.
    MESSAGE S000 WITH 'Data is not found.' DISPLAY LIKE CO_E.
    STOP.
  ENDIF.

ENDFORM.                    " MOVE_DATA
*&---------------------------------------------------------------------*
*&      Form  ADD_MONTH_TO_DATE
*&---------------------------------------------------------------------*
*  몇개월 전/후 의 날짜를 리턴한다.
*&---------------------------------------------------------------------*
FORM ADD_MONTH_TO_DATE USING    P_MONTH       "'2', '-3'  등등
                                P_IN_DATE
                       CHANGING E_OU_DATE.

  DATA: L_OLDDATE TYPE SY-DATUM,
        L_NEWDATE TYPE SY-DATUM.

  L_OLDDATE = P_IN_DATE.

  CALL FUNCTION 'RE_ADD_MONTH_TO_DATE'
    EXPORTING
      MONTHS  = P_MONTH
      OLDDATE = L_OLDDATE
    IMPORTING
      NEWDATE = L_NEWDATE.

  E_OU_DATE = L_NEWDATE.

ENDFORM.                    " ADD_MONTH_TO_DATE
*&---------------------------------------------------------------------*
*&      Form  BAPI_BUS2002_GET_STATUS
*&---------------------------------------------------------------------*
*  생산오더로 시스템상태를 읽는다.
*&---------------------------------------------------------------------*
FORM BAPI_BUS2002_GET_STATUS TABLES   PT_STS STRUCTURE BAPI_SYSTEM_STATUS
                             USING    P_AUFNR       "TYPE AUFK-AUFNR
                                      P_WITHOUT_ACT "TYPE BAPINWGI-WO_NETWORK
                             CHANGING P_STTXT.      "TYPE IOHEADER-STTXT.

  CLEAR: PT_STS, PT_STS[],
         P_STTXT.

  CALL FUNCTION 'BAPI_BUS2002_GET_STATUS'
    EXPORTING
      NUMBER                         = P_AUFNR
      WITHOUT_ACTIVITIES             = P_WITHOUT_ACT      "' '
*   IMPORTING
*     RETURN                         =
    TABLES
      E_SYSTEM_STATUS                = PT_STS
*     E_USER_STATUS                  =
*     E_ACTIVITY_SYSTEM_STATUS       =
*     E_ACTIVITY_USER_STATUS         =
            .

  IF PT_STS[] IS INITIAL. EXIT. ENDIF.

  LOOP AT PT_STS.
    CONCATENATE P_STTXT PT_STS-SYSTEM_STATUS
           INTO P_STTXT SEPARATED BY ''.
  ENDLOOP.

ENDFORM.                    " BAPI_BUS2002_GET_STATUS

*&---------------------------------------------------------------------*
*&      Form  BAPI_COSTCENTERGROUP_GETDETAIL
*&---------------------------------------------------------------------*
*  코스트센타그룹으로 코스트센타(KOSTL) 목록 조회
*----------------------------------------------------------------------*
FORM BAPI_COSTCENTERGROUP_GETDETAIL TABLES PT_VAL STRUCTURE BAPI1112_VALUES
                                    USING  P_KOKRS
                                           P_KSGRU.

  DATA: LT_HIER TYPE BAPISET_HIER OCCURS 0,
        L_KSGRU LIKE BAPICO_GROUP-GROUPNAME.

  CLEAR: PT_VAL, PT_VAL[].

  L_KSGRU = P_KSGRU.

  CALL FUNCTION 'BAPI_COSTCENTERGROUP_GETDETAIL'
    EXPORTING
      CONTROLLINGAREA       = P_KOKRS
      GROUPNAME             = L_KSGRU
*     LANGUAGE              =
*   IMPORTING
*     RETURN                =
    TABLES
      HIERARCHYNODES        = LT_HIER
      HIERARCHYVALUES       = PT_VAL.

ENDFORM.                    " BAPI_COSTCENTERGROUP_GETDETAIL

*&---------------------------------------------------------------------*
*&      Form  BAPI_COSTCENTERGROUP_GETLIST
*&---------------------------------------------------------------------*
*  코스트센타그룹 목록 조회
*----------------------------------------------------------------------*
FORM BAPI_COSTCENTERGROUP_GETLIST TABLES ET_LIST STRUCTURE BAPI1112_LIST
                                  USING  P_KOKRS
                                         P_GROUP
                                         P_TOP_ONLY.

  CLEAR: ET_LIST, ET_LIST[].

  DATA: L_GROUPNAME TYPE BAPICO_GROUP-GROUPNAME.

  CONCATENATE P_GROUP '*' INTO L_GROUPNAME.

  CALL FUNCTION 'BAPI_COSTCENTERGROUP_GETLIST'
    EXPORTING
      CONTROLLINGAREAMASK       = P_KOKRS        "'*'
      GROUPNAMEMASK             = L_GROUPNAME    "'*'
      TOPNODESONLY              = P_TOP_ONLY     "' '
*     LANGUAGE                  =
*   IMPORTING
*     RETURN                    =
    TABLES
      GROUPLIST                 = ET_LIST   .

ENDFORM.                    " BAPI_COSTCENTERGROUP_GETLIST

*&---------------------------------------------------------------------*
*&      Form  BAPI_COSTELEMENTGRP_GETDETAIL
*&---------------------------------------------------------------------*
*  원가요소그룹으로 원가요소(KSTAR) 목록 조회
*----------------------------------------------------------------------*
FORM BAPI_COSTELEMENTGRP_GETDETAIL TABLES PT_VAL STRUCTURE BAPI1113_VALUES
                                   USING  P_KTOPL
                                          P_GRPNAME
                                          P_KOKRS.

  DATA: LT_NODE   TYPE TABLE OF BAPISET_HIER WITH HEADER LINE,
        L_GRPNAME LIKE BAPICO_GROUP-GROUPNAME.

  CLEAR: PT_VAL, PT_VAL[].

  L_GRPNAME = P_GRPNAME.

  CALL FUNCTION 'BAPI_COSTELEMENTGRP_GETDETAIL'
    EXPORTING
      CHARTOFACCOUNTS       = P_KTOPL
      GROUPNAME             = L_GRPNAME
      CONTROLLINGAREA       = P_KOKRS
*   IMPORTING
*     RETURN                =
    TABLES
      HIERARCHYNODES        = LT_NODE
      HIERARCHYVALUES       = PT_VAL.

ENDFORM.                    " BAPI_COSTELEMENTGRP_GETDETAIL

*&---------------------------------------------------------------------*
*&      Form  BAPI_COSTELEMENTGRP_GETLIST
*&---------------------------------------------------------------------*
*  코스트엘리먼트그룹 목록 조회
*----------------------------------------------------------------------*
FORM BAPI_COSTELEMENTGRP_GETLIST TABLES ET_LIST STRUCTURE BAPI1113_LIST
                                 USING  P_KTOPL
                                        P_GROUP
                                        P_TOP_ONLY.

  CLEAR: ET_LIST, ET_LIST[].

  DATA: L_GROUPNAME TYPE BAPICO_GROUP-GROUPNAME.

  CONCATENATE P_GROUP '*' INTO L_GROUPNAME.

  CALL FUNCTION 'BAPI_COSTELEMENTGRP_GETLIST'
    EXPORTING
      CHARTOFACCOUNTSMASK       = P_KTOPL
      GROUPNAMEMASK             = L_GROUPNAME   "'*'
      TOPNODESONLY              = P_TOP_ONLY    "' '
*     LANGUAGE                  =
*   IMPORTING
*     RETURN                    =
    TABLES
      GROUPLIST                 = ET_LIST            .

ENDFORM.                    " BAPI_COSTELEMENTGRP_GETLIST

*&---------------------------------------------------------------------*
*&      Form  BAPI_INTERNALORDRGRP_GETDETAIL
*&---------------------------------------------------------------------*
*  오더그룹으로 오더(AUFNR) 목록 조회
*----------------------------------------------------------------------*
FORM BAPI_INTERNALORDRGRP_GETDETAIL TABLES PT_VAL STRUCTURE BAPI1117_VALUES
                                    USING  P_GRPNAME.

  DATA: LT_NODE  TYPE TABLE OF BAPISET_HIER WITH HEADER LINE,
        L_GRP_NM LIKE BAPICO_GROUP-GROUPNAME.

  CLEAR: PT_VAL, PT_VAL[].

  L_GRP_NM = P_GRPNAME.

  CALL FUNCTION 'BAPI_INTERNALORDRGRP_GETDETAIL'
    EXPORTING
      GROUPNAME             = L_GRP_NM
*   IMPORTING
*     RETURN                =
    TABLES
      HIERARCHYNODES        = LT_NODE
      HIERARCHYVALUES       = PT_VAL.

ENDFORM.                    " BAPI_INTERNALORDRGRP_GETDETAIL

*&---------------------------------------------------------------------*
*&      Form  BAPI_TRANSACTION
*&---------------------------------------------------------------------*
*  BAPI_TRANSACTION -> COMMIT / ROLLBACK
*----------------------------------------------------------------------*
FORM BAPI_TRANSACTION USING P_GB.

  CASE P_GB.

    WHEN 'R'.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    WHEN 'C'.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.

  ENDCASE.

ENDFORM.                    " BAPI_TRANSACTION
*&---------------------------------------------------------------------*
*&      Form  CALC_DATE_IN_INTERVAL
*&---------------------------------------------------------------------*
*  날짜 계산
*----------------------------------------------------------------------*
FORM CALC_DATE_IN_INTERVAL USING    P_IN_DATE
                                    P_DAY
                                    P_MONTH
                                    P_YEAR
                                    P_SIGN
                           CHANGING P_OU_DATE.

  CLEAR P_OU_DATE.

  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      DATE      = P_IN_DATE
      DAYS      = P_DAY
      MONTHS    = P_MONTH
      SIGNUM    = P_SIGN           "'+'
      YEARS     = P_YEAR
    IMPORTING
      CALC_DATE = P_OU_DATE.

ENDFORM.                    " CALC_DATE_IN_INTERVAL

*&---------------------------------------------------------------------*
*&      Form  CALL_AS03
*&---------------------------------------------------------------------*
*  자산번호 조회
*----------------------------------------------------------------------*
FORM CALL_AS03 USING P_ANLN1 LIKE ANLA-ANLN1  "자산번호
                     P_ANLN2 LIKE ANLA-ANLN2  "하위번호
                     P_BUKRS LIKE ANLA-BUKRS. "회사코드

  IF P_ANLN1 IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'AN1' FIELD P_ANLN1.
  SET PARAMETER ID 'AN2' FIELD P_ANLN2.
  SET PARAMETER ID 'BUK' FIELD P_BUKRS.

  CALL TRANSACTION 'AS03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_AS03

*&---------------------------------------------------------------------*
*&      Form  CALL_AW01N
*&---------------------------------------------------------------------*
*  자산상세 자산번호 클릭시 AW01N 호출
*----------------------------------------------------------------------*
FORM CALL_AW01N USING P_BUKRS
                      P_GJAHR
                      P_ANLN1
                      P_ANLN2.

  SET PARAMETER ID 'BUK' FIELD P_BUKRS.
  SET PARAMETER ID 'AN1' FIELD P_ANLN1.
  SET PARAMETER ID 'AN2' FIELD P_ANLN1.
  SET PARAMETER ID 'GJR' FIELD P_GJAHR.
  SET PARAMETER ID 'AFB' FIELD '01'.      "상각영역

  CALL TRANSACTION 'AW01N' AND SKIP FIRST SCREEN.

ENDFORM.                    " CALL_AW01N

*&---------------------------------------------------------------------*
*&      Form  CALL_CJ03
*&---------------------------------------------------------------------*
*  Project 조회
*----------------------------------------------------------------------*
FORM CALL_CJ03 USING P_POSNR.  "WBS코드

  SET PARAMETER ID 'PSP' FIELD ''.
  SET PARAMETER ID 'PRO' FIELD P_POSNR.

  CALL TRANSACTION 'CJ03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_CJ03

*&---------------------------------------------------------------------*
*&      Form  CALL_CMOD
*&---------------------------------------------------------------------*
*  CALL TRANSACTION 'CMOD'
*&---------------------------------------------------------------------*
FORM CALL_CMOD USING P_MON.

  IF P_MON IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'MON' FIELD P_MON.

  CALL TRANSACTION 'CMOD' AND SKIP FIRST SCREEN.

ENDFORM.                    " CALL_CMOD

*&---------------------------------------------------------------------*
*&      Form  CALL_CO03
*&---------------------------------------------------------------------*
*  생산 오더 조회
*----------------------------------------------------------------------*
FORM CALL_CO03 USING P_AUFNR.  "생산 오더

  IF P_AUFNR IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'ANR' FIELD P_AUFNR.

  CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_CO03

*&---------------------------------------------------------------------*
*&      Form  CALL_CV03N
*&---------------------------------------------------------------------*
*  DMS 문서 조회
*&---------------------------------------------------------------------*
FORM CALL_CV03N USING P_DOKAR LIKE DRAW-DOKAR  "Document Type
                      P_DOKNR LIKE DRAW-DOKNR  "Document number
                      P_DOKVR LIKE DRAW-DOKVR  "Document Version
                      P_DOKTL LIKE DRAW-DOKTL. "Document Part

  IF P_DOKAR IS INITIAL OR
     P_DOKNR IS INITIAL.
    EXIT.
  ENDIF.

  IF P_DOKVR IS INITIAL.
    P_DOKVR = '00'.
  ENDIF.

  IF P_DOKTL IS INITIAL.
    P_DOKTL = '000'.
  ENDIF.

  SET PARAMETER ID 'CV1' FIELD P_DOKNR.
  SET PARAMETER ID 'CV2' FIELD P_DOKAR.
  SET PARAMETER ID 'CV3' FIELD P_DOKVR.
  SET PARAMETER ID 'CV4' FIELD P_DOKTL.

  CALL TRANSACTION 'CV03N' AND SKIP FIRST SCREEN.

ENDFORM.                    " CALL_CV03N

*&---------------------------------------------------------------------*
*&      Form  CALL_FB03
*&---------------------------------------------------------------------*
*  전표 조회
*----------------------------------------------------------------------*
FORM CALL_FB03 USING P_BELNR
                     P_BUKRS
                     P_GJAHR.

  IF P_BELNR IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID: 'BLN' FIELD P_BELNR,
                    'BUK' FIELD P_BUKRS,
                    'GJR' FIELD P_GJAHR.

  CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_FB03

*&---------------------------------------------------------------------*
*&      Form  CALL_FD03
*&---------------------------------------------------------------------*
*  고객조회
*----------------------------------------------------------------------*
FORM CALL_FD03 USING P_BUKRS LIKE BKPF-BUKRS
                     P_KUNNR LIKE KNA1-KUNNR.

  SET PARAMETER ID 'KUN' FIELD P_KUNNR.
  SET PARAMETER ID 'BUK' FIELD P_BUKRS.

  CALL TRANSACTION 'FD03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_FD03

*&---------------------------------------------------------------------*
*&      Form  CALL_FK03
*&---------------------------------------------------------------------*
*  거래처 조회
*----------------------------------------------------------------------*
FORM CALL_FK03 USING P_BUKRS LIKE BKPF-BUKRS
                     P_LIFNR LIKE LFA1-LIFNR.

  DATA: L_AUSWL(50).  "구매처조회초기화면의 Option선택

* 구매처조회Option지정 ==> 모든 필드 선택 (원천세제외)
* 일반정보: 110-주소, 120-제어, 130-지급거래, 380-담당자
* 회사코드: 210-회계정보, 215-지급거래, 220-서신, 610-원천세
* L_AUSWL = '/110/120/130/380/210/215/220'.
  L_AUSWL = '/110/120/380/210/220'.

* 구매처조회
  SET PARAMETER ID 'BUK' FIELD P_BUKRS.
  SET PARAMETER ID 'LIF' FIELD P_LIFNR.
  SET PARAMETER ID 'KDY' FIELD L_AUSWL.

  CALL TRANSACTION 'FK03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_FK03

*&---------------------------------------------------------------------*
*&      Form  CALL_IW33
*&---------------------------------------------------------------------*
*  Maintenance Order 조회
*----------------------------------------------------------------------*
FORM CALL_IW33 USING P_AUFNR.

  IF P_AUFNR IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'ANR' FIELD P_AUFNR.

  CALL TRANSACTION 'IW33' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_IW33

*&---------------------------------------------------------------------*
*&      Form  CALL_KA03
*&---------------------------------------------------------------------*
*  코스트엘리먼트 조회
*----------------------------------------------------------------------*
FORM CALL_KA03 USING P_KSTAR TYPE CSKA-KSTAR    "Cost Element
                     P_KOKRS LIKE TKA01-KOKRS.  "관리회계 영역

  IF P_KSTAR IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'CAC' FIELD P_KOKRS.
  SET PARAMETER ID 'KAT' FIELD P_KSTAR.

  CALL TRANSACTION 'KA03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_KA03

*&---------------------------------------------------------------------*
*&      Form  CALL_KAH3
*&---------------------------------------------------------------------*
*  코스트엘리먼트그룹 조회
*----------------------------------------------------------------------*
FORM CALL_KAH3 USING P_KAGRU TYPE KAGRU
                     P_KOKRS LIKE TKA01-KOKRS.  "관리회계 영역

  IF P_KAGRU IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'CAC' FIELD P_KOKRS.
  SET PARAMETER ID 'HNA' FIELD P_KAGRU.

  CALL TRANSACTION 'KAH3' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_KAH3

*&---------------------------------------------------------------------*
*&      Form  CALL_KE24
*&---------------------------------------------------------------------*
*  개별 항목 조회 - 실제 데이터
*----------------------------------------------------------------------*
FORM CALL_KE24 USING P_BELNR LIKE CEST1-BELNR  "수익성분석의 개별항목 전표번호
                     P_PERIO LIKE CEST1-PERIO  "기간/연도
                     P_ERKRS LIKE TKEB-ERKRS   "경영 단위
                     P_KOKRS LIKE CEST1-KOKRS  "관리회계 영역
                     P_VRGAR LIKE TVGA-VRGAR.  "레코드 유형

  SUBMIT RKEB0601 WITH BELNR  = P_BELNR
                  WITH PERIO  = P_PERIO
                  WITH PERKRS = P_ERKRS
                  WITH PKOKRS = P_KOKRS
                  WITH PPLIKZ = '0'        "계획(1)/실제(0) 지시자
                  WITH VRGAR  = P_VRGAR AND RETURN.

*  SET PARAMETER ID 'ERB' FIELD P_ERKRS.   "경영단위
*  SET PARAMETER ID 'VGA' FIELD P_VRGAR.   "경영단위
*
*  CALL TRANSACTION 'KE24' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_KE24

*&---------------------------------------------------------------------*
*&      Form  CALL_KO03
*&---------------------------------------------------------------------*
*  내부오더 조회
*----------------------------------------------------------------------*
FORM CALL_KO03 USING P_EAUFN LIKE ANLA-EAUFN.  "투자오더

  SET PARAMETER ID 'ANR' FIELD P_EAUFN.

  CALL TRANSACTION 'KO03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_KO03

*&---------------------------------------------------------------------*
*&      Form  CALL_KS03
*&---------------------------------------------------------------------*
*  코스트센터 조회
*----------------------------------------------------------------------*
FORM CALL_KS03 USING P_KOSTL LIKE CSKS-KOSTL
                     P_KOKRS LIKE TKA01-KOKRS.  "관리회계 영역

  IF P_KOSTL IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'CAC' FIELD P_KOKRS.
  SET PARAMETER ID 'KOS' FIELD P_KOSTL.

  CALL TRANSACTION 'KS03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_KS03

*&---------------------------------------------------------------------*
*&      Form  CALL_KSB5
*&---------------------------------------------------------------------*
*  관리회계 CO전표: 실제 조회
*----------------------------------------------------------------------*
FORM CALL_KSB5 USING P_KOKRS LIKE TKA01-KOKRS  "관리회계 영역
                     P_BELNR LIKE COBK-BELNR.  "전표 번호

  IF P_BELNR IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'CAC' FIELD P_KOKRS.
  SET PARAMETER ID 'BLN' FIELD P_BELNR.

  CALL TRANSACTION 'KSB5' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_KSB5

*&---------------------------------------------------------------------*
*&      Form  CALL_KSH3
*&---------------------------------------------------------------------*
*  코스트센터그룹 조회
*----------------------------------------------------------------------*
FORM CALL_KSH3 USING P_KSGRU TYPE KSGRU
                     P_KOKRS LIKE TKA01-KOKRS.  "관리회계 영역

  IF P_KSGRU IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'CAC' FIELD P_KOKRS.
  SET PARAMETER ID 'HNA' FIELD P_KSGRU.

  CALL TRANSACTION 'KSH3' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_KSH3

*&---------------------------------------------------------------------*
*&      Form  CALL_MB03
*&---------------------------------------------------------------------*
*  자재문서 조회
*----------------------------------------------------------------------*
FORM CALL_MB03 USING P_MBLNR
                     P_MJAHR.

  IF P_MBLNR IS INITIAL. EXIT. ENDIF.

  CALL FUNCTION 'MIGO_DIALOG'
    EXPORTING
      I_ACTION            = 'A04'
      I_REFDOC            = 'R02'
      I_NOTREE            = 'X'
      I_SKIP_FIRST_SCREEN = 'X'
      I_DEADEND           = 'X'
      I_OKCODE            = 'OK_GO'
      I_MBLNR             = P_MBLNR
      I_MJAHR             = P_MJAHR
*     I_ZEILE             = GT_M-ZEILE
    EXCEPTIONS
      ILLEGAL_COMBINATION = 1
      OTHERS              = 2.

ENDFORM.                                                    " CALL_MB03

*&---------------------------------------------------------------------*
*&      Form  CALL_MD04
*&---------------------------------------------------------------------*
*  재고 소요량 조회
*----------------------------------------------------------------------*
FORM CALL_MD04 USING P_MATNR
                     P_WERKS.

  IF P_MATNR IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'MAT' FIELD P_MATNR.
  SET PARAMETER ID 'WRK' FIELD P_WERKS.

  CALL TRANSACTION 'MD04' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_MD04

*&---------------------------------------------------------------------*
*&      Form  CALL_ME23N
*&---------------------------------------------------------------------*
*  구매오더 조회
*----------------------------------------------------------------------*
FORM CALL_ME23N USING P_EBELN.

  IF P_EBELN IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'BES' FIELD P_EBELN.

  CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.

ENDFORM.                                          " CALL_ME23N

*&---------------------------------------------------------------------*
*&      Form  CALL_MM03
*&---------------------------------------------------------------------*
*  자재 & 조회
*----------------------------------------------------------------------*
FORM CALL_MM03 USING P_MATNR   "자재
                     P_WERKS.  "플랜트

  IF P_MATNR IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'MXX' FIELD 'K'.           "기본데이타
  SET PARAMETER ID 'MAT' FIELD P_MATNR.

  IF P_WERKS IS NOT INITIAL.
    SET PARAMETER ID 'WRK' FIELD P_WERKS.
  ENDIF.

  CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_MM03

*&---------------------------------------------------------------------*
*&      Form  CALL_MS04
*&---------------------------------------------------------------------*
*  장기계획 재고 소요량 조회
*----------------------------------------------------------------------*
FORM CALL_MS04 USING P_PLSCN
                     P_MATNR
                     P_WERKS.

  IF P_MATNR IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'PLS' FIELD P_PLSCN.
  SET PARAMETER ID 'MAT' FIELD P_MATNR.
  SET PARAMETER ID 'WRK' FIELD P_WERKS.

  CALL TRANSACTION 'MS04' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_MS04

*&---------------------------------------------------------------------*
*&      Form  CALL_MSC3N
*&---------------------------------------------------------------------*
*  배치 조회
*----------------------------------------------------------------------*
FORM CALL_MSC3N USING P_MATNR
                      P_CHARG
                      P_WERKS
                      P_LGORT.

  IF P_CHARG IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'MAT' FIELD P_MATNR.
  SET PARAMETER ID 'CHA' FIELD P_CHARG.
  SET PARAMETER ID 'WRK' FIELD P_WERKS.
  SET PARAMETER ID 'LAG' FIELD P_LGORT.

  CALL TRANSACTION 'MSC3N' AND SKIP FIRST SCREEN.

ENDFORM.                                         " CALL_MSC3N

*&---------------------------------------------------------------------*
*&      Form  CALL_QA03
*&---------------------------------------------------------------------*
*  Inspection Lot 조회
*----------------------------------------------------------------------*
FORM CALL_QA03 USING P_PRUEFLOS TYPE QALS-PRUEFLOS.

  IF P_PRUEFLOS IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'QLS' FIELD P_PRUEFLOS.

  CALL TRANSACTION 'QA03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_QA03

*&---------------------------------------------------------------------*
*&      Form  CALL_QA13
*&---------------------------------------------------------------------*
*  사용결정 조회
*----------------------------------------------------------------------*
FORM CALL_QA13 USING P_PRUEFLOS TYPE QALS-PRUEFLOS.

  IF P_PRUEFLOS IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'QLS' FIELD P_PRUEFLOS.

  CALL TRANSACTION 'QA13' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_QA13

*&---------------------------------------------------------------------*
*&      Form  CALL_SMOD
*&---------------------------------------------------------------------*
*  CALL TRANSACTION 'SMOD'
*&---------------------------------------------------------------------*
FORM CALL_SMOD USING P_MON.

  IF P_MON IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'MON' FIELD P_MON.

  CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.

ENDFORM.                    " CALL_SMOD

*&---------------------------------------------------------------------*
*&      Form  CALL_SU01D
*&---------------------------------------------------------------------*
FORM CALL_SU01D USING P_UNAME.

*  DATA: L_BDC_MODE VALUE 'N'.
*
*  CLEAR: GT_BDCD, GT_BDCD[],
*         GT_BDCM, GT_BDCM[].
*
*  PERFORM BDC_DYNPRO USING:
*    'X'  'SAPLSUU5'     '0050',
*    ' '  'BDC_OKCODE'   '=SHOW',
*    ' '  'USR02-BNAME'  P_UNAME,
*    'X'  'SAPLSUU5'     '0100',
*    ' '  'BDC_OKCODE'   '/00'.
*
**SAPLSUU5 0050  X
**                                                 BDC_OKCODE  /ECANC
*
*  CALL TRANSACTION 'SU01D' USING GT_BDCD
*                           MODE  L_BDC_MODE.
**                          MESSAGES INTO LT_BDCM.
*
*  SET PARAMETER ID 'XUS' FIELD P_UNAME.
*
*  CALL TRANSACTION 'SU01D' AND SKIP FIRST SCREEN.

  CALL FUNCTION 'BAPI_USER_DISPLAY'
    EXPORTING
      USERNAME       = P_UNAME
*   IMPORTING
*     RETURN         =
            .


ENDFORM.                                       " CALL_SU01D

*&---------------------------------------------------------------------*
*&      Form  CALL_VA03
*&---------------------------------------------------------------------*
*  판매오더 조회
*----------------------------------------------------------------------*
FORM CALL_VA03 USING P_VBELN.

  IF P_VBELN IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'AUN' FIELD P_VBELN.

  CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_VA03

*&---------------------------------------------------------------------*
*&      Form  CALL_VF03
*&---------------------------------------------------------------------*
*  빌링문서 조회
*----------------------------------------------------------------------*
FORM CALL_VF03 USING P_VBELN TYPE VBRK-VBELN.

  IF P_VBELN IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'VF' FIELD P_VBELN.

  CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_VF03

*&---------------------------------------------------------------------*
*&      Form  CALL_VL03N
*&---------------------------------------------------------------------*
*  납품문서 조회
*----------------------------------------------------------------------*
FORM CALL_VL03N USING P_VBELN TYPE LIKP-VBELN.

  IF P_VBELN IS INITIAL. EXIT. ENDIF.

  SET PARAMETER ID 'VL' FIELD P_VBELN.

  CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.

ENDFORM.                                              " CALL_VL03N

*&---------------------------------------------------------------------*
*&      Form  CALL_XD03
*&---------------------------------------------------------------------*
*  Customer 조회
*----------------------------------------------------------------------*
FORM CALL_XD03 USING P_KUNNR.

  DATA: L_DDY(40).

  IF P_KUNNR IS INITIAL. EXIT. ENDIF.

  L_DDY = '/110/120/130/380'.     "화면필드의 뒷자리 숫자

  SET PARAMETER ID 'KUN' FIELD P_KUNNR.
  SET PARAMETER ID 'DDY' FIELD L_DDY.       "KRED-AUSWL.
* SET PARAMETER ID 'KDY' FIELD L_KDY.       "요건 공급업체일듯  XK03

  CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_XD03

*&---------------------------------------------------------------------*
*&      Form  CALL_XK03
*&---------------------------------------------------------------------*
*  Vendor 조회
*----------------------------------------------------------------------*
FORM CALL_XK03 USING P_LIFNR.

  DATA: L_KDY(40).

  IF P_LIFNR IS INITIAL. EXIT. ENDIF.

  L_KDY = '/110/120/130/380'.     "화면필드의 뒷자리 숫자

  SET PARAMETER ID 'LIF' FIELD P_LIFNR.
  SET PARAMETER ID 'KDY' FIELD L_KDY.         "KRED-AUSWL.
*  SET PARAMETER ID 'DDY' FIELD KRED-AUSWL.   "요건 고객일듯  XD03

  CALL TRANSACTION 'XK03' AND SKIP FIRST SCREEN.

ENDFORM.                                                    " CALL_XK03

*&---------------------------------------------------------------------*
*&      Form  CHK_GLOBAL_DATE
*&---------------------------------------------------------------------*
*  날짜를 체크하고, 각 유저별 포맷양식으로 변환
*----------------------------------------------------------------------*
FORM CHK_GLOBAL_DATE USING    I_DATE_STR     "입력 날짜
                     CHANGING E_DATE
                              E_ERROR.

  CLEAR: E_DATE, E_ERROR.

* 유저별 날짜 포맷 읽기
  DATA: L_DATFM TYPE USR01-DATFM VALUE '4'.

  CALL METHOD CL_ABAP_DATFM=>GET_DATFM
    RECEIVING
      DATFM = L_DATFM.

* EXT_TO_INT
  DATA: LO_NO_DATE   TYPE REF TO CX_ABAP_DATFM_NO_DATE,
        LO_INVALID   TYPE REF TO CX_ABAP_DATFM_INVALID_DATE,
        LO_FORMAT    TYPE REF TO CX_ABAP_DATFM_FORMAT_UNKNOWN,
        LO_AMBIGUOUS TYPE REF TO CX_ABAP_DATFM_AMBIGUOUS,
        L_ERR_TEXT   TYPE STRING,
        L_DATINT     TYPE D,
        L_DATE_NUM(8) TYPE N,
        L_DATE_CHR(8).

  L_DATE_CHR = L_DATE_NUM = I_DATE_STR.

  TRY.
      CALL METHOD CL_ABAP_DATFM=>CONV_DATE_EXT_TO_INT
        EXPORTING
          IM_DATEXT    = L_DATE_CHR   "I_DATE_STR
          IM_DATFMDES  = L_DATFM
        IMPORTING
          EX_DATINT    = L_DATINT
*         EX_DATFMUSED =
        .
    CATCH CX_ABAP_DATFM_NO_DATE        INTO LO_NO_DATE.
      L_ERR_TEXT = LO_NO_DATE->GET_TEXT( ).
    CATCH CX_ABAP_DATFM_INVALID_DATE   INTO LO_INVALID.
      L_ERR_TEXT = LO_INVALID->GET_TEXT( ).
    CATCH CX_ABAP_DATFM_FORMAT_UNKNOWN INTO LO_FORMAT.
      L_ERR_TEXT = LO_FORMAT->GET_TEXT( ).
    CATCH CX_ABAP_DATFM_AMBIGUOUS      INTO LO_AMBIGUOUS.
      L_ERR_TEXT = LO_AMBIGUOUS->GET_TEXT( ).
  ENDTRY.

  IF L_ERR_TEXT IS NOT INITIAL.
    MESSAGE L_ERR_TEXT TYPE 'S' DISPLAY LIKE 'E'.
    E_ERROR = 'X'.
    E_DATE  = L_DATE_NUM = I_DATE_STR.
    EXIT.
  ENDIF.

  E_DATE = L_DATINT.
  EXIT.

** INT_TO_EXT
*  DATA: LO_EXC_REF TYPE REF TO CX_ABAP_DATFM_FORMAT_UNKNOWN,
*        L_RSL_DATE(10).
*
*  TRY.
*      CALL METHOD CL_ABAP_DATFM=>CONV_DATE_INT_TO_EXT
*        EXPORTING
*          IM_DATINT   = L_DATINT
*          IM_DATFMDES = L_DATFM
*        IMPORTING
*          EX_DATEXT   = L_RSL_DATE.
**       EX_DATFMUSED =          .
*    CATCH CX_ABAP_DATFM_FORMAT_UNKNOWN INTO LO_EXC_REF.
*      L_ERR_TEXT = LO_EXC_REF->GET_TEXT( ).
*
*  ENDTRY.
*
*  IF L_ERR_TEXT IS NOT INITIAL.
*    MESSAGE L_ERR_TEXT TYPE 'S' DISPLAY LIKE 'E'.
*    E_ERROR = 'X'.
*    E_DATE  = L_DATINT.
*    EXIT.
*  ENDIF.
*
** 결과
*  E_DATE = L_RSL_DATE.

ENDFORM.                    " CHK_GLOBAL_DATE

*&---------------------------------------------------------------------*
*&      Form  CHK_ORDER_STATUS
*&---------------------------------------------------------------------*
FORM CHK_ORDER_STATUS USING    P_AUFNR P_TXT04
                      CHANGING P_EXIST.

  DATA: L_OBJNR LIKE CAUFV-OBJNR,
        L_ISTAT LIKE TJ02T-ISTAT.

  CLEAR P_EXIST.

  SELECT SINGLE OBJNR
    INTO L_OBJNR
    FROM CAUFV
   WHERE AUFNR = P_AUFNR.

  SELECT SINGLE ISTAT
    INTO L_ISTAT
    FROM TJ02T
   WHERE TXT04 = P_TXT04.

  SELECT SINGLE COUNT(*)
    FROM JEST
   WHERE OBJNR = L_OBJNR
     AND STAT  = L_ISTAT
     AND INACT = ''.

  IF SY-SUBRC = 0.
    P_EXIST = 'X'.
  ENDIF.

ENDFORM.                    " CHK_ORDER_STATUS

*&---------------------------------------------------------------------*
*&      Form  COIS_HDR_STATUS_SHOW
*&---------------------------------------------------------------------*
FORM COIS_HDR_STATUS_SHOW USING P_AUFNR.

  TABLES: CAUFV.

  DATA: L_WERKS TYPE WERKS,
        L_FLAG  TYPE FLAG,
        L_MAKTX LIKE MAKT-MAKTX.

  IF P_AUFNR IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE * FROM CAUFV WHERE AUFNR = P_AUFNR.

  L_WERKS = CAUFV-WERKS.

  PERFORM TXT_MATNR(ZCO_FORM) USING    CAUFV-PLNBEZ
                              CHANGING L_MAKTX.

  CALL FUNCTION 'COIS_HDR_STATUS_SHOW'
    EXPORTING
      I_OBJECT_NUMBER          = CAUFV-OBJNR
      I_AUFNR                  = CAUFV-AUFNR
      I_AUART                  = CAUFV-AUART
      I_WERKS                  = L_WERKS         "CAUFV-WERKS
      I_MATNR                  = CAUFV-PLNBEZ
      I_MATXT                  = L_MAKTX
      I_ARCHIVE                = L_FLAG
      I_AUFPL                  = CAUFV-AUFPL
      I_RSNUM                  = CAUFV-RSNUM
    EXCEPTIONS
      STATUS_SHOW_NOT_POSSIBLE = 1
      OTHERS                   = 2.

  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.                    " COIS_HDR_STATUS_SHOW

*&---------------------------------------------------------------------*
*&      Form  CONV_EXIT_ALPHA_INPUT
*&---------------------------------------------------------------------*
FORM CONV_EXIT_ALPHA_INPUT USING    P_IN
                           CHANGING P_OUT.

  CHECK P_IN IS NOT INITIAL.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = P_IN
    IMPORTING
      OUTPUT = P_OUT.

ENDFORM.                    " CONV_EXIT_ALPHA_INPUT

*&---------------------------------------------------------------------*
*&      Form  CONV_EXIT_ALPHA_OUTPUT
*&---------------------------------------------------------------------*
FORM CONV_EXIT_ALPHA_OUTPUT USING    P_IN
                            CHANGING P_OUT.

  CHECK P_IN IS NOT INITIAL.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      INPUT  = P_IN
    IMPORTING
      OUTPUT = P_OUT.

ENDFORM.                    " CONV_EXIT_ALPHA_OUTPUT

*&---------------------------------------------------------------------*
*&      Form  CONV_EXIT_ATINN_INPUT
*&---------------------------------------------------------------------*
FORM CONV_EXIT_ATINN_INPUT USING    P_ATINN TYPE AUSP-ATINN
                           CHANGING E_ATINN.

  CALL FUNCTION 'CONVERSION_EXIT_ATINN_INPUT'
    EXPORTING
      INPUT  = P_ATINN
    IMPORTING
      OUTPUT = E_ATINN.

ENDFORM.                    " CONV_EXIT_ATINN_INPUT

*&---------------------------------------------------------------------*
*&      Form  CONV_EXIT_MATN1_INPUT
*&---------------------------------------------------------------------*
FORM CONV_EXIT_MATN1_INPUT USING    P_IN
                           CHANGING P_OUT.

  CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
      INPUT        = P_IN
    IMPORTING
      OUTPUT       = P_OUT
    EXCEPTIONS
      LENGTH_ERROR = 1
      OTHERS       = 2.

  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.                    " CONV_EXIT_MATN1_INPUT

*&---------------------------------------------------------------------*
*&      Form  CONV_EXIT_MATN1_OUTPUT
*&---------------------------------------------------------------------*
FORM CONV_EXIT_MATN1_OUTPUT USING    P_IN
                            CHANGING P_OUT.

  CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
    EXPORTING
      INPUT  = P_IN
    IMPORTING
      OUTPUT = P_OUT.

ENDFORM.                    " CONV_EXIT_MATN1_OUTPUT

*&---------------------------------------------------------------------*
*&      Form  CONV_EXIT_NUMCV_INPUT
*&---------------------------------------------------------------------*
FORM CONV_EXIT_NUMCV_INPUT USING    P_IN
                           CHANGING P_OUT.

  CHECK P_IN IS NOT INITIAL.

  CALL FUNCTION 'CONVERSION_EXIT_NUMCV_INPUT'
    EXPORTING
      INPUT  = P_IN
    IMPORTING
      OUTPUT = P_OUT.


ENDFORM.                    " CONV_EXIT_NUMCV_INPUT

*&---------------------------------------------------------------------*
*&      Form  CONV_EXIT_NUMCV_OUTPUT
*&---------------------------------------------------------------------*
FORM CONV_EXIT_NUMCV_OUTPUT USING    P_IN
                            CHANGING P_OUT.

  CALL FUNCTION 'CONVERSION_EXIT_NUMCV_OUTPUT'
    EXPORTING
      INPUT  = P_IN
    IMPORTING
      OUTPUT = P_OUT.

ENDFORM.                    " CONV_EXIT_NUMCV_OUTPUT

*&---------------------------------------------------------------------*
*&      Form  CONV_FLTP_TO_CHAR
*&---------------------------------------------------------------------*
*  FLTP Type 값을 CHAR Type 값으로 변경
*&---------------------------------------------------------------------*
FORM CONV_FLTP_TO_CHAR USING    P_IN_FLTP
                       CHANGING P_OU_VAL.

  DATA: L_OU_CHAR(22).

  CLEAR P_OU_VAL.

  CALL FUNCTION 'FLTP_CHAR_CONVERSION'
    EXPORTING
*     DECIM = 15
*     EXPON = 0
      INPUT = P_IN_FLTP
      IVALU = 'X'
*     MASKN = ' '
    IMPORTING
      FLSTR = L_OU_CHAR.

  P_OU_VAL = L_OU_CHAR.

ENDFORM.                    " CONV_FLTP_TO_CHAR

*&---------------------------------------------------------------------*
*&      Form  CONV_TO_LOC_CURR
*&---------------------------------------------------------------------*
FORM CONV_TO_LOC_CURR USING    P_DATE         "기준일자
                               P_TYPE         "M, BS, PL 등 (기말1001, 평균1002)
                               P_IN_AMT       "입력받은 금액
                               P_IN_CURR      "입력받은 통화
                               P_OU_CURR      "변환할 통화
                      CHANGING P_OU_AMT .     "변환된 금액

  DATA: L_RATE   LIKE TCURR-UKURS,
        L_OU_AMT TYPE HSLXX12.

  CLEAR: P_OU_AMT.

  IF P_IN_CURR = P_OU_CURR.
    P_OU_AMT = P_IN_AMT.
    EXIT.
  ENDIF.

  CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
    EXPORTING
*     CLIENT            = SY-MANDT
      DATE              = P_DATE
      FOREIGN_AMOUNT    = P_IN_AMT
      FOREIGN_CURRENCY  = P_IN_CURR
      LOCAL_CURRENCY    = P_OU_CURR
*     RATE              = 0
      TYPE_OF_RATE      = P_TYPE      "'M'
*     READ_TCURR        = 'X'
    IMPORTING
      EXCHANGE_RATE     = L_RATE
*     FOREIGN_FACTOR    =
      LOCAL_AMOUNT      = L_OU_AMT
*     LOCAL_FACTOR      =
*     EXCHANGE_RATEX    =
*     FIXED_RATE        =
*     DERIVED_RATE_TYPE =
    EXCEPTIONS
      NO_RATE_FOUND     = 1
      OVERFLOW          = 2
      NO_FACTORS_FOUND  = 3
      NO_SPREAD_FOUND   = 4
      DERIVED_2_TIMES   = 5
      OTHERS            = 6.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  P_OU_AMT = L_OU_AMT.

ENDFORM.                    " CONV_TO_LOC_CURR

*&---------------------------------------------------------------------*
*&      Form  CONV_TO_FOR_CURR
*&---------------------------------------------------------------------*
FORM CONV_TO_FOR_CURR USING    P_DATE         "기준일자
                               P_TYPE         "M, BS, PL 등 (기말1001, 평균1002)
                               P_IN_AMT       "입력받은 금액
                               P_IN_CURR      "입력받은 통화
                               P_OU_CURR      "변환할 통화
                      CHANGING P_OU_AMT .     "변환된 금액

  DATA: L_RATE   LIKE TCURR-UKURS,
        L_OU_AMT TYPE HSLXX12.

  CLEAR: P_OU_AMT.

  IF P_IN_CURR = P_OU_CURR.
    P_OU_AMT = P_IN_AMT.
    EXIT.
  ENDIF.

  CALL FUNCTION 'CONVERT_TO_FOREIGN_CURRENCY'
    EXPORTING
*     CLIENT            = SY-MANDT
      DATE              = P_DATE
      FOREIGN_CURRENCY  = P_OU_CURR
      LOCAL_AMOUNT      = P_IN_AMT
      LOCAL_CURRENCY    = P_IN_CURR
*     RATE              = 0
      TYPE_OF_RATE      = P_TYPE      "'M'
*     READ_TCURR        = 'X'
    IMPORTING
      EXCHANGE_RATE     = L_RATE
      FOREIGN_AMOUNT    = L_OU_AMT
*     FOREIGN_FACTOR    =
*     LOCAL_FACTOR      =
*     EXCHANGE_RATEX    =
*     DERIVED_RATE_TYPE =
*     FIXED_RATE        =
    EXCEPTIONS
      NO_RATE_FOUND     = 1
      OVERFLOW          = 2
      NO_FACTORS_FOUND  = 3
      NO_SPREAD_FOUND   = 4
      DERIVED_2_TIMES   = 5
      OTHERS            = 6.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  P_OU_AMT = L_OU_AMT.

ENDFORM.                    " CONV_TO_FOR_CURR
*&---------------------------------------------------------------------*
*&      Form  CURR_AMT_IDOC_TO_SAP
*&---------------------------------------------------------------------*
* 통화별로 표시된 금액을 SAP Table 입력금액 형식으로 변경
*----------------------------------------------------------------------*
FORM CURR_AMT_IDOC_TO_SAP USING    P_WAERS P_IN_AMT_C
                          CHANGING P_OU_AMT.

  DATA: L_AMT_C TYPE STRING,
        L_NUM.


  CLEAR: P_OU_AMT.

  L_AMT_C = P_IN_AMT_C.

  PERFORM STRING_REPLACE  USING    ',' ''
                                    CHANGING L_AMT_C.      " 변경할 문자열

  PERFORM NUMERIC_CHECK  USING    L_AMT_C
                                   CHANGING L_NUM.
  IF L_NUM <> 'X'. EXIT. ENDIF.

  CALL FUNCTION 'CURRENCY_AMOUNT_IDOC_TO_SAP'
    EXPORTING
      CURRENCY    = P_WAERS
      IDOC_AMOUNT = L_AMT_C
    IMPORTING
      SAP_AMOUNT  = P_OU_AMT.

ENDFORM.                    " CURR_AMT_IDOC_TO_SAP

*&---------------------------------------------------------------------*
*&      Form  CURR_AMT_SAP_TO_IDOC
*&---------------------------------------------------------------------*
*  SAP 금액을 통화별로 표시된 금액으로 변경
*----------------------------------------------------------------------*
FORM CURR_AMT_SAP_TO_IDOC USING    P_WAERS
                                   P_IN_AMT_C
                          CHANGING P_OU_AMT.

  DATA: L_AMT_C TYPE STRING.

  CALL FUNCTION 'CURRENCY_AMOUNT_SAP_TO_IDOC'
    EXPORTING
      CURRENCY    = P_WAERS
      SAP_AMOUNT  = P_IN_AMT_C
    IMPORTING
      IDOC_AMOUNT = L_AMT_C.

  CONDENSE L_AMT_C NO-GAPS.

  P_OU_AMT = L_AMT_C.

ENDFORM.                    " CURR_AMT_SAP_TO_IDOC

*&---------------------------------------------------------------------*
*&      Form  CURR_CONV_FACTOR
*&---------------------------------------------------------------------*
*  통화의 Factor 를 Return
*----------------------------------------------------------------------*
FORM CURR_CONV_FACTOR USING    P_WAERS       "통화
                      CHANGING P_FACTOR.     "Factor

  DATA: L_FACTOR TYPE P DECIMALS 3.

  IF P_WAERS IS INITIAL. EXIT. ENDIF.

  CLEAR P_FACTOR.

  CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
    EXPORTING
      CURRENCY          = P_WAERS
    IMPORTING
      FACTOR            = L_FACTOR
    EXCEPTIONS
      TOO_MANY_DECIMALS = 1
      OTHERS            = 2.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  P_FACTOR = L_FACTOR.

ENDFORM.                    " CURR_CONV_FACTOR

*&---------------------------------------------------------------------*
*&      Form  DATE_CHECK_PLAUSIBILITY
*&---------------------------------------------------------------------*
*  날짜인지 여부 체크
*----------------------------------------------------------------------*
FORM DATE_CHECK_PLAUSIBILITY USING    P_DATE
                             CHANGING P_SUBRC.

  DATA: L_DATE TYPE D.

  L_DATE = P_DATE.

  CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
    EXPORTING
      DATE                      = L_DATE
    EXCEPTIONS
      PLAUSIBILITY_CHECK_FAILED = 1
      OTHERS                    = 2.

  IF SY-SUBRC <> 0.
    P_SUBRC = SY-SUBRC.
    EXIT.
  ENDIF.

ENDFORM.                    " DATE_CHECK_PLAUSIBILITY

*&---------------------------------------------------------------------*
*&      Form  DDIF_FIELDINFO_GET
*&---------------------------------------------------------------------*
*  DD: 테이블필드에서 정보를 읽기 위한 인터페이스
*  연관 FORM : SMAN_IF_CONVERT_TO
*----------------------------------------------------------------------*
FORM DDIF_FIELDINFO_GET USING    P_FIELD
                        CHANGING PS_DFIES STRUCTURE DFIES.

  DATA: L_TAB   TYPE DDOBJNAME,
        L_FIELD TYPE DFIES-LFIELDNAME.

  CLEAR PS_DFIES.

  CASE P_FIELD.
    WHEN 'ASACC'. L_TAB = 'T811S'.
    WHEN OTHERS.  L_TAB = 'CCSS'.
  ENDCASE.

  L_FIELD = P_FIELD.

  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      TABNAME              = L_TAB
*     FIELDNAME            = ' '
*     LANGU                = SY-LANGU
      LFIELDNAME           = L_FIELD         "' '
*     ALL_TYPES            = ' '
*     GROUP_NAMES          = ' '
*     UCLEN                =
    IMPORTING
*     X030L_WA             =
*     DDOBJTYPE            =
      DFIES_WA             = PS_DFIES
*     LINES_DESCR          =
*   TABLES
*     DFIES_TAB            =
*     FIXED_VALUES         =
    EXCEPTIONS
      NOT_FOUND            = 1
      INTERNAL_ERROR       = 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.                    " DDIF_FIELDINFO_GET

*&---------------------------------------------------------------------*
*&      Form  DYNAMIC_COMPO_FLD
*&---------------------------------------------------------------------*
*  FIELDCAT -> COMPONENT 로 바꿔준다.
*&---------------------------------------------------------------------*
FORM DYNAMIC_COMPO_FLD TABLES PT_COMPO TYPE ABAP_COMPONENT_TAB
                       USING  P_REF
                              P_FNAME.

  DATA: L_TYPE TYPE REF TO CL_ABAP_TYPEDESCR.

  IF P_REF IS INITIAL.

    CALL METHOD CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA
      EXPORTING
        P_DATA      = P_REF
      RECEIVING
        P_DESCR_REF = L_TYPE.

  ELSE.

    CALL METHOD CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME
      EXPORTING
        P_NAME      = P_REF
      RECEIVING
        P_DESCR_REF = L_TYPE.

  ENDIF.

  CLEAR PT_COMPO.
  PT_COMPO-TYPE ?= L_TYPE.
  PT_COMPO-NAME  = P_FNAME.
  APPEND PT_COMPO.

ENDFORM.                    " DYNAMIC_COMPO_FLD

*&---------------------------------------------------------------------*
*&      Form  DYNAMIC_COMPO_IT
*&---------------------------------------------------------------------*
*  동적 IT <GT_M> 생성을 위한 COMPONENT IT 구성
*----------------------------------------------------------------------*
FORM DYNAMIC_COMPO_IT TABLES  PT_FCAT  TYPE LVC_T_FCAT
                              PT_COMPO TYPE ABAP_COMPONENT_TAB
                      USING   P_EDIT
                              P_COLOR.

  DATA: LT_CELLTAB TYPE LVC_T_STYL,  "EDIT를 위해
        LT_CELLCOL TYPE LVC_T_SCOL,  "COLOR를 위해
        L_STRING   TYPE STRING.

  CLEAR: PT_COMPO, PT_COMPO[].

  LOOP AT PT_FCAT.

    CLEAR L_STRING.

    IF PT_FCAT-REF_TABLE IS NOT INITIAL AND
       PT_FCAT-REF_FIELD IS NOT INITIAL.
      CONCATENATE PT_FCAT-REF_TABLE PT_FCAT-REF_FIELD
             INTO L_STRING SEPARATED BY '-'.
      PERFORM DYNAMIC_COMPO_FLD TABLES PT_COMPO
                                USING  L_STRING
                                       PT_FCAT-FIELDNAME.
    ELSE.
      PERFORM DYNAMIC_COMPO_FLD TABLES PT_COMPO
                                USING  L_STRING
                                       PT_FCAT-FIELDNAME.
    ENDIF.

  ENDLOOP.

* 수정 CELLTAB 사용시
  IF P_EDIT = 'X'.
    PERFORM DYNAMIC_COMPO_FLD TABLES PT_COMPO
                              USING  LT_CELLTAB
                                     'CELLTAB'.
  ENDIF.

* 색깔 CELLCOL 사용시
  IF P_COLOR = 'X'.
    PERFORM DYNAMIC_COMPO_FLD TABLES PT_COMPO
                              USING  LT_CELLCOL
                                     'CELLCOL'.
  ENDIF.

ENDFORM.                    " DYNAMIC_COMPO_IT

*&---------------------------------------------------------------------*
*&      Form  DYNAMIC_DATA_CREATE
*&---------------------------------------------------------------------*
*  동적 IT <GT_M> 생성을 위한 Structure & Table Type 생성
*----------------------------------------------------------------------*
FORM DYNAMIC_DATA_CREATE TABLES   PT_FCAT  TYPE LVC_T_FCAT
                         USING    P_EDIT
                                  P_COLOR
                         CHANGING PT_DATA  TYPE REF TO DATA
                                  PS_DATA  TYPE REF TO DATA
                                  PT_TEMP  TYPE REF TO DATA
                                  PS_TEMP  TYPE REF TO DATA.

  CLEAR: PT_DATA, PS_DATA,
         PT_TEMP, PS_TEMP.

* FIELDCAT를 COMPONENT_TAB 으로 변경
  DATA: LT_COMPO TYPE ABAP_COMPONENT_TAB WITH HEADER LINE.

  PERFORM DYNAMIC_COMPO_IT TABLES  PT_FCAT
                                   LT_COMPO
                           USING   P_EDIT
                                   P_COLOR.

* Structure & Table Type 생성
  DATA: LO_STRU_DESC TYPE REF TO CL_ABAP_STRUCTDESCR,
        LO_TABL_DESC TYPE REF TO CL_ABAP_TABLEDESCR.

  CALL METHOD CL_ABAP_STRUCTDESCR=>CREATE
    EXPORTING
      P_COMPONENTS = LT_COMPO[]
      P_STRICT     = CL_ABAP_STRUCTDESCR=>FALSE
    RECEIVING
      P_RESULT     = LO_STRU_DESC.

  CALL METHOD CL_ABAP_TABLEDESCR=>CREATE
    EXPORTING
      P_LINE_TYPE  = LO_STRU_DESC
      P_TABLE_KIND = CL_ABAP_TABLEDESCR=>TABLEKIND_STD
    RECEIVING
      P_RESULT     = LO_TABL_DESC.

* 동적 DATA 생성
  CREATE DATA PT_DATA TYPE HANDLE LO_TABL_DESC.
  CREATE DATA PS_DATA TYPE HANDLE LO_STRU_DESC.

* 동적 DATA 생성
  CREATE DATA PT_TEMP TYPE HANDLE LO_TABL_DESC.
  CREATE DATA PS_TEMP TYPE HANDLE LO_STRU_DESC.

ENDFORM.                    " DYNAMIC_DATA_CREATE

*&---------------------------------------------------------------------*
*&      Form  DYNP_VALUES_READ
*&---------------------------------------------------------------------*
*  화면 필드의 값을 읽음
*----------------------------------------------------------------------*
FORM DYNP_VALUES_READ USING    P_FIELD_NAME
                      CHANGING P_FIELD.

  DATA: T_DYNPREAD LIKE DYNPREAD OCCURS 0 WITH HEADER LINE,
        L_LINE     TYPE I.

  GET CURSOR LINE L_LINE.

* Read Screen Field
  T_DYNPREAD-FIELDNAME = P_FIELD_NAME.
  T_DYNPREAD-STEPL     = L_LINE.
  APPEND T_DYNPREAD.

* Read Screen Info.
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      DYNAME               = SY-CPROG
      DYNUMB               = SY-DYNNR
    TABLES
      DYNPFIELDS           = T_DYNPREAD
    EXCEPTIONS
      INVALID_ABAPWORKAREA = 01
      INVALID_DYNPROFIELD  = 02
      INVALID_DYNPRONAME   = 03
      INVALID_DYNPRONUMMER = 04
      INVALID_REQUEST      = 05
      NO_FIELDDESCRIPTION  = 06
      UNDEFIND_ERROR       = 07.

  CHECK SY-SUBRC = 0.

* Read Field Value
  READ TABLE T_DYNPREAD WITH KEY FIELDNAME = P_FIELD_NAME.

* Upper Case
  TRANSLATE T_DYNPREAD-FIELDVALUE TO UPPER CASE.

  P_FIELD = T_DYNPREAD-FIELDVALUE.

ENDFORM.                    " DYNP_VALUES_READ

*&---------------------------------------------------------------------*
*&      Form  DYNP_VALUES_UPD
*&---------------------------------------------------------------------*
*  화면필드(문자형이어야함)의 값을 Refresh 하여 표시 : 단일
*----------------------------------------------------------------------*
FORM DYNP_VALUES_UPD USING P_FNAME P_VALUE P_LINE.

* 화면 필드 선언 -> 선택된 값을 화면 필드에 뿌려줄때 사용.
  DATA: LT_DYNPREAD LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.

* DESC을 바로 보여주기 위한 부분.
  LT_DYNPREAD-FIELDNAME  = P_FNAME. "반드시 대문자.
  LT_DYNPREAD-FIELDVALUE = P_VALUE.
  LT_DYNPREAD-STEPL      = P_LINE.
  APPEND LT_DYNPREAD.

  CALL FUNCTION 'DYNP_VALUES_UPDATE'
    EXPORTING
      DYNAME               = SY-CPROG
      DYNUMB               = SY-DYNNR
    TABLES
      DYNPFIELDS           = LT_DYNPREAD    "SCR_FIELDS
    EXCEPTIONS
      INVALID_ABAPWORKAREA = 1
      INVALID_DYNPROFIELD  = 2
      INVALID_DYNPRONAME   = 3
      INVALID_DYNPRONUMMER = 4
      INVALID_REQUEST      = 5
      NO_FIELDDESCRIPTION  = 6
      UNDEFIND_ERROR       = 7
      OTHERS               = 8.

  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.                    " DYNP_VALUES_UPD

*&---------------------------------------------------------------------*
*&      Form  DYNP_VALUES_UPD_M
*&---------------------------------------------------------------------*
*  화면필드(문자형이어야함)의 값을 Refresh 하여 표시 : 여러건
*----------------------------------------------------------------------*
FORM DYNP_VALUES_UPD_M TABLES PT_DYNPREAD STRUCTURE DYNPREAD
                       USING  P_START P_END
                              P_FNAME P_VALUE.  "P_LINE.

* 화면 필드 선언 -> 선택된 값을 화면 필드에 뿌려줄때 사용.
*  DATA: LT_DYNPREAD LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.

  IF P_START = 'X'.
    CLEAR: PT_DYNPREAD, PT_DYNPREAD[].
  ENDIF.

* DESC을 바로 보여주기 위한 부분.
  CLEAR PT_DYNPREAD.
  PT_DYNPREAD-FIELDNAME  = P_FNAME. "반드시 대문자.
  PT_DYNPREAD-FIELDVALUE = P_VALUE.
*  PT_DYNPREAD-STEPL      = P_LINE.
  APPEND PT_DYNPREAD.

  IF P_END = ''. EXIT. ENDIF.

  CALL FUNCTION 'DYNP_VALUES_UPDATE'
    EXPORTING
      DYNAME               = SY-CPROG
      DYNUMB               = SY-DYNNR
    TABLES
      DYNPFIELDS           = PT_DYNPREAD    "SCR_FIELDS
    EXCEPTIONS
      INVALID_ABAPWORKAREA = 1
      INVALID_DYNPROFIELD  = 2
      INVALID_DYNPRONAME   = 3
      INVALID_DYNPRONUMMER = 4
      INVALID_REQUEST      = 5
      NO_FIELDDESCRIPTION  = 6
      UNDEFIND_ERROR       = 7
      OTHERS               = 8.

  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.                    " DYNP_VALUES_UPDATE
*&---------------------------------------------------------------------*
*&      Form  FILE_EXIST
*&---------------------------------------------------------------------*
*  로컬PC에 파일이 존재하는지 체크한다.
*----------------------------------------------------------------------*
FORM FILE_EXIST USING    P_FULLPATH   "전체경로
                CHANGING P_EXIST.

  CLEAR P_EXIST.

  DATA: L_FULLPATH TYPE STRING,
        L_RESULT   TYPE ABAP_BOOL.

  L_FULLPATH = P_FULLPATH.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
    EXPORTING
      FILE                 = L_FULLPATH
    RECEIVING
      RESULT               = L_RESULT
    EXCEPTIONS
      CNTL_ERROR           = 1
      ERROR_NO_GUI         = 2
      WRONG_PARAMETER      = 3
      NOT_SUPPORTED_BY_GUI = 4
      OTHERS               = 5.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO DISPLAY LIKE SY-MSGTY
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  P_EXIST = L_RESULT.

ENDFORM.                    " FILE_EXIST

*&---------------------------------------------------------------------*
*&      Form  GET_DOMAIN_TAB
*&---------------------------------------------------------------------*
FORM GET_DOMAIN_TAB TABLES ET_DD07V  STRUCTURE DD07V
                    USING  P_DOMNAME.

  CLEAR: ET_DD07V, ET_DD07V[].

  IF P_DOMNAME IS INITIAL. EXIT. ENDIF.

  SELECT DOMVALUE_L
         DDTEXT
    INTO CORRESPONDING FIELDS OF TABLE ET_DD07V
    FROM DD07V
   WHERE DOMNAME    = P_DOMNAME          "도메인 이름
     AND DDLANGUAGE = SY-LANGU.

  SORT ET_DD07V BY DOMVALUE_L.

ENDFORM.                    " GET_DOMAIN_TAB

*&---------------------------------------------------------------------*
*&      Form  GET_DOMAIN_TEXT
*&---------------------------------------------------------------------*
FORM GET_DOMAIN_TEXT USING    P_DOMNAME P_DOMVALUE
                     CHANGING P_DDTEXT.

  DATA: L_TEXT LIKE  DD07T-DDTEXT.

  CLEAR P_DDTEXT.

  CALL FUNCTION 'STF4_GET_DOMAIN_VALUE_TEXT'
    EXPORTING
      IV_DOMNAME      = P_DOMNAME
      IV_VALUE        = P_DOMVALUE
    IMPORTING
      EV_VALUE_TEXT   = L_TEXT        "P_DDTEXT
    EXCEPTIONS
      VALUE_NOT_FOUND = 1
      OTHERS          = 2.

  P_DDTEXT = L_TEXT.

*  DATA: L_LANGU LIKE SY-LANGU.
*
*  IF SY-LANGU = '3'.
*    L_LANGU = '3'.
*  ELSE.
*    L_LANGU = 'E'.
*  ENDIF.
*
*  SELECT SINGLE DDTEXT FROM DD07V INTO P_DDTEXT
*   WHERE DOMNAME     = P_DOMNAME          "도메인 이름
*     AND DOMVALUE_L  = P_DOMVALUE         "코드값
*     AND DDLANGUAGE  = L_LANGU.

ENDFORM.                    " GET_DOMAIN_TEXT

*&---------------------------------------------------------------------*
*&      Form  GET_FIELD_DESC
*&---------------------------------------------------------------------*
*  필드의 언어별 내역을 읽음
*----------------------------------------------------------------------*
FORM GET_FIELD_DESC USING    I_TBL_NAME    "공백이면 Data-Element
                             I_FLD_NAME    "FIELD 혹은 Data-Element
                             I_SML         "짧은,중간,긴, DEFAULT 'M'
                    CHANGING E_DESC.

  CLEAR E_DESC.

  DATA: L_ROLLNAME TYPE DD03L-ROLLNAME.

  IF I_TBL_NAME IS INITIAL.

    L_ROLLNAME = I_FLD_NAME.

  ELSE.

    SELECT SINGLE ROLLNAME
      INTO L_ROLLNAME
      FROM DD03L
     WHERE TABNAME   = I_TBL_NAME
       AND FIELDNAME = I_FLD_NAME.

    IF L_ROLLNAME IS INITIAL.

      SELECT SINGLE DDTEXT
        INTO E_DESC
        FROM DD03T
       WHERE TABNAME    = I_TBL_NAME
         AND DDLANGUAGE = SY-LANGU
         AND FIELDNAME  = I_FLD_NAME.

      IF SY-SUBRC <> 0.
        SELECT SINGLE DDTEXT
          INTO E_DESC
          FROM DD03T
         WHERE TABNAME    = I_TBL_NAME
           AND FIELDNAME  = I_FLD_NAME.
      ENDIF.

      EXIT.

    ENDIF.

  ENDIF.

* DATA-ELEM 로 내역 찾기
  DATA: LS_DD04T TYPE DD04T.

  SELECT SINGLE *
    INTO CORRESPONDING FIELDS OF LS_DD04T
    FROM DD04T
   WHERE ROLLNAME   = L_ROLLNAME
     AND DDLANGUAGE = SY-LANGU.

  IF SY-SUBRC <> 0.
    SELECT SINGLE *
      INTO CORRESPONDING FIELDS OF LS_DD04T
      FROM DD04T
     WHERE ROLLNAME = L_ROLLNAME.
  ENDIF.

  CASE I_SML.
    WHEN 'S'.    E_DESC = LS_DD04T-SCRTEXT_S.
    WHEN 'M'.    E_DESC = LS_DD04T-SCRTEXT_M.
    WHEN 'L'.    E_DESC = LS_DD04T-SCRTEXT_L.
    WHEN OTHERS. E_DESC = LS_DD04T-SCRTEXT_M.
  ENDCASE.

  IF E_DESC IS INITIAL.
    E_DESC = LS_DD04T-DDTEXT.
  ENDIF.

ENDFORM.                    " GET_FIELD_DESC

*&---------------------------------------------------------------------*
*&      Form  GET_FILE_NAME
*&---------------------------------------------------------------------*
*  파일명 읽는 팝업 띄움
*----------------------------------------------------------------------*
FORM GET_FILE_NAME USING    P_GB           "'S'(Save), 그외(Open)
                            P_EXTENSION
                   CHANGING P_FULLPATH.

  DATA: LT_FILETABLE TYPE FILETABLE WITH HEADER LINE,
        L_RC         TYPE I,
        L_FILENAME   TYPE STRING,
        L_PATH       TYPE STRING,
        L_FULLPATH   TYPE STRING,
        L_DFT_FNAME  TYPE STRING.

  CLEAR: P_FULLPATH.

  L_DFT_FNAME = SY-TITLE.

  CASE P_GB.

    WHEN 'S'.  "save dialog

      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
        EXPORTING
*         WINDOW_TITLE         =
          DEFAULT_EXTENSION    = P_EXTENSION    " 'TXT' , 'XLS'
          DEFAULT_FILE_NAME    = L_DFT_FNAME
*         WITH_ENCODING        =
*         FILE_FILTER          =
*         INITIAL_DIRECTORY    =
*         PROMPT_ON_OVERWRITE  = 'X'
        CHANGING
          FILENAME             = L_FILENAME
          PATH                 = L_PATH
          FULLPATH             = L_FULLPATH
*         USER_ACTION          =
*         FILE_ENCODING        =
        EXCEPTIONS
          CNTL_ERROR           = 1
          ERROR_NO_GUI         = 2
          NOT_SUPPORTED_BY_GUI = 3
          OTHERS               = 4.

      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.

    WHEN OTHERS.   "Open dialog

      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
        EXPORTING
*         WINDOW_TITLE            =
          DEFAULT_EXTENSION       = P_EXTENSION  " 'TXT' , 'XLS'
*         DEFAULT_FILENAME        =
*         FILE_FILTER             = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
*         WITH_ENCODING           =
*         INITIAL_DIRECTORY       =
*         MULTISELECTION          =
        CHANGING
          FILE_TABLE              = LT_FILETABLE[]
          RC                      = L_RC
*         USER_ACTION             =
*         FILE_ENCODING           =
        EXCEPTIONS
          FILE_OPEN_DIALOG_FAILED = 1
          CNTL_ERROR              = 2
          ERROR_NO_GUI            = 3
          NOT_SUPPORTED_BY_GUI    = 4
          OTHERS                  = 5.

      IF SY-SUBRC <> 0 OR L_RC = -1.

        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

      ELSE.

        CLEAR LT_FILETABLE.
        READ TABLE LT_FILETABLE INDEX 1.
        L_FULLPATH = LT_FILETABLE-FILENAME.

      ENDIF.

  ENDCASE.

  P_FULLPATH = L_FULLPATH.

ENDFORM.                    " GET_FILE_NAME

*&---------------------------------------------------------------------*
*&      Form  GET_FILE_NAME_MULTI
*&---------------------------------------------------------------------*
*  여러 파일 선택 가능한 팝업 띄움
*----------------------------------------------------------------------*
FORM GET_FILE_NAME_MULTI TABLES PT_FILE_TABLE TYPE FILETABLE.

  DATA: L_RC TYPE I.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
*     WINDOW_TITLE            =
*     DEFAULT_EXTENSION       =
*     DEFAULT_FILENAME        =
*     FILE_FILTER             =
*     WITH_ENCODING           =
*     INITIAL_DIRECTORY       =
      MULTISELECTION          = 'X'
    CHANGING
      FILE_TABLE              = PT_FILE_TABLE[]
      RC                      = L_RC
*     USER_ACTION             =
*     FILE_ENCODING           =
    EXCEPTIONS
      FILE_OPEN_DIALOG_FAILED = 1
      CNTL_ERROR              = 2
      ERROR_NO_GUI            = 3
      NOT_SUPPORTED_BY_GUI    = 4
      OTHERS                  = 5.

  IF SY-SUBRC <> 0 OR L_RC = -1.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

ENDFORM.                    " GET_FILE_NAME_MULTI

*&---------------------------------------------------------------------*
*&      Form  GET_FILE_NAME_SPLIT
*&---------------------------------------------------------------------*
*  전체 File Name 을 경로, 파일명, 확장자로 나눔
*----------------------------------------------------------------------*
FORM GET_FILE_NAME_SPLIT USING    P_FULLNAME
                         CHANGING P_FILENAME
                                  P_EXTENTION.

  DATA : L_FULLFNAME TYPE DSVASDOCID,
         L_DIRECTORY TYPE DSVASDOCID,
         L_FILENAME  TYPE DSVASDOCID,
         L_EXTENTION TYPE DSVASDOCID.

  CLEAR: P_FILENAME, P_EXTENTION.

  L_FULLFNAME = P_FULLNAME.

  CALL FUNCTION 'DSVAS_DOC_FILENAME_SPLIT'
    EXPORTING
      PF_DOCID     = L_FULLFNAME
    IMPORTING
      PF_DIRECTORY = L_DIRECTORY
      PF_FILENAME  = L_FILENAME
      PF_EXTENSION = L_EXTENTION.

  P_FILENAME  = L_FILENAME.
  P_EXTENTION = L_EXTENTION.

  TRANSLATE P_EXTENTION TO UPPER CASE.

ENDFORM.                    " GET_FILE_NAME_SPLIT

*&---------------------------------------------------------------------*
*&      Form  GET_FILE_NAME_SPLIT_2
*&---------------------------------------------------------------------*
*  전체 File Name 을 경로, 파일명(확장자없는), 확장자로 나눔
*----------------------------------------------------------------------*
FORM GET_FILE_NAME_SPLIT_2 USING    P_FULLNAME
                           CHANGING P_FILENAME
                                    P_EXTENTION.

  CLEAR: P_FILENAME, P_EXTENTION.

  DATA: L_FULLNAME  TYPE DSVASDOCHEAD-DOCID,
        L_FILENAME  TYPE DSVASDOCHEAD-DOCID,
        L_DIRLEN    TYPE I,
        L_FILELEN   TYPE I.

  L_FULLNAME = P_FULLNAME.

* Dateiname suchen
  WHILE L_FULLNAME CA ':\/'.
    ADD 1 TO SY-FDPOS.
    ADD SY-FDPOS TO L_DIRLEN.
    SHIFT L_FULLNAME LEFT BY SY-FDPOS PLACES.
  ENDWHILE.
  L_FILENAME = P_FILENAME = L_FULLNAME.

* Extension bestimmen
  WHILE L_FILENAME CS'.'.
    ADD 1 TO SY-FDPOS.
    ADD SY-FDPOS TO L_FILELEN.
    SHIFT L_FILENAME LEFT BY SY-FDPOS PLACES.
  ENDWHILE.

  IF SY-SUBRC = 0.
    P_EXTENTION = L_FILENAME.    "확장자
  ENDIF.

  L_FILELEN = L_FILELEN - 1.
  IF L_FILELEN > 0.
    P_FILENAME = P_FILENAME(L_FILELEN).  "확장자 없는 파일명
  ENDIF.

  TRANSLATE P_EXTENTION TO UPPER CASE.

ENDFORM.                    " GET_FILE_NAME_SPLIT_2

*&---------------------------------------------------------------------*
*&      Form  GET_LAST_DAY_OF_MONTH
*&---------------------------------------------------------------------*
*  해당일자의 말일을 읽어 옴
*----------------------------------------------------------------------*
FORM GET_LAST_DAY_OF_MONTH USING    P_IN_DATE
                           CHANGING P_LAST_DATE.

  CALL FUNCTION 'SLS_MISC_GET_LAST_DAY_OF_MONTH'
    EXPORTING
      DAY_IN            = P_IN_DATE
    IMPORTING
      LAST_DAY_OF_MONTH = P_LAST_DATE
    EXCEPTIONS
      DAY_IN_NOT_VALID  = 1
      OTHERS            = 2.

  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.                    " GET_LAST_DAY_OF_MONT
*&---------------------------------------------------------------------*
*&      Form  GET_ORDER_STATUS
*&---------------------------------------------------------------------*
FORM GET_ORDER_STATUS USING    P_AUFNR
                      CHANGING P_STTXT.

  DATA: L_OBJNR LIKE CAUFV-OBJNR.

  CLEAR P_STTXT.

  IF P_AUFNR IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE OBJNR
    INTO L_OBJNR
    FROM CAUFV
   WHERE AUFNR = P_AUFNR.

  CALL FUNCTION 'STATUS_TEXT_EDIT'
    EXPORTING
*     CLIENT            = SY-MANDT
      FLG_USER_STAT     = 'X'               "' '
      OBJNR             = L_OBJNR
*     ONLY_ACTIVE       = 'X'
      SPRAS             = SY-LANGU
*     BYPASS_BUFFER     = ' '
    IMPORTING
*     ANW_STAT_EXISTING =
*     E_STSMA           =
      LINE              = P_STTXT
*     USER_LINE         =
*     STONR             =
    EXCEPTIONS
      OBJECT_NOT_FOUND  = 1
      OTHERS            = 2.

  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.                    " GET_ORDER_STAT
*&---------------------------------------------------------------------*
*&      Form  GET_UD_CODE
*&---------------------------------------------------------------------*
*  사용결정코드 구한다. 검사로트번호로
*----------------------------------------------------------------------*
FORM GET_UD_CODE USING    P_PRUEFLOS
                 CHANGING P_VCODE
                          P_KURZTEXT.

  DATA: LS_QAVE LIKE QAVE.

  CLEAR: P_VCODE, P_KURZTEXT.

  SELECT SINGLE *
    INTO CORRESPONDING FIELDS OF LS_QAVE
    FROM QAVE
   WHERE PRUEFLOS = P_PRUEFLOS.

  IF SY-SUBRC <> 0. EXIT. ENDIF.

  P_VCODE = LS_QAVE-VCODE.

  SELECT SINGLE KURZTEXT
    INTO P_KURZTEXT
    FROM QPCT            "QPCD
   WHERE KATALOGART = LS_QAVE-VKATART
     AND CODEGRUPPE = LS_QAVE-VCODEGRP
     AND CODE       = LS_QAVE-VCODE
     AND SPRACHE    = SY-LANGU
     AND VERSION    = LS_QAVE-VERSIONAM.

ENDFORM.                    " GET_UD_CODE

*&---------------------------------------------------------------------*
*&      Form  GET_SAP_USER_NAME
*&---------------------------------------------------------------------*
*  SAP User ID로 이름을 읽어옴
*----------------------------------------------------------------------*
FORM GET_SAP_USER_NAME USING    P_BNAME
                       CHANGING P_USER_NAME.

  DATA: LT_RTN  LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
        LS_ADDR LIKE BAPIADDR3.

  CLEAR: P_USER_NAME.

  IF P_BNAME IS INITIAL. EXIT. ENDIF.

  CALL FUNCTION 'BAPI_USER_GET_DETAIL'
    EXPORTING
      USERNAME = P_BNAME     "SY-UNAME
    IMPORTING
      ADDRESS  = LS_ADDR
    TABLES
      RETURN   = LT_RTN.

  CONCATENATE LS_ADDR-LASTNAME LS_ADDR-FIRSTNAME
         INTO P_USER_NAME SEPARATED BY ''.

* 다른 방법
*FORM F_NAME_SELECT   USING P_L_UNAME LIKE SY-UNAME
*                  CHANGING P_L_NAMET LIKE ADRP-NAME_TEXT.
*
*  DATA : LV_FIRST LIKE ADRP-NAME_FIRST,
*         LV_LAST  LIKE ADRP-NAME_LAST.
*
*  SELECT SINGLE
*         ADRP~NAME_FIRST
*         ADRP~NAME_LAST
*   INTO (LV_FIRST,
*         LV_LAST)
*    FROM USR21
*   INNER JOIN ADRP
*      ON ADRP~PERSNUMBER EQ USR21~PERSNUMBER
*   WHERE USR21~BNAME EQ P_L_UNAME.
*
*  IF SY-DBCNT NE 0.
*    CONCATENATE LV_LAST LV_FIRST INTO P_L_NAMET.
*  ENDIF.

ENDFORM.                    " GET_SAP_USER_NAME

*&---------------------------------------------------------------------*
*&      Form  GUI_DOWNLOAD
*&---------------------------------------------------------------------*
*  GUI_DOWNLOAD 를 수행한다.
*----------------------------------------------------------------------*
FORM GUI_DOWNLOAD TABLES   PT_FLD TYPE STANDARD TABLE
                           PT_TAB TYPE STANDARD TABLE
                  USING    P_FILETYPE
                  CHANGING P_FULLPATH.

  DATA: L_FULLPATH TYPE STRING,
        L_FILETYPE(10).

  CLEAR P_FULLPATH.

  PERFORM GET_FILE_NAME  USING    'S'           "'S'(Save), 그외(Open)
                                            'XLS'
                                   CHANGING L_FULLPATH.
  IF L_FULLPATH IS INITIAL. EXIT. ENDIF.

  P_FULLPATH = L_FULLPATH.

  IF P_FILETYPE IS INITIAL.
    L_FILETYPE = 'DAT'.
  ELSE.
    L_FILETYPE = P_FILETYPE.
  ENDIF.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
    EXPORTING
*      BIN_FILESIZE              =
       FILENAME                  = L_FULLPATH
       FILETYPE                  = L_FILETYPE       "'DAT'
*      APPEND                    = SPACE
*      WRITE_FIELD_SEPARATOR     = SPACE
*      HEADER                    = '00'
*      TRUNC_TRAILING_BLANKS     = SPACE
*      WRITE_LF                  = 'X'
*      COL_SELECT                = SPACE
*      COL_SELECT_MASK           = SPACE
*      DAT_MODE                  = SPACE
*      CONFIRM_OVERWRITE         = SPACE
*      NO_AUTH_CHECK             = SPACE
*      CODEPAGE                  = SPACE
*      IGNORE_CERR               = ABAP_TRUE
*      REPLACEMENT               = '#'
*      WRITE_BOM                 = SPACE
*      TRUNC_TRAILING_BLANKS_EOL = 'X'
*      WK1_N_FORMAT              = SPACE
*      WK1_N_SIZE                = SPACE
*      WK1_T_FORMAT              = SPACE
*      WK1_T_SIZE                = SPACE
*      SHOW_TRANSFER_STATUS      = 'X'
       FIELDNAMES                = PT_FLD[]
*      WRITE_LF_AFTER_LAST_LINE  = 'X'
*    IMPORTING
*      FILELENGTH                =
    CHANGING
      DATA_TAB                   = PT_TAB[]
    EXCEPTIONS
      FILE_WRITE_ERROR          = 1
      NO_BATCH                  = 2
      GUI_REFUSE_FILETRANSFER   = 3
      INVALID_TYPE              = 4
      NO_AUTHORITY              = 5
      UNKNOWN_ERROR             = 6
      HEADER_NOT_ALLOWED        = 7
      SEPARATOR_NOT_ALLOWED     = 8
      FILESIZE_NOT_ALLOWED      = 9
      HEADER_TOO_LONG           = 10
      DP_ERROR_CREATE           = 11
      DP_ERROR_SEND             = 12
      DP_ERROR_WRITE            = 13
      UNKNOWN_DP_ERROR          = 14
      ACCESS_DENIED             = 15
      DP_OUT_OF_MEMORY          = 16
      DISK_FULL                 = 17
      DP_TIMEOUT                = 18
      FILE_NOT_FOUND            = 19
      DATAPROVIDER_EXCEPTION    = 20
      CONTROL_FLUSH_ERROR       = 21
      NOT_SUPPORTED_BY_GUI      = 22
      ERROR_NO_GUI              = 23
      OTHERS                    = 24          .

  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.                    " GUI_DOWNLOAD

*&---------------------------------------------------------------------*
*&      Form  GUI_DOWNLOAD_SMW0
*&---------------------------------------------------------------------*
*  SMW0에 등록된 양식파일을 GUI_DOWNLOAD 수행한다.
*----------------------------------------------------------------------*
FORM GUI_DOWNLOAD_SMW0 USING P_OBJID       "SMW0에 등록된 OBJ ID
                             P_EXTENSION.  "확장자

  DATA: LT_DOC_DATA TYPE TABLE OF W3MIME,
        LT_FLD      TYPE TABLE OF CHAR10,
        L_FULLPATH  TYPE STRING,
        L_DOC_SIZE  TYPE I.

  CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
    EXPORTING
      OBJECT_ID        = P_OBJID            "SMW0에 등록된 OBJ ID
    IMPORTING
      DATA_SIZE        = L_DOC_SIZE
    TABLES
      DATA_TABLE       = LT_DOC_DATA
    EXCEPTIONS
      OBJECT_NOT_FOUND = 1
      INTERNAL_ERROR   = 2
      OTHERS           = 3.

  PERFORM GET_FILE_NAME USING    'S'           "'S'(Save), 그외(Open)
                                 P_EXTENSION   "'XLS'
                        CHANGING L_FULLPATH.

  IF L_FULLPATH IS INITIAL. EXIT. ENDIF.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      BIN_FILESIZE = L_DOC_SIZE
      FILENAME     = L_FULLPATH
      FILETYPE     = 'BIN'
    TABLES
      DATA_TAB     = LT_DOC_DATA.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO DISPLAY LIKE SY-MSGTY
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    EXIT.
  ENDIF.

  PERFORM EXECUTE_FILE USING L_FULLPATH.  "전체경로

ENDFORM.                    " GUI_DOWNLOAD_SMW0

*&---------------------------------------------------------------------*
*&      Form  HOLIDAY_GET
*&---------------------------------------------------------------------*
*  휴일인지 여부 체크 및 다음(이전) 영업일 찾는다
*&---------------------------------------------------------------------*
FORM HOLIDAY_GET USING    P_GB           " ''(휴일인지 체크), '1'(다음 영업일), '-1'(이전 영업일)
                          P_SDATE        "기준일
                 CHANGING P_NEXT_WDATE.  "다음영업일 or 이전영업일

  DATA: LT_HOLIDAY TYPE ISCAL_DAY OCCURS 0 WITH HEADER LINE,
        L_FR_DATE  TYPE D,
        L_TO_DATE  TYPE D.

  CASE P_GB.
    WHEN ''.    "영업일 여부 체크, 영업일이면 P_NEXT_WDATE = '00000000'
      L_FR_DATE = P_SDATE.
      L_TO_DATE = P_SDATE.
    WHEN '1'.   "다음 영업일 구함
      L_FR_DATE = P_SDATE.
      L_TO_DATE = P_SDATE + 31.
    WHEN '-1'.  "이전 영업일 구함
      L_FR_DATE = P_SDATE - 31.
      L_TO_DATE = P_SDATE.
  ENDCASE.

  CALL FUNCTION 'HOLIDAY_GET'
    EXPORTING
*     HOLIDAY_CALENDAR                 = ' '
      FACTORY_CALENDAR                 = 'KR'       "' '
      DATE_FROM                        = L_FR_DATE
      DATE_TO                          = L_TO_DATE
*   IMPORTING
*     YEAR_OF_VALID_FROM               =
*     YEAR_OF_VALID_TO                 =
*     RETURNCODE                       =
    TABLES
      HOLIDAYS                         = LT_HOLIDAY
    EXCEPTIONS
     FACTORY_CALENDAR_NOT_FOUND       = 1
     HOLIDAY_CALENDAR_NOT_FOUND       = 2
     DATE_HAS_INVALID_FORMAT          = 3
     DATE_INCONSISTENCY               = 4
     OTHERS                           = 5            .

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO DISPLAY LIKE SY-MSGTY
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  SORT LT_HOLIDAY.

* 구분에 따른 처리
  CASE P_GB.

    WHEN ''.
      READ TABLE LT_HOLIDAY WITH KEY DATE = P_SDATE BINARY SEARCH.
      IF SY-SUBRC = 0.
        P_NEXT_WDATE = P_SDATE.
        IF LT_HOLIDAY-TXT_SHORT IS NOT INITIAL.
          MESSAGE S000(FB) WITH P_SDATE '은' LT_HOLIDAY-TXT_SHORT '입니다.'.
        ELSE.
          MESSAGE S000(FB) WITH P_SDATE '은 휴일입니다.'.
        ENDIF.
        EXIT.
      ENDIF.
      CLEAR P_NEXT_WDATE.

    WHEN '1'.
      DO 31 TIMES.
        P_NEXT_WDATE = L_FR_DATE + SY-INDEX.  "1.
        READ TABLE LT_HOLIDAY WITH KEY DATE = P_NEXT_WDATE BINARY SEARCH.
        IF SY-SUBRC <> 0. EXIT. ENDIF.
      ENDDO.

    WHEN '-1'.
      DO 31 TIMES.
        P_NEXT_WDATE = L_TO_DATE - SY-INDEX.  "1.
        READ TABLE LT_HOLIDAY WITH KEY DATE = P_NEXT_WDATE BINARY SEARCH.
        IF SY-SUBRC <> 0. EXIT. ENDIF.
      ENDDO.

  ENDCASE.

ENDFORM.                    " HOLIDAY_GET

*&---------------------------------------------------------------------*
*&      Form  JOB_CLOSE
*&---------------------------------------------------------------------*
*  백그라운드 JOB을 CLOSE(실행)한다.
*----------------------------------------------------------------------*
FORM JOB_CLOSE USING P_JOBNAME
                     P_JOBCOUNT
                     P_STRTIMMED.    "즉시 실행 여부

  CALL FUNCTION 'JOB_CLOSE'
    EXPORTING
*     AT_OPMODE                         = ' '
*     AT_OPMODE_PERIODIC                = ' '
*     CALENDAR_ID                       = ' '
*     EVENT_ID                          = ' '
*     EVENT_PARAM                       = ' '
*     EVENT_PERIODIC                    = ' '
      JOBCOUNT                          = P_JOBCOUNT
      JOBNAME                           = P_JOBNAME
*     LASTSTRTDT                        = NO_DATE
*     LASTSTRTTM                        = NO_TIME
*     PRDDAYS                           = 0
*     PRDHOURS                          = 0
*     PRDMINS                           = 0
*     PRDMONTHS                         = 0
*     PRDWEEKS                          = 0
*     PREDJOB_CHECKSTAT                 = ' '
*     PRED_JOBCOUNT                     = ' '
*     PRED_JOBNAME                      = ' '
*     SDLSTRTDT                         = NO_DATE
*     SDLSTRTTM                         = NO_TIME
*     STARTDATE_RESTRICTION             = BTC_PROCESS_ALWAYS
      STRTIMMED                         = P_STRTIMMED          "즉시 실행의 경우 'X'  "' '
*     TARGETSYSTEM                      = ' '
*     START_ON_WORKDAY_NOT_BEFORE       = SY-DATUM
*     START_ON_WORKDAY_NR               = 0
*     WORKDAY_COUNT_DIRECTION           = 0
*     RECIPIENT_OBJ                     =
*     TARGETSERVER                      = ' '
*     DONT_RELEASE                      = ' '
*     TARGETGROUP                       = ' '
*     DIRECT_START                      =
*   IMPORTING
*     JOB_WAS_RELEASED                  =
*   CHANGING
*     RET                               =
    EXCEPTIONS
     CANT_START_IMMEDIATE              = 1
     INVALID_STARTDATE                 = 2
     JOBNAME_MISSING                   = 3
     JOB_CLOSE_FAILED                  = 4
     JOB_NOSTEPS                       = 5
     JOB_NOTEX                         = 6
     LOCK_FAILED                       = 7
     INVALID_TARGET                    = 8
     OTHERS                            = 9            .

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO DISPLAY LIKE SY-MSGTY
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " JOB_CLOSE

*&---------------------------------------------------------------------*
*&      Form  JOB_OPEN
*&---------------------------------------------------------------------*
*  백그라운드 JOB을 생성한다.
*----------------------------------------------------------------------*
FORM JOB_OPEN USING    P_JOBNAME
              CHANGING P_JOBCOUNT.

  CLEAR P_JOBCOUNT.

  CALL FUNCTION 'JOB_OPEN'
    EXPORTING
*     DELANFREP              = ' '
*     JOBGROUP               = ' '
      JOBNAME                = P_JOBNAME
*     SDLSTRTDT              = NO_DATE
*     SDLSTRTTM              = NO_TIME
*     JOBCLASS               =
    IMPORTING
      JOBCOUNT               = P_JOBCOUNT
*   CHANGING
*     RET                    =
    EXCEPTIONS
      CANT_CREATE_JOB        = 1
      INVALID_JOB_DATA       = 2
      JOBNAME_MISSING        = 3
      OTHERS                 = 4            .

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO DISPLAY LIKE SY-MSGTY
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " JOB_OPENUSH
*&---------------------------------------------------------------------*
*&      Form  K_HIERARCHY_TABLES_READ
*&---------------------------------------------------------------------*
*  코스트센타그룹(0101),원가요소그룹(0102) 등에 대한 노드,값 등을 구한다
*----------------------------------------------------------------------*
FORM K_HIERARCHY_TABLES_READ TABLES ET_NODES  STRUCTURE GRPOBJECTS
                                    ET_VALUES STRUCTURE GRPVALUES
                                    ET_MASTER STRUCTURE GRPMDLINE
                             USING  P_CLASS    "0101, 0102 등등
                                    P_KOKRS
                                    P_SETID.   "CLASS,KOKRS 합하지 않은 값

  CLEAR: ET_NODES,  ET_NODES[],
         ET_VALUES, ET_VALUES[],
         ET_MASTER, ET_MASTER[].

  DATA: LS_MASTER   LIKE GRPHP1,
        L_SETID     LIKE SETHIER-SETID,
        L_INFO      LIKE GRPHINFO,
        L_OVERWRITE LIKE SY-DATAR.

  CONCATENATE P_CLASS P_KOKRS P_SETID INTO L_SETID.

  LS_MASTER-MDCHECK  = 'X'.
  LS_MASTER-BREAKINT = 'X'.
  LS_MASTER-SHOWTXT  = 'X'.

  CALL FUNCTION 'K_HIERARCHY_TABLES_READ'
    EXPORTING
      E_CLASS                           = P_CLASS
      E_SETID                           = L_SETID    "P_SETID
      E_KOKRS                           = P_KOKRS
*     E_MANDT                           =
      E_MASTER_DATA                     = LS_MASTER
*     E_STRUCTURE                       =
*     E_REPLACE_CLASS                   =
*     E_REPLACE_UNIT                    =
*     E_REPLACE_TABLE                   = ' '
*     E_REPLACE_FIELD                   = ' '
*     E_SUFFIX                          =
*     E_OLD_LINE_LEVEL                  = 0
*   IMPORTING
*     I_DOUBLE_CHECK                    =
*     I_MASTER_DATA                     =
    TABLES
      T_NODES                           = ET_NODES
      T_VALUES                          = ET_VALUES
      T_MASTER_DATA                     = ET_MASTER
*     T_FORMULA                         =
*     T_FIELD_INFO                      =
*     T_NODE_LIST_OVERWRITE             =
    CHANGING
      C_INFO                            = L_INFO
      C_OVERWRITE                       = L_OVERWRITE
    EXCEPTIONS
     NO_CONTROLLING_AREA               = 1
     NO_CHART_OF_ACCOUNT               = 2
     DIFFERENT_CONTROLLING_AREAS       = 3
     DIFFERENT_CHART_OF_ACCOUNTS       = 4
     SET_NOT_FOUND                     = 5
     ILLEGAL_FIELD_REPLACEMENT         = 6
     ILLEGAL_TABLE_REPLACEMENT         = 7
     FM_RAISE                          = 8
     CONVERT_ERROR                     = 9
     NO_OVERWRITE_STANDARD_HIER        = 10
     NO_BUKRS_FOR_KOKRS                = 11
     OTHERS                            = 12            .

  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                    " K_HIERARCHY_TABLES_READ

*&---------------------------------------------------------------------*
*&      Form  KOSTL_OBJECT_KEY_GET
*&---------------------------------------------------------------------*
*  코스트센터에 대한 오브젝트번호 제공
*----------------------------------------------------------------------*
FORM KOSTL_OBJECT_KEY_GET USING    P_KOKRS
                                   P_KOSTL
                          CHANGING P_OBJNR.

  CLEAR P_OBJNR.

  CALL FUNCTION 'K_KOSTL_OBJECT_KEY_GET'
    EXPORTING
      KOKRS = P_KOKRS
      KOSTL = P_KOSTL
    IMPORTING
      OBJNR = P_OBJNR.

ENDFORM.                    " KOSTL_OBJECT_KEY_GET

*&---------------------------------------------------------------------*
*&      Form  MESSAGE_APPEND_IT
*&---------------------------------------------------------------------*
*  Message를 IT에 추가한다
*----------------------------------------------------------------------*
FORM MESSAGE_APPEND_IT TABLES PT_MSG STRUCTURE FIMSG
                       USING  P_MSGTY P_MSGV1 P_MSGV2 P_MSGV3 P_MSGV4.

  CLEAR PT_MSG.
  PT_MSG-MSGID = 'FB'.
  PT_MSG-MSGTY = P_MSGTY.   "'E'.
  PT_MSG-MSGNO = '000'.
  PT_MSG-MSGV1 = P_MSGV1.
  PT_MSG-MSGV2 = P_MSGV2.
  PT_MSG-MSGV3 = P_MSGV3.
  PT_MSG-MSGV4 = P_MSGV4.
  APPEND PT_MSG.

ENDFORM.                    " MESSAGE_APPEND_IT

*&---------------------------------------------------------------------*
*&      Form  MSG_BUILD_BAPI
*&---------------------------------------------------------------------*
*  BAPI 수행 후 Message를 한 문장으로 만들어준다
*----------------------------------------------------------------------*
FORM MSG_BUILD_BAPI USING    IS_RET STRUCTURE BAPIRET2
                    CHANGING E_MSG.

  CLEAR E_MSG.

  CALL FUNCTION 'SX_MESSAGE_TEXT_BUILD'
    EXPORTING
      MSGID               = IS_RET-ID
      MSGNR               = IS_RET-NUMBER
      MSGV1               = IS_RET-MESSAGE_V1
      MSGV2               = IS_RET-MESSAGE_V2
      MSGV3               = IS_RET-MESSAGE_V3
      MSGV4               = IS_RET-MESSAGE_V4
    IMPORTING
      MESSAGE_TEXT_OUTPUT = E_MSG.

*  MESSAGE ID IS_RET-ID TYPE 'S' NUMBER IS_RET-NUMBER
*        WITH IS_RET-MESSAGE_V1
*             IS_RET-MESSAGE_V2
*             IS_RET-MESSAGE_V3
*             IS_RET-MESSAGE_V4
*        INTO E_MSG.

ENDFORM.                    " MSG_BUILD_BAPI

*&---------------------------------------------------------------------*
*&      Form  MESSAGE_BUILD_BDC
*&---------------------------------------------------------------------*
*  BDC 수행 후 Message를 한 문장으로 만들어준다
*----------------------------------------------------------------------*
FORM MESSAGE_BUILD_BDC USING    PS_STR STRUCTURE BDCMSGCOLL
                       CHANGING P_MSG.

  CLEAR P_MSG.

  CALL FUNCTION 'SX_MESSAGE_TEXT_BUILD'
    EXPORTING
      MSGID               = PS_STR-MSGID
      MSGNR               = PS_STR-MSGNR
      MSGV1               = PS_STR-MSGV1
      MSGV2               = PS_STR-MSGV2
      MSGV3               = PS_STR-MSGV3
      MSGV4               = PS_STR-MSGV4
    IMPORTING
      MESSAGE_TEXT_OUTPUT = P_MSG.

ENDFORM.                    " MESSAGE_BUILD_BDC

*&---------------------------------------------------------------------*
*&      Form  MESSAGE_TEXT_BUILD
*&---------------------------------------------------------------------*
*  Message를 한 문장으로 만들어준다
*----------------------------------------------------------------------*
FORM MESSAGE_TEXT_BUILD USING    SYST STRUCTURE SYST
                        CHANGING P_MSG.

  CLEAR P_MSG.

  CALL FUNCTION 'SX_MESSAGE_TEXT_BUILD'
    EXPORTING
      MSGID               = SYST-MSGID
      MSGNR               = SYST-MSGNO
      MSGV1               = SYST-MSGV1
      MSGV2               = SYST-MSGV2
      MSGV3               = SYST-MSGV3
      MSGV4               = SYST-MSGV4
    IMPORTING
      MESSAGE_TEXT_OUTPUT = P_MSG.

ENDFORM.                    " MESSAGE_TEXT_BUILD

*&---------------------------------------------------------------------*
*&      Form  MSG_POP_BAPI
*&---------------------------------------------------------------------*
*  Message IT를 팝업으로 띄운다 : BAPI 구조체
*----------------------------------------------------------------------*
FORM MSG_POP_BAPI TABLES PT_RET STRUCTURE BAPIRET2.

  DATA: BEGIN OF LT_MSG OCCURS 0,
          ARBGB LIKE SMESG-ARBGB,    "Message ID
          MSGTY LIKE SMESG-MSGTY,    "Message Type
          TXTNR LIKE SMESG-TXTNR,    "Message Number
          MSGV1 LIKE SMESG-MSGV1,    "Message Parameter
          MSGV2 LIKE SMESG-MSGV2,    "Message Parameter
          MSGV3 LIKE SMESG-MSGV3,    "Message Parameter
          MSGV4 LIKE SMESG-MSGV4,    "Message Parameter
        END OF LT_MSG.

  LOOP AT PT_RET.

    CLEAR LT_MSG.

    LT_MSG-ARBGB = PT_RET-ID.            "Message ID
    LT_MSG-MSGTY = PT_RET-TYPE.          "Message Type
    LT_MSG-TXTNR = PT_RET-NUMBER.        "Message Number
    LT_MSG-MSGV1 = PT_RET-MESSAGE_V1.    "Message Parameter
    LT_MSG-MSGV2 = PT_RET-MESSAGE_V2.    "Message Parameter
    LT_MSG-MSGV3 = PT_RET-MESSAGE_V3.    "Message Parameter
    LT_MSG-MSGV4 = PT_RET-MESSAGE_V4.    "Message Parameter

    APPEND LT_MSG.

  ENDLOOP.

* Message 출력 초기화
  CALL FUNCTION 'MESSAGES_INITIALIZE'.

* Message Store
  LOOP AT LT_MSG.
    CALL FUNCTION 'MESSAGE_STORE'
      EXPORTING
        ARBGB = LT_MSG-ARBGB
        MSGTY = LT_MSG-MSGTY
        MSGV1 = LT_MSG-MSGV1
        MSGV2 = LT_MSG-MSGV2
        MSGV3 = LT_MSG-MSGV3
        MSGV4 = LT_MSG-MSGV4
        TXTNR = LT_MSG-TXTNR.
  ENDLOOP.

* Message Show
  CALL FUNCTION 'MESSAGES_SHOW'
    EXPORTING
*     CORRECTIONS_OPTION          = ' '
*     CORRECTIONS_FUNC_TEXT       = ' '
*     LINE_FROM                   = ' '
*     LINE_TO                     = ' '
*     OBJECT                      = ' '
*     SEND_IF_ONE                 = ' '
*     BATCH_LIST_TYPE             = 'J'
      SHOW_LINNO                  = ' '               "'X'
*     SHOW_LINNO_TEXT             = ' '
*     SHOW_LINNO_TEXT_LEN         = '3'
*     I_USE_GRID                  = ' '
*     I_AMODAL_WINDOW             = ' '
*     MSG_SELECT_FUNC             = ' '
*     MSG_SELECT_FUNC_TEXT        = ' '
*   IMPORTING
*     CORRECTIONS_WANTED          =
*     E_EXIT_COMMAND              =
*     MSG_SELECTED                =
    EXCEPTIONS
      INCONSISTENT_RANGE          = 1
      NO_MESSAGES                 = 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.                    " MSG_POP_BAPI

*&---------------------------------------------------------------------*
*&      Form  MSG_POP_BDC
*&---------------------------------------------------------------------*
*  Message IT를 팝업으로 띄운다 : BDC 구조체
*----------------------------------------------------------------------*
FORM MSG_POP_BDC TABLES PT_MSG STRUCTURE BDCMSGCOLL.

  DATA: BEGIN OF LT_MSG OCCURS 0,
          ARBGB LIKE SMESG-ARBGB,    "Message ID
          MSGTY LIKE SMESG-MSGTY,    "Message Type
          TXTNR LIKE SMESG-TXTNR,    "Message Number
          MSGV1 LIKE SMESG-MSGV1,    "Message Parameter
          MSGV2 LIKE SMESG-MSGV2,    "Message Parameter
          MSGV3 LIKE SMESG-MSGV3,    "Message Parameter
          MSGV4 LIKE SMESG-MSGV4,    "Message Parameter
        END OF LT_MSG.

  LOOP AT PT_MSG.
    LT_MSG-ARBGB = PT_MSG-MSGID.    "Message ID
    LT_MSG-MSGTY = PT_MSG-MSGTYP.   "Message Type
    LT_MSG-TXTNR = PT_MSG-MSGNR.    "Message Number
    LT_MSG-MSGV1 = PT_MSG-MSGV1.    "Message Parameter
    LT_MSG-MSGV2 = PT_MSG-MSGV2.    "Message Parameter
    LT_MSG-MSGV3 = PT_MSG-MSGV3.    "Message Parameter
    LT_MSG-MSGV4 = PT_MSG-MSGV4.    "Message Parameter
    APPEND LT_MSG.
  ENDLOOP.

* Message 출력 초기화
  CALL FUNCTION 'MESSAGES_INITIALIZE'.

* Message Store
  LOOP AT LT_MSG.
    CALL FUNCTION 'MESSAGE_STORE'
      EXPORTING
        ARBGB = LT_MSG-ARBGB
        MSGTY = LT_MSG-MSGTY
        MSGV1 = LT_MSG-MSGV1
        MSGV2 = LT_MSG-MSGV2
        MSGV3 = LT_MSG-MSGV3
        MSGV4 = LT_MSG-MSGV4
        TXTNR = LT_MSG-TXTNR.
  ENDLOOP.

* Message Show
  CALL FUNCTION 'MESSAGES_SHOW'
    EXPORTING
      SHOW_LINNO = ' '.

ENDFORM.                    " MSG_POP_BDC

*&---------------------------------------------------------------------*
*&      Form  MSG_POP_FI
*&---------------------------------------------------------------------*
*  Message IT를 팝업으로 띄운다 : FI 구조체
*----------------------------------------------------------------------*
FORM MSG_POP_FI TABLES PT_MSG STRUCTURE FIMSG.

  DATA: BEGIN OF LT_MSG OCCURS 0,
          ARBGB LIKE SMESG-ARBGB,    "Message ID
          MSGTY LIKE SMESG-MSGTY,    "Message Type
          TXTNR LIKE SMESG-TXTNR,    "Message Number
          MSGV1 LIKE SMESG-MSGV1,    "Message Parameter
          MSGV2 LIKE SMESG-MSGV2,    "Message Parameter
          MSGV3 LIKE SMESG-MSGV3,    "Message Parameter
          MSGV4 LIKE SMESG-MSGV4,    "Message Parameter
        END OF LT_MSG.

  IF PT_MSG[] IS INITIAL. EXIT. ENDIF.

  LOOP AT PT_MSG.
    LT_MSG-ARBGB = PT_MSG-MSGID.    "Message ID
    LT_MSG-MSGTY = PT_MSG-MSGTY.    "Message Type
    LT_MSG-TXTNR = PT_MSG-MSGNO.    "Message Number
    LT_MSG-MSGV1 = PT_MSG-MSGV1.    "Message Parameter
    LT_MSG-MSGV2 = PT_MSG-MSGV2.    "Message Parameter
    LT_MSG-MSGV3 = PT_MSG-MSGV3.    "Message Parameter
    LT_MSG-MSGV4 = PT_MSG-MSGV4.    "Message Parameter
    APPEND LT_MSG.
  ENDLOOP.

* Message 출력 초기화
  CALL FUNCTION 'MESSAGES_INITIALIZE'.

* Message Store
  LOOP AT LT_MSG.
    CALL FUNCTION 'MESSAGE_STORE'
      EXPORTING
        ARBGB = LT_MSG-ARBGB
        MSGTY = LT_MSG-MSGTY
        MSGV1 = LT_MSG-MSGV1
        MSGV2 = LT_MSG-MSGV2
        MSGV3 = LT_MSG-MSGV3
        MSGV4 = LT_MSG-MSGV4
        TXTNR = LT_MSG-TXTNR.
  ENDLOOP.

* Message Show
  CALL FUNCTION 'MESSAGES_SHOW'
    EXPORTING
      SHOW_LINNO = ' '.

ENDFORM.                    " MSG_POP_FI

*&---------------------------------------------------------------------*
*&      Form  MSG_SYST_TO_BAPI
*&---------------------------------------------------------------------*
*  SYST의 메시지 정보를 BAPI 메시지 정보로 변경
*&---------------------------------------------------------------------*
FORM MSG_SYST_TO_BAPI USING    IS_SYST STRUCTURE SYST
                               I_MSGTY
                      CHANGING ES_BAPI STRUCTURE BAPIRET2.

  ES_BAPI-ID         = IS_SYST-MSGID.
  ES_BAPI-TYPE       = I_MSGTY.         "IS_SYST-MSGTY.
  ES_BAPI-NUMBER     = IS_SYST-MSGNO.
  ES_BAPI-MESSAGE_V1 = IS_SYST-MSGV1.
  ES_BAPI-MESSAGE_V2 = IS_SYST-MSGV2.
  ES_BAPI-MESSAGE_V3 = IS_SYST-MSGV3.
  ES_BAPI-MESSAGE_V4 = IS_SYST-MSGV4.

  MESSAGE ID ES_BAPI-ID TYPE ES_BAPI-TYPE NUMBER ES_BAPI-NUMBER
        WITH ES_BAPI-MESSAGE_V1
             ES_BAPI-MESSAGE_V2
             ES_BAPI-MESSAGE_V3
             ES_BAPI-MESSAGE_V4
        INTO ES_BAPI-MESSAGE.

ENDFORM.                    " MSG_SYST_TO_BAPI

*&---------------------------------------------------------------------*
*&      Form  NUMBER_GET_NEXT
*&---------------------------------------------------------------------*
*  NUMBER RANGE 생성 : SNRO 참조
*&---------------------------------------------------------------------*
FORM NUMBER_GET_NEXT USING    P_NR_RANGE_NR
                              P_OBJECT
                     CHANGING P_NO.

  CLEAR P_NO.

  CALL FUNCTION 'NUMBER_GET_NEXT'
    EXPORTING
      NR_RANGE_NR             = P_NR_RANGE_NR               "'01'
      OBJECT                  = P_OBJECT                    "'ZCONO7'
*     QUANTITY                = '1'
*     SUBOBJECT               = ' '
*     TOYEAR                  = '0000'
*     IGNORE_BUFFER           = ' '
    IMPORTING
      NUMBER                  = P_NO
*     QUANTITY                =
*     RETURNCODE              =
    EXCEPTIONS
      INTERVAL_NOT_FOUND      = 1
      NUMBER_RANGE_NOT_INTERN = 2
      OBJECT_NOT_FOUND        = 3
      QUANTITY_IS_0           = 4
      QUANTITY_IS_NOT_1       = 5
      INTERVAL_OVERFLOW       = 6
      BUFFER_OVERFLOW         = 7
      OTHERS                  = 8.

  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.                    " NUMBER_GET_NEXT

*&---------------------------------------------------------------------*
*&      Form  NUMERIC_CHECK
*&---------------------------------------------------------------------*
*  Input값이 숫자값만으로 구성되었는지 체크
*&---------------------------------------------------------------------*
FORM NUMERIC_CHECK USING    P_IN_STR
                   CHANGING P_NUM.

  DATA: L_HTYPE LIKE DD01V-DATATYPE,
        L_STR(200).

  CLEAR P_NUM.

  L_STR = P_IN_STR.

  PERFORM STRING_REPLACE  USING    '-' ''
                                    CHANGING L_STR.
  PERFORM STRING_REPLACE  USING    '.' '/'
                                    CHANGING L_STR.
  PERFORM STRING_REPLACE  USING    '/' ''
                                    CHANGING L_STR.
  CONDENSE L_STR NO-GAPS.

  CALL FUNCTION 'NUMERIC_CHECK'
    EXPORTING
      STRING_IN  = L_STR
    IMPORTING
*     STRING_OUT =
      HTYPE      = L_HTYPE.

  IF L_HTYPE = 'NUMC'.
    P_NUM = 'X'.
  ENDIF.

ENDFORM.                    " NUMERIC_CHECK

*&---------------------------------------------------------------------*
*&      Form  POPUP_CONF
*&---------------------------------------------------------------------*
*  저장여부 등 팝업 질문창을 띄운다.   '1' = YES
*----------------------------------------------------------------------*
FORM POPUP_CONF USING    P_TEXT
                CHANGING P_ANSWER.

  CLEAR P_ANSWER.

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      TITLEBAR                    = 'Confirm'   "' '
*     DIAGNOSE_OBJECT             = ' '
      TEXT_QUESTION               = P_TEXT
*     TEXT_BUTTON_1               = 'Ja'(001)
*     ICON_BUTTON_1               = ' '
*     TEXT_BUTTON_2               = 'Nein'(002)
*     ICON_BUTTON_2               = ' '
*     DEFAULT_BUTTON              = '1'
*     DISPLAY_CANCEL_BUTTON       = 'X'
*     USERDEFINED_F1_HELP         = ' '
*     START_COLUMN                = 25
*     START_ROW                   = 6
*     POPUP_TYPE                  =
*     IV_QUICKINFO_BUTTON_1       = ' '
*     IV_QUICKINFO_BUTTON_2       = ' '
    IMPORTING
      ANSWER                      = P_ANSWER
*   TABLES
*     PARAMETER                   =
    EXCEPTIONS
      TEXT_NOT_FOUND              = 1
      OTHERS                      = 2            .

  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.                    " POPUP_CONF

*&---------------------------------------------------------------------*
*&      Form  POPUP_CONF2
*&---------------------------------------------------------------------*
*  팝업 질문창 : 버튼 이름을 지정할 수 있다
*----------------------------------------------------------------------*
FORM POPUP_CONF2 USING    P_TEXT
                          P_BTN1
                          P_BTN2
                          P_CANCEL
                 CHANGING P_ANSWER.

  CLEAR P_ANSWER.

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      TITLEBAR                    = 'Confirm'   "' '
*     DIAGNOSE_OBJECT             = ' '
      TEXT_QUESTION               = P_TEXT
      TEXT_BUTTON_1               = P_BTN1
*     ICON_BUTTON_1               = ' '
      TEXT_BUTTON_2               = P_BTN2
*     ICON_BUTTON_2               = ' '
*     DEFAULT_BUTTON              = '1'
      DISPLAY_CANCEL_BUTTON       = P_CANCEL
*     USERDEFINED_F1_HELP         = ' '
*     START_COLUMN                = 25
*     START_ROW                   = 6
*     POPUP_TYPE                  =
*     IV_QUICKINFO_BUTTON_1       = ' '
*     IV_QUICKINFO_BUTTON_2       = ' '
    IMPORTING
      ANSWER                      = P_ANSWER
*   TABLES
*     PARAMETER                   =
    EXCEPTIONS
      TEXT_NOT_FOUND              = 1
      OTHERS                      = 2            .

  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.                    " POPUP_CONF2

*&---------------------------------------------------------------------*
*&      Form  POPUP_CONF3
*&---------------------------------------------------------------------*
*  팝업 질문창 : 버튼 이름과 아이콘을 지정할 수 있다
*----------------------------------------------------------------------*
FORM POPUP_CONF3 USING    P_TEXT
                          P_BTN1 P_ICON1
                          P_BTN2 P_ICON2
                          P_CANCEL
                 CHANGING P_ANSWER.

  CLEAR P_ANSWER.

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      TITLEBAR                    = 'Confirm'   "' '
*     DIAGNOSE_OBJECT             = ' '
      TEXT_QUESTION               = P_TEXT
      TEXT_BUTTON_1               = P_BTN1
      ICON_BUTTON_1               = P_ICON1
      TEXT_BUTTON_2               = P_BTN2
      ICON_BUTTON_2               = P_ICON2
*     DEFAULT_BUTTON              = '1'
      DISPLAY_CANCEL_BUTTON       = P_CANCEL
*     USERDEFINED_F1_HELP         = ' '
*     START_COLUMN                = 25
*     START_ROW                   = 6
*     POPUP_TYPE                  =
*     IV_QUICKINFO_BUTTON_1       = ' '
*     IV_QUICKINFO_BUTTON_2       = ' '
    IMPORTING
      ANSWER                      = P_ANSWER
*   TABLES
*     PARAMETER                   =
    EXCEPTIONS
      TEXT_NOT_FOUND              = 1
      OTHERS                      = 2            .

  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.                    " POPUP_CONF3

*&---------------------------------------------------------------------*
*&      Form  PROGRESS_DISPLAY
*&---------------------------------------------------------------------*
*  진행 Message 표시
*----------------------------------------------------------------------*
FORM PROGRESS_DISPLAY USING P_TEXT.

  CHECK P_TEXT <> ''.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
*     PERCENTAGE = 1
      TEXT       = P_TEXT.

ENDFORM.                    " PROGRESS_DISPLAY

*&---------------------------------------------------------------------*
*&      Form  PUT_SIGN_IN_FRONT
*&---------------------------------------------------------------------*
*  '-' 부호를 앞으로 보낸다
*----------------------------------------------------------------------*
FORM PUT_SIGN_IN_FRONT CHANGING P_VALUE.

  DATA: TEXT1(1) TYPE C.

  SEARCH P_VALUE FOR '-'.
  IF SY-SUBRC = 0 AND SY-FDPOS <> 0.
    SPLIT P_VALUE AT '-' INTO P_VALUE TEXT1.
    CONDENSE P_VALUE.
    CONCATENATE '-' P_VALUE INTO P_VALUE.
  ELSE.
    CONDENSE P_VALUE.
  ENDIF.

ENDFORM.                    " PUT_SIGN_IN_FRONT

*&---------------------------------------------------------------------*
*&      Form  READ_EXCHANGE_RATE
*&---------------------------------------------------------------------*
*  환율을 Return 한다
*----------------------------------------------------------------------*
FORM READ_EXCHANGE_RATE USING    P_DATE         "기준일자
                                 P_IN_CURR      "입력받은 통화
                                 P_OU_CURR      "변환할 통화
                                 P_TYPE         "M, BS, PL 등 (기말1001, 평균1002)
                        CHANGING P_EX_RATE.     "환율

  DATA: L_FFACT LIKE TCURR-FFACT,
        L_LFACT LIKE TCURR-TFACT.

  CALL FUNCTION 'READ_EXCHANGE_RATE'
    EXPORTING
*     CLIENT            = SY-MANDT
      DATE              = P_DATE
      FOREIGN_CURRENCY  = P_IN_CURR
      LOCAL_CURRENCY    = P_OU_CURR
      TYPE_OF_RATE      = P_TYPE
*     EXACT_DATE        = ' '
    IMPORTING
      EXCHANGE_RATE     = P_EX_RATE
      FOREIGN_FACTOR    = L_FFACT
      LOCAL_FACTOR      = L_LFACT
*     VALID_FROM_DATE   =
*     DERIVED_RATE_TYPE =
*     FIXED_RATE        =
*     OLDEST_RATE_FROM  =
    EXCEPTIONS
      NO_RATE_FOUND     = 1
      NO_FACTORS_FOUND  = 2
      NO_SPREAD_FOUND   = 3
      DERIVED_2_TIMES   = 4
      OVERFLOW          = 5
      ZERO_RATE         = 6
      OTHERS            = 7.

  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.                    " READ_EXCHANGE_RATE

*&---------------------------------------------------------------------*
*&      Form  READ_TEXT
*&---------------------------------------------------------------------*
FORM READ_TEXT TABLES ET_TLINE STRUCTURE TLINE
               USING  P_TDOBJECT
                      P_TDNAME
                      P_TDID.

  CLEAR: ET_TLINE, ET_TLINE[].

  CALL FUNCTION 'READ_TEXT'
    EXPORTING
*     CLIENT                        = SY-MANDT
      ID                            = P_TDID        "C_TDID
      LANGUAGE                      = SY-LANGU
      NAME                          = P_TDNAME
      OBJECT                        = P_TDOBJECT    "C_TDOBJECT
*     ARCHIVE_HANDLE                = 0
*     LOCAL_CAT                     = ' '
*   IMPORTING
*     HEADER                        =
    TABLES
      LINES                         = ET_TLINE
    EXCEPTIONS
     ID                            = 1
     LANGUAGE                      = 2
     NAME                          = 3
     NOT_FOUND                     = 4
     OBJECT                        = 5
     REFERENCE_CHECK               = 6
     WRONG_ACCESS_TO_ARCHIVE       = 7
     OTHERS                        = 8            .

  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.                    " READ_TEXT
*&---------------------------------------------------------------------*
*&      Form  READ_TEXT
*&---------------------------------------------------------------------*
FORM SAVE_TEXT TABLES ET_TLINE STRUCTURE TLINE
               USING  P_HEADER STRUCTURE THEAD.

  IF P_HEADER-TDSPRAS IS INITIAL.
    P_HEADER-TDSPRAS  = SY-LANGU.
  ENDIF.
  IF P_HEADER-TDFDATE IS INITIAL.
    P_HEADER-TDFDATE  = SY-DATUM.
  ENDIF.
  IF P_HEADER-TDFUSER IS INITIAL.
    P_HEADER-TDFUSER  = SY-UNAME.
  ENDIF.
  IF P_HEADER-TDFTIME IS INITIAL.
    P_HEADER-TDFTIME  = SY-UZEIT.
  ENDIF.

  CHECK ET_TLINE[] IS NOT INITIAL.

  CALL FUNCTION 'SAVE_TEXT'
  EXPORTING
    CLIENT                = SY-MANDT
    HEADER                = P_HEADER
*       INSERT                = ' '
*       SAVEMODE_DIRECT       = ' '
*       OWNER_SPECIFIED       = ' '
*       LOCAL_CAT             = ' '
*     IMPORTING
*       FUNCTION              =
*       NEWHEADER             =
  TABLES
    LINES                 = ET_TLINE
  EXCEPTIONS
    ID                    = 1
    LANGUAGE              = 2
    NAME                  = 3
    OBJECT                = 4
    OTHERS                = 5
          .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    MESSAGE S398(00) WITH '텍스트 정보를 저장 하였습니다.'.
  ENDIF.

ENDFORM.                    "SAVE_TEXT
*&---------------------------------------------------------------------*
*&      Form  READ_TEXT
*&---------------------------------------------------------------------*
FORM DELETE_TEXT USING P_OBJ P_TDNAME P_TDID P_SPRAS P_DIRECT.
  DATA : L_TDNAME LIKE THEAD-TDNAME.
  L_TDNAME = P_TDNAME.

  CALL FUNCTION 'DELETE_TEXT'
    EXPORTING
      ID              = P_TDID
      LANGUAGE        = P_SPRAS
      NAME            = L_TDNAME
      OBJECT          = P_OBJ
      SAVEMODE_DIRECT = P_DIRECT
    EXCEPTIONS
      NOT_FOUND       = 1
      OTHERS          = 2.
  IF SY-SUBRC <> 0.
*    00_fm ps_return 'E' '' '' p_m1 p_m2 p_m3 p_m4.
  ENDIF.

ENDFORM.                    "DELETE_TEXT
*&---------------------------------------------------------------------*
*&      Form  ROUND
*&---------------------------------------------------------------------*
*  반올림, 올림, 내림 함수
*&---------------------------------------------------------------------*
FORM ROUND USING    P_INPUT     "입력값
                    P_DECIMALS  " 2 (소수점3자리를 처리), -2 (십단위를 처리)
                    P_SIGN      " 'X' (반올림), '+'(올림), '-'(내림)
           CHANGING P_OUTPUT.

  DATA: L_SIGN.

  IF P_SIGN IS INITIAL.
    L_SIGN = 'X'.
  ELSE.
    L_SIGN = P_SIGN.
  ENDIF.

  CALL FUNCTION 'ROUND'
    EXPORTING
      DECIMALS      = P_DECIMALS                            "2, -2
      INPUT         = P_INPUT
      SIGN          = L_SIGN        "'X', '-', '+'
    IMPORTING
      OUTPUT        = P_OUTPUT
    EXCEPTIONS
      INPUT_INVALID = 1
      OVERFLOW      = 2
      TYPE_INVALID  = 3
      OTHERS        = 4.

  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.                    " ROUND

*&---------------------------------------------------------------------*
*&      Form  RS_GET_MAINPROGRAMS
*&---------------------------------------------------------------------*
*  INCLUDE프로그램을 던지면 MAIN프로그램을 RETURN한다.
*&---------------------------------------------------------------------*
FORM RS_GET_MAINPROGRAMS TABLES   ET_MAIN_PGM TYPE PROGRAMTAB
                         USING    P_INCLUDE
                         CHANGING P_MAIN_PGM.

  CLEAR: P_MAIN_PGM,
         ET_MAIN_PGM, ET_MAIN_PGM[].

  DATA: L_CNT TYPE I.

  CALL FUNCTION 'RS_GET_MAINPROGRAMS'
    EXPORTING
      NAME                   = P_INCLUDE
    IMPORTING
      NUMBER_OF_MAINPROGRAMS = L_CNT
    TABLES
      MAINPROGRAMS           = ET_MAIN_PGM
    EXCEPTIONS
      CANCELLED              = 1
      OTHERS                 = 2.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO DISPLAY LIKE SY-MSGTY
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  DELETE ET_MAIN_PGM WHERE PROGRAM(1) = '!'.

  IF ET_MAIN_PGM[] IS INITIAL. EXIT. ENDIF.

  READ TABLE ET_MAIN_PGM INDEX 1.
  IF SY-SUBRC = 0.
    P_MAIN_PGM = ET_MAIN_PGM-PROGRAM.
    EXIT.
  ENDIF.

ENDFORM.                    " RS_GET_MAINPROGRAMS

*&---------------------------------------------------------------------*
*&      Form  RS_TOOL_ACCESS
*&---------------------------------------------------------------------*
*  오브젝트(프로그램 or FUNCTION 등) 를 조회한다.
*&---------------------------------------------------------------------*
FORM RS_TOOL_ACCESS USING P_OBJECT_NAME
                          P_OBJECT_TYPE
                          P_ENCLOSING_OBJ
                          P_POSITION.

  CALL FUNCTION 'RS_TOOL_ACCESS'
    EXPORTING
      OPERATION                 = 'SHOW'
      OBJECT_NAME               = P_OBJECT_NAME
      OBJECT_TYPE               = P_OBJECT_TYPE
      ENCLOSING_OBJECT          = P_ENCLOSING_OBJ
      POSITION                  = P_POSITION          "' '
*     DEVCLASS                  =
*     INCLUDE                   =
*     VERSION                   = ' '
*     MONITOR_ACTIVATION        = 'X'
*     WB_MANAGER                =
*     IN_NEW_WINDOW             =
*     WITH_OBJECTLIST           = ' '
*     WITH_WORKLIST             = ' '
*   IMPORTING
*     NEW_NAME                  =
*     WB_TODO_REQUEST           =
*   TABLES
*     OBJLIST                   =
*   CHANGING
*     P_REQUEST                 = ' '
    EXCEPTIONS
      NOT_EXECUTED              = 1
      INVALID_OBJECT_TYPE       = 2
      OTHERS                    = 3            .

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO DISPLAY LIKE SY-MSGTY
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " RS_TOOL_ACCESS

*&---------------------------------------------------------------------*
*&      Form  SEL_CSKB_KATYP
*&---------------------------------------------------------------------*
*  원가요소 (관리회계 영역의 데이타 종속)
*----------------------------------------------------------------------*
FORM SEL_CSKB_KATYP USING    P_KOKRS
                             P_KSTAR
                    CHANGING P_KATYP.

  CLEAR P_KATYP.

  SELECT SINGLE KATYP        "원가요소범주
    INTO P_KATYP
    FROM CSKB
   WHERE KOKRS  = P_KOKRS
     AND KSTAR  = P_KSTAR
     AND DATBI >= SY-DATUM.

ENDFORM.                    " SEL_CSKB_KATYP

*&---------------------------------------------------------------------*
*&      Form  SEL_LFA1
*&---------------------------------------------------------------------*
*  공급업체 정보를 구한다
*----------------------------------------------------------------------*
FORM SEL_LFA1 USING    P_LIFNR
              CHANGING PS_LFA1 STRUCTURE LFA1.

  CLEAR PS_LFA1.

  IF P_LIFNR IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE *
    INTO CORRESPONDING FIELDS OF PS_LFA1
    FROM LFA1
   WHERE LIFNR = P_LIFNR.

  IF SY-SUBRC <> 0.
    MESSAGE S163(F2) WITH P_LIFNR.
  ENDIF.

ENDFORM.                                                    " SEL_LFA1

*&---------------------------------------------------------------------*
*&      Form  SEL_MARD
*&---------------------------------------------------------------------*
*  자재에 대한 저장위치데이타 재고 구함
*&---------------------------------------------------------------------*
FORM SEL_MARD USING    P_WERKS
                       P_MATNR
                       P_LGORT
              CHANGING P_LABST.

  CLEAR P_LABST.

  SELECT SINGLE LABST
    INTO P_LABST
    FROM MARD
   WHERE WERKS = P_WERKS
     AND MATNR = P_MATNR
     AND LGORT = P_LGORT.

ENDFORM.                    " SEL_MARD

*&---------------------------------------------------------------------*
*&      Form  SEL_PA0001_SNAME
*&---------------------------------------------------------------------*
*  사번으로 이름 조회
*----------------------------------------------------------------------*
FORM SEL_PA0001_SNAME USING    P_PERNR
                      CHANGING P_SNAME.

  CLEAR P_SNAME.

  IF P_PERNR IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE SNAME
    INTO P_SNAME
    FROM PA0001
   WHERE PERNR  = P_PERNR
     AND ENDDA >= SY-DATUM
     AND BEGDA <= SY-DATUM.

ENDFORM.                    " SEL_PA0001_SNAME

*&---------------------------------------------------------------------*
*&      Form  SEL_PRPS_OBJNR
*&---------------------------------------------------------------------*
*  WBS (작업분할구조) 요소 마스터 데이타에서 오브젝트 번호 구함
*----------------------------------------------------------------------*
FORM SEL_PRPS_OBJNR USING    P_PSPNR
                    CHANGING P_OBJNR.

  CLEAR P_OBJNR.

  SELECT SINGLE OBJNR
    INTO P_OBJNR
    FROM PRPS
   WHERE PSPNR = P_PSPNR.

ENDFORM.                    " SEL_PRPS_OBJNR

*&---------------------------------------------------------------------*
*&      Form  SEL_T001_WAERS
*&---------------------------------------------------------------------*
*  회사코드로 통화 구함
*&---------------------------------------------------------------------*
FORM SEL_T001_WAERS USING    P_BUKRS
                    CHANGING P_WAERS.

  CLEAR P_WAERS.

  IF P_BUKRS IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE WAERS
    INTO P_WAERS
    FROM T001
   WHERE BUKRS = P_BUKRS.

ENDFORM.                                " SEL_T001_WAERS

*&---------------------------------------------------------------------*
*&      Form  SEL_T001L
*&---------------------------------------------------------------------*
*  저장위치내역으로 저장위치 구함
*&---------------------------------------------------------------------*
FORM SEL_T001L USING    P_WERKS
                        P_LGOBE
               CHANGING P_LGORT.

  CLEAR P_LGORT.

  SELECT SINGLE LGORT
    INTO P_LGORT
    FROM T001L
   WHERE WERKS = P_WERKS
     AND LGOBE = P_LGOBE.

ENDFORM.                                                    " SEL_T001L

*&---------------------------------------------------------------------*
*&      Form  SEL_TJ02T
*&---------------------------------------------------------------------*
*  시스템 상태 4자리 코드로 시스템 상태 코드 구함
*&---------------------------------------------------------------------*
FORM SEL_TJ02T USING    P_TXT04
               CHANGING P_ISTAT.

  CLEAR P_ISTAT.

  SELECT SINGLE TJ02T~ISTAT
    INTO P_ISTAT
    FROM TJ02 JOIN TJ02T ON TJ02T~ISTAT = TJ02~ISTAT
   WHERE TJ02T~TXT04 = P_TXT04
     AND TJ02T~SPRAS = SY-LANGU
     AND TJ02~NODIS  = ''.

  IF SY-SUBRC <> 0.

    SELECT SINGLE TJ02T~ISTAT
      INTO P_ISTAT
      FROM TJ02 JOIN TJ02T ON TJ02T~ISTAT = TJ02~ISTAT
     WHERE TJ02T~TXT04 = P_TXT04
       AND TJ02~NODIS  = ''.

  ENDIF.

ENDFORM.                                                    " SEL_TJ02T

*&---------------------------------------------------------------------*
*&      Form  SEL_TKA01_ERKRS
*&---------------------------------------------------------------------*
*  관리회계영역 -> 경영 단위 구함
*----------------------------------------------------------------------*
FORM SEL_TKA01_ERKRS USING    P_KOKRS
                     CHANGING P_ERKRS.

  CLEAR P_ERKRS.

  IF P_KOKRS IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE ERKRS
    INTO P_ERKRS
    FROM TKA01
   WHERE KOKRS = P_KOKRS.

ENDFORM.                                       " SEL_TKA01_ERKRS

*&---------------------------------------------------------------------*
*&      Form  SEL_TKA03_MSEHI
*&---------------------------------------------------------------------*
*  통계 주요 지표 단위 구함
*----------------------------------------------------------------------*
FORM SEL_TKA03_MSEHI USING    P_KOKRS
                              P_STAGR
                     CHANGING P_MSEHI.

  CLEAR P_MSEHI.

  IF P_STAGR IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE MSEHI
    INTO P_MSEHI
    FROM TKA03
   WHERE KOKRS = P_KOKRS
     AND STAGR = P_STAGR.

ENDFORM.                                       " SEL_TKA03_MSEHI

*&---------------------------------------------------------------------*
*&      Form  SELECT_OPTIONS_RESTRICT
*&---------------------------------------------------------------------*
FORM SELECT_OPTIONS_RESTRICT USING PS_RESTRICT TYPE SSCR_RESTRICT.

  CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
    EXPORTING
*     PROGRAM                =
      RESTRICTION            = PS_RESTRICT
*     DB                     = ' '
    EXCEPTIONS
      TOO_LATE               = 1
      REPEATED               = 2
      SELOPT_WITHOUT_OPTIONS = 3
      SELOPT_WITHOUT_SIGNS   = 4
      INVALID_SIGN           = 5
      EMPTY_OPTION_LIST      = 6
      INVALID_KIND           = 7
      REPEATED_KIND_A        = 8
      OTHERS                 = 9.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

* INITIALIZATION 이벤트에 아래 소스 입력하면 됨

*  TYPE-POOLS: SSCR.
*
** Define the object to be passed to the RESTRICTION parameter
*  DATA: LS_RESTRICT TYPE SSCR_RESTRICT.
*
** Auxiliary objects for filling RESTRICT
*  DATA: LS_OPTLIST TYPE SSCR_OPT_LIST,
*        LS_ASS     TYPE SSCR_ASS.
*
** Restricting the MATNR selection to only EQ and 'BT'.
*  LS_OPTLIST-NAME = 'OBJECTKEY1'.
*  LS_OPTLIST-OPTIONS-EQ = 'X'.
*  "LS_OPTLIST-options-bt = 'X'.
*  APPEND LS_OPTLIST TO LS_RESTRICT-OPT_LIST_TAB.
*
*  LS_ASS-KIND    = 'S'.
*  LS_ASS-NAME    = 'SO_KOSTL'.
*  LS_ASS-SG_MAIN = 'I'.
*  LS_ASS-SG_ADDY = SPACE.
*  LS_ASS-OP_MAIN = 'OBJECTKEY1'.
*  APPEND LS_ASS TO LS_RESTRICT-ASS_TAB.
*
** Restricting the WERKS selection to CP, GE, LT, NE.
*  LS_OPTLIST-NAME       = 'OBJECTKEY2'.
*  LS_OPTLIST-OPTIONS-CP = 'X'.
*  LS_OPTLIST-OPTIONS-GE = 'X'.
*  LS_OPTLIST-OPTIONS-LT = 'X'.
*  LS_OPTLIST-OPTIONS-NE = 'X'.
*  APPEND LS_OPTLIST TO LS_RESTRICT-OPT_LIST_TAB.
*
*  LS_ASS-KIND    = 'S'.
*  LS_ASS-NAME    = 'SO_KSTAR'.
*  LS_ASS-SG_MAIN = 'I'.
*  LS_ASS-SG_ADDY = SPACE.
*  LS_ASS-OP_MAIN = 'OBJECTKEY2'.
*  APPEND LS_ASS TO LS_RESTRICT-ASS_TAB.
*
*  PERFORM SELECT_OPTIONS_RESTRICT  USING LS_RESTRICT.

ENDFORM.                    " SELECT_OPTIONS_RESTRICT

*&---------------------------------------------------------------------*
*&      Form  SET_DB_LOG
*&---------------------------------------------------------------------*
*  DB Log를 기록한다. Insert / Update
*----------------------------------------------------------------------*
FORM SET_DB_LOG USING    P_ONLY_AE
                CHANGING PS_STR.

  FIELD-SYMBOLS: <ERDAT>,
                 <ERZET>,
                 <ERNAM>,
                 <AEDAT>,
                 <AEZET>,
                 <AENAM>.

  IF P_ONLY_AE = ''.

    ASSIGN COMPONENT 'ERDAT' OF STRUCTURE PS_STR TO <ERDAT>.
    IF SY-SUBRC = 0. <ERDAT>  = SY-DATUM. ENDIF.
    ASSIGN COMPONENT 'ERZET' OF STRUCTURE PS_STR TO <ERZET>.
    IF SY-SUBRC = 0. <ERZET> = SY-UZEIT. ENDIF.
    ASSIGN COMPONENT 'ERNAM' OF STRUCTURE PS_STR TO <ERNAM>.
    IF SY-SUBRC = 0. <ERNAM> = SY-UNAME. ENDIF.

  ENDIF.

  ASSIGN COMPONENT 'AEDAT' OF STRUCTURE PS_STR TO <AEDAT>.
  IF SY-SUBRC = 0. <AEDAT>  = SY-DATUM. ENDIF.
  ASSIGN COMPONENT 'AEZET' OF STRUCTURE PS_STR TO <AEZET>.
  IF SY-SUBRC = 0. <AEZET> = SY-UZEIT. ENDIF.
  ASSIGN COMPONENT 'AENAM' OF STRUCTURE PS_STR TO <AENAM>.
  IF SY-SUBRC = 0. <AENAM> = SY-UNAME. ENDIF.

ENDFORM.                    " SET_DB_LOG

*&---------------------------------------------------------------------*
*&      Form  SET_DB_LOG_I
*&---------------------------------------------------------------------*
*  DB Log를 기록한다. Insert
*----------------------------------------------------------------------*
FORM SET_DB_LOG_I CHANGING P_AEDAT P_AEZET P_AENAM
                           P_ERDAT P_ERZET P_ERNAM.

  P_AEDAT = P_ERDAT = SY-DATUM.
  P_AEZET = P_ERZET = SY-UZEIT.
  P_AENAM = P_ERNAM = SY-UNAME.

ENDFORM.                    " SET_DB_LOG_I

*&---------------------------------------------------------------------*
*&      Form  SET_DB_LOG_U
*&---------------------------------------------------------------------*
*  DB Log를 기록한다. Update
*----------------------------------------------------------------------*
FORM SET_DB_LOG_U CHANGING P_AEDAT P_AEZET P_AENAM.

  P_AEDAT = SY-DATUM.
  P_AEZET = SY-UZEIT.
  P_AENAM = SY-UNAME.

ENDFORM.                    " SET_DB_LOG_U

*&---------------------------------------------------------------------*
*&      Form  SMAN_IF_CONVERT_TO
*&---------------------------------------------------------------------*
*  테이블필드정보로 CONVERSION 수행
*  연관 FORM : DDIF_FIELDINFO_GET
*----------------------------------------------------------------------*
FORM SMAN_IF_CONVERT_TO USING    PS_DFIES STRUCTURE DFIES
                                 P_IN_VAL
                                 P_INT_EXT
                        CHANGING P_OU_VAL.

  CASE P_INT_EXT.

    WHEN 'I'.
      CALL FUNCTION 'SMAN_IF_CONVERT_TO_INTERN'
        EXPORTING
          LS_STRUC        = PS_DFIES
          LD_INPUT_VALUE  = P_IN_VAL
        IMPORTING
          LD_OUTPUT_VALUE = P_OU_VAL.

    WHEN 'E'.
      CALL FUNCTION 'SMAN_IF_CONVERT_TO_EXTERN'
        EXPORTING
          LS_STRUC        = PS_DFIES
          LD_INPUT_VALUE  = P_IN_VAL
        IMPORTING
          LD_OUTPUT_VALUE = P_OU_VAL.

  ENDCASE.

ENDFORM.                    " SMAN_IF_CONVERT_TO

*&---------------------------------------------------------------------*
*&      Form  SSF_FUNCTION_MODULE_NAME
*&---------------------------------------------------------------------*
*  SMARTFORM 이름으로 FUNCTION MODULE 이름을 구한다.
*----------------------------------------------------------------------*
FORM SSF_FUNCTION_MODULE_NAME USING    P_FORMNAME
                              CHANGING P_FM_NAME.

  CLEAR P_FM_NAME.

  DATA: L_FORMNAME TYPE TDSFNAME,
        L_FM_NAME  TYPE RS38L_FNAM.

  L_FORMNAME = P_FORMNAME.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = L_FORMNAME
*     VARIANT            = ' '
*     DIRECT_CALL        = ' '
    IMPORTING
      FM_NAME            = L_FM_NAME
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO DISPLAY LIKE SY-MSGTY
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  P_FM_NAME = L_FM_NAME.

ENDFORM.                    " SSF_FUNCTION_MODULE_NAME

*&---------------------------------------------------------------------*
*&      Form  STRING_LENGTH
*&---------------------------------------------------------------------*
*  문자열의 길이를 구한다 (한글 2BITE)
*----------------------------------------------------------------------*
FORM STRING_LENGTH USING    P_STR
                   CHANGING P_LEN.

  DATA: L_LEN TYPE I.

  CALL METHOD CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH
    EXPORTING
      FIELD = P_STR      "문자열
    RECEIVING
      LEN   = L_LEN.                                        "길이(한글2자)

  P_LEN = L_LEN.

ENDFORM.                    " STRING_LENGTH

*&---------------------------------------------------------------------*
*&      Form  STRING_REPLACE
*&---------------------------------------------------------------------*
*   '.' 은 작동하지 않는다. '/' 등 다른걸로 변경한후 작업
*&---------------------------------------------------------------------*
FORM STRING_REPLACE USING    P_FR         " ',' or '-' or '/' 등등
                             P_TO         " ''
                    CHANGING P_TEXT.      " 변경할 문자열

  DATA: L_TEXT(250).

  IF P_TEXT IS INITIAL. EXIT. ENDIF.

  L_TEXT = P_TEXT.

  CALL FUNCTION 'STRING_REPLACE'
    EXPORTING
      PATTERN                   = P_FR
      SUBSTITUTE                = P_TO
*     MAX_REPLACES              = 0
*   IMPORTING
*     NUMBER_OF_REPLACES        =
    CHANGING
      TEXT                      = L_TEXT
    EXCEPTIONS
      WRONG_STRING_LENGTH       = 1
      OTHERS                    = 2            .

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  P_TEXT = L_TEXT.

ENDFORM.                    " STRING_REPLACE

*&---------------------------------------------------------------------*
*&      Form  STRING_REPLACE_DATE
*&---------------------------------------------------------------------*
*   '.' 은 작동하지 않는다. '/' 등 다른걸로 변경한후 작업
*&---------------------------------------------------------------------*
FORM STRING_REPLACE_DATE CHANGING P_DATE_CHAR.  " 변경할 문자열

  PERFORM STRING_REPLACE USING    '.' '/'
                         CHANGING P_DATE_CHAR.      " 변경할 문자열

  PERFORM STRING_REPLACE USING    '/' ' '
                         CHANGING P_DATE_CHAR.      " 변경할 문자열

  PERFORM STRING_REPLACE USING    '-' ' '
                         CHANGING P_DATE_CHAR.      " 변경할 문자열

ENDFORM.                    " STRING_REPLACE_DATE

*&---------------------------------------------------------------------*
*&      Form  TR_OBJECT_JUMP_TO_TOOL
*&---------------------------------------------------------------------*
*  오브젝트의 소스로 이동한다. (TADIR 테이블 참조)
*&---------------------------------------------------------------------*
FORM TR_OBJECT_JUMP_TO_TOOL USING P_PGMID       "'LIMU'
                                  P_OBJECT      "'REPS' ...
                                  P_OBJ_NAME.   "프로그램명 ...

  DATA: L_PGMID    LIKE E071-PGMID,
        L_OBJECT   LIKE E071-OBJECT,
        L_OBJ_NAME LIKE E071-OBJ_NAME.

  L_PGMID    = P_PGMID.
  L_OBJECT   = P_OBJECT.
  L_OBJ_NAME = P_OBJ_NAME.

  CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL'
    EXPORTING
      IV_PGMID          = L_PGMID
      IV_OBJECT         = L_OBJECT
      IV_OBJ_NAME       = L_OBJ_NAME
*     IV_ACTION         = 'SHOW'
    EXCEPTIONS
      JUMP_NOT_POSSIBLE = 1
      OTHERS            = 2.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO DISPLAY LIKE SY-MSGTY
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " TR_OBJECT_JUMP_TO_TOOL

*&---------------------------------------------------------------------*
*&      Form  TXT_AGR_NAME
*&---------------------------------------------------------------------*
*  ROLE 에 대한 TEXT 를 읽는다.
*----------------------------------------------------------------------*
FORM TXT_AGR_NAME USING    I_AGR_NAME
                  CHANGING E_TEXT.

  CLEAR E_TEXT.

  DATA: L_TEXT LIKE AGR_TEXTS-TEXT.

  SELECT SINGLE TEXT INTO L_TEXT FROM AGR_TEXTS
   WHERE AGR_NAME = I_AGR_NAME
     AND SPRAS    = SY-LANGU
     AND LINE     = '0'.

  IF SY-SUBRC <> 0.
    SELECT SINGLE TEXT INTO L_TEXT FROM AGR_TEXTS
     WHERE AGR_NAME = I_AGR_NAME
       AND LINE     = '0'.
  ENDIF.

  E_TEXT = L_TEXT.

ENDFORM.                    " TXT_AGR_NAME

*&---------------------------------------------------------------------*
*&      Form  TXT_ATNAM
*&---------------------------------------------------------------------*
*  Characteristic description
*----------------------------------------------------------------------*
FORM TXT_ATNAM USING    P_ATNAM
               CHANGING P_ATBEZ.

  CLEAR P_ATBEZ.

  IF P_ATNAM IS INITIAL. EXIT. ENDIF.

  DATA: L_ATINN LIKE CABNT-ATINN.

  CALL FUNCTION 'CONVERSION_EXIT_ATINN_INPUT'
    EXPORTING
      INPUT  = P_ATNAM
    IMPORTING
      OUTPUT = L_ATINN.

  SELECT SINGLE ATBEZ
    INTO P_ATBEZ
    FROM CABNT
   WHERE ATINN = L_ATINN
     AND SPRAS = SY-LANGU.

ENDFORM.                    " TXT_ATNAM

*&---------------------------------------------------------------------*
*&      Form  TXT_AUART_PP
*&---------------------------------------------------------------------*
*  PP Order Type Descriptions
*----------------------------------------------------------------------*
FORM TXT_AUART_PP USING    P_AUART TYPE AUFK-AUART
                  CHANGING E_TXT.

  CLEAR E_TXT.

  IF P_AUART IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE TXT
    INTO E_TXT
    FROM T003P
   WHERE SPRAS = SY-LANGU
     AND AUART = P_AUART.

ENDFORM.                    " TXT_AUART_PP

*&---------------------------------------------------------------------*
*&      Form  TXT_AUART_SD
*&---------------------------------------------------------------------*
*  SD Order Type TEXT
*----------------------------------------------------------------------*
FORM TXT_AUART_SD USING    P_AUART TYPE VBAK-AUART
                  CHANGING P_BEZEI.

  CLEAR P_BEZEI.

  IF P_AUART IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE BEZEI
    INTO P_BEZEI
    FROM TVAKT
   WHERE SPRAS = SY-LANGU
     AND AUART = P_AUART.

ENDFORM.                    " TXT_AUART_SD

*&---------------------------------------------------------------------*
*&      Form  TXT_AUFNR
*&---------------------------------------------------------------------*
*  Order Number Text
*----------------------------------------------------------------------*
FORM TXT_AUFNR USING    P_AUFNR
               CHANGING E_KTEXT.

  CLEAR E_KTEXT.

  SELECT SINGLE KTEXT
    INTO E_KTEXT
    FROM AUFK
   WHERE AUFNR = P_AUFNR.

ENDFORM.                    " TXT_AUFNR

*&---------------------------------------------------------------------*
*&      Form  TXT_AUGRU
*&---------------------------------------------------------------------*
*  Sales Documents: Order Reasons: Texts
*----------------------------------------------------------------------*
FORM TXT_AUGRU USING    P_AUGRU TYPE VBAK-AUGRU
               CHANGING P_BEZEI.

  CLEAR P_BEZEI.

  IF P_AUGRU IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE BEZEI
    INTO P_BEZEI
    FROM TVAUT
   WHERE SPRAS = SY-LANGU
     AND AUGRU = P_AUGRU.

ENDFORM.                    " TXT_AUGRU

*&---------------------------------------------------------------------*
*&      Form  TXT_BKLAS
*&---------------------------------------------------------------------*
*  평가클래스내역
*----------------------------------------------------------------------*
FORM TXT_BKLAS USING    P_BKLAS TYPE MBEW-BKLAS
               CHANGING P_BKBEZ.

  CLEAR P_BKBEZ.

  IF P_BKLAS IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE BKBEZ INTO P_BKBEZ
    FROM T025T
   WHERE BKLAS = P_BKLAS
     AND SPRAS = SY-LANGU.

ENDFORM.                    " TXT_BKLAS

*&---------------------------------------------------------------------*
*&      Form  TXT_BLART
*&---------------------------------------------------------------------*
*  전표유형텍스트
*&---------------------------------------------------------------------*
FORM TXT_BLART USING    P_BLART TYPE BKPF-BLART
               CHANGING E_LTEXT.

  CLEAR E_LTEXT.

  IF P_BLART IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE LTEXT INTO E_LTEXT
    FROM T003T                  "Document Type Texts
   WHERE SPRAS = SY-LANGU
     AND BLART = P_BLART.

ENDFORM.                    " TXT_BLART

*&---------------------------------------------------------------------*
*&      Form  TXT_BUKRS
*&---------------------------------------------------------------------*
*  회사 코드명
*----------------------------------------------------------------------*
FORM TXT_BUKRS USING    P_BUKRS
               CHANGING P_BUTXT.

  CLEAR P_BUTXT.

  SELECT SINGLE BUTXT INTO P_BUTXT
    FROM T001
   WHERE BUKRS = P_BUKRS.

ENDFORM.                    " TXT_BUKRS

*&---------------------------------------------------------------------*
*&      Form  TXT_BUPLA
*&---------------------------------------------------------------------*
*  사업장명
*----------------------------------------------------------------------*
FORM TXT_BUPLA USING    P_BUKRS
                        P_BUPLA
               CHANGING P_NAME.

  CLEAR P_NAME.

  SELECT SINGLE NAME
    INTO P_NAME
    FROM J_1BBRANCH
   WHERE BUKRS  = P_BUKRS
     AND BRANCH = P_BUPLA.

ENDFORM.                    " TXT_BUPLA

*&---------------------------------------------------------------------*
*&      Form  TXT_BWART
*&---------------------------------------------------------------------*
*  이동유형명
*----------------------------------------------------------------------*
FORM TXT_BWART USING    P_BWART TYPE MSEG-BWART
               CHANGING E_BTEXT.

  CLEAR E_BTEXT.

  SELECT SINGLE BTEXT
    INTO E_BTEXT
    FROM T156HT
   WHERE SPRAS = SY-LANGU
     AND BWART = P_BWART.

ENDFORM.                    " TXT_BWART

*&---------------------------------------------------------------------*
*&      Form  TXT_DOKNR
*&---------------------------------------------------------------------*
*  DMS 문서 텍스트를 읽는다.
*----------------------------------------------------------------------*
FORM TXT_DOKNR USING    P_DOKAR TYPE DRAW-DOKAR
                        P_DOKNR TYPE DRAW-DOKNR
                        P_DOKVR TYPE DRAW-DOKVR
               CHANGING P_DKTXT.

  DATA: L_DOKVR LIKE DRAT-DOKVR,
        L_DKTXT LIKE DRAT-DKTXT.

  CLEAR P_DKTXT.

  IF P_DOKAR IS INITIAL OR
     P_DOKNR IS INITIAL.
    EXIT.
  ENDIF.

  IF P_DOKVR IS INITIAL.
    L_DOKVR = '00'.
  ELSE.
    L_DOKVR = P_DOKVR.
  ENDIF.

  SELECT SINGLE DKTXT INTO L_DKTXT FROM DRAT
   WHERE DOKAR = P_DOKAR
     AND DOKNR = P_DOKNR
     AND DOKVR = L_DOKVR
     AND DOKTL = '000'
     AND LANGU = SY-LANGU.

  P_DKTXT = L_DKTXT.

ENDFORM.                    " TXT_DOKNR

*&---------------------------------------------------------------------*
*&      Form  TXT_EXTWG
*&---------------------------------------------------------------------*
*  외부자재그룹에 대한 내역
*----------------------------------------------------------------------*
FORM TXT_EXTWG USING    P_EXTWG TYPE MARA-EXTWG
               CHANGING P_EWBEZ.

  CLEAR P_EWBEZ.

  IF P_EXTWG IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE EWBEZ
    INTO P_EWBEZ
    FROM TWEWT
   WHERE SPRAS = SY-LANGU
     AND EXTWG = P_EXTWG.

ENDFORM.                    " TXT_EXTWG

*&---------------------------------------------------------------------*
*&      Form  TXT_FICTR
*&---------------------------------------------------------------------*
*  예산관리센터 텍스트
*&---------------------------------------------------------------------*
FORM TXT_FICTR USING    P_FIKRS
                        P_FICTR
               CHANGING P_BEZEICH.

  IF P_FICTR IS INITIAL. EXIT. ENDIF.

  CLEAR: P_BEZEICH.

  SELECT SINGLE BEZEICH INTO P_BEZEICH
    FROM FMFCTRT
   WHERE SPRAS   = SY-LANGU
     AND FIKRS   = P_FIKRS
     AND FICTR   = P_FICTR
     AND DATBIS >= SY-DATUM.

ENDFORM.                    " TXT_FICTR

*&---------------------------------------------------------------------*
*&      Form  TXT_FUNCNAME
*&---------------------------------------------------------------------*
*  Function 내역
*----------------------------------------------------------------------*
FORM TXT_FUNCNAME USING    I_FUNCNAME
                  CHANGING E_STEXT.

  IF I_FUNCNAME IS INITIAL. EXIT. ENDIF.

  CLEAR E_STEXT.

  SELECT SINGLE STEXT
    INTO E_STEXT
    FROM TFTIT
   WHERE SPRAS    = SY-LANGU
     AND FUNCNAME = I_FUNCNAME.

  IF SY-SUBRC <> 0.

    SELECT SINGLE STEXT
      INTO E_STEXT
      FROM TFTIT
     WHERE FUNCNAME = I_FUNCNAME.

  ENDIF.

ENDFORM.                    " TXT_FUNCNAME

*&---------------------------------------------------------------------*
*&      Form  TXT_GRUND
*&---------------------------------------------------------------------*
*  이동사유명
*----------------------------------------------------------------------*
FORM TXT_GRUND USING    P_BWART TYPE MSEG-BWART
                        P_GRUND TYPE MSEG-GRUND
               CHANGING E_GRTXT.

  CLEAR E_GRTXT.

  SELECT SINGLE GRTXT
    INTO E_GRTXT
    FROM T157E
   WHERE SPRAS = SY-LANGU
     AND BWART = P_BWART
     AND GRUND = P_GRUND.

ENDFORM.                    " TXT_GRUND

*&---------------------------------------------------------------------*
*&      Form  TXT_GSBER
*&---------------------------------------------------------------------*
*  사업영역명
*----------------------------------------------------------------------*
FORM TXT_GSBER USING    P_GSBER TYPE BSEG-GSBER
               CHANGING P_GTEXT.

  CLEAR P_GTEXT.

  SELECT SINGLE GTEXT
    INTO P_GTEXT
    FROM TGSBT
   WHERE SPRAS = SY-LANGU
     AND GSBER = P_GSBER.

ENDFORM.                    " TXT_GSBER

*&---------------------------------------------------------------------*
*&      Form  TXT_HERKUNFT
*&---------------------------------------------------------------------*
*  Inspection Lot Origin명
*----------------------------------------------------------------------*
FORM TXT_HERKUNFT USING    P_HERKUNFT TYPE QALS-HERKUNFT
                  CHANGING E_HERKTXT.

  CLEAR E_HERKTXT.

  SELECT SINGLE HERKTXT
    INTO E_HERKTXT
    FROM TQ31T
   WHERE SPRACHE  = SY-LANGU
     AND HERKUNFT = P_HERKUNFT.

ENDFORM.                    " TXT_HERKUNFT

*&---------------------------------------------------------------------*
*&      Form  TXT_ILART
*&---------------------------------------------------------------------*
*  Maintenance activity type description
*----------------------------------------------------------------------*
FORM TXT_ILART USING    P_ILART  TYPE AFIH-ILART
               CHANGING E_ILATX.

  CLEAR E_ILATX.

  SELECT SINGLE ILATX
    INTO E_ILATX
    FROM T353I_T
   WHERE SPRAS = SY-LANGU
     AND ILART = P_ILART.

ENDFORM.                    " TXT_ILART

*&---------------------------------------------------------------------*
*&      Form  TXT_KDGRP
*&---------------------------------------------------------------------*
*  고객그룹 TEXT
*----------------------------------------------------------------------*
FORM TXT_KDGRP USING    P_KDGRP
               CHANGING P_KTEXT.

  CLEAR P_KTEXT.

  SELECT SINGLE KTEXT INTO P_KTEXT
    FROM T151T
   WHERE SPRAS = SY-LANGU
     AND KDGRP = P_KDGRP.

ENDFORM.                    " TXT_KDGRP

*&---------------------------------------------------------------------*
*&      Form  TXT_KOKRS
*&---------------------------------------------------------------------*
*  관리회계영역명
*----------------------------------------------------------------------*
FORM TXT_KOKRS USING    P_KOKRS
               CHANGING P_BEZEI.

  CLEAR P_BEZEI.

  SELECT SINGLE BEZEI
    INTO P_BEZEI
    FROM TKA01
   WHERE KOKRS = P_KOKRS.

ENDFORM.                    " TXT_KOKRS

*&---------------------------------------------------------------------*
*&      Form  TXT_KOSTL
*&---------------------------------------------------------------------*
*  코스트센타 이름 조회
*----------------------------------------------------------------------*
FORM TXT_KOSTL USING    P_KOKRS
                        P_KOSTL
               CHANGING P_LTEXT.

  DATA: L_KOKRS LIKE CSKT-KOKRS,
        L_KOSTL LIKE CSKS-KOSTL,
        L_LTEXT LIKE CSKT-LTEXT.

  CLEAR P_LTEXT.

  IF P_KOKRS IS INITIAL.
    GET PARAMETER ID 'CAC' FIELD L_KOKRS.
  ELSE.
    L_KOKRS = P_KOKRS.
  ENDIF.

  IF L_KOKRS IS INITIAL OR
     P_KOSTL IS INITIAL.
    EXIT.
  ENDIF.

  L_KOSTL = P_KOSTL.

  SELECT SINGLE LTEXT
    INTO L_LTEXT
    FROM CSKT
   WHERE SPRAS  = SY-LANGU
     AND KOKRS  = L_KOKRS
     AND KOSTL  = L_KOSTL
     AND DATBI >= SY-DATUM.

  P_LTEXT = L_LTEXT.

ENDFORM.                    " TXT_KOSTL

*&---------------------------------------------------------------------*
*&      Form  TXT_KSTAR
*&---------------------------------------------------------------------*
*  원가요소텍스트
*----------------------------------------------------------------------*
FORM TXT_KSTAR USING    P_KTOPL
                        P_KSTAR
               CHANGING P_LTEXT.

  CLEAR P_LTEXT.

  SELECT SINGLE LTEXT
    INTO P_LTEXT
    FROM CSKU
   WHERE SPRAS = SY-LANGU
     AND KTOPL = P_KTOPL
     AND KSTAR = P_KSTAR.

ENDFORM.                    " TXT_KSTAR

*&---------------------------------------------------------------------*
*&      Form  TXT_KUNNR
*&---------------------------------------------------------------------*
*  고객명
*----------------------------------------------------------------------*
FORM TXT_KUNNR USING    P_KUNNR
               CHANGING P_NAME1.

  CLEAR P_NAME1.

  SELECT SINGLE NAME1
    INTO P_NAME1
    FROM KNA1
   WHERE KUNNR  = P_KUNNR.

ENDFORM.                    " TXT_KUNNR

*&---------------------------------------------------------------------*
*&      Form  TXT_LIFNR
*&---------------------------------------------------------------------*
*  공급업체명
*----------------------------------------------------------------------*
FORM TXT_LIFNR USING    P_LIFNR
               CHANGING P_NAME1.

  CLEAR P_NAME1.

  SELECT SINGLE NAME1
    INTO P_NAME1
    FROM LFA1
   WHERE LIFNR = P_LIFNR.

ENDFORM.                    " TXT_LIFNR

*&---------------------------------------------------------------------*
*&      Form  TXT_LQPOS
*&---------------------------------------------------------------------*
*  유동성항목 - 텍스트
*&---------------------------------------------------------------------*
FORM TXT_LQPOS USING    P_LQPOS
               CHANGING P_S_TEXT.    "L_TEXT

  CLEAR P_S_TEXT.

  SELECT SINGLE S_TEXT   "L_TEXT
    INTO P_S_TEXT
    FROM FLQLPOST
   WHERE SPRAS = SY-LANGU
     AND LQPOS = P_LQPOS.

ENDFORM.                    " TXT_LQPOS

*&---------------------------------------------------------------------*
*&      Form  TXT_MAGRV
*&---------------------------------------------------------------------*
*  자재그룹: 포장자재: 지정
*----------------------------------------------------------------------*
FORM TXT_MAGRV USING    P_MAGRV
               CHANGING P_BEZEI.

  CLEAR P_BEZEI.

  SELECT SINGLE BEZEI
    INTO P_BEZEI
    FROM TVEGRT
   WHERE SPRAS = SY-LANGU
     AND MAGRV = P_MAGRV.

ENDFORM.                    " TXT_MAGRV

*&---------------------------------------------------------------------*
*&      Form  TXT_MATKL
*&---------------------------------------------------------------------*
*  자재그룹내역
*&---------------------------------------------------------------------*
FORM TXT_MATKL USING    P_MATKL
               CHANGING P_WGBEZ.

  CLEAR P_WGBEZ.

  IF P_MATKL IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE WGBEZ
    INTO P_WGBEZ
    FROM T023T
   WHERE SPRAS = SY-LANGU
     AND MATKL = P_MATKL.

ENDFORM.                                       " TXT_MATKL

*&---------------------------------------------------------------------*
*&      Form  TXT_MATNR
*&---------------------------------------------------------------------*
*  자재 내역
*----------------------------------------------------------------------*
FORM TXT_MATNR USING    P_MATNR
               CHANGING P_MAKTX.

  CLEAR P_MAKTX.

  SELECT SINGLE MAKTX
    INTO P_MAKTX
    FROM MAKT
   WHERE MATNR = P_MATNR
     AND SPRAS = SY-LANGU.

ENDFORM.                    " TXT_MATNR

*&---------------------------------------------------------------------*
*&      Form  TXT_MTART
*&---------------------------------------------------------------------*
*  자재유형내역
*&---------------------------------------------------------------------*
FORM TXT_MTART USING    P_MTART TYPE MARA-MTART
               CHANGING P_MTBEZ.

  CLEAR P_MTBEZ.

  IF P_MTART IS INITIAL. EXIT. ENDIF.

  DATA: L_MTBEZ LIKE T134T-MTBEZ.

  SELECT SINGLE MTBEZ
    INTO L_MTBEZ
    FROM T134T
   WHERE SPRAS = SY-LANGU
     AND MTART = P_MTART.

  P_MTBEZ = L_MTBEZ.

ENDFORM.                                               " TXT_MTART

*&---------------------------------------------------------------------*
*&      Form  TXT_ORD4X
*&---------------------------------------------------------------------*
*  평가그룹명
*----------------------------------------------------------------------*
FORM TXT_ORD4X USING    P_ORDNR
                        P_ORD4X
               CHANGING E_ORDTX.

  CLEAR E_ORDTX.

  SELECT SINGLE ORDTX INTO E_ORDTX
    FROM T087T
   WHERE SPRAS = SY-LANGU
     AND ORDNR = P_ORDNR
     AND ORD4X = P_ORD4X.

ENDFORM.                                                    " TXT_ORD4X

*&---------------------------------------------------------------------*
*&      Form  TXT_ORGEH
*&---------------------------------------------------------------------*
*  조직 단위명
*----------------------------------------------------------------------*
FORM TXT_ORGEH USING    P_ORGEH
                        P_ENDDA
               CHANGING P_ORGTX.

  CLEAR P_ORGTX.

  SELECT SINGLE ORGTX INTO P_ORGTX
    FROM T527X
   WHERE SPRSL  = SY-LANGU
     AND ORGEH  = P_ORGEH
     AND ENDDA >= SY-DATUM.

ENDFORM.                    " TXT_ORGEH

*&---------------------------------------------------------------------*
*&      Form  TXT_PERSG
*&---------------------------------------------------------------------*
*  사원그룹이름
*----------------------------------------------------------------------*
FORM TXT_PERSG USING    P_PERSG
               CHANGING P_PTEXT.

  CLEAR P_PTEXT.

  SELECT SINGLE PTEXT INTO P_PTEXT
    FROM T501T
   WHERE SPRSL = SY-LANGU
     AND PERSG = P_PERSG.

ENDFORM.                    " TXT_PERSG

*&---------------------------------------------------------------------*
*&      Form  TXT_PERSK
*&---------------------------------------------------------------------*
*  사원하위그룹이름
*----------------------------------------------------------------------*
FORM TXT_PERSK USING    P_PERSK
               CHANGING P_PTEXT.

  CLEAR P_PTEXT.

  SELECT SINGLE PTEXT INTO P_PTEXT
    FROM T503T
   WHERE SPRSL = SY-LANGU
     AND PERSK = P_PERSK.

ENDFORM.                    " TXT_PERSK

*&---------------------------------------------------------------------*
*&      Form  TXT_PRCTR
*&---------------------------------------------------------------------*
*  손익센터명
*----------------------------------------------------------------------*
FORM TXT_PRCTR USING    P_KOKRS
                        P_PRCTR
               CHANGING P_KTEXT.

  CLEAR P_KTEXT.

  SELECT SINGLE KTEXT INTO P_KTEXT
    FROM CEPCT
   WHERE SPRAS  = SY-LANGU
     AND PRCTR  = P_PRCTR
     AND DATBI >= SY-DATUM
     AND KOKRS  = P_KOKRS.

ENDFORM.                    " TXT_PRCTR

*&---------------------------------------------------------------------*
*&      Form  TXT_PRODH
*&---------------------------------------------------------------------*
*  자재     : 생산계층           : 텍스트
*----------------------------------------------------------------------*
FORM TXT_PRODH USING    P_PRODH  TYPE MARA-PRDHA
               CHANGING P_VTEXT.

  CLEAR P_VTEXT.

  SELECT SINGLE VTEXT
    INTO P_VTEXT
    FROM T179T
   WHERE SPRAS = SY-LANGU
     AND PRODH = P_PRODH.

ENDFORM.                    " TXT_PRODH

*&---------------------------------------------------------------------*
*&      Form  TXT_PROGNAME
*&---------------------------------------------------------------------*
*  프로그램 내역
*----------------------------------------------------------------------*
FORM TXT_PROGNAME USING    I_PROGNAME  TYPE REPOSRC-PROGNAME
                  CHANGING E_PROGTEXT.

  CLEAR E_PROGTEXT.

  DATA: L_NAME TYPE TRDIRT-NAME,
        L_TEXT TYPE TRDIRT-TEXT.

  L_NAME = I_PROGNAME.

  SELECT SINGLE TEXT
    INTO L_TEXT
    FROM TRDIRT
   WHERE NAME  = L_NAME
     AND SPRSL = SY-LANGU.            "'E'.

  IF SY-SUBRC <> 0.

    SELECT SINGLE TEXT
      INTO L_TEXT
      FROM TRDIRT
     WHERE NAME  = L_NAME.

  ENDIF.

  E_PROGTEXT = L_TEXT.

ENDFORM.                    " TXT_PROGNAME

*&---------------------------------------------------------------------*
*&      Form  TXT_PTYP
*&---------------------------------------------------------------------*
*  프로세스범주 (설명)
*----------------------------------------------------------------------*
FORM TXT_PTYP USING    P_PTYP
              CHANGING P_KTEXT.

  CLEAR P_KTEXT.

  SELECT SINGLE KTEXT INTO P_KTEXT
    FROM CKMLMV009T
   WHERE SPRAS = SY-LANGU
     AND PTYP  = P_PTYP.

ENDFORM.                    " TXT_PTYP

*&---------------------------------------------------------------------*
*&      Form  TXT_QCODE
*&---------------------------------------------------------------------*
*  검사 카탈로그 코드 텍스트
*----------------------------------------------------------------------*
FORM TXT_QCODE USING    P_KATALOGART
                        P_CODEGRUPPE
                        P_CODE
               CHANGING E_KURZTEXT.

  CLEAR E_KURZTEXT.

  DATA: LS_QPCD TYPE QPCD.

  SELECT SINGLE COUNT(*)
    INTO CORRESPONDING FIELDS OF LS_QPCD
    FROM QPCD JOIN QPGR ON QPGR~KATALOGART = QPCD~KATALOGART AND
                           QPGR~CODEGRUPPE = QPCD~CODEGRUPPE
   WHERE QPCD~KATALOGART = P_KATALOGART
     AND QPCD~CODEGRUPPE = P_CODEGRUPPE
     AND QPCD~CODE       = P_CODE.

  IF SY-SUBRC <> 0. EXIT. ENDIF.

  SELECT SINGLE KURZTEXT
    INTO E_KURZTEXT
    FROM QPCT
   WHERE KATALOGART = P_KATALOGART
     AND CODEGRUPPE = P_CODEGRUPPE
     AND CODE       = P_CODE
     AND SPRACHE    = SY-LANGU.

ENDFORM.                    " TXT_QCODE

*&---------------------------------------------------------------------*
*&      Form  TXT_QCODEGRP
*&---------------------------------------------------------------------*
*  검사 카탈로그 코드 그룹 텍스트
*----------------------------------------------------------------------*
FORM TXT_QCODEGRP USING    P_KATALOGART
                           P_CODEGRUPPE
                  CHANGING E_KURZTEXT.

  CLEAR E_KURZTEXT.

  SELECT SINGLE KURZTEXT
    INTO E_KURZTEXT
    FROM QPGT
   WHERE KATALOGART = P_KATALOGART
     AND CODEGRUPPE = P_CODEGRUPPE.

ENDFORM.                    " TXT_QCODEGRP

*&---------------------------------------------------------------------*
*&      Form  TXT_RCOMP
*&---------------------------------------------------------------------*
FORM TXT_RCOMP USING    P_RCOMP
               CHANGING P_NAME1.

  CLEAR: P_NAME1.

  SELECT SINGLE NAME1
    INTO P_NAME1
    FROM T880
   WHERE RCOMP = P_RCOMP.

ENDFORM.                    " TXT_RCOMP

*&---------------------------------------------------------------------*
*&      Form  TXT_SAKNR
*&---------------------------------------------------------------------*
*  계정명
*----------------------------------------------------------------------*
FORM TXT_SAKNR USING    P_KTOPL
                        P_SAKNR
               CHANGING P_TXT20
                        P_TXT50.

  CLEAR: P_TXT20, P_TXT50.

  SELECT SINGLE TXT20 TXT50
    INTO (P_TXT20, P_TXT50)
    FROM SKAT
   WHERE SPRAS = SY-LANGU
     AND KTOPL = P_KTOPL
     AND SAKNR = P_SAKNR.

ENDFORM.                    " TXT_SAKNR

*&---------------------------------------------------------------------*
*&      Form  TXT_SECCODE
*&---------------------------------------------------------------------*
*  섹션코드명
*----------------------------------------------------------------------*
FORM TXT_SECCODE USING    P_BUKRS
                          P_SECCODE
                 CHANGING P_NAME.

  CLEAR P_NAME.

  SELECT SINGLE NAME
    INTO P_NAME
    FROM SECCODET
   WHERE SPRAS   = SY-LANGU
     AND BUKRS   = P_BUKRS
     AND SECCODE = P_SECCODE.

ENDFORM.                    " TXT_SECCODE

*&---------------------------------------------------------------------*
*&      Form  TXT_SETCLASS
*&---------------------------------------------------------------------*
*  세트클래스 설명 (SETCLS)
*&---------------------------------------------------------------------*
FORM TXT_SETCLASS USING    P_SETCLASS  TYPE SETHEADER-SETCLASS
                  CHANGING P_DESCRIPT.    "세트클래스에 대한 정렬내역

  DATA: L_DESCRIPT LIKE SETCLST-DESCRIPT.

  CLEAR P_DESCRIPT.

  SELECT SINGLE DESCRIPT
    INTO L_DESCRIPT
    FROM SETCLST
   WHERE LANGU    = SY-LANGU
     AND SETCLASS = P_SETCLASS.

  P_DESCRIPT = L_DESCRIPT.

ENDFORM.                    " TXT_SETCLASS

*&---------------------------------------------------------------------*
*&      Form  TXT_SETNAME
*&---------------------------------------------------------------------*
*  세트의 짧은내역 (SETLEAF, SETHEADERT)
*&---------------------------------------------------------------------*
FORM TXT_SETNAME USING    P_SETCLASS
                          P_SUBCLASS
                          P_SETNAME
                 CHANGING P_DESCRIPT.    "세트의 내역

  DATA: L_DESCRIPT LIKE SETHEADERT-DESCRIPT.

  CLEAR P_DESCRIPT.

  SELECT SINGLE DESCRIPT
    INTO L_DESCRIPT
    FROM SETHEADERT
   WHERE SETCLASS = P_SETCLASS
     AND SUBCLASS = P_SUBCLASS
     AND SETNAME  = P_SETNAME
     AND LANGU    = SY-LANGU.

  P_DESCRIPT = L_DESCRIPT.

ENDFORM.                    " TXT_SETNAME

*&---------------------------------------------------------------------*
*&      Form  TXT_SFHAART
*&---------------------------------------------------------------------*
FORM TXT_SFHAART USING    P_SGSART
                          P_SFHAART
                 CHANGING E_XTEXT.

  CLEAR E_XTEXT.

  DATA: L_SGSART  LIKE AT10T-SGSART,
        L_SFHAART LIKE AT10T-SFHAART,
        L_XTEXT   LIKE AT10T-XTEXT.

  L_SGSART  = P_SGSART.
  L_SFHAART = P_SFHAART.

  SELECT SINGLE XTEXT
    INTO L_XTEXT
    FROM AT10T
   WHERE SPRAS   = SY-LANGU
     AND SGSART  = L_SGSART
     AND SFHAART = L_SFHAART.

  E_XTEXT = L_XTEXT.

ENDFORM.                   " TXT_SFHAART

*&---------------------------------------------------------------------*
*&      Form  TXT_SPART
*&---------------------------------------------------------------------*
*  조직단위: 판매제품군: 텍스트
*&---------------------------------------------------------------------*
FORM TXT_SPART USING    P_SPART  TYPE VBAK-SPART
               CHANGING P_VTEXT.

  DATA: L_VTEXT LIKE TSPAT-VTEXT.

  CLEAR P_VTEXT.

  SELECT SINGLE VTEXT
    INTO L_VTEXT
    FROM TSPAT
   WHERE SPRAS = SY-LANGU
     AND SPART = P_SPART.

  P_VTEXT = L_VTEXT.

ENDFORM.                                          " TXT_SPART

*&---------------------------------------------------------------------*
*&      Form  TXT_STAGR
*&---------------------------------------------------------------------*
*  통계주요지표 텍스트 구함
*----------------------------------------------------------------------*
FORM TXT_STAGR USING    P_KOKRS
                        P_STAGR
               CHANGING P_BEZEI.

  DATA: L_KOKRS LIKE CSKT-KOKRS.

  CLEAR P_BEZEI.

  IF P_KOKRS IS INITIAL.
    GET PARAMETER ID 'CAC' FIELD L_KOKRS.
  ELSE.
    L_KOKRS = P_KOKRS.
  ENDIF.

  IF L_KOKRS IS INITIAL OR
     P_STAGR IS INITIAL.
    EXIT.
  ENDIF.

  SELECT SINGLE BEZEI
    INTO P_BEZEI
    FROM TKT03
   WHERE SPRAS = SY-LANGU
     AND KOKRS = L_KOKRS
     AND STAGR = P_STAGR.

ENDFORM.                                          " TXT_STAGR

*&---------------------------------------------------------------------*
*&      Form  TXT_TABNAME
*&---------------------------------------------------------------------*
*  Table 내역
*----------------------------------------------------------------------*
FORM TXT_TABNAME USING    P_TABNAME TYPE DD03L-TABNAME
                 CHANGING P_DDTEXT.

  CLEAR P_DDTEXT.

  IF P_TABNAME IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE DDTEXT
    INTO P_DDTEXT
    FROM DD02T
   WHERE TABNAME    = P_TABNAME
     AND DDLANGUAGE = SY-LANGU
     AND AS4LOCAL   = 'A'.

  IF SY-SUBRC <> 0.
    SELECT SINGLE DDTEXT
      INTO P_DDTEXT
      FROM DD02T
     WHERE TABNAME    = P_TABNAME
       AND AS4LOCAL   = 'A'.
  ENDIF.

ENDFORM.                                          " TXT_TABNAME

*&---------------------------------------------------------------------*
*&      Form  TXT_TCODE
*&---------------------------------------------------------------------*
*  T-CODE 내역
*----------------------------------------------------------------------*
FORM TXT_TCODE USING    I_TCODE
               CHANGING E_TCODE_T.

  CLEAR E_TCODE_T.

  DATA: L_TCODE TYPE TSTCT-TCODE,
        L_TTEXT TYPE TSTCT-TTEXT.

  L_TCODE = I_TCODE.

  SELECT SINGLE TTEXT INTO L_TTEXT FROM TSTCT
   WHERE TCODE = L_TCODE
     AND SPRSL = SY-LANGU.               "'EN'.

  IF SY-SUBRC <> 0.

    SELECT SINGLE TTEXT INTO L_TTEXT FROM TSTCT
     WHERE TCODE = L_TCODE.

  ENDIF.

  E_TCODE_T = L_TTEXT.

ENDFORM.                    " TXT_TCODE

*&---------------------------------------------------------------------*
*&      Form  TXT_TRKORR
*&---------------------------------------------------------------------*
*  Request/Task 내역
*----------------------------------------------------------------------*
FORM TXT_TRKORR USING    P_TRKORR   TYPE E070-TRKORR
                CHANGING P_AS4TEXT.

  CLEAR P_AS4TEXT.

  SELECT SINGLE AS4TEXT INTO P_AS4TEXT FROM E07T
   WHERE TRKORR = P_TRKORR
     AND LANGU  = SY-LANGU.

  IF SY-SUBRC <> 0.
    SELECT SINGLE AS4TEXT INTO P_AS4TEXT FROM E07T
     WHERE TRKORR   = P_TRKORR
       AND AS4TEXT <> ''.
  ENDIF.

ENDFORM.                                        " TXT_TRKORR

*&---------------------------------------------------------------------*
*&      Form  TXT_UZAWE
*&---------------------------------------------------------------------*
*  지급 방법 보충 에 대한 텍스트
*----------------------------------------------------------------------*
FORM TXT_UZAWE USING    P_UZAWE  TYPE BSEG-UZAWE
               CHANGING E_TXT30.

  CLEAR E_TXT30.

  DATA: L_UZAWE LIKE T042H-UZAWE,
        L_TXT30 LIKE T042H-TXT30.

  L_UZAWE = P_UZAWE.

  SELECT SINGLE TXT30 INTO L_TXT30
    FROM T042H
   WHERE SPRAS = SY-LANGU
     AND UZAWE = L_UZAWE.

  E_TXT30 = L_TXT30.

ENDFORM.                    " TXT_UZAWE

*&---------------------------------------------------------------------*
*&      Form  TXT_VERSN
*&---------------------------------------------------------------------*
*  CO 버젼텍스트
*----------------------------------------------------------------------*
FORM TXT_VERSN USING    P_VERSN
               CHANGING P_VTEXT.

  CLEAR P_VTEXT.

  IF P_VERSN IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE VTEXT INTO P_VTEXT
    FROM TKVST
   WHERE SPRAS = SY-LANGU
     AND VERSI = P_VERSN.

ENDFORM.                    " TXT_VERSI

*&---------------------------------------------------------------------*
*       TXT_VKORG
*----------------------------------------------------------------------*
* 판매조직명
*----------------------------------------------------------------------*
FORM TXT_VKORG USING    P_VKORG  TYPE VBAK-VKORG
               CHANGING P_VTEXT.

  CLEAR P_VTEXT.

  SELECT SINGLE VTEXT
    INTO P_VTEXT
    FROM TVKOT
   WHERE SPRAS = SY-LANGU
     AND VKORG = P_VKORG.

ENDFORM.                    " TXT_VKORG

*&---------------------------------------------------------------------*
*&      Form  TXT_VTWEG
*&---------------------------------------------------------------------*
*  유통경로 TEXT
*----------------------------------------------------------------------*
FORM TXT_VTWEG USING    P_VTWEG  TYPE VBAK-VTWEG
               CHANGING P_VTEXT.

  CLEAR P_VTEXT.

  SELECT SINGLE VTEXT
    INTO P_VTEXT
    FROM TVTWT
   WHERE SPRAS = SY-LANGU
     AND VTWEG = P_VTWEG.

ENDFORM.                    " TXT_VTWEG

*&---------------------------------------------------------------------*
*&      Form  TXT_WERKS
*&---------------------------------------------------------------------*
*  플랜트명
*----------------------------------------------------------------------*
FORM TXT_WERKS USING    P_WERKS
               CHANGING P_NAME1.

  CLEAR P_NAME1.

  IF P_WERKS IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE NAME1 INTO P_NAME1
    FROM T001W
   WHERE WERKS = P_WERKS.

ENDFORM.                    " TXT_WERKS

*&---------------------------------------------------------------------*
*&      Form  TXT_WWDIV
*&---------------------------------------------------------------------*
*  SOI Group 명
*----------------------------------------------------------------------*
FORM TXT_WWDIV USING    P_WWDIV   "WW003
               CHANGING E_BEZEK.

  CLEAR E_BEZEK.

  IF P_WWDIV IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE BEZEK INTO E_BEZEK
    FROM T25A8
   WHERE SPRAS = SY-LANGU
     AND WWDIV = P_WWDIV.         "P_WW003.

ENDFORM.                                                  " TXT_WWDIV

*&---------------------------------------------------------------------*
*&      Form  WORKSTATION_READ
*&---------------------------------------------------------------------*
*  작업장 & 작업장 내역 구함
*&---------------------------------------------------------------------*
FORM WORKSTATION_READ USING    P_AUFNR   "AFKO-AUFNR
                      CHANGING P_ARBPL   "CRHD-ARBPL
                               P_ARBTX.  "IOOPER-ARBTX

  DATA: LT_AFVC LIKE AFVC OCCURS 0 WITH HEADER LINE,
        L_ARBID LIKE AFVC-ARBID,
        L_ARBPL LIKE CRHD-ARBPL,
        L_ARBTX LIKE IOOPER-ARBTX.

  CLEAR: P_ARBPL, P_ARBTX.

  IF P_AUFNR IS INITIAL. EXIT. ENDIF.

  SELECT SINGLE ARBID
    INTO L_ARBID
    FROM AFKO JOIN AFVC ON AFVC~AUFPL = AFKO~AUFPL
   WHERE AFKO~AUFNR = P_AUFNR
     AND AFVC~APLZL = ( SELECT MAX( APLZL )
                          FROM AFVC
                         WHERE AUFPL = AFKO~AUFPL ).

  IF L_ARBID IS INITIAL. EXIT. ENDIF.

*  SORT LT_AFVC BY APLZL DESCENDING.
*
*  READ TABLE LT_AFVC INDEX 1.
*  IF SY-SUBRC <> 0. EXIT. ENDIF.

  CALL FUNCTION 'CR_WORKSTATION_READ'
    EXPORTING
      ID        = L_ARBID
*     MSGTY     = 'E'
    IMPORTING
      ARBPL     = L_ARBPL
*     ECRHD     =
      KTEXT     = L_ARBTX
*     WERKS     =
    EXCEPTIONS
      NOT_FOUND = 1
      OTHERS    = 2.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  P_ARBPL = L_ARBPL.
  P_ARBTX = L_ARBTX.

ENDFORM.                    " WORKSTATION_READ
*&---------------------------------------------------------------------*
*&      Form  DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DYNPRO USING DYNBEGIN NAME VALUE.
*  IF DYNBEGIN = 'X'.
*    CLEAR GT_BDCDATA.
*    MOVE: NAME  TO GT_BDCDATA-PROGRAM,
*          VALUE TO GT_BDCDATA-DYNPRO,
*          'X'   TO GT_BDCDATA-DYNBEGIN.
*    APPEND GT_BDCDATA.
*  ELSE.
*    CLEAR GT_BDCDATA.
*    MOVE: NAME  TO GT_BDCDATA-FNAM,
*          VALUE TO GT_BDCDATA-FVAL.
*    APPEND GT_BDCDATA.
*  ENDIF.
ENDFORM.                    "DYNPR.
*&---------------------------------------------------------------------*
*&      Form  PRINT_SMARTFORMS
*&---------------------------------------------------------------------*
*       text 스마트폼 다중 출력.
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PRINT_SMARTFORMS .

*  DATA: LT_ITEM TYPE TABLE OF GT_OUTTAB,
*        LS_ITEM LIKE LINE OF LT_ITEM,
*        LS_HD   TYPE ZMMS6050.
*
*  CLEAR: LT_ITEM,LS_ITEM, LS_HD.
*
*  CLEAR : GS_OUTPUT_OPTION,
*          GS_PRINT_OPTION,
*          GS_JOB_OUTPUT_INFO,
*          GS_FM_NAME.
*
*  GS_OUTPUT_OPTION-TDCOPIES = 1 . "출력 페이지수.
**  GS_OUTPUT_OPTION-TDDEST   =        "프린터 지정.
*  GS_PRINT_OPTION-NO_DIALOG = 'X'.  "팝업창. X = 안뜨는것.
*  GS_PRINT_OPTION-PREVIEW   = 'X'. "미리보기. ' ' = 미리보기 안보기.
*  GS_PRINT_OPTION-NO_OPEN   = 'X'. "SSF_OPEN 호출시.
*  GS_PRINT_OPTION-NO_CLOSE  = 'X'. "SSF_CLOSE
*
*
*  "송장 출력.
*  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
*    EXPORTING
*      FORMNAME           = 'ZMMSF_INST'
*    IMPORTING
*      FM_NAME            = GS_FM_NAME
*    EXCEPTIONS
*      NO_FORM            = 1
*      NO_FUNCTION_MODULE = 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.
*.
*  "스마트폼 다중 출력.
*  CALL FUNCTION 'SSF_OPEN'
*    EXPORTING
*      CONTROL_PARAMETERS = GS_PRINT_OPTION
*    EXCEPTIONS
*      FORMATTING_ERROR   = 1
*      INTERNAL_ERROR     = 2
*      SEND_ERROR         = 3
*      USER_CANCELED      = 4
*      OTHERS             = 5.
*
*  LOOP AT GT_DISP_100 INTO GS_DISP_100 WHERE CHECK EQ CO_X.
*
**    CLEAR: GS_FM_NAME.
*    CLEAR: LT_ITEM, LS_HD, LS_ITEM.
*
*
*
*
*
*    "Smartform data.
*    LOOP AT GT_DISP_200 INTO GS_DISP_200 WHERE BELNR EQ GS_DISP_100-BELNR.
*      MOVE-CORRESPONDING GS_DISP_200 TO LS_ITEM.
*
*      APPEND LS_ITEM TO LT_ITEM.
*    ENDLOOP.
*
*    MOVE-CORRESPONDING GS_DISP_100 TO LS_HD.
*
*    "Call Smartforms
*    CALL FUNCTION GS_FM_NAME
*      EXPORTING
*        CONTROL_PARAMETERS = GS_PRINT_OPTION
*        OUTPUT_OPTIONS     = GS_OUTPUT_OPTION
*        HD                 = LS_HD
*      IMPORTING
*        JOB_OUTPUT_INFO    = GS_JOB_OUTPUT_INFO
*      TABLES
*        TB                 = LT_ITEM
*      EXCEPTIONS
*        FORMATTING_ERROR   = 1
*        INTERNAL_ERROR     = 2
*        SEND_ERROR         = 3
*        USER_CANCELED      = 4
*        OTHERS             = 5.
*
*    "FI 전표 출력.
*    PERFORM GET_FI_DATA.
*
*  ENDLOOP.
*
*  CALL FUNCTION 'SSF_CLOSE'
*    IMPORTING
*      JOB_OUTPUT_INFO  = GS_JOB_OUTPUT_INFO
*    EXCEPTIONS
*      FORMATTING_ERROR = 1
*      INTERNAL_ERROR   = 2
*      SEND_ERROR       = 3
*      OTHERS           = 4.
*  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.                    " EXECUTE_PRINT
*&---------------------------------------------------------------------*
*&      Form  DOWN_OLE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWN_OLE_DATA .

  FIELD-SYMBOLS : <LFS_VALUE>.
  FIELD-SYMBOLS : <LFS_VALUE_E>.

  DATA: LV_VALUE TYPE STRING.
  DATA: LV_FIELDNAME(50).
  DATA: LV_INDEX(5).

  LOOP AT GT_OUTTAB.
    DO.
      UNASSIGN <LFS_VALUE>.
      ASSIGN COMPONENT SY-INDEX OF STRUCTURE GT_OUTTAB TO <LFS_VALUE>.
      IF <LFS_VALUE> IS NOT ASSIGNED.
        EXIT.
      ENDIF.

      UNASSIGN <LFS_VALUE_E>.
      CLEAR: LV_FIELDNAME, LV_INDEX.
      LV_INDEX = SY-INDEX.
      CONCATENATE 'GT_OLE_DATA-F' LV_INDEX INTO LV_FIELDNAME.
      CONDENSE LV_FIELDNAME NO-GAPS.
      ASSIGN (LV_FIELDNAME) TO <LFS_VALUE_E>.
      IF <LFS_VALUE_E> IS NOT ASSIGNED.
        EXIT.
      ENDIF.
      LV_VALUE = <LFS_VALUE>.
      <LFS_VALUE_E> = LV_VALUE.
    ENDDO.
    APPEND GT_OLE_DATA.
  ENDLOOP.

*-- Shows a File Save Dialog
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
*    EXPORTING
*      DEFAULT_EXTENSION = LV_DEFAULT_EXTENSION
    CHANGING
      FILENAME          = GV_FILENAME
      PATH              = GV_PATH
      FULLPATH          = GV_FULLPATH.

* DELETE TEMPLATE FILE
  PERFORM CLOSE_FILE USING GV_FULLPATH.
  PERFORM CREATE_FILE USING GV_FILENAME GV_FULLPATH.

  PERFORM OLE_FILE_OPEN.
  CHECK GV_CHECK NE 'X'.

*  PERFORM OLE_DDIF_INFOR_INSERT. "Cell value지정.
  PERFORM OLE_DDIF_INFOR_INSERT_ALL.
  PERFORM OLE_FILE_SAVE.

ENDFORM.                    " DOWN_OLE_DATA
*&---------------------------------------------------------------------*
*&      Form  CLOSE_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GV_FULLPATH  text
*----------------------------------------------------------------------*
FORM CLOSE_FILE  USING P_FILENAME.

  DATA: LV_FILE_NAME TYPE RLGRAP-FILENAME.
  LV_FILE_NAME = P_FILENAME.

  CALL FUNCTION 'GUI_DELETE_FILE'
    EXPORTING
      FILE_NAME = LV_FILE_NAME
    EXCEPTIONS
      FAILED    = 1
      OTHERS    = 2.
  IF SY-SUBRC <> 0.
  ENDIF.

ENDFORM.                    " CLOSE_FILE
*&---------------------------------------------------------------------*
*&      Form  CREATE_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GV_FILENAME  text
*      -->P_GV_FULLPATH  text
*----------------------------------------------------------------------*
FORM CREATE_FILE USING   P_FILENAME
                         P_FILENAME1.

  DATA: LT_DOC_TABLE LIKE W3MIME OCCURS 0,
        L_DOC_SIZE   TYPE I.
*         L_DOC_TYPE(80) VALUE SOI_DOCTYPE_EXCEL_SHEET,
*         L_DOC_FORMAT(80) TYPE C.


  CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
    EXPORTING
      OBJECT_ID        = CO_TEMP
    IMPORTING
      DATA_SIZE        = L_DOC_SIZE
*     DOCUMENT_FORMAT  = L_DOC_FORMAT
*     DOCUMENT_TYPE    = L_DOC_TYPE
    TABLES
      DATA_TABLE       = LT_DOC_TABLE
    EXCEPTIONS
      OBJECT_NOT_FOUND = 1
      INTERNAL_ERROR   = 2
      OTHERS           = 3.

  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.


  PERFORM DOWNLOAD TABLES  LT_DOC_TABLE
                     USING L_DOC_SIZE.

ENDFORM.                    " CREATE_FILE
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LT_DOC_TABLE  text
*      -->P_P_FILENAME1   text
*      -->P_L_DOC_SIZE    text
*----------------------------------------------------------------------*
FORM DOWNLOAD    TABLES   P_LT_DOC_TABLE STRUCTURE W3MIME
                   USING  P_L_DOC_SIZE.

*  MOVE P_P_FILENAME1 TO G_FILENAME.

  DATA: LV_FILENAME TYPE STRING.
  CONCATENATE GV_FULLPATH '.xlsx' INTO LV_FILENAME.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      BIN_FILESIZE            = P_L_DOC_SIZE
      FILENAME                = LV_FILENAME
      FILETYPE                = 'BIN'
*   IMPORTING
*     FILELENGTH              = G_FILE_LENGTH
    TABLES
      DATA_TAB                = P_LT_DOC_TABLE
    EXCEPTIONS
      FILE_WRITE_ERROR        = 1
      NO_BATCH                = 2
      GUI_REFUSE_FILETRANSFER = 3
      INVALID_TYPE            = 4
      NO_AUTHORITY            = 5
      UNKNOWN_ERROR           = 6
      HEADER_NOT_ALLOWED      = 7
      SEPARATOR_NOT_ALLOWED   = 8
      FILESIZE_NOT_ALLOWED    = 9
      HEADER_TOO_LONG         = 10
      DP_ERROR_CREATE         = 11
      DP_ERROR_SEND           = 12
      DP_ERROR_WRITE          = 13
      UNKNOWN_DP_ERROR        = 14
      ACCESS_DENIED           = 15
      DP_OUT_OF_MEMORY        = 16
      DISK_FULL               = 17
      DP_TIMEOUT              = 18
      FILE_NOT_FOUND          = 19
      DATAPROVIDER_EXCEPTION  = 20
      CONTROL_FLUSH_ERROR     = 21
      OTHERS                  = 22.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.


ENDFORM.                    " DOWNLOAD
*&---------------------------------------------------------------------*
*&      Form  OLE_FILE_OPEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM OLE_FILE_OPEN .

  CREATE OBJECT GV_OLE_EXCEL 'EXCEL.APPLICATION'.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.

  SET PROPERTY OF GV_OLE_EXCEL 'VISIBLE' = 1.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.

  CALL METHOD OF GV_OLE_EXCEL 'Workbooks' = GV_OLE_BOOKS.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.

  CALL METHOD OF GV_OLE_BOOKS 'Application' = GV_OLE_FILE.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.

  CALL METHOD OF GV_OLE_BOOKS 'Open' = GV_OLE_FILE
    EXPORTING #1 = GV_FULLPATH.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.

  CLEAR : GV_CPAGE.
* sheet1
  GV_CPAGE = GV_CPAGE + 1.

  CALL METHOD OF GV_OLE_EXCEL 'Worksheets' = GV_OLE_SHEET
    EXPORTING #1 = GV_CPAGE.

  CALL METHOD OF
    GV_OLE_SHEET
    'Activate'.

  CALL FUNCTION 'FLUSH'
    EXCEPTIONS
      OTHERS = 0.



ENDFORM.                    " OLE_FILE_OPEN
*&---------------------------------------------------------------------*
*&      Form  ERROR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ERROR .

  IF SY-SUBRC <>  0.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED OFF.
    WRITE: / 'EXCEL ERROR'
             , SY-SUBRC.
    FORMAT RESET.
    GV_CHECK = 'X'..
  ENDIF.

ENDFORM.                    " ERROR
*&---------------------------------------------------------------------*
*&      Form  OLE_DDIF_INFOR_INSERT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM OLE_DDIF_INFOR_INSERT .

  FIELD-SYMBOLS : <LFS_VALUE>.

  DATA: LV_CNTA LIKE GV_CNTA,
        LV_CNTB LIKE GV_CNTB.

  LV_CNTA = GV_CNTA.
  LV_CNTB = GV_CNTB.

  LOOP AT GT_OUTTAB.
    DO.
      UNASSIGN <LFS_VALUE>.
      ASSIGN COMPONENT SY-INDEX OF STRUCTURE GT_OUTTAB TO <LFS_VALUE>.
      IF <LFS_VALUE> IS NOT ASSIGNED.
        EXIT.
      ENDIF.
      PERFORM OLE_INSERT_DATA USING LV_CNTA LV_CNTB  0 10 0 15 <LFS_VALUE>.
      LV_CNTB = LV_CNTB + 1.
    ENDDO.
    LV_CNTB = 1.
    LV_CNTA = LV_CNTA + 1.
  ENDLOOP.

ENDFORM.                    "OLE_DDIF_INFOR_INSERT
*&---------------------------------------------------------------------*
*&      Form  OLE_DDIF_INFOR_INSERT_all
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM OLE_DDIF_INFOR_INSERT_ALL.

  DATA : OLE_RANGE  TYPE OLE2_OBJECT,
*            OLE_FONT    TYPE OLE2_OBJECT,  " Font Object
*            OLE_BORDER  TYPE OLE2_OBJECT,  " Border Object
        OLE_COLUMN TYPE OLE2_OBJECT,  " Column Object
*            OLE_CELL    TYPE OLE2_OBJECT,  " Cell Object
*            CHAR_TAB    TYPE ABAP_CHAR1
*                        VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
*            EXCEL_RC    TYPE I,
        EXCEL_TAB(4096) TYPE C OCCURS 0,
        EXCEL_LINE LIKE LINE OF EXCEL_TAB.
*            EXCEL_LINE2 LIKE LINE OF EXCEL_TAB.

  DATA : LV_ROW_CNT TYPE I,         " Data Row Count
         LV_COL_CNT TYPE I,         " Data Row Count
         LV_END_ROW TYPE I,
         LV_END_COL TYPE I.
*          LV_COL     TYPE I,
*          LV_LEN     TYPE I,         " Excel Cell Width
*          LV_LEN_OLD TYPE I,         " Excel Cell Width
*          LV_WIDTH   TYPE I,
*          LT_WIDTH   TYPE TABLE OF I WITH HEADER LINE,
*          LV_STR     TYPE STRING.

  DATA : TABLE_DESC TYPE REF TO CL_ABAP_TABLEDESCR,
         LINE_DESC  TYPE REF TO CL_ABAP_STRUCTDESCR.
*          COL_DESC   TYPE ABAP_COMPDESCR.

  CLEAR : TABLE_DESC, LINE_DESC. "COL_DESC.

  IF GT_OUTTAB[] IS NOT INITIAL.
*--- get fields info
    TABLE_DESC ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( GT_OUTTAB[] ).
    LINE_DESC  ?= TABLE_DESC->GET_TABLE_LINE_TYPE( ).

*--- get row count
    DESCRIBE TABLE GT_OUTTAB   LINES LV_ROW_CNT.
    DESCRIBE TABLE LINE_DESC->COMPONENTS LINES LV_COL_CNT.

    LV_END_ROW = GV_CNTA + LV_ROW_CNT - 1.
    IF LV_END_COL IS INITIAL.
      LV_END_COL = GV_CNTB + LV_COL_CNT - 1.
    ENDIF.
  ENDIF.

*--- Clear Range
  CLEAR : OLE_RANGE,OLE_COLUMN.

  PERFORM SET_EXCEL_RANGE USING GV_CNTA GV_CNTB LV_END_ROW LV_END_COL GV_OLE_SHEET
                       CHANGING OLE_RANGE.

*--- Set Range property 'number' -> 'text'
  SET PROPERTY OF OLE_RANGE 'NumberFormat' = '@'.

  CALL METHOD OF
    OLE_RANGE
    'SELECT'.

  CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT'
    EXPORTING
      I_FIELD_SEPERATOR    = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
    TABLES
      I_TAB_SAP_DATA       = GT_OLE_DATA
    CHANGING
      I_TAB_CONVERTED_DATA = EXCEL_TAB[].

**--- SET FONT
*  CALL METHOD OF ole_range 'AutoFilter'.
  PERFORM EXCEL_PASTE USING EXCEL_TAB[] GV_OLE_SHEET .

*--- Set Width
  GET PROPERTY OF OLE_RANGE 'Columns' = OLE_COLUMN.
*  CALL METHOD OF ole_column 'AutoFit'.

*--- Clear Range
  CLEAR : OLE_RANGE,OLE_COLUMN.

ENDFORM.                    "OLE_DDIF_INFOR_INSERT_all
*&---------------------------------------------------------------------*
*&      Form  set_Excel_range
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SET_EXCEL_RANGE USING    P_ROW_FR  P_COL_FR
                              P_ROW_TO  P_COL_TO
                              P_SHEET
                       CHANGING P_RANGE.

  DATA : OLE_CELL_FR TYPE OLE2_OBJECT,
         OLE_CELL_TO TYPE OLE2_OBJECT.


*--- set range
  CALL METHOD OF
    P_SHEET
    'Cells' = OLE_CELL_FR
    EXPORTING
    #1 = P_ROW_FR
    #2 = P_COL_FR.


  CALL METHOD OF
    P_SHEET
    'Cells' = OLE_CELL_TO
    EXPORTING
    #1 = P_ROW_TO
    #2 = P_COL_TO.


  CALL METHOD OF
    P_SHEET
    'RANGE' = P_RANGE
    EXPORTING
    #1 = OLE_CELL_FR
    #2 = OLE_CELL_TO.


ENDFORM.                    " SET_EXCEL_RANGE
*&---------------------------------------------------------------------*
*&      Form  EXCEL_PASTE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM EXCEL_PASTE USING    PT_EXCEL TYPE STANDARD TABLE
                            P_SHEET.
  DATA: LV_RETURN TYPE I.


  CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
    IMPORTING
      DATA                 = PT_EXCEL
    CHANGING
      RC                   = LV_RETURN
    EXCEPTIONS
      CNTL_ERROR           = 1
      ERROR_NO_GUI         = 2
      NOT_SUPPORTED_BY_GUI = 3
      NO_AUTHORITY         = 4
      OTHERS               = 5.

*--- paste data
  CALL METHOD OF
    P_SHEET
    'PASTE'.

ENDFORM.                    "EXCEL_PASTE
*&---------------------------------------------------------------------*
*&      Form  OLE_INSERT_HEAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM OLE_INSERT_DATA USING A B BOLD SIZE FCOL ICOL TEXT.

  CALL METHOD OF GV_OLE_EXCEL 'Cells' = GV_OLE_CELL
    EXPORTING
    #1 = A
    #2 = B.
  PERFORM ERROR.

  CHECK GV_CHECK NE 'X'.
  SET PROPERTY OF GV_OLE_CELL 'Value' = TEXT .
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.
  GET PROPERTY OF GV_OLE_CELL 'Font' = GV_OLE_FONT.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.
  SET PROPERTY OF GV_OLE_FONT 'Bold' = BOLD .
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.
  SET PROPERTY OF GV_OLE_FONT 'Size' = SIZE .
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.
  SET PROPERTY OF GV_OLE_FONT 'ColorIndex' = FCOL .
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.

ENDFORM.                    " OLE_INSERT_HEAD
*&---------------------------------------------------------------------*
*&      Form  OLE_FILE_SAVE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM OLE_FILE_SAVE .

  CALL METHOD OF GV_OLE_EXCEL 'ActiveWorkbook' = GV_OLE_BOOKS.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.

  CONCATENATE GV_FULLPATH '.xlsx' INTO GV_FULLPATH.

*  SET PROPERTY OF GV_OLE_BOOKS 'SAVED' = 1.

*  CALL METHOD OF GV_OLE_BOOKS 'SaveAs'
*    EXPORTING
*    #1 = GV_FULLPATH.
  CALL METHOD OF GV_OLE_BOOKS 'Save'.
*    EXPORTING
*    #1 = GV_FULLPATH.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.



  CALL METHOD OF GV_OLE_BOOKS 'Close'.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.

  CALL METHOD OF GV_OLE_EXCEL 'QUIT'.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.

  FREE OBJECT GV_OLE_EXCEL.
  PERFORM ERROR.
  CHECK GV_CHECK NE 'X'.
*
*  IF SY-SUBRC = 0.
*    MESSAGE '정상적으로 처리 되었습니다.' TYPE 'S'.
*  ENDIF.


ENDFORM.                    " OLE_FILE_SAVE
*&---------------------------------------------------------------------*
*&      Form  ALV_CELL_EDIT
*&---------------------------------------------------------------------*
*  CELL의 수정/조회 모드를 지정한다
*----------------------------------------------------------------------*
FORM ALV_CELL_EDIT USING    I_FNAME
                            I_EN_DI_GB
                   CHANGING ET_CELLTAB TYPE LVC_T_STYL.

  DATA: LS_CELLTAB TYPE LVC_S_STYL.

  LS_CELLTAB-FIELDNAME = I_FNAME.

  CASE I_EN_DI_GB.
    WHEN 'E'. LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
    WHEN 'D'. LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
  ENDCASE.

  INSERT LS_CELLTAB INTO TABLE ET_CELLTAB[].

ENDFORM.                    " ALV_CELL_EDIT
*&---------------------------------------------------------------------*
*&      Form  DELETE_SYMBOM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->I_VALUE    text
*      -->I_TYPE     text
*      -->E_VALUE    text
*----------------------------------------------------------------------*
FORM DELETE_SYMBOM USING I_VALUE I_TYPE
                    CHANGING E_VALUE.
  "A 는 수자만,
  "B 는 소수점이 들어가 수자,
  "C 는 수자 + 문자 ABCD....
  "D 는  수자 + 문자 ABCD.... + 소수점
  DATA: LV_FIELD TYPE STRING.
  DATA: LV_I     TYPE I.
  DATA: LV_TIMES TYPE I.
  DATA: LV_C     TYPE STRING VALUE
      '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
        LV_CD    TYPE STRING VALUE
      '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.'.
  DATA: LV_N     TYPE STRING VALUE '1234567890',
        LV_ND    TYPE STRING VALUE '.1234567890'.
  DATA: LV_T     TYPE STRING.
  DATA: LV_ETEXT TYPE STRING.

  DEFINE _S_RE.
    LV_I = &2 + 1.

    CONCATENATE &1+0(&2) &1+LV_I INTO &1.

  END-OF-DEFINITION.

  DEFINE _S_CN.
    CLEAR: LV_T, LV_TIMES.
    LV_T = &1.
    LV_TIMES = STRLEN( LV_T ).

    DO LV_TIMES TIMES.
      IF LV_T CN &2.
        _S_RE LV_T SY-FDPOS.
      ELSE.
        EXIT.
      ENDIF.
    ENDDO.

    &3 = LV_T.
  END-OF-DEFINITION.

  CASE I_TYPE.
    WHEN 'A'.
      _S_CN I_VALUE  LV_N   E_VALUE.
    WHEN 'B'.
      _S_CN I_VALUE  LV_ND  E_VALUE.
    WHEN 'C'.
      _S_CN I_VALUE  LV_C   E_VALUE.
    WHEN 'D'.
      _S_CN I_VALUE  LV_CD  E_VALUE.
  ENDCASE.
ENDFORM. "DELETE_SYMBOM
*&---------------------------------------------------------------------*
*&      Form  F4_VARIANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_PA_VARI  text
*----------------------------------------------------------------------*
FORM F4_VARIANT USING PV_VARI.

  DATA : LS_VARIANT TYPE DISVARIANT.

  LS_VARIANT-REPORT   = SY-REPID.
  LS_VARIANT-USERNAME = SY-UNAME.

  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
      IS_VARIANT    = LS_VARIANT
      I_SAVE        = 'A'
    IMPORTING
      ES_VARIANT    = LS_VARIANT
    EXCEPTIONS
      NOT_FOUNT     = 1
      PROGRAM_ERROR = 2
      OTHERS        = 3.

  PV_VARI = LS_VARIANT-VARIANT.
ENDFORM. " F4_VARIANT
*&---------------------------------------------------------------------*
*&      Form  F4_HELP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->LT_DATA      text
*      -->P_FIELDNAME  text
*      -->P_PARA       text
*----------------------------------------------------------------------*
FORM F4_HELP_TABLE TABLES PT_DATA
              USING P_FIELDNAME P_PARA.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
     RETFIELD               = P_FIELDNAME
     DYNPPROG               = SY-CPROG
     DYNPNR                 = SY-DYNNR
     DYNPROFIELD            = P_PARA
     VALUE_ORG              = 'S'
* IMPORTING
*   USER_RESET             =
   TABLES
      VALUE_TAB              = PT_DATA
*      FIELD_TAB              = LT_GUBUN
*   RETURN_TAB             = LT_RETURN
*   DYNPFLD_MAPPING        =
EXCEPTIONS
   PARAMETER_ERROR        = 1
   NO_VALUES_FOUND        = 2
   OTHERS                 = 3.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM. "F4_HELP
*&---------------------------------------------------------------------*
*&      Form  GET_CLASSIFICATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_CLASS   text
*      -->SCLASS     text
*      -->PT_OBJECT  text
*      -->OBJDAT     text
*      -->PV_TYPE    text
*      -->PV_OBJECT  text
*      -->PV_TABLE   text
*----------------------------------------------------------------------*
FORM GET_CLASSIFICATION TABLES PT_CLASS TYPE STANDARD TABLE SCLASS
                                PT_OBJECT TYPE STANDARD TABLE OBJDAT
                         USING  PV_TYPE PV_OBJECT PV_TABLE.

  CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
    EXPORTING
      CLASSTEXT          = 'X'
      CLASSTYPE          = PV_TYPE             "-> class type
      OBJECT             = PV_OBJECT           "-> object
      OBJECTTABLE        = PV_TABLE            "-> object table
    TABLES
      T_CLASS            = PT_CLASS
      T_OBJECTDATA       = PT_OBJECT
    EXCEPTIONS
      NO_CLASSIFICATION  = 1
      NO_CLASSTYPES      = 2
      INVALID_CLASS_TYPE = 3
      OTHERS             = 4.

ENDFORM. "GET_CLASSIFICATION
*&---------------------------------------------------------------------*
*&      Form  BATCH_CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BATCH_CHECK USING P_PROGRAM TYPE SY-REPID.

  DATA : LT_JOBLIST LIKE TBTCJOB OCCURS 0 WITH HEADER LINE.
  DATA : LV_CNT TYPE I.

  IF  SY-BATCH = 'X'.    "배치 처리시만 처리한다.
*   현재 진행중에 있는 Schedule Job Check.
    CLEAR : LV_CNT, LT_JOBLIST, LT_JOBLIST[].
    CALL FUNCTION 'BP_FIND_JOBS_WITH_PROGRAM'
      EXPORTING
        ABAP_PROGRAM_NAME             = P_PROGRAM
        STATUS                        = 'R'        " 진행중인 작업
      TABLES
        JOBLIST                       = LT_JOBLIST
      EXCEPTIONS
        NO_JOBS_FOUND                 = 1
        PROGRAM_SPECIFICATION_MISSING = 2
        INVALID_DIALOG_TYPE           = 3
        JOB_FIND_CANCELED             = 4
        OTHERS                        = 5.

    DESCRIBE TABLE LT_JOBLIST LINES LV_CNT.
    IF LV_CNT > 1.
      MESSAGE S001 WITH '실행중인 Schedule Job 이 있습니다.'.
    ELSE.
    ENDIF.
    EXIT.
  ENDIF.
ENDFORM. "BATCH_CHECK
*&---------------------------------------------------------------------*
*&      Form  ENTER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ENTER .
  CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
    EXPORTING
      FUNCTIONCODE           = 'ENTER'
    EXCEPTIONS
      FUNCTION_NOT_SUPPORTED = 1
      OTHERS                 = 2.
ENDFORM. " ENTER
*&---------------------------------------------------------------------*
*&      Form  GET_LABST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_WERKS    text
*      -->P_LGORT    text
*      -->P_MATNR    text
*      -->P_LABST    text
*----------------------------------------------------------------------*
FORM GET_LABST  USING    P_WERKS
                         P_LGORT
                         P_MATNR
                   CHANGING P_LABST.

  DATA : LV_LABST TYPE LABST.
  DATA : LT_MARDH TYPE TABLE OF MARDH WITH HEADER LINE.

  DATA : LV_LFGJA(4).
  DATA : LV_LFMON(2).

  DATA: BEGIN OF LT_MARD_SUM OCCURS 0,
    MATNR LIKE MARD-MATNR,
    WERKS LIKE MARD-WERKS,
    LGORT LIKE MARD-LGORT,
    LABST LIKE MARD-LABST,
    MONTH TYPE WAHD_ALV_PERIO,
  END OF LT_MARD_SUM.

  LV_LFGJA = SY-DATUM(4).
  LV_LFMON = SY-DATUM+4(2).

  CLEAR : LT_MARDH, LT_MARDH.
  CLEAR : LT_MARD_SUM[], LT_MARD_SUM.
  CLEAR : LT_MARDH.
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE LT_MARDH
    FROM MARD
   WHERE WERKS EQ P_WERKS
     AND MATNR EQ P_MATNR
     AND LGORT EQ P_LGORT
     AND ( LFGJA < LV_LFGJA
           OR ( LFGJA EQ LV_LFGJA
          AND LFMON <= LV_LFMON ) ).

  SELECT *
    FROM MARDH
APPENDING CORRESPONDING FIELDS OF TABLE LT_MARDH
   WHERE WERKS EQ P_WERKS
     AND MATNR EQ P_MATNR
     AND LGORT EQ P_LGORT
     AND LFGJA EQ LV_LFGJA
     AND LFMON EQ ( SELECT MIN( LFMON ) AS LFMON
                     FROM MARDH
                    WHERE WERKS EQ P_WERKS
                      AND MATNR EQ P_MATNR
                      AND LGORT EQ P_LGORT
                      AND LFGJA EQ LV_LFGJA
                      AND ( LFGJA > LV_LFGJA
                           OR ( LFGJA EQ LV_LFGJA
                          AND LFMON >= LV_LFMON ) )
                    GROUP BY WERKS MATNR LGORT LFGJA ).

  DELETE LT_MARDH WHERE LABST EQ 0
                    AND INSME EQ 0
                    AND SPEME EQ 0.

  LOOP AT LT_MARDH.
    CLEAR LV_LABST.
    LT_MARD_SUM-WERKS = LT_MARDH-WERKS.
    LT_MARD_SUM-MATNR = LT_MARDH-MATNR.

    CONCATENATE LT_MARDH-LFGJA LT_MARDH-LFMON
           INTO LT_MARD_SUM-MONTH.

    LV_LABST = LT_MARDH-LABST + LT_MARDH-INSME + LT_MARDH-SPEME.
    LT_MARD_SUM-LABST = LV_LABST.

    COLLECT LT_MARD_SUM. CLEAR LT_MARD_SUM.
  ENDLOOP.

  READ TABLE LT_MARD_SUM INDEX 1.
  P_LABST = LT_MARD_SUM-LABST.

ENDFORM.                    " GET_LABST
*&---------------------------------------------------------------------*
*&      Form  GET_LABST_2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_MATNR    text
*      -->P_WERKS    text
*----------------------------------------------------------------------*
FORM GET_LABST_2 TABLES T_PSPNR STRUCTURE /CWM/R_PSPNR
                 USING IV_MATNR TYPE MATNR
                       IV_WERKS TYPE WERKS_D
                       IV_XLGPF TYPE CHAR1   "플랜트
                       IV_LGORT TYPE LGORT_D
                       IV_XCHPF TYPE XCHPF   "저장위치 레
                       IV_CHARG TYPE CHARG_D
                       EV_LABST TYPE LABST   "가용재고
                       EV_LABST_M TYPE LABST "평가재고
                       EV_EDEN TYPE BDMNG    "예약 미출
                       EV_MEINS TYPE MEINS.

*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(IV_MATNR) TYPE MATNR
*" VALUE(IV_WERKS) TYPE WERKS_D
*" VALUE(IV_XLGPF) TYPE ZD_XLGPF DEFAULT 'X'
*" VALUE(IV_LGORT) TYPE LGORT_D OPTIONAL
*" VALUE(IV_XCHPF) TYPE XCHPF DEFAULT SPACE
*" VALUE(IV_CHARG) TYPE CHARG_D OPTIONAL
*" EXPORTING
*" VALUE(EV_LABST) TYPE LABST
*" VALUE(EV_LABST_M) TYPE LABST
*" VALUE(EV_EDEN) TYPE BDMNG
*" VALUE(EV_MEINS) TYPE MEINS
*" TABLES
*" T_PSPNR STRUCTURE /CWM/R_PSPNR OPTIONAL
*" EXCEPTIONS
*" MATNR_NOT_EXIST
*"----------------------------------------------------------------------

* Function Name : ZMM001_GET_LABST
* SAP Module : MM
* Created by : MM04
*
* 자재에 대한 현재고, 가용재고, 예약 미출고를 구한다.
* 저장위치, 배치를 선택옵션으로해서 미 입력시 상위 레벨의 기초를 구한다.
* 예) 자재코드 + 플랜트만 입력시 = 플랜트 레벨의 기초재고
* 자재코드 + 플랜트 + 저장위치 = 저장위치 레벨의 기초재고
* 자재코드 + 플랜트 + 저장위치 + 배치번호 = 배치번호 레벨의 기초재고

  IF IV_XLGPF IS INITIAL.
    IV_XLGPF = 'X'.
  ENDIF.

  TABLES : MARD,
                 RESB,
                 RKPF.

  TYPES : BEGIN OF T_RESB,
            RSNUM TYPE RSNUM,
            RSPOS TYPE RSPOS,
            RSART TYPE RSART,
            MATNR TYPE MATNR,
            WERKS TYPE WERKS_D,   "출고 플랜트
           LGORT TYPE LGORT_D,    "출고 저장위치
           CHARG TYPE CHARG_D,
            BDMNG TYPE BDMNG,
            ENMNG TYPE ENMNG,
            MEINS TYPE MEINS,       "기본단위
           SHKZG TYPE SHKZG,       "차/대변 지시자
           UMWRK TYPE UMWRK,     "입고 플랜트
           UMLGO TYPE UMLGO,       "입고저장위치
   END OF T_RESB.


  DATA : EV_LABST01 LIKE MARD-LABST VALUE 0.
  DATA : EV_LABST02 LIKE MARD-LABST VALUE 0.
  DATA : EV_LABST03 LIKE MARD-LABST VALUE 0.

* 플랜트-저장위치 Internal Table
  DATA : GT_T001L TYPE TABLE OF T001L,
              GS_T001L LIKE LINE OF GT_T001L.

  DATA : GT_RESB TYPE TABLE OF T_RESB,
            GS_RESB LIKE LINE OF GT_RESB.

  DATA : LV_PRLAB TYPE MSPR-PRLAB.

  CLEAR : EV_LABST,         "가용재고
           EV_LABST_M,       "평가된 사용 가능 재고
           EV_EDEN,            "예약 미출고
           EV_MEINS,
            EV_LABST01,
            EV_LABST02,
            EV_LABST03.

*************************************************************
* 자재의 기본 단위
*************************************************************
  SELECT
     SINGLE
     MEINS
     INTO (EV_MEINS)
   FROM MARA
   WHERE
       MATNR = IV_MATNR
   .

  IF SY-SUBRC EQ 0.
    IF IV_XLGPF IS INITIAL AND IV_XCHPF IS INITIAL.                   "플랜트 레벨
      SELECT
           SINGLE
           LBKUM
         INTO (EV_LABST_M)    "평가된 사용 가능 재고
      FROM MBEW
       WHERE
                 MATNR = IV_MATNR
         AND BWKEY = IV_WERKS.

      CLEAR : EV_LABST01,
                EV_LABST02,
                EV_LABST03.

      SELECT
         A~RSNUM
         A~RSPOS
         A~RSART
         A~MATNR
         A~WERKS
         A~LGORT
         A~CHARG
         A~BDMNG
         A~ENMNG
         A~MEINS
         A~SHKZG
         A~UMWRK
         A~UMLGO
        INTO CORRESPONDING FIELDS OF TABLE GT_RESB
      FROM  RESB AS A INNER JOIN RKPF AS B
        ON A~RSNUM = B~RSNUM
      WHERE
               A~MATNR = IV_MATNR
        AND A~WERKS = IV_WERKS
        AND A~PSPEL IN T_PSPNR " 20130619 MODIFY AB01
        AND A~BWART <> '216'
        AND ( A~XLOEK NE 'X' AND A~KZEAR NE 'X' ).

      IF SY-SUBRC EQ 0.
        LOOP AT GT_RESB INTO GS_RESB.
          EV_LABST03 =  GS_RESB-BDMNG - GS_RESB-ENMNG.
          IF GS_RESB-SHKZG EQ 'H'.
            EV_LABST03 = EV_LABST03 * -1.
          ENDIF.

          IF GS_RESB-WERKS NE GS_RESB-UMWRK.
            EV_EDEN = EV_EDEN +  EV_LABST03.        "예약 미출고
          ENDIF.
        ENDLOOP.
      ENDIF.


    ELSEIF IV_XLGPF IS NOT INITIAL AND IV_XCHPF IS INITIAL.      "플랜트/저장위치 레벨
      IF T_PSPNR IS INITIAL.
        SELECT
            SINGLE
            A~LABST INTO EV_LABST_M         "평가된 사용 가능 재고
       FROM MARD AS A
        WHERE
                      A~MATNR = IV_MATNR
              AND A~WERKS = IV_WERKS
              AND A~LGORT = IV_LGORT.
      ELSE.
        CLEAR LV_PRLAB.
        SELECT SINGLE SUM( PRLAB )
          INTO LV_PRLAB
          FROM MSPR
         WHERE MATNR = IV_MATNR
           AND WERKS = IV_WERKS
            AND LGORT = IV_LGORT
           AND PSPNR IN T_PSPNR.

        EV_LABST_M  = LV_PRLAB.
      ENDIF.

      CLEAR : EV_LABST01,
                EV_LABST02,
                EV_LABST03.
      SELECT
         A~RSNUM
         A~RSPOS
         A~RSART
         A~MATNR
         A~WERKS
         A~LGORT
         A~CHARG
         A~BDMNG
         A~ENMNG
         A~MEINS
         A~SHKZG
         A~UMWRK
         A~UMLGO
        INTO CORRESPONDING FIELDS OF TABLE GT_RESB
      FROM  RESB AS A INNER JOIN RKPF AS B
        ON A~RSNUM = B~RSNUM
      WHERE
               A~MATNR = IV_MATNR
        AND A~WERKS = IV_WERKS
        AND A~LGORT = IV_LGORT
        AND A~PSPEL IN T_PSPNR " 20130619 MODIFY AB01
        AND A~BWART <> '261'
        AND ( A~XLOEK NE 'X' AND A~KZEAR NE 'X' ).

      IF SY-SUBRC EQ 0.
        LOOP AT GT_RESB INTO GS_RESB.
          EV_LABST03 =  GS_RESB-BDMNG - GS_RESB-ENMNG.
          IF GS_RESB-SHKZG EQ 'H'.
            EV_LABST03 = EV_LABST03 * -1.
          ENDIF.

          IF GS_RESB-WERKS NE GS_RESB-UMWRK OR GS_RESB-LGORT NE GS_RESB-UMLGO.
            EV_EDEN = EV_EDEN +  EV_LABST03.        "예약 미출고
          ENDIF.
        ENDLOOP.
      ENDIF.

    ELSEIF IV_XLGPF IS INITIAL AND IV_XCHPF IS NOT INITIAL.      "플랜트/배치 레벨
      SELECT
           SUM( A~CLABS )          "평가된 사용 가능 재고
          SUM( A~CSPEM )         "보류 재고
          INTO (EV_LABST01, EV_LABST02)          "평가된 사용 가능 재고
      FROM MCHB AS A
       WHERE
                     A~MATNR = IV_MATNR
             AND A~WERKS = IV_WERKS
             AND A~CHARG = IV_CHARG.

      EV_LABST_M = EV_LABST01 + EV_LABST02.

      CLEAR : EV_LABST01,
                EV_LABST02,
                EV_LABST03.
      SELECT
          A~RSNUM
          A~RSPOS
          A~RSART
          A~MATNR
          A~WERKS
          A~LGORT
          A~CHARG
          A~BDMNG
          A~ENMNG
          A~MEINS
          A~SHKZG
          A~UMWRK
          A~UMLGO
         INTO CORRESPONDING FIELDS OF TABLE GT_RESB
       FROM  RESB AS A INNER JOIN RKPF AS B
         ON A~RSNUM = B~RSNUM
       WHERE
                A~MATNR = IV_MATNR
         AND A~WERKS = IV_WERKS
         AND A~CHARG = IV_CHARG
        AND A~PSPEL IN T_PSPNR " 20130619 MODIFY AB01
        AND A~BWART <> '261'
         AND ( A~XLOEK NE 'X' AND A~KZEAR NE 'X' ).

      IF SY-SUBRC EQ 0.
        LOOP AT GT_RESB INTO GS_RESB.
          EV_LABST03 =  GS_RESB-BDMNG - GS_RESB-ENMNG.
          IF GS_RESB-SHKZG EQ 'H'.
            EV_LABST03 = EV_LABST03 * -1.
          ENDIF.

          IF GS_RESB-WERKS NE GS_RESB-UMWRK.
            EV_EDEN = EV_EDEN +  EV_LABST03.        "예약 미출고
          ENDIF.
        ENDLOOP.
      ENDIF.

    ELSEIF IV_XLGPF IS NOT INITIAL AND IV_XCHPF IS NOT INITIAL.      "플랜트/저장위치/배치 레벨
      SELECT
           SINGLE
           A~CLABS          "평가된 사용 가능 재고
          A~CSPEM         "보류 재고
          INTO (EV_LABST01, EV_LABST02)          "평가된 사용 가능 재고
      FROM MCHB AS A
       WHERE
                     A~MATNR = IV_MATNR
             AND A~WERKS = IV_WERKS
             AND A~LGORT = IV_LGORT
             AND A~CHARG = IV_CHARG.
      .

      EV_LABST_M = EV_LABST01 + EV_LABST02.

      CLEAR : EV_LABST01,
                EV_LABST02,
                EV_LABST03.

      SELECT
          A~RSNUM
          A~RSPOS
          A~RSART
          A~MATNR
          A~WERKS
          A~LGORT
          A~CHARG
          A~BDMNG
          A~ENMNG
          A~MEINS
          A~SHKZG
          A~UMWRK
          A~UMLGO
         INTO CORRESPONDING FIELDS OF TABLE GT_RESB
       FROM  RESB AS A INNER JOIN RKPF AS B
         ON A~RSNUM = B~RSNUM
       WHERE
                A~MATNR = IV_MATNR
         AND A~WERKS = IV_WERKS
        AND A~LGORT = IV_LGORT
        AND A~CHARG = IV_CHARG
        AND A~PSPEL IN T_PSPNR " 20130619 MODIFY AB01
        AND A~BWART <> '261'
         AND ( A~XLOEK NE 'X' AND A~KZEAR NE 'X' ).

      IF SY-SUBRC EQ 0.
        LOOP AT GT_RESB INTO GS_RESB.
          EV_LABST03 =  GS_RESB-BDMNG - GS_RESB-ENMNG.
          IF GS_RESB-SHKZG EQ 'H'.
            EV_LABST03 = EV_LABST03 * -1.
          ENDIF.

          IF GS_RESB-WERKS NE GS_RESB-UMWRK OR GS_RESB-LGORT NE GS_RESB-UMLGO.
            EV_EDEN = EV_EDEN +  EV_LABST03.        "예약 미출고
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDIF.

    EV_LABST = EV_LABST_M + EV_EDEN.        "가용재고 = 평가재고 - 예약 미출고
  ELSE.
    RAISE MATNR_NOT_EXIST.
  ENDIF.

ENDFORM.                    "GET_LABST_2
*&---------------------------------------------------------------------*
*&      Form  GET_LABST_3
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->IT_MATNR   text
*      -->ET_NEW     text
*      -->I_WERKS    text
*      -->I_BUDAT    text
*      -->I_BUDAT_T  text
*      -->I_LGORT    text
*      -->I_CHECK    text
*----------------------------------------------------------------------*
FORM GET_LABST_3 TABLES IT_MATNR TYPE STANDARD TABLE
                        ET_NEW   LIKE GT_STOCK_INVENTORY_S
                 USING I_WERKS   TYPE WERKS_D
                       I_BUDAT   TYPE SY-DATUM
                       I_BUDAT_T TYPE SY-DATUM
                       I_LGORT   TYPE LGORT_D
                       I_CHECK   TYPE CHAR1.
*  FUNCTION ZMM_GET_MB5B_FINAL_QTY.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(I_WERKS) TYPE  WERKS_D OPTIONAL
*"     REFERENCE(I_BUDAT) TYPE  SY-DATUM OPTIONAL
*"     REFERENCE(I_BUDAT_T) TYPE  SY-DATUM OPTIONAL
*"     REFERENCE(I_LGORT) TYPE  LGORT_D OPTIONAL
*"     REFERENCE(I_CHECK) TYPE  CHAR1 OPTIONAL
*"  TABLES
*"      IT_MATNR
*"      ET_NEW STRUCTURE  STOCK_INVENTORY_S
*"----------------------------------------------------------------------

  IF IT_MATNR[] IS INITIAL.
    EXIT.
  ENDIF.

  RANGES : RA_DATUM FOR SY-DATUM,
           RA_MATNR FOR MSEG-MATNR.

  CLEAR : RA_MATNR, RA_MATNR[].
  LOOP AT IT_MATNR.
    RA_MATNR-SIGN = 'I'.
    RA_MATNR-OPTION = 'EQ'.
    RA_MATNR-LOW = IT_MATNR.
    APPEND RA_MATNR.
  ENDLOOP.

  CLEAR : RA_DATUM, RA_DATUM[].
  RA_MATNR-SIGN = 'I'.
  RA_MATNR-OPTION = 'BT'.
  RA_DATUM-LOW  = I_BUDAT.
  RA_DATUM-HIGH = I_BUDAT_T.
  APPEND RA_DATUM.

  IF I_CHECK EQ '1'.
    SUBMIT RM07MLBD WITH P_AUT    EQ 'N'
                    WITH MATNR    IN IT_MATNR
                    WITH WERKS    EQ I_WERKS
                    WITH LGORT    EQ I_LGORT
                    WITH DATUM    IN RA_DATUM
                    WITH PA_SUMFL EQ 'X'
                    WITH LGBST    EQ 'X'
                    WITH SBBST    EQ ' '
                    AND RETURN.
  ELSEIF I_CHECK EQ '3'.
    SUBMIT RM07MLBD WITH P_AUT    EQ 'N'
                    WITH MATNR    IN IT_MATNR
                    WITH WERKS    EQ I_WERKS
                    WITH LGORT    EQ I_LGORT
                    WITH DATUM    IN RA_DATUM
                    WITH PA_SUMFL EQ 'X'
                    WITH LGBST    EQ ' '
                    WITH SBBST    EQ 'X'
                    WITH SOBKZ    EQ 'E'
                    AND RETURN.

  ENDIF.

  CLEAR : ET_NEW, ET_NEW[].
*  IMPORT LT_BESTAND TO ET_NEW[]
*         FROM MEMORY ID CL_MM_IM_AUT_MASTER=>GC_MEMORY_ID_RM07MLBD.
*  FREE MEMORY ID CL_MM_IM_AUT_MASTER=>GC_MEMORY_ID_RM07MLBD.
*
*  SORT ET_NEW.

*ENDFUNCTION.
ENDFORM.                    "GET_LABST_3
*&---------------------------------------------------------------------*
*&      Form  excel_to_itab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->I_FNAME       text
*      -->I_BEG_COL     text
*      -->I_BEG_ROW     text
*      -->I_END_COL     text
*      -->I_END_ROW     text
*      -->I_SHEET_NAME  text
*----------------------------------------------------------------------*
FORM EXCEL_TO_ITAB TABLES ET_RESULT
                   USING I_FNAME TYPE C
                         I_BEG_COL TYPE I
                         I_BEG_ROW TYPE I
                         I_END_COL TYPE I
                         I_END_ROW TYPE I
                         I_SHEET_NAME TYPE TXT50
                         ES_RET TYPE BAPIRET2.


* Makro f#r Fehlerbehandlung der Methods
  DEFINE M_MESSAGE.
    CASE SY-SUBRC.
      WHEN 0.
      WHEN 1.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      WHEN OTHERS. RAISE UPLOAD_OLE.
    ENDCASE.
  END-OF-DEFINITION.

* 시작 ROW/COL, 끝 ROW/COL
  IF I_BEG_ROW IS INITIAL. I_BEG_ROW = 2.     ENDIF.
  IF I_BEG_COL IS INITIAL. I_BEG_COL = 1.     ENDIF.
  IF I_END_ROW IS INITIAL. I_END_ROW = 65000. ENDIF.   "99999. ENDIF.
  IF I_END_COL IS INITIAL. I_END_COL = '99'.  ENDIF.

* check parameters
  IF I_BEG_ROW > I_END_ROW. RAISE INCONSISTENT_PARAMETERS. ENDIF.
  IF I_BEG_COL > I_END_COL. RAISE INCONSISTENT_PARAMETERS. ENDIF.

* File Name
  DATA: L_FNAME TYPE STRING.

  IF I_FNAME IS NOT INITIAL.
    L_FNAME = I_FNAME.
  ELSE.
    PERFORM GET_FILE_NAME  USING    ''   'XLS'
                           CHANGING L_FNAME.
  ENDIF.

  IF L_FNAME IS INITIAL.
    ES_RET-TYPE    = 'E'.
    MESSAGE S187(25) INTO ES_RET-MESSAGE.  "파일이름을 입력하십시오
    MESSAGE S187(25).                      "파일이름을 입력하십시오
    EXIT.
  ENDIF.

*----------------------------------------------------------------------*
* 함수 ALSM_EXCEL_TO_INTERNAL_TABLE 참조
*----------------------------------------------------------------------*



  DATA: EXCEL_TAB     TYPE  TY_T_SENDER,
        INTERN        LIKE  GS_LJW OCCURS 0 WITH HEADER LINE. "TYPE  ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
  DATA: LD_SEPARATOR  TYPE  C.
  DATA: APPLICATION   TYPE  OLE2_OBJECT,
        WORKBOOK      TYPE  OLE2_OBJECT,
        RANGE         TYPE  OLE2_OBJECT,
        WORKSHEET     TYPE  OLE2_OBJECT.
  DATA: H_CELL        TYPE  OLE2_OBJECT,
        H_CELL1       TYPE  OLE2_OBJECT.
  DATA: LD_RC         TYPE I.

* Get TAB-sign for separation of fields
  CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.
  LD_SEPARATOR = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

* open file in Excel
  IF APPLICATION-HEADER = SPACE OR APPLICATION-HANDLE = -1.
    CREATE OBJECT APPLICATION 'Excel.Application'.
    M_MESSAGE.
  ENDIF.

  CALL METHOD OF APPLICATION 'Workbooks' = WORKBOOK.
  M_MESSAGE.

  CALL METHOD OF WORKBOOK 'Open' EXPORTING #1 = L_FNAME.  "FILENAME.
  M_MESSAGE.

*  set property of application 'Visible' = 1.
*  m_message.

* 특정 SHEET 읽을 경우
  IF I_SHEET_NAME IS NOT INITIAL.
    CALL METHOD OF APPLICATION 'Worksheets' = WORKSHEET
      EXPORTING
      #1 = I_SHEET_NAME.     "Sheet명으로 넘겨라
    CALL METHOD OF WORKSHEET 'Activate'.
  ENDIF.

  GET PROPERTY OF APPLICATION 'ACTIVESHEET' = WORKSHEET.
  M_MESSAGE.

* mark whole spread sheet
  CALL METHOD OF WORKSHEET 'Cells' = H_CELL
    EXPORTING
    #1 = I_BEG_ROW
    #2 = I_BEG_COL.
  M_MESSAGE.
  CALL METHOD OF WORKSHEET 'Cells' = H_CELL1
    EXPORTING
    #1 = I_END_ROW
    #2 = I_END_COL.
  M_MESSAGE.

  CALL METHOD OF WORKSHEET 'RANGE' = RANGE
    EXPORTING
    #1 = H_CELL
    #2 = H_CELL1.
  M_MESSAGE.

  CALL METHOD OF RANGE 'SELECT'.
  M_MESSAGE.

* copy marked area (whole spread sheet) into Clippboard
  CALL METHOD OF RANGE 'COPY'.
  M_MESSAGE.

* read clipboard into ABAP
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_IMPORT
    IMPORTING
      DATA                 = EXCEL_TAB
    EXCEPTIONS
      CNTL_ERROR           = 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
      OTHERS               = 4.
  IF SY-SUBRC <> 0.
    MESSAGE A037(ALSMEX).
  ENDIF.

  PERFORM SEPARATED_TO_INTERN_CONVERT TABLES EXCEL_TAB INTERN
                                      USING  LD_SEPARATOR.

* clear clipboard
  REFRESH EXCEL_TAB.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
    IMPORTING
      DATA                 = EXCEL_TAB
    CHANGING
      RC                   = LD_RC
    EXCEPTIONS
      CNTL_ERROR           = 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
      OTHERS               = 4.

* quit Excel and free ABAP Object - unfortunately, this does not kill
* the Excel process
  CALL METHOD OF APPLICATION 'QUIT'.
  M_MESSAGE.

* >>>>> Begin of change note 575877
* to kill the Excel process it's necessary to free all used objects
  FREE OBJECT H_CELL.       M_MESSAGE.
  FREE OBJECT H_CELL1.      M_MESSAGE.
  FREE OBJECT RANGE.        M_MESSAGE.
  FREE OBJECT WORKSHEET.    M_MESSAGE.
  FREE OBJECT WORKBOOK.     M_MESSAGE.
  FREE OBJECT APPLICATION.  M_MESSAGE.
* <<<<< End of change note 575877

* EXCEL IT 구조를 리턴 IT 구조로 변환
  DATA: L_TYPE.

  FIELD-SYMBOLS: <VAL>.

  LOOP AT INTERN.

    ASSIGN COMPONENT INTERN-COL OF STRUCTURE ET_RESULT TO <VAL>.

    CLEAR L_TYPE.
    DESCRIBE FIELD <VAL> TYPE L_TYPE.
    CASE L_TYPE.
      WHEN 'P' OR 'I'.
        REPLACE ALL OCCURRENCES OF ',' IN INTERN-VALUE WITH ''.
      WHEN 'D'.
        REPLACE ALL OCCURRENCES OF '-' IN INTERN-VALUE WITH ''.
        REPLACE ALL OCCURRENCES OF '.' IN INTERN-VALUE WITH ''.
      WHEN 'T'.
        REPLACE ALL OCCURRENCES OF ':' IN INTERN-VALUE WITH ''.
    ENDCASE.

    <VAL> = INTERN-VALUE.

    AT END OF ROW.
      APPEND ET_RESULT.
      CLEAR  ET_RESULT.
    ENDAT.

  ENDLOOP.

ENDFORM.                    "excel_to_itab
*&---------------------------------------------------------------------*
*&      Form  SEPARATED_TO_INTERN_CONVERT
*&---------------------------------------------------------------------*
FORM SEPARATED_TO_INTERN_CONVERT TABLES I_TAB       TYPE      TY_T_SENDER
                                        I_INTERN    STRUCTURE GS_LJW   "TYPE TY_T_ITAB
                                 USING  I_SEPARATOR TYPE C.
  DATA: L_SIC_TABIX LIKE SY-TABIX,
        L_SIC_COL   TYPE KCD_EX_COL.
  DATA: L_FDPOS     LIKE SY-FDPOS.

  REFRESH I_INTERN.

  LOOP AT I_TAB.
    L_SIC_TABIX = SY-TABIX.
    L_SIC_COL = 0.
    WHILE I_TAB CA I_SEPARATOR.
      L_FDPOS = SY-FDPOS.
      L_SIC_COL = L_SIC_COL + 1.
      PERFORM LINE_TO_CELL_SEPARAT TABLES I_INTERN
                                   USING  I_TAB L_SIC_TABIX L_SIC_COL
                                          I_SEPARATOR L_FDPOS.
    ENDWHILE.
    IF I_TAB <> SPACE.
      CLEAR I_INTERN.
      I_INTERN-ROW = L_SIC_TABIX.
      I_INTERN-COL = L_SIC_COL + 1.
      I_INTERN-VALUE = I_TAB.
      APPEND I_INTERN.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " SEPARATED_TO_INTERN_CONVERT
*&---------------------------------------------------------------------*
*&      Form  LINE_TO_CELL_SEPARAT
*&---------------------------------------------------------------------*
FORM LINE_TO_CELL_SEPARAT TABLES I_INTERN    TYPE TY_T_ITAB
                          USING  I_LINE
                                 I_ROW       LIKE SY-TABIX
                                 CH_CELL_COL TYPE KCD_EX_COL
                                 I_SEPARATOR TYPE C
                                 I_FDPOS     LIKE SY-FDPOS.
  DATA: L_STRING   TYPE TY_S_SENDERLINE.
  DATA  L_SIC_INT  TYPE I.

  CLEAR I_INTERN.
  L_SIC_INT = I_FDPOS.
  I_INTERN-ROW = I_ROW.
  L_STRING = I_LINE.
  I_INTERN-COL = CH_CELL_COL.
* csv Dateien mit separator in Zelle: --> ;"abc;cd";
  IF ( I_SEPARATOR = ';' OR  I_SEPARATOR = ',' ) AND
       L_STRING(1) = GC_ESC.
    PERFORM LINE_TO_CELL_ESC_SEP USING L_STRING
                                       L_SIC_INT
                                       I_SEPARATOR
                                       I_INTERN-VALUE.
  ELSE.
    IF L_SIC_INT > 0.
      I_INTERN-VALUE = I_LINE(L_SIC_INT).
    ENDIF.
  ENDIF.
  IF L_SIC_INT > 0.
    APPEND I_INTERN.
  ENDIF.
  L_SIC_INT = L_SIC_INT + 1.
  I_LINE = I_LINE+L_SIC_INT.
ENDFORM.                    "LINE_TO_CELL_SEPARAT

*&---------------------------------------------------------------------*
*&      Form  LINE_TO_CELL_ESC_SEP
*&---------------------------------------------------------------------*
FORM LINE_TO_CELL_ESC_SEP USING I_STRING
                                I_SIC_INT      TYPE I
                                I_SEPARATOR    TYPE C
                                I_INTERN_VALUE TYPE TY_D_ITABVALUE.
  DATA: L_INT TYPE I,
        L_CELL_END(2).
  FIELD-SYMBOLS: <L_CELL>.
  L_CELL_END = GC_ESC.
  L_CELL_END+1 = I_SEPARATOR .

  IF I_STRING CS GC_ESC.
    I_STRING = I_STRING+1.
    IF I_STRING CS L_CELL_END.
      L_INT = SY-FDPOS.
      ASSIGN I_STRING(L_INT) TO <L_CELL>.
      I_INTERN_VALUE = <L_CELL>.
      L_INT = L_INT + 2.
      I_SIC_INT = L_INT.
      I_STRING = I_STRING+L_INT.
    ELSEIF I_STRING CS GC_ESC.
*     letzte Celle
      L_INT = SY-FDPOS.
      ASSIGN I_STRING(L_INT) TO <L_CELL>.
      I_INTERN_VALUE = <L_CELL>.
      L_INT = L_INT + 1.
      I_SIC_INT = L_INT.
      I_STRING = I_STRING+L_INT.
      L_INT = STRLEN( I_STRING ).
      IF L_INT > 0 . MESSAGE X001(KX) . ENDIF.
    ELSE.
      MESSAGE X001(KX) . "was ist mit csv-Format
    ENDIF.
  ENDIF.

ENDFORM.                    "LINE_TO_CELL_ESC_SEP

----------------------------------------------------------------------------------
Extracted by Mass Download version 1.4.6 - E.G.Mellodew. 1998-2015. Sap Release 701

'Abap' 카테고리의 다른 글

O01  (0) 2021.06.01
I01  (0) 2021.06.01
F01  (0) 2021.06.01
C01  (0) 2021.06.01
ALV 1  (0) 2021.06.01