반응형
S/4 HANA에서는 ACAC_OBJECT_MODIFY_EXT를 이용할 수 없다.
ECC까지는 사용이 가능하니 ECC는 다른 소스를 참고하시길....
3061898 - BAPI ACAC_OBJECT_MODIFY_EXT를 S/4 HANA에서 사용할 수 없음 - SAP for Me
https://me.sap.com/notes/0003061898
me.sap.com
CL_ACE_MDO_SUBOBJ_FACTORY를 이용해서 Assignment를 수정하는 소스는 아래 참고.....
엑셀파일을 업로드 해서 선급비용 마스터의 내부오더, 코스트센터를 일괄 변경하는 소스입니다.
REPORT ZFIR9999 MESSAGE-ID ZFIM01.
INCLUDE ZFIR9999_TOP.
INCLUDE ZFIR9999_CLS.
INCLUDE ZFIR9999_F01.
INCLUDE ZFIR9999_PBO.
INCLUDE ZFIR9999_PAI.
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
PERFORM INITIALIZATION.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
PERFORM DOWNLOAD_EXCEL_TEMPLATE.
ENDCASE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILENM.
PERFORM GET_FILE_PATH USING 'O' P_FILENM.
AT SELECTION-SCREEN OUTPUT.
*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM GET_DATA.
*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
IF GT_MAIN[] IS NOT INITIAL.
DATA(LV_LINES) = LINES( GT_MAIN ).
MESSAGE S004 WITH LV_LINES.
CALL SCREEN 100.
ELSE.
MESSAGE S006 DISPLAY LIKE 'E'.
EXIT.
ENDIF.
*&---------------------------------------------------------------------*
*& Include ZFIR9999_TOP
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Tables
*----------------------------------------------------------------------*
TABLES : ACAC_OBJECTS, AUFK, CSKT,
SSCRFIELDS. "선택화면의 필드
*----------------------------------------------------------------------*
* Internal Table
*----------------------------------------------------------------------*
DATA : BEGIN OF GT_MAIN OCCURS 0,
ICON(4), " 상태
BUKRS LIKE ANLA-BUKRS, " 회사코드
ACAC_OBJTYPE LIKE ACAC_OBJECTS-ACAC_OBJTYPE, " 발생오브젝트 범주
ACAC_OBJNUMBER LIKE ACAC_OBJECTS-ACAC_OBJNUMBER, " 발생오브젝트 번호
REF_KEY LIKE ACAC_OBJECTS-REF_KEY,
REF_SUBKEY LIKE ACAC_OBJECTS-REF_SUBKEY,
TEXT LIKE ACAC_OBJECTS-TEXT, " 발생오브젝트명
AUFNR_B LIKE AUFK-AUFNR, " 내부오더 BEFORE
ATEXT_B LIKE AUFK-KTEXT, " 내부오더명 BEFORE
AUFNR_A LIKE AUFK-AUFNR, " 내부오더 AFTER
ATEXT_A LIKE AUFK-KTEXT, " 내부오더명 AFTER
KOSTL_B LIKE ANLZ-KOSTL, " 코스트센터 BEFORE
KTEXT_B LIKE CSKT-KTEXT, " 코스트센터명 BEFORE
KOSTL_A LIKE ANLZ-KOSTL, " 코스트센터 AFTER
KTEXT_A LIKE CSKT-KTEXT, " 코스트센터명 AFTER
MSG(100).
INCLUDE STRUCTURE ACESOBJ_ASSGMT_ATTRIBUTES.
DATA:
END OF GT_MAIN.
DATA: BEGIN OF GT_UPLOAD OCCURS 0,
ACAC_OBJTYPE(10), " 발생 오브젝트 범주
ACAC_OBJNUMBER(22), " 발생 오브젝트 번호
AUFNR(12), " 내부오더 번호
KOSTL(10), " 코스트센터
END OF GT_UPLOAD.
*&---------------------------------------------------------------------*
*& TYPE-POOLS
*&---------------------------------------------------------------------*
TYPE-POOLS : SILS.
DATA GV_ANSWER.
*&---------------------------------------------------------------------*
*& Class definition
*&---------------------------------------------------------------------*
*[ALV LVC]
CLASS LCL_EVENT_HANDLER DEFINITION DEFERRED.
*---------------------------------------------------------------------*
* Class definition
*---------------------------------------------------------------------*
DATA: GO_EVENT_HANDLER TYPE REF TO LCL_EVENT_HANDLER.
*----------------------------------------------------------------------*
* ALV Global Data
*----------------------------------------------------------------------*
*& CONTAINERS
DATA: GO_CONTAINER TYPE REF TO CL_GUI_CONTAINER,
GO_CUSTOM TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GO_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER,
GO_SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
*& HTML DOCUMENT
GO_DOCUMENT TYPE REF TO CL_DD_DOCUMENT,
*& ALV GRID
GO_GRID TYPE REF TO CL_GUI_ALV_GRID.
*& ALV VARIABLES
DATA: GV_CON_NAME1 TYPE SCRFNAME VALUE 'CON1',
GT_EXCLUDE TYPE UI_FUNCTIONS,
GS_VARIANT TYPE DISVARIANT,
GS_LAYOUT TYPE LVC_S_LAYO,
GT_FCAT TYPE LVC_T_FCAT,
GS_FCAT TYPE LVC_S_FCAT,
GT_FIELDCAT TYPE LVC_T_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
GT_SORT TYPE LVC_T_SORT,
GS_SORT TYPE LVC_S_SORT,
GT_SCOL TYPE LVC_T_SCOL,
GT_STYL TYPE LVC_T_STYL,
GT_ROWS TYPE LVC_T_ROW,
GS_ROWS TYPE LVC_S_ROW,
GT_COLUMNS TYPE LVC_T_COL,
GS_COLUMNS TYPE LVC_S_COL,
GT_F4 TYPE LVC_T_F4,
GS_F4 TYPE LVC_S_F4,
GT_DROPDOWN TYPE LVC_T_DROP,
GS_DROPDOWN TYPE LVC_S_DROP,
GS_SCROLL TYPE LVC_S_STBL,
GT_ERR TYPE LVC_T_ERR,
GS_ERR TYPE LVC_S_ERR.
DATA : GS_FUNCTIONS TYPE UI_FUNCTIONS.
DATA : GT_INDEX TYPE LVC_T_ROW,
GT_ROW TYPE LVC_T_ROID.
*&---------------------------------------------------------------------*
*& CONSTANTS
*&---------------------------------------------------------------------*
CONSTANTS : C_LEFT TYPE I VALUE 1,
C_TOP TYPE I VALUE 2,
C_BOTTOM TYPE I VALUE 4,
C_RIGHT TYPE I VALUE 8.
CONSTANTS :C_FILTER TYPE STRING
VALUE 'Excel files (*.XLS;*.XLSX)|*.XLS;*.XLSX|'.
CONSTANTS :C_PATH TYPE RLGRAP-FILENAME
VALUE 'C:\'. "upload_data.xls'.
CONSTANTS : GC_WAERS TYPE WAERS VALUE 'KRW'.
DATA SADASD.
*----------------------------------------------------------------------*
* DATA
*----------------------------------------------------------------------*
DATA : OK_CODE TYPE SY-UCOMM.
DATA : GV_DATE TYPE DATUM,
GV_BUTXT LIKE T001-BUTXT,
GV_WAERS LIKE T001-WAERS.
DATA : GS_FUNCTEXT TYPE SMP_DYNTXT.
DATA : XLS_DATA TYPE STANDARD TABLE OF ALSMEX_TABLINE WITH HEADER LINE.
DATA : ITAB_STR LIKE RSTRUCINFO OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF IFIELD OCCURS 200,
COL(4) TYPE N,
FIELD(30).
DATA: END OF IFIELD.
DATA: GV_S_COL TYPE I,
GV_S_ROW TYPE I,
GV_E_COL TYPE I,
GV_E_ROW TYPE I.
FIELD-SYMBOLS <FS>.
FIELD-SYMBOLS: <FS0>.
DATA: GV_F0(90).
*----------------------------------------------------------------------*
* SELECTION-SCREEN
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-000.
PARAMETERS: P_BUKRS LIKE BKPF-BUKRS OBLIGATORY DEFAULT '1000'.
PARAMETERS: P_FILENM LIKE RLGRAP-FILENAME OBLIGATORY DEFAULT C_PATH.
PARAMETERS: P_DFROM LIKE ACESOBJ_ASSGMT-DATE_FROM OBLIGATORY DEFAULT SY-DATUM.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT /1(79) TEXT-001.
SELECTION-SCREEN COMMENT /1(79) TEXT-002.
SELECTION-SCREEN COMMENT /1(79) TEXT-003.
SELECTION-SCREEN COMMENT /1(79) TEXT-004.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN FUNCTION KEY 1 . "엑셀업로드 버튼생성
*&---------------------------------------------------------------------*
*& Include ZFIR2999_CLS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Class(Definition) LCL_EVENT_HANDLER
*&---------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER DEFINITION.
PUBLIC SECTION.
DATA: GV_OBJ_TEXT TYPE CHAR30.
**-- CONSTRUCTOR
METHODS: CONSTRUCTOR IMPORTING E_OBJ_TEXT TYPE C.
*-- HANDLE_TOP_OF_PAGE
METHODS HANDLE_TOP_OF_PAGE FOR EVENT TOP_OF_PAGE OF CL_GUI_ALV_GRID
IMPORTING E_DYNDOC_ID SENDER.
*-- HANDLE_TOOLBAR
METHODS: HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE.
*-- HANDLE_DOUBLE_CLICK
METHODS: HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN.
*-- HANDLE_HOTSPOT_CLICK
METHODS: HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW_ID E_COLUMN_ID.
*-- HANDLE_USER_COMMAND
METHODS: HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING SENDER
E_UCOMM.
*-- HANDLE_DATA_CHANGED
METHODS: HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
IMPORTING ER_DATA_CHANGED E_ONF4 E_ONF4_BEFORE E_ONF4_AFTER E_UCOMM.
**-- HANDLE_ON_F4
METHODS: HANDLE_ONF4 FOR EVENT ONF4 OF CL_GUI_ALV_GRID
IMPORTING E_FIELDNAME
E_FIELDVALUE
ES_ROW_NO
ER_EVENT_DATA
ET_BAD_CELLS
E_DISPLAY.
ENDCLASS. "LCL_EVENT_HANDLER
*&---------------------------------------------------------------------*
*& Class(Implementation) LCL_EVENT_HANDLER
*&---------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
*-- CONSTRUCTOR
METHOD CONSTRUCTOR.
CALL METHOD SUPER->CONSTRUCTOR.
GV_OBJ_TEXT = E_OBJ_TEXT.
ENDMETHOD.
METHOD HANDLE_TOP_OF_PAGE.
* PERFORM HANDLE_TOP_OF_PAGE USING E_DYNDOC_ID
* SENDER.
ENDMETHOD.
*-- HANDLE_TOOLBAR
METHOD HANDLE_TOOLBAR.
CASE GV_OBJ_TEXT.
WHEN 'GRID'.
* PERFORM TOOLBAR USING E_OBJECT E_INTERACTIVE.
ENDCASE.
ENDMETHOD.
*-- HANDLE_DOUBLE_CLICK
METHOD HANDLE_DOUBLE_CLICK.
CASE GV_OBJ_TEXT.
WHEN 'GRID'.
PERFORM DOUBLE_CLICK USING E_ROW E_COLUMN.
ENDCASE.
ENDMETHOD.
*-- HANDLE_HOTSPOT_CLICK
METHOD HANDLE_HOTSPOT_CLICK.
CASE GV_OBJ_TEXT.
WHEN 'GRID'.
* PERFORM HOTSPOT_CLICK USING E_ROW_ID E_COLUMN_ID.
ENDCASE.
ENDMETHOD.
*-- HANDLE_USER_COMMAND
METHOD HANDLE_USER_COMMAND.
CASE GV_OBJ_TEXT.
WHEN 'GRID'.
* PERFORM USER_COMMAND USING SENDER E_UCOMM.
ENDCASE.
ENDMETHOD.
*-- HANDLE_DATA_CHANGED
METHOD HANDLE_DATA_CHANGED.
CASE GV_OBJ_TEXT.
WHEN 'GRID'.
* PERFORM DATA_CHANGED USING ER_DATA_CHANGED
* E_ONF4
* E_ONF4_BEFORE
* E_ONF4_AFTER
* E_UCOMM.
ENDCASE.
ENDMETHOD.
**-- HANDLE_ON_F4
METHOD HANDLE_ONF4.
CASE GV_OBJ_TEXT.
WHEN 'GRID'.
* PERFORM ONF4 USING E_FIELDNAME
* E_FIELDVALUE
* ES_ROW_NO
* ER_EVENT_DATA
* ET_BAD_CELLS
* E_DISPLAY.
ENDCASE.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Form TOOLBAR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_E_OBJECT text
* -->P_E_INTERACTIVE text
*&---------------------------------------------------------------------*
FORM TOOLBAR USING PO_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET
PV_INTERACTIVE.
* PERFORM CREATE_TOOLBAR USING PO_OBJECT PV_INTERACTIVE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_DOCKING_CONTAINTER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM CREATE_DOCKING_CONTAINER USING
P_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER
P_SIDE.
CREATE OBJECT P_DOCKING
EXPORTING
REPID = SY-REPID
DYNNR = SY-DYNNR
SIDE = P_SIDE
EXTENSION = 3000
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_GRID
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_GO_DOCKING text
* -->P_GO_GRID text
*&---------------------------------------------------------------------*
FORM CREATE_GRID USING P_CON
P_GRID TYPE REF TO CL_GUI_ALV_GRID.
CREATE OBJECT P_GRID
EXPORTING
I_PARENT = P_CON
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_FCAT_MERGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_GT_FIELDCAT text
* -->P_GT_DATA00 text
*&---------------------------------------------------------------------*
FORM GET_FCAT_MERGE TABLES PT_FCAT TYPE LVC_T_FCAT
PT_TABLE TYPE TABLE.
DATA: LO_TABDESCR TYPE REF TO CL_ABAP_STRUCTDESCR,
LO_DATA TYPE REF TO DATA,
LT_DFIES TYPE DDFIELDS,
LS_DFIES TYPE DFIES,
LS_FCAT TYPE LVC_S_FCAT.
CLEAR: LS_DFIES, LT_DFIES,
LS_FCAT,
PT_FCAT[].
* ITAB 의 HEADER LINE 구조 생성
CREATE DATA LO_DATA LIKE LINE OF PT_TABLE.
* 생성된 구조의 정보 추출
LO_TABDESCR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA_REF( LO_DATA ).
LT_DFIES = CL_SALV_DATA_DESCR=>READ_STRUCTDESCR( LO_TABDESCR ).
* 필드카탈로그 정보 반환
MOVE-CORRESPONDING LT_DFIES[] TO PT_FCAT[].
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SORT_FIELD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_GT_SORT text
* -->P_ENDCASE text
*&---------------------------------------------------------------------*
FORM SORT_FIELD TABLES P_SORT TYPE LVC_T_SORT
USING P_COL_POS
P_FIELDNAME
P_UP
P_DOWN
P_SUBTOT.
DATA: LS_SORT TYPE LVC_S_SORT.
* P_COL_POS = P_COL_POS + 1.
LS_SORT-SPOS = P_COL_POS.
LS_SORT-FIELDNAME = P_FIELDNAME.
LS_SORT-UP = P_UP.
LS_SORT-DOWN = P_DOWN.
LS_SORT-SUBTOT = P_SUBTOT.
APPEND LS_SORT TO P_SORT.
CLEAR LS_SORT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_EVENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_GO_GRID text
* -->P_ text
*&---------------------------------------------------------------------*
FORM SET_EVENT USING P_GRID TYPE REF TO CL_GUI_ALV_GRID
P_GUBUN.
IF P_GUBUN <> '2'.
CALL METHOD P_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
ELSE.
CALL METHOD P_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
ENDIF.
CREATE OBJECT GO_EVENT_HANDLER
EXPORTING
E_OBJ_TEXT = 'GRID'.
SET HANDLER: GO_EVENT_HANDLER->HANDLE_TOOLBAR FOR P_GRID,
GO_EVENT_HANDLER->HANDLE_USER_COMMAND FOR P_GRID,
GO_EVENT_HANDLER->HANDLE_HOTSPOT_CLICK FOR P_GRID,
GO_EVENT_HANDLER->HANDLE_DATA_CHANGED FOR P_GRID,
* GO_EVENT_HANDLER->HANDLE_DATA_CHANGED_FINISHED FOR P_GRID,
GO_EVENT_HANDLER->HANDLE_ONF4 FOR P_GRID,
GO_EVENT_HANDLER->HANDLE_DOUBLE_CLICK FOR P_GRID,
GO_EVENT_HANDLER->HANDLE_TOP_OF_PAGE FOR P_GRID.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_LIST_PROC_EVENTS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_GO_GRID text
* -->P_GO_DOCUMENT text
*&---------------------------------------------------------------------*
FORM SET_LIST_PROC_EVENTS USING P_GRID TYPE REF TO CL_GUI_ALV_GRID
P_DYNDOC TYPE REF TO CL_DD_DOCUMENT.
CALL METHOD P_GRID->LIST_PROCESSING_EVENTS
EXPORTING
I_EVENT_NAME = 'TOP_OF_PAGE'
I_DYNDOC_ID = P_DYNDOC.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ADD_EXCLD_BTN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_<TABLE> text
* -->P_CL_GUI_ALV_GRID=>MC_FC_LOC_UND text
*&---------------------------------------------------------------------*
FORM ADD_EXCLD_BTN TABLES P_TABLE
USING P_VALUE.
DATA: LV_EXCLUDE TYPE UI_FUNC.
LV_EXCLUDE = P_VALUE.
APPEND LV_EXCLUDE TO P_TABLE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_TABLE_FOR_FIRST_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_GV_GRID_1 text
* -->P_GT_LIST text
* -->P_GS_LAYOCAT1 text
* -->P_ALV_VARIANT1 text
* -->P_GT_EXCLUDE1[] text
* -->P_GT_FIELDCAT1[] text
* -->P_GT_SORT1[] text
*&---------------------------------------------------------------------*
FORM SET_TABLE_FOR_FIRST_DISPLAY USING
P_GRID TYPE REF TO CL_GUI_ALV_GRID
P_DATA TYPE TABLE
P_LAYOUT TYPE LVC_S_LAYO
P_VARIANT TYPE DISVARIANT
P_EXCLUDE TYPE UI_FUNCTIONS
P_FIELDCAT TYPE LVC_T_FCAT
P_SORT TYPE LVC_T_SORT.
* PRINT 셋팅
DATA: LS_PRINT TYPE LVC_S_PRNT.
IF P_VARIANT IS INITIAL.
CLEAR: P_VARIANT.
P_VARIANT-REPORT = SY-REPID.
ENDIF.
LS_PRINT-PRINT_CTRL-PRI_PARAMS-LINSZ = 9999999.
CALL METHOD P_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_DEFAULT = 'X'
I_SAVE = 'A'
IS_LAYOUT = P_LAYOUT
IS_VARIANT = P_VARIANT
IT_TOOLBAR_EXCLUDING = P_EXCLUDE
IS_PRINT = LS_PRINT
CHANGING
IT_OUTTAB = P_DATA
IT_FIELDCATALOG = P_FIELDCAT
IT_SORT = P_SORT
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form REFRESH_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_GO_GRID text
* -->P_GT_FIELDCAT[] text
* -->P_GS_LAYOUT text
* -->P_P_REFCAT text
*&---------------------------------------------------------------------*
FORM REFRESH_ALV USING P_GRID TYPE REF TO CL_GUI_ALV_GRID
P_FIELDCAT TYPE LVC_T_FCAT
P_LAYOCAT TYPE LVC_S_LAYO
P_FCATCHG.
* 필드카탈로그
IF P_FCATCHG = ABAP_TRUE.
CALL METHOD P_GRID->SET_FRONTEND_FIELDCATALOG
EXPORTING
IT_FIELDCATALOG = P_FIELDCAT[].
ENDIF.
* 레이아웃
CALL METHOD P_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = P_LAYOCAT.
GS_SCROLL-ROW = 'X'.
GS_SCROLL-COL = 'X'.
CALL METHOD P_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
I_SOFT_REFRESH = ' '
IS_STABLE = GS_SCROLL.
CALL METHOD CL_GUI_CFW=>FLUSH.
ENDFORM.
*&---------------------------------------------------------------------*
*& Include ZFIR9999_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form INITIALIZATION
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM INITIALIZATION .
GS_FUNCTEXT-ICON_ID = ICON_EXPORT. " 아이콘
GS_FUNCTEXT-ICON_TEXT = 'Excel Template'.
GS_FUNCTEXT-QUICKINFO = 'Excel Template'.
SSCRFIELDS-FUNCTXT_01 = GS_FUNCTEXT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GET_DATA .
DATA: BEGIN OF LT_CSKT OCCURS 0,
KOSTL LIKE CSKT-KOSTL,
KTEXT LIKE CSKT-KTEXT,
END OF LT_CSKT.
DATA: LT_ASSGMT LIKE TABLE OF ACESOBJ_ASSGMT WITH HEADER LINE.
* EXCEL 업로드
PERFORM XLS_DATA_GET TABLES XLS_DATA
USING P_FILENM
GV_S_COL
GV_S_ROW
GV_E_COL
GV_E_ROW.
* EXCEL이 길이와 TYPE 계산
CALL FUNCTION 'GET_COMPONENT_LIST'
EXPORTING
PROGRAM = SY-CPROG
FIELDNAME = 'GT_UPLOAD'
TABLES
COMPONENTS = ITAB_STR.
* GT_UPLOAD 테이블에 저장
LOOP AT XLS_DATA.
ASSIGN COMPONENT XLS_DATA-COL OF STRUCTURE GT_UPLOAD TO <FS>.
<FS> = XLS_DATA-VALUE.
IF XLS_DATA-ROW = 1.
READ TABLE ITAB_STR WITH KEY COMPNAME = XLS_DATA-VALUE.
IF SY-SUBRC = 0.
IFIELD-COL = XLS_DATA-COL.
IFIELD-FIELD = XLS_DATA-VALUE.
APPEND IFIELD.
ENDIF.
ELSE.
READ TABLE IFIELD WITH KEY COL = XLS_DATA-COL.
IF SY-SUBRC = 0.
CONCATENATE 'GT_UPLOAD-' IFIELD-FIELD INTO GV_F0.
ASSIGN (GV_F0) TO <FS0>.
<FS0> = XLS_DATA-VALUE.
ENDIF.
ENDIF.
AT END OF ROW.
APPEND GT_UPLOAD.
CLEAR GT_UPLOAD.
ENDAT.
ENDLOOP.
* 코스트센터 마스터
SELECT SINGLE KOKRS INTO @DATA(LV_KOKRS)
FROM TKA02
WHERE BUKRS EQ @P_BUKRS.
CLEAR: LT_CSKT, LT_CSKT[].
SELECT KOSTL, KTEXT
INTO TABLE @LT_CSKT
FROM CSKT
WHERE SPRAS EQ @SY-LANGU
AND KOKRS EQ @LV_KOKRS.
SELECT AUFNR, KTEXT
INTO TABLE @DATA(LT_AUFK)
FROM AUFK.
SORT LT_AUFK BY AUFNR.
CLEAR: LT_ASSGMT, LT_ASSGMT[].
SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_ASSGMT
FROM ACESOBJ_ASSGMT
WHERE COMP EQ 'ACAC'
AND BUKRS EQ P_BUKRS
AND DATE_TO EQ '99991231'.
SORT LT_ASSGMT BY COMP LOGSYS BUKRS REF_KEY REF_SUBKEY DATE_TO.
* GT_MAIN에 가공
LOOP AT GT_UPLOAD.
MOVE-CORRESPONDING GT_UPLOAD TO GT_MAIN.
GT_MAIN-BUKRS = P_BUKRS.
GT_MAIN-AUFNR_A = GT_UPLOAD-AUFNR.
GT_MAIN-KOSTL_A = GT_UPLOAD-KOSTL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GT_MAIN-AUFNR_A
IMPORTING
OUTPUT = GT_MAIN-AUFNR_A.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GT_MAIN-KOSTL_A
IMPORTING
OUTPUT = GT_MAIN-KOSTL_A.
IF GT_MAIN-ACAC_OBJTYPE IS INITIAL OR
GT_MAIN-ACAC_OBJNUMBER IS INITIAL OR
( GT_MAIN-AUFNR_A IS INITIAL AND
GT_MAIN-KOSTL_A IS INITIAL ).
GT_MAIN-ICON = '@0A@'.
GT_MAIN-MSG = '발생오브젝트 범주/번호와 변경할 내부오더 혹은 코스트센터는 필수입니다.'.
ELSE.
SELECT SINGLE REF_KEY,
REF_SUBKEY,
TEXT
INTO ( @GT_MAIN-REF_KEY, @GT_MAIN-REF_SUBKEY, @GT_MAIN-TEXT )
FROM ACAC_OBJECTS
WHERE BUKRS EQ @P_BUKRS
AND ACAC_OBJTYPE EQ @GT_MAIN-ACAC_OBJTYPE
AND ACAC_OBJNUMBER EQ @GT_MAIN-ACAC_OBJNUMBER.
IF SY-SUBRC EQ 0.
" 기존 assignment 백업
CLEAR LT_ASSGMT.
READ TABLE LT_ASSGMT WITH KEY BUKRS = P_BUKRS
REF_KEY = GT_MAIN-REF_KEY
REF_SUBKEY = GT_MAIN-REF_SUBKEY.
IF SY-SUBRC EQ 0.
MOVE-CORRESPONDING LT_ASSGMT TO GT_MAIN.
GT_MAIN-AUFNR_B = GT_MAIN-AUFNR.
GT_MAIN-KOSTL_B = GT_MAIN-KOSTL.
ENDIF.
ELSE.
GT_MAIN-ICON = '@0A@'.
GT_MAIN-MSG = '정상적인 발생오브젝트 범주/번호가 아닙니다.'.
ENDIF.
IF GT_MAIN-AUFNR_B IS NOT INITIAL.
READ TABLE LT_AUFK ASSIGNING FIELD-SYMBOL(<FS>) WITH KEY AUFNR = GT_MAIN-AUFNR_B BINARY SEARCH.
IF SY-SUBRC EQ 0.
GT_MAIN-ATEXT_B = <FS>-KTEXT.
ENDIF.
ENDIF.
IF GT_MAIN-AUFNR_A IS NOT INITIAL.
READ TABLE LT_AUFK ASSIGNING <FS> WITH KEY AUFNR = GT_MAIN-AUFNR_A BINARY SEARCH.
IF SY-SUBRC EQ 0.
GT_MAIN-ATEXT_A = <FS>-KTEXT.
ELSE.
GT_MAIN-ICON = '@0A@'.
GT_MAIN-MSG = '정상적인 내부오더가 아닙니다.'.
ENDIF.
ENDIF.
CLEAR LT_CSKT.
IF GT_MAIN-KOSTL_B IS NOT INITIAL.
READ TABLE LT_CSKT WITH KEY KOSTL = GT_MAIN-KOSTL_B.
IF SY-SUBRC EQ 0.
GT_MAIN-KTEXT_B = LT_CSKT-KTEXT.
ENDIF.
ENDIF.
CLEAR LT_CSKT.
IF GT_MAIN-KOSTL_A IS NOT INITIAL.
READ TABLE LT_CSKT WITH KEY KOSTL = GT_MAIN-KOSTL_A.
IF SY-SUBRC EQ 0.
GT_MAIN-KTEXT_A = LT_CSKT-KTEXT.
ELSE.
GT_MAIN-ICON = '@0A@'.
GT_MAIN-MSG = '정상적인 코스트센터가 아닙니다.'.
ENDIF.
ENDIF.
ENDIF.
IF GT_MAIN-ICON IS INITIAL.
GT_MAIN-ICON = '@09@'.
ENDIF.
APPEND GT_MAIN. CLEAR GT_MAIN.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM BUILD_FIELD_CATALOG .
DATA : L_FIELD1(30),
L_FIELD2(30),
L_FIELD3(30),
L_COLOR(10),
L_INDEX(2) TYPE N.
FIELD-SYMBOLS <FS> TYPE ANY.
CASE SY-DYNNR.
WHEN '0100'.
CLEAR: GT_FIELDCAT, GT_FIELDCAT[].
* 필드카탈로그 정보 조회
* PERFORM GET_FCAT_MERGE: TABLES GT_FIELDCAT
* GT_DATA00.
PERFORM MODIFY_FIELDCAT USING GT_FIELDCAT.
PERFORM GRID_FIELDCAT TABLES GT_FIELDCAT
USING :
'X' 'ICON ' ' ' ' ' TEXT-F08 '' '' '' '' '',
'X' 'BUKRS ' 'ACAC_OBJECTS' 'BUKRS' TEXT-F01 '' '' '' '' '',
'X' 'ACAC_OBJTYPE ' 'ACAC_OBJECTS' 'ACAC_OBJTYPE' TEXT-F02 '' '' '' '' '',
'X' 'ACAC_OBJNUMBER ' 'ACAC_OBJECTS' 'ACAC_OBJNUMBER' TEXT-F03 '' '' '' '' '',
' ' 'TEXT' 'ACAC_OBJECTS' 'TEXT' TEXT-F10 '' '' '' '' '',
' ' 'AUFNR_B ' 'AUFK' 'AUFNR' TEXT-F11 '' '' '' '' '',
' ' 'ATEXT_B ' 'AUFK' 'KTEXT' TEXT-F12 '' '' '' '' '',
' ' 'AUFNR_A ' 'AUFK' 'AUFNR' TEXT-F13 '' '' '' '' '',
' ' 'ATEXT_A ' 'AUFK' 'KTEXT' TEXT-F14 '' '' '' '' '',
' ' 'KOSTL_B ' 'ANLZ' 'KOSTL' TEXT-F04 '' '' '' '' '',
' ' 'KTEXT_B ' 'CSKT' 'KTEXT' TEXT-F05 '' '' '' '' '',
' ' 'KOSTL_A ' 'ANLZ' 'KOSTL' TEXT-F06 '' '' '' '' '',
' ' 'KTEXT_A ' 'CSKT' 'KTEXT' TEXT-F07 '' '' '' '' '',
' ' 'MSG ' ' ' ' ' TEXT-F09 '' '' '' '' ''.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form MODIFY_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GT_FIELDCAT
*&---------------------------------------------------------------------*
FORM MODIFY_FIELDCAT USING PT_FCAT TYPE LVC_T_FCAT.
DATA: LV_TXT(132) TYPE C.
DATA: LS_FCAT TYPE LVC_S_FCAT.
LOOP AT PT_FCAT INTO LS_FCAT.
CLEAR: LV_TXT.
CASE LS_FCAT-FIELDNAME.
WHEN 'ICON'.
LS_FCAT-COL_POS = 10.
LV_TXT = TEXT-F08.
LS_FCAT-KEY = 'X'.
WHEN 'BUKRS'.
LS_FCAT-COL_POS = 20.
LV_TXT = TEXT-F01.
LS_FCAT-KEY = 'X'.
WHEN 'ACAC_OBJTYPE'.
LS_FCAT-COL_POS = 30.
LV_TXT = TEXT-F02.
LS_FCAT-KEY = 'X'.
WHEN 'ACAC_OBJNUMBER'.
LS_FCAT-COL_POS = 40.
LV_TXT = TEXT-F03.
WHEN 'TEXT'.
LS_FCAT-COL_POS = 50.
LV_TXT = TEXT-F10.
WHEN 'AUFNR_B'.
LS_FCAT-COL_POS = 60.
LV_TXT = TEXT-F11.
WHEN 'ATEXT_B'.
LS_FCAT-COL_POS = 70.
LV_TXT = TEXT-F12.
WHEN 'AUFNR_A'.
LS_FCAT-COL_POS = 80.
LV_TXT = TEXT-F13.
WHEN 'ATEXT_A'.
LS_FCAT-COL_POS = 90.
LV_TXT = TEXT-F14.
WHEN 'KOSTL_B'.
LS_FCAT-COL_POS = 100.
LV_TXT = TEXT-F04.
WHEN 'KTEXT_B'.
LS_FCAT-COL_POS = 110.
LV_TXT = TEXT-F05.
WHEN 'KOSTL_A'.
LS_FCAT-COL_POS = 120.
LV_TXT = TEXT-F06.
WHEN 'KTEXT_A'.
LS_FCAT-COL_POS = 130.
LV_TXT = TEXT-F07.
WHEN 'MSG'.
LS_FCAT-COL_POS = 140.
LV_TXT = TEXT-F09.
WHEN OTHERS.
LS_FCAT-TECH = 'X'.
ENDCASE.
* 공통셋팅 및 필드속성지정
PERFORM SET_CAT_COMM USING LS_FCAT.
IF LV_TXT IS NOT INITIAL.
LS_FCAT-SCRTEXT_S
= LS_FCAT-SCRTEXT_M
= LS_FCAT-SCRTEXT_L
= LS_FCAT-COLTEXT
= LV_TXT.
ENDIF.
MODIFY PT_FCAT FROM LS_FCAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_CAT_COMM
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_FCAT
*&---------------------------------------------------------------------*
FORM SET_CAT_COMM USING PS_FCAT TYPE LVC_S_FCAT.
* 타입에 따른 정렬
IF PS_FCAT-INTTYPE = 'I' OR PS_FCAT-INTTYPE = 'P'. "숫자
PS_FCAT-JUST = 'R'.
ELSEIF PS_FCAT-INTTYPE = 'D'. "일자
PS_FCAT-JUST = 'C'.
ENDIF.
IF PS_FCAT-DATATYPE = 'CURR'.
* PS_FCAT-CFIELDNAME = 'GV_WAERS'.
PS_FCAT-CURRENCY = GV_WAERS.
PS_FCAT-NO_ZERO = 'X'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_SORT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM BUILD_SORT .
CLEAR: GT_SORT, GT_SORT[].
CASE SY-DYNNR.
WHEN '0100'.
PERFORM SORT_FIELD TABLES GT_SORT USING :
1 'BUKRS' 'X' '' '',
2 'ACAC_OBJTYPE' 'X' '' '',
3 'ACAC_OBJNUMBER' 'X' '' ''.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM BUILD_LAYOUT .
CASE SY-DYNNR.
WHEN '0100'.
CLEAR: GS_LAYOUT.
GS_LAYOUT-SEL_MODE = 'D'.
* GS_LAYOUT-NO_ROWINS = 'X'.
* GS_LAYOUT-NO_ROWMARK = ABAP_TRUE.
* GS_LAYOUT-ZEBRA = ABAP_TRUE.
GS_LAYOUT-CWIDTH_OPT = ABAP_TRUE.
GS_LAYOUT-STYLEFNAME = 'CELLTAB'.
* GS_LAYOUT-CTAB_FNAME = 'COLINFO'.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_VARIANT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM BUILD_VARIANT .
CLEAR: GS_VARIANT.
CASE SY-DYNNR.
WHEN '0100'.
GS_VARIANT-HANDLE = '1'.
ENDCASE.
GS_VARIANT-REPORT = SY-REPID.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
I_SAVE = 'A'
CHANGING
CS_VARIANT = GS_VARIANT
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_EVENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM BUILD_EVENT .
CASE SY-DYNNR.
WHEN '0100'.
PERFORM SET_EVENT USING: GO_GRID '1'.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SET_TOP_OF_PAGE .
CASE SY-DYNNR.
WHEN '0100'.
PERFORM SET_LIST_PROC_EVENTS USING GO_GRID
GO_DOCUMENT.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_EXCLUDE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM BUILD_EXCLUDE .
DATA: LV_TAB_NAME LIKE FELD-NAME.
FIELD-SYMBOLS: <TABLE> TYPE UI_FUNCTIONS.
CASE SY-DYNNR.
WHEN '0100'.
LV_TAB_NAME = 'GT_EXCLUDE'.
CONCATENATE LV_TAB_NAME '[]' INTO LV_TAB_NAME.
ASSIGN (LV_TAB_NAME) TO <TABLE>.
CLEAR: <TABLE>.
* 제거할 버튼 지정
PERFORM ADD_EXCLD_BTN
TABLES <TABLE>
USING: "CL_GUI_ALV_GRID=>MC_FC_EXCL_ALL.
CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO,
CL_GUI_ALV_GRID=>MC_FC_AUF,
CL_GUI_ALV_GRID=>MC_FC_AVERAGE,
CL_GUI_ALV_GRID=>MC_FC_GRAPH,
CL_GUI_ALV_GRID=>MC_FC_LOC_COPY,
CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW,
CL_GUI_ALV_GRID=>MC_FC_LOC_CUT,
CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW,
CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW,
CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW,
CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW,
CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE,
CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW,
CL_GUI_ALV_GRID=>MC_FC_INFO,
CL_GUI_ALV_GRID=>MC_FC_REFRESH.
* CL_GUI_ALV_GRID=>MC_MB_VARIANT.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_GIRD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM DISPLAY_ALV_GIRD .
CASE SY-DYNNR.
WHEN '0100'.
PERFORM SET_TABLE_FOR_FIRST_DISPLAY:
USING GO_GRID
GT_MAIN[]
GS_LAYOUT
GS_VARIANT
GT_EXCLUDE[]
GT_FIELDCAT[]
GT_SORT[].
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form REFRESH_TABLE_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*&---------------------------------------------------------------------*
FORM REFRESH_TABLE_DISPLAY USING P_REFCAT.
CASE SY-DYNNR.
WHEN '0100'.
PERFORM REFRESH_ALV: USING GO_GRID
GT_FIELDCAT[]
GS_LAYOUT
P_REFCAT.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DOUBLE_CLICK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_ROW
*& --> E_COLUMN
*&---------------------------------------------------------------------*
FORM DOUBLE_CLICK USING P_ROW
P_COLUMN.
DATA: LS_OBKEY TYPE ACE_TREE_INTERFACE,
LT_OBKEY TYPE ACE_TREE_INTERFACE_T.
CASE P_COLUMN.
WHEN 'ACAC_OBJNUMBER'.
CLEAR: GT_MAIN, LS_OBKEY, LT_OBKEY.
READ TABLE GT_MAIN INDEX P_ROW.
IF SY-SUBRC EQ 0.
LS_OBKEY-BUKRS = P_BUKRS.
LS_OBKEY-REF_KEY = GT_MAIN-REF_KEY.
LS_OBKEY-REF_SUBKEY = GT_MAIN-REF_SUBKEY.
APPEND LS_OBKEY TO LT_OBKEY.
CALL FUNCTION 'ACE_HANDLE_ACCRUAL_OBJECT_S4'
EXPORTING
ID_ACE_COMP = 'ACAC'
ID_KEYDATE = SY-DATUM
ID_MODE = '03'
ID_DISPLAY_TREE = ABAP_FALSE
IT_OBJECT_KEYS = LT_OBKEY.
ENDIF.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GRID_FIELDCAT
*&---------------------------------------------------------------------*
FORM GRID_FIELDCAT TABLES PT_FIELDCAT TYPE LVC_T_FCAT
USING P_KEY
P_FIELDNAME
P_REF_TABLE
P_REF_FIELD
P_SCRTEXT
P_OUTPUTLEN
P_EDIT
P_DO_SUM
P_EMPHASIZE
P_CFIELDNAME.
DATA: POS TYPE I.
POS = POS + 1.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = POS.
GS_FIELDCAT-KEY = P_KEY.
GS_FIELDCAT-FIELDNAME = P_FIELDNAME.
GS_FIELDCAT-REF_TABLE = P_REF_TABLE.
GS_FIELDCAT-REF_FIELD = P_REF_FIELD.
GS_FIELDCAT-OUTPUTLEN = P_OUTPUTLEN.
GS_FIELDCAT-EDIT = P_EDIT.
GS_FIELDCAT-DO_SUM = P_DO_SUM.
GS_FIELDCAT-EMPHASIZE = P_EMPHASIZE.
IF P_FIELDNAME = 'MENGE'.
GS_FIELDCAT-QFIELDNAME = P_CFIELDNAME.
ELSE.
GS_FIELDCAT-CFIELDNAME = P_CFIELDNAME.
ENDIF.
GS_FIELDCAT-SCRTEXT_L = P_SCRTEXT.
GS_FIELDCAT-SCRTEXT_M = P_SCRTEXT.
GS_FIELDCAT-SCRTEXT_S = P_SCRTEXT.
GS_FIELDCAT-COLDDICTXT = 'L'.
APPEND GS_FIELDCAT TO PT_FIELDCAT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form download_excel_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM DOWNLOAD_EXCEL_TEMPLATE .
DATA: LT_MIME LIKE W3MIME OCCURS 0 WITH HEADER LINE.
DATA: LS_WWWDATA TYPE WWWDATATAB.
DATA: LV_FILENAME TYPE STRING,
LV_PATH TYPE STRING,
LV_FULLPATH TYPE STRING,
LV_SIZE TYPE I,
LV_FILESIZE(10).
DATA: LV_OBJID TYPE W3OBJID.
*& OBJID
LV_OBJID = SY-REPID.
* 등록된 엑셀 양식 체크
SELECT SINGLE
RELID
OBJID
CHECKOUT
CHECKNEW
CHNAME
TDATE
TTIME
TEXT
INTO CORRESPONDING FIELDS OF LS_WWWDATA
FROM WWWDATA
WHERE OBJID = LV_OBJID.
IF SY-SUBRC NE 0.
MESSAGE S020 DISPLAY LIKE 'E'. "등록된 엑셀양식이 존재하지 않습니다.
EXIT.
ENDIF.
* 엑셀 양식 다운로드
CALL FUNCTION 'WWWDATA_IMPORT'
EXPORTING
KEY = LS_WWWDATA
TABLES
MIME = LT_MIME
EXCEPTIONS
WRONG_OBJECT_TYPE = 1
IMPORT_ERROR = 2
OTHERS = 3.
CALL FUNCTION 'WWWPARAMS_READ'
EXPORTING
RELID = LS_WWWDATA-RELID
OBJID = LS_WWWDATA-OBJID
NAME = 'filesize'
IMPORTING
VALUE = LV_FILESIZE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
DEFAULT_EXTENSION = 'XLS'
CHANGING
FILENAME = LV_FILENAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH.
LV_SIZE = LV_FILESIZE.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = LV_FULLPATH
FILETYPE = 'BIN'
BIN_FILESIZE = LV_SIZE
TABLES
DATA_TAB = LT_MIME.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file_path
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_FILENM
*&---------------------------------------------------------------------*
FORM GET_FILE_PATH USING VALUE(OPEN_MODE)
FILE_PATH.
DATA : LT_FILETABLE TYPE FILETABLE,
LS_FILETABLE TYPE LINE OF FILETABLE.
DATA : LV_FILTER TYPE STRING,
LV_DEFAILT TYPE STRING,
LV_NAME TYPE STRING,
LV_PATH TYPE STRING,
LV_FULLPATH TYPE STRING,
LV_UACT TYPE I,
LV_RC TYPE I.
LV_DEFAILT = FILE_PATH.
LV_FILTER = C_FILTER. "'Excel files (*.XLS;*.XLSX)|*.XLS;*.XLSX|'.
IF OPEN_MODE = 'O'.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
DEFAULT_EXTENSION = 'TXT'
DEFAULT_FILENAME = LV_DEFAILT
FILE_FILTER = LV_FILTER
CHANGING
FILE_TABLE = LT_FILETABLE
RC = LV_RC.
READ TABLE LT_FILETABLE INDEX 1 INTO LS_FILETABLE.
IF SY-SUBRC = 0.
FILE_PATH = LS_FILETABLE-FILENAME.
ELSE.
MESSAGE S001 DISPLAY LIKE 'E' WITH TEXT-E20. "'Please check your file!!'.
ENDIF.
ELSEIF OPEN_MODE = 'S'.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
DEFAULT_EXTENSION = 'TXT'
DEFAULT_FILE_NAME = LV_DEFAILT
FILE_FILTER = LV_FILTER
CHANGING
FILENAME = LV_NAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH
USER_ACTION = LV_UACT.
FILE_PATH = LV_FULLPATH.
IF LV_UACT <> 0.
MESSAGE S001 DISPLAY LIKE 'E' WITH TEXT-E21. "'Job canceled.'.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form XLS_DATA_GET
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> XLS_DATA
*& --> P_FILENM
*& --> GV_S_COL
*& --> GV_S_ROW
*& --> GV_E_COL
*& --> GV_E_ROW
*&---------------------------------------------------------------------*
FORM XLS_DATA_GET TABLES PT_XLS_DATA STRUCTURE ALSMEX_TABLINE
USING P_FILENAME " File Name.
VALUE(P_SCOL) " Start Col.
VALUE(P_SROW) " Start Row.
VALUE(P_ECOL) " End Col.
VALUE(P_EROW). " End Row.
* EXCEL 길이 지정
GV_S_COL = 1.
GV_S_ROW = 2.
GV_E_COL = 255.
GV_E_ROW = 60002.
* 엑셀 컬럼 과 필드 ID 읽기
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILENAME
I_BEGIN_COL = GV_S_COL
I_BEGIN_ROW = GV_S_ROW
I_END_COL = GV_E_COL
I_END_ROW = GV_E_ROW
TABLES
INTERN = PT_XLS_DATA
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE S001 DISPLAY LIKE 'E' WITH TEXT-E20. "'Please check your file!!'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ASSET_CHANGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM MASTER_CHANGE .
DATA: LO_ACAC_MDO_SUBOBJ TYPE REF TO CL_ACAC_MDO_SUBOBJ,
LO_ACE_MDO_SUBOBJ TYPE REF TO IF_ACE_MDO_SUBOBJ,
LS_POSTING_PARAMS TYPE ACE_POSTING_PARAMS.
DATA: LS_OBKEY TYPE ACESOBJ_KEY,
LS_ASSMT TYPE ACESOBJ_ASSGMT_ATTRIBUTES.
DATA: LV_TOTAL TYPE I,
LV_SCNT TYPE I,
LV_ECNT TYPE I.
* 오류건을 제외하고 모두 변경됩니다. 진행하시겠습니까?
PERFORM POPUP_TO_CONFIRM USING TEXT-M01 TEXT-M02.
CHECK GV_ANSWER = '1'. " 예
CLEAR: LV_TOTAL, LV_SCNT, LV_ECNT.
LOOP AT GT_MAIN WHERE ICON = '@09@'.
ADD 1 TO LV_TOTAL.
TRY.
CLEAR LS_OBKEY.
LS_OBKEY-COMP = 'ACAC'.
LS_OBKEY-BUKRS = P_BUKRS.
LS_OBKEY-REF_KEY = GT_MAIN-REF_KEY.
LS_OBKEY-REF_SUBKEY = GT_MAIN-REF_SUBKEY.
LO_ACE_MDO_SUBOBJ = CL_ACE_MDO_SUBOBJ_FACTORY=>GET_MDO_SUBOBJ_INSTANCE( IS_ACESOBJ_KEY = LS_OBKEY
IV_DETDATE = SY-DATUM
IB_SAVE_FLAG = ABAP_FALSE "prevent saving if errors occur
IV_ACTIVITY = CONV #( IF_ACE_MDO_TYPES=>ACT_CHANGE )
IB_INITIALIZE_NEW_IF_NOT_EXIST = ABAP_TRUE ).
CHECK LO_ACE_MDO_SUBOBJ IS BOUND.
LO_ACAC_MDO_SUBOBJ ?= LO_ACE_MDO_SUBOBJ.
CLEAR LS_ASSMT.
MOVE-CORRESPONDING GT_MAIN TO LS_ASSMT.
LS_ASSMT-KOSTL = GT_MAIN-KOSTL_A.
LS_ASSMT-AUFNR = GT_MAIN-AUFNR_A.
LO_ACAC_MDO_SUBOBJ->ASSIGNMENTS_MODIFY(
EXPORTING
ID_DATEFROM = P_DFROM " From Date of an Entry
IS_ASSIGNMENTS = LS_ASSMT " Account assignments for accrual subobject
ID_TESTRUN = SPACE " Checkbox
).
CLEAR LS_POSTING_PARAMS.
LS_POSTING_PARAMS-KEYDATE = P_DFROM.
LS_POSTING_PARAMS-BLDAT = P_DFROM.
LS_POSTING_PARAMS-BUDAT = P_DFROM.
LS_POSTING_PARAMS-GJAHR = P_DFROM(4).
CONCATENATE '0' P_DFROM+4(2) INTO LS_POSTING_PARAMS-POPER.
CONDENSE LS_POSTING_PARAMS-POPER NO-GAPS.
CL_ACE_MDO_SUBOBJ_FACTORY=>CHANGE_SAVE_PARAMETERS( IS_SUBOBJ_KEY = LS_OBKEY
IB_SAVE_FLAG = ABAP_TRUE
IS_POSTING_PARAMS = LS_POSTING_PARAMS ).
CATCH CX_ACE INTO DATA(LX_ACE).
CL_ACE_MESSAGE_HANDLER=>GET_INSTANCE( )->ADD_MESSAGE_INST( LX_ACE ).
ENDTRY.
DATA(LT_RESULT) = CL_ACE_MDO_SUBOBJ_FACTORY=>SAVE( ID_SAVEMODE = 'C' ).
READ TABLE LT_RESULT INTO DATA(LS_RESULT) WITH KEY STATUS = 'E'.
IF SY-SUBRC EQ 0 AND LS_RESULT IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ADD 1 TO LV_ECNT.
GT_MAIN-ICON = '@0A@'.
GT_MAIN-MSG = '저장 중 오류가 발생하였습니다.'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ADD 1 TO LV_SCNT.
GT_MAIN-ICON = '@08@'.
ENDIF.
MODIFY GT_MAIN.
ENDLOOP.
MESSAGE S000 WITH '마스터 변경 완료. ' &&
'총 ' && LV_TOTAL && '건 중 성공: ' && LV_SCNT &&
' / 실패: ' && LV_ECNT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form POPUP_TO_CONFIRM
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> TEXT_M01
*& --> TEXT_M02
*&---------------------------------------------------------------------*
FORM POPUP_TO_CONFIRM USING P_TITLEBAR P_TEXT_QUESTION.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = P_TITLEBAR
TEXT_QUESTION = P_TEXT_QUESTION
TEXT_BUTTON_1 = TEXT-M03 " '예'
TEXT_BUTTON_2 = TEXT-M04 " '아니오'
DEFAULT_BUTTON = '1'
START_COLUMN = 25
START_ROW = 6
IMPORTING
ANSWER = GV_ANSWER.
ENDFORM. "POPUP_TO_CONFIRM
*&---------------------------------------------------------------------*
*& Include ZFIR9999_PBO
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'S100'.
SET TITLEBAR 'T100' .
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CREATE_OBJECT_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE CREATE_OBJECT_0100 OUTPUT.
IF GO_DOCKING IS INITIAL.
PERFORM CREATE_DOCKING_CONTAINER USING GO_DOCKING C_LEFT.
PERFORM CREATE_GRID USING GO_DOCKING GO_GRID.
PERFORM BUILD_FIELD_CATALOG.
PERFORM BUILD_SORT.
PERFORM BUILD_LAYOUT.
PERFORM BUILD_VARIANT.
PERFORM BUILD_EVENT.
PERFORM SET_TOP_OF_PAGE.
PERFORM BUILD_EXCLUDE.
PERFORM DISPLAY_ALV_GIRD.
ELSE.
PERFORM REFRESH_TABLE_DISPLAY USING ''.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Include ZFIR9999_PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.
LEAVE TO SCREEN 0.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
WHEN 'CHANGE'.
PERFORM MASTER_CHANGE.
ENDCASE.
ENDMODULE.
엑셀 업로드 양식
발생 오브젝트 범주 | 발생 오브젝트 번호 | 변경할 내부오더 번호 | 변경할 코스트센터 |
AC_ADV_SPT | 2025100000189 | 500212 | 1010555 |
반응형
'IT WORK > SAP FI and ABAP' 카테고리의 다른 글
[ABAP] join에 sub query 사용해서 데이터 가져오는 CDS View (0) | 2025.05.02 |
---|---|
[SAP FI] S/4 Hana BP 계좌번호 유효성 체크 (0) | 2025.04.22 |
[SAP FI] BAPI_ACC_DOCUMENT_POST 펑션을 이용한 비용 전표 전기 (0) | 2025.04.21 |
[FI/ABAP] 임시전표 삭제 (0) | 2025.04.11 |
[공통] SE16N을 통한 직접 수정된 내역 검색 리포트 RKSE16N_CD_DISPLAY (0) | 2025.04.03 |