*&---------------------------------------------------------------------*
*& Report ZDOWNLOAD_TABLE_DATA
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZDOWNLOAD_TABLE_DATA
NO STANDARD PAGE HEADING
LINE-SIZE 1000.
TYPE-POOLS : SLIS.
TABLES:
DD02L,
DD02T,
ZCASCRCHIF.
DATA:
GR_TABNAME TYPE RANGE OF TABNAME WITH HEADER LINE.
*..... Process log
DATA: BEGIN OF GS_LOG,
SEQNO(4) TYPE N,
STATU_ICON LIKE ICON-ID,
STATU_MSG(256),
TABNAME LIKE DD02L-TABNAME,
DDTEXT LIKE DD02T-DDTEXT,
DBCNT LIKE SY-DBCNT,
FILELENGTH TYPE I,
END OF GS_LOG.
DATA:
GT_LOG LIKE GS_LOG OCCURS 0 WITH HEADER LINE.
CONSTANTS:
C_INDXKEY LIKE INDX-SRTFD VALUE 'ZDOWNLOAD_TABLE_DATA'.
*&---------------------------------------------------------------------*
*& Macro SET_RANGE_VALUE
*&---------------------------------------------------------------------*
DEFINE SET_RANGE_VALUE.
&1-SIGN = &2.
&1-OPTION = &3.
&1-LOW = &4.
&1-HIGH = &5.
APPEND &1.
CLEAR &1.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* SELECTION-SCREEN
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TX_B1.
* 작업선택
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (33) TX_CBOX1.
*SELECTION-SCREEN POSITION 33.
* 일반테이블
PARAMETER RB_NORM RADIOBUTTON GROUP RB1
USER-COMMAND RB1
DEFAULT 'X'.
SELECTION-SCREEN COMMENT (20) TX_RBNOR FOR FIELD RB_NORM.
* DDIC 테이블
PARAMETER RB_DDIC RADIOBUTTON GROUP RB1.
SELECTION-SCREEN COMMENT (20) TX_RBDDI FOR FIELD RB_DDIC.
SELECTION-SCREEN END OF LINE.
* 파일경로
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (33) TX_FPATH FOR FIELD P_FPATH.
PARAMETER P_FPATH TYPE TXT1024
* OBLIGATORY
DEFAULT 'C:\TEMP'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TX_B2.
*----------------------------------------------------------*
* 일반테이블 선택시 추가선택조건
*----------------------------------------------------------*
* 테이블
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (30) TX_TABNM FOR FIELD S_TABNM
MODIF ID NOR.
SELECT-OPTIONS S_TABNM FOR DD02L-TABNAME
* OBLIGATORY
MEMORY ID ZTABNM
MODIF ID NOR.
SELECTION-SCREEN END OF LINE.
* 생성일
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (30) TX_CRDAT FOR FIELD S_CRDAT
MODIF ID NOR.
SELECT-OPTIONS S_CRDAT FOR ZCASCRCHIF-CRDAT
MEMORY ID ZCRDAT
MODIF ID NOR.
SELECTION-SCREEN END OF LINE.
* 최대적중수
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (33) TX_TBMAX FOR FIELD P_TBMAX
MODIF ID NOR.
PARAMETER P_TBMAX TYPE RSEUMOD-TBMAXSEL
MEMORY ID ZTBMAX
MODIF ID NOR.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B2.
INITIALIZATION.
PERFORM INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
PERFORM AT_SELECTION_SCREEN_OUTPUT.
AT SELECTION-SCREEN.
PERFORM AT_SELECTION_SCREEN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FPATH.
PERFORM F4_HELP_FOR_FOLDER
USING
'P_FPATH'
CHANGING
P_FPATH.
START-OF-SELECTION.
PERFORM START_OF_SELECTION.
END-OF-SELECTION.
PERFORM END_OF_SELECTION.
************************************************************************
* S U B R O U T I N E S *
* S U B R O U T I N E S *
* S U B R O U T I N E S *
************************************************************************
*&---------------------------------------------------------------------*
*& Form INITIALIZATION
*&---------------------------------------------------------------------*
FORM INITIALIZATION.
TX_B1 = '기본선택조건'.
TX_B2 = '추가선택조건'.
TX_CBOX1 = '작업선택'.
TX_RBNOR = '일반테이블'.
TX_RBDDI = 'DDIC 테이블'.
* 일반테이블
TX_TABNM = '테이블이름'.
TX_CRDAT = '생성일자'.
TX_TBMAX = '최대적중수'.
TX_FPATH = '파일경로'.
ENDFORM. "INITIALIZATION
*&---------------------------------------------------------------------*
*& Form AT_SELECTION_SCREEN_OUTPUT
*&---------------------------------------------------------------------*
FORM AT_SELECTION_SCREEN_OUTPUT.
PERFORM MODIFY_SCREEN.
ENDFORM. " AT_SELECTION_SCREEN_OUTPUT
*&---------------------------------------------------------------------*
*& Form MODIFY_SCREEN
*&---------------------------------------------------------------------*
FORM MODIFY_SCREEN.
CASE 'X'.
WHEN RB_NORM. "일반테이블
LOOP AT SCREEN.
IF SCREEN-GROUP1 EQ 'DDI'.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
WHEN RB_DDIC. "DDIC 테이블
LOOP AT SCREEN.
IF SCREEN-GROUP1 EQ 'NOR'.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDCASE.
ENDFORM. " MODIFY_SCREEN
*&---------------------------------------------------------------------*
*& Form AT_SELECTION_SCREEN
*&---------------------------------------------------------------------*
FORM AT_SELECTION_SCREEN.
CASE SY-UCOMM.
WHEN 'ONLI'.
IF P_FPATH IS INITIAL.
MESSAGE E000(DB) WITH
'파일경로는 필수입력입니다.'.
ENDIF.
CASE 'X'.
WHEN RB_NORM. "일반테이블
IF S_TABNM[] IS INITIAL.
MESSAGE E000(DB) WITH
'일반테이블 선택시 테이블명은 필수입력입니다.'.
ENDIF.
WHEN RB_DDIC. "DDIC 테이블
ENDCASE.
ENDCASE.
ENDFORM. "AT_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*& Form F4_HELP_FOR_FOLDER
*&---------------------------------------------------------------------*
FORM F4_HELP_FOR_FOLDER
USING
P_FIELDNAME
CHANGING
P_FOLDER.
DATA:
L_FOLDER TYPE STRING, " LIKE RLGRAP-FILENAME,
* OBJFILE TYPE REF TO CL_GUI_FRONTEND_SERVICES,
L_SELECTED_FOLDER TYPE STRING,
L_INITIAL_FOLDER TYPE STRING,
LT_DYNPFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.
LT_DYNPFIELDS-FIELDNAME = P_FIELDNAME.
APPEND LT_DYNPFIELDS.
CLEAR LT_DYNPFIELDS.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = LT_DYNPFIELDS.
READ TABLE LT_DYNPFIELDS
WITH KEY
FIELDNAME = P_FIELDNAME.
IF SY-SUBRC EQ 0.
L_FOLDER = LT_DYNPFIELDS-FIELDVALUE.
ENDIF.
* CREATE OBJECT OBJFILE.
IF NOT L_FOLDER IS INITIAL.
L_INITIAL_FOLDER = L_FOLDER.
ELSE.
* CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
* CHANGING
* DESKTOP_DIRECTORY = L_INITIAL_FOLDER
** 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.
ENDIF.
CALL METHOD CL_GUI_CFW=>FLUSH.
CALL METHOD CL_GUI_CFW=>UPDATE_VIEW.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
EXPORTING
* WINDOW_TITLE =
INITIAL_FOLDER = L_INITIAL_FOLDER
CHANGING
SELECTED_FOLDER = L_SELECTED_FOLDER
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.
* OBJFILE->DIRECTORY_BROWSE( EXPORTING INITIAL_FOLDER = L_INITIAL_FOLDER
* CHANGING SELECTED_FOLDER = L_SELECTED_FOLDER
* EXCEPTIONS CNTL_ERROR = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3 ).
IF SY-SUBRC = 0.
P_FOLDER = L_SELECTED_FOLDER.
ELSE.
WRITE: / 'An error has occured picking a folder'.
ENDIF.
ENDFORM. "F4_HELP_FOR_FOLDER
*&---------------------------------------------------------------------*
*& Form START_OF_SELECTION
*&---------------------------------------------------------------------*
FORM START_OF_SELECTION.
DATA:
L_DDLANGUAGE TYPE DD02V-DDLANGUAGE,
L_GUBUN TYPE CHAR4.
* 초기값설정
PERFORM SET_INITIAL_VALUES
CHANGING
L_DDLANGUAGE
L_GUBUN.
* 데이터처리
PERFORM DATA_PROCESSING
USING
L_DDLANGUAGE
L_GUBUN.
ENDFORM. "START_OF_SELECTION
*&---------------------------------------------------------------------*
*& Form SET_INITIAL_VALUES
*&---------------------------------------------------------------------*
FORM SET_INITIAL_VALUES
USING
P_DDLANGUAGE TYPE DD02V-DDLANGUAGE
P_GUBUN.
CASE 'X'.
WHEN RB_NORM. "일반테이블
GR_TABNAME[] = S_TABNM[].
P_DDLANGUAGE = SY-LANGU.
P_GUBUN = 'NORM'.
WHEN RB_DDIC. "DDIC 테이블
SET_RANGE_VALUE GR_TABNAME 'I' 'EQ':
'DD01L' SPACE,
'DD01T' SPACE,
'DD02L' SPACE,
'DD02T' SPACE,
'DD03L' SPACE,
'DD04L' SPACE,
'DD04T' SPACE,
'DD05S' SPACE,
'DD07L' SPACE,
'DD07T' SPACE,
'DD08L' SPACE,
'DD08T' SPACE,
'DD09L' SPACE,
'DD12L' SPACE,
'DD12T' SPACE,
'DD25L' SPACE,
'DD25T' SPACE,
'DD26S' SPACE,
'DD27S' SPACE,
'DD28S' SPACE,
'DD29L' SPACE,
'DD30L' SPACE,
'DD30T' SPACE,
'DD31S' SPACE,
'DD32S' SPACE,
'DD33S' SPACE,
'DD35L' SPACE,
'DD36S' SPACE,
'T100A' SPACE,
'T100T' SPACE,
'T100' SPACE,
'TSTC' SPACE,
'TSTCT' SPACE,
'TSTCP' SPACE,
'TPARA' SPACE,
'TFDIR' SPACE,
'TFTIT' SPACE,
'FUNCT' SPACE,
'FUPARAREF' SPACE,
'ENLFDIR' SPACE.
P_DDLANGUAGE = 'EN'.
P_GUBUN = 'DDIC'.
ENDCASE.
ENDFORM. " SET_INITIAL_VALUES
*&---------------------------------------------------------------------*
*& Form DATA_PROCESSING
*&---------------------------------------------------------------------*
FORM DATA_PROCESSING
USING
P_DDLANGUAGE TYPE DD02V-DDLANGUAGE
P_GUBUN.
DATA: BEGIN OF LT_DD02V OCCURS 0,
TABNAME TYPE DD02V-TABNAME,
DDTEXT TYPE DD02V-DDTEXT,
END OF LT_DD02V.
DATA:
L_SEQNO(4) TYPE N.
SELECT
TABNAME
DDTEXT
FROM DD02V
INTO TABLE LT_DD02V
WHERE TABNAME IN GR_TABNAME
AND DDLANGUAGE EQ P_DDLANGUAGE
AND TABCLASS EQ 'TRANSP'.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
SORT LT_DD02V BY
TABNAME.
* 테이블데이터 다운로드
LOOP AT LT_DD02V.
EXPORT
FILEPATH = P_FPATH
CRDAT = S_CRDAT
TBMAXSEL = P_TBMAX
TO MEMORY ID C_INDXKEY.
SUBMIT ZSUBMIT_DOWNLOAD_TABLE_DATA
WITH P_GUBUN EQ P_GUBUN
WITH P_TABNM EQ LT_DD02V-TABNAME
WITH P_TABTX EQ LT_DD02V-DDTEXT
AND RETURN.
IMPORT
LOG = GS_LOG
FROM MEMORY ID C_INDXKEY.
FREE MEMORY ID C_INDXKEY.
IF GS_LOG IS NOT INITIAL.
L_SEQNO = L_SEQNO + '1'.
GS_LOG-SEQNO = L_SEQNO.
APPEND GS_LOG TO GT_LOG.
CLEAR GS_LOG.
ENDIF.
* PERFORM DOWNLOAD_TABLE_DATA
* USING
* LT_DD02V-TABNAME
* LT_DD02V-DDTEXT.
CLEAR:
LT_DD02V.
ENDLOOP.
ENDFORM. " DATA_PROCESSING
*&---------------------------------------------------------------------*
*& Form END_OF_SELECTION
*&---------------------------------------------------------------------*
FORM END_OF_SELECTION.
* IF GT_LOG[] IS INITIAL.
* MESSAGE S000(DB) DISPLAY LIKE 'E' WITH
* '조건에 맞는 데이터가 없습니다.'.
* ELSE.
PERFORM ALV_FC_GRID_DISPLAY_PROCESS.
* ENDIF.
ENDFORM. "END_OF_SELECTION
*&---------------------------------------------------------------------*
*& Form ALV_FC_GRID_DISPLAY_PROCESS
*&---------------------------------------------------------------------*
FORM ALV_FC_GRID_DISPLAY_PROCESS .
DATA:
LT_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV ,
LT_ALV_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE,
LT_ALV_FILTER TYPE SLIS_T_FILTER_ALV WITH HEADER LINE,
LT_ALV_SP_GROUP TYPE SLIS_T_SP_GROUP_ALV,
LT_ALV_EVENTS TYPE SLIS_T_EVENT,
LT_ALV_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
LT_ALV_GRIDSET TYPE LVC_S_GLAY,
LT_ALV_PRINT TYPE SLIS_PRINT_ALV,
LT_ALV_EXCLUDING TYPE SLIS_T_EXTAB WITH HEADER LINE,
LS_ALV_LAYOUT TYPE SLIS_LAYOUT_ALV,
LS_ALV_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
LS_ALV_SPEC_VARIANT TYPE DISVARIANT, "specific variant
LS_ALV_VARIANT TYPE DISVARIANT, "finally chosen variant.
L_ALV_REPID LIKE SY-REPID,
L_ALV_SAVE TYPE C,
L_ALV_EXIT TYPE C,
LV_ALVBUFFER(11) TYPE C,
L_TABIX TYPE SY-TABIX.
L_ALV_SAVE = 'A'.
LS_ALV_VARIANT-HANDLE = 'LIST'.
LS_ALV_VARIANT-REPORT = SY-REPID.
L_ALV_REPID = SY-REPID.
LS_ALV_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
LS_ALV_LAYOUT-ZEBRA = 'X'.
LS_ALV_LAYOUT-CELL_MERGE = 'X'.
* LS_ALV_LAYOUT-BOX_TABNAME = 'GT_LOG'.
* LS_ALV_LAYOUT-BOX_FIELDNAME = 'MARK'.
* ALV BUFFER Init
LV_ALVBUFFER = 'BFOFF EUOFF'.
SET PARAMETER ID 'ALVBUFFER' FIELD LV_ALVBUFFER.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = L_ALV_REPID
I_INTERNAL_TABNAME = 'GS_LOG'
* I_STRUCTURE_NAME = 'ZECS0171'
I_INCLNAME = L_ALV_REPID
I_BYPASSING_BUFFER = 'X'
CHANGING
CT_FIELDCAT = LT_ALV_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
LOOP AT LT_ALV_FIELDCAT INTO LS_ALV_FIELDCAT.
L_TABIX = SY-TABIX.
LS_ALV_FIELDCAT-KEY = SPACE.
LS_ALV_FIELDCAT-FIX_COLUMN = SPACE.
* CASE LS_ALV_FIELDCAT-FIELDNAME.
** WHEN 'MARK'.
** LS_ALV_FIELDCAT-EMPHASIZE = 'C000'.
* WHEN 'MATNR'.
* LS_ALV_FIELDCAT-EMPHASIZE = 'C410'.
* ENDCASE.
* 고정컬럼설정
* CASE LS_ALV_FIELDCAT-FIELDNAME.
* WHEN 'MARK'.
* LS_ALV_FIELDCAT-FIX_COLUMN = 'X'.
* ENDCASE.
* 숨김컬럼설정
* CASE LS_ALV_FIELDCAT-FIELDNAME.
* WHEN 'MARK'.
* LS_ALV_FIELDCAT-NO_OUT = 'X'.
* ENDCASE.
* 체크박스컬럼설정
* CASE LS_ALV_FIELDCAT-FIELDNAME.
* WHEN 'MARK'.
* LS_ALV_FIELDCAT-CHECKBOX = 'X'.
* ENDCASE.
* 아이콘
CASE LS_ALV_FIELDCAT-FIELDNAME.
WHEN 'STATU_ICON'.
LS_ALV_FIELDCAT-ICON = 'X'.
ENDCASE.
* 열너비설정
* CASE LS_ALV_FIELDCAT-FIELDNAME.
* WHEN ' '.
* LS_ALV_FIELDCAT-OUTPUTLEN = 256.
* ENDCASE.
CASE LS_ALV_FIELDCAT-FIELDNAME.
WHEN 'SEQNO'.
LS_ALV_FIELDCAT-SELTEXT_S =
LS_ALV_FIELDCAT-SELTEXT_M =
LS_ALV_FIELDCAT-SELTEXT_L =
LS_ALV_FIELDCAT-REPTEXT_DDIC = '순번'.
WHEN 'STATU_ICON'.
LS_ALV_FIELDCAT-SELTEXT_S =
LS_ALV_FIELDCAT-SELTEXT_M =
LS_ALV_FIELDCAT-SELTEXT_L =
LS_ALV_FIELDCAT-REPTEXT_DDIC = '상태'.
WHEN 'STATU_MSG'.
LS_ALV_FIELDCAT-SELTEXT_S =
LS_ALV_FIELDCAT-SELTEXT_M =
LS_ALV_FIELDCAT-SELTEXT_L =
LS_ALV_FIELDCAT-REPTEXT_DDIC = '상태 메세지'.
WHEN 'DDTEXT'.
LS_ALV_FIELDCAT-SELTEXT_S =
LS_ALV_FIELDCAT-SELTEXT_M =
LS_ALV_FIELDCAT-SELTEXT_L =
LS_ALV_FIELDCAT-REPTEXT_DDIC = '테이블 내역'.
WHEN 'DBCNT'.
LS_ALV_FIELDCAT-SELTEXT_S =
LS_ALV_FIELDCAT-SELTEXT_M =
LS_ALV_FIELDCAT-SELTEXT_L =
LS_ALV_FIELDCAT-REPTEXT_DDIC = '레코드 건수'.
WHEN 'FILELENGTH'.
LS_ALV_FIELDCAT-SELTEXT_S =
LS_ALV_FIELDCAT-SELTEXT_M =
LS_ALV_FIELDCAT-SELTEXT_L =
LS_ALV_FIELDCAT-REPTEXT_DDIC = '파일크기'.
ENDCASE.
MODIFY LT_ALV_FIELDCAT FROM LS_ALV_FIELDCAT INDEX L_TABIX.
CLEAR LS_ALV_FIELDCAT.
ENDLOOP.
* ALV DISPLAY
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_BACKGROUND_ID = 'ALV_BACKGROUND' " BACK GROUND 무늬
* I_BUFFER_ACTIVE = ' '
* I_CALLBACK_PROGRAM = L_ALV_REPID
* I_CALLBACK_PF_STATUS_SET = 'ALV_FC_PF_STATUS'
* I_CALLBACK_USER_COMMAND = 'ALV_FC_USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = C_ALV_TOP_OF_PAGE
IS_LAYOUT = LS_ALV_LAYOUT
IT_FIELDCAT = LT_ALV_FIELDCAT[]
* IT_EXCLUDING =
* IT_SORT = LT_ALV_SORT[]
* I_DEFAULT = 'X'
I_SAVE = L_ALV_SAVE
IS_VARIANT = LS_ALV_VARIANT
* IT_EVENTS = LT_ALV_EVENTS[]
* IS_PRINT = LT_ALV_PRINT
* I_SCREEN_START_COLUMN = L_SCREEN_START_COLUMN
* I_SCREEN_START_LINE = L_SCREEN_START_LINE
* I_SCREEN_END_COLUMN = L_SCREEN_END_COLUMN
* I_SCREEN_END_LINE = L_SCREEN_END_LINE
TABLES
T_OUTTAB = GT_LOG.
ENDFORM. " ALV_FC_GRID_DISPLAY_PROCESS
2017년 2월 21일 화요일
ZRGGBS000
* 대체할 필드가 제외되어 없을 경우
Go to transaction GB01 or transaction SM30 > view VWTYGB01
and maintain it to add fields in class 9 (Document header and line items (FI) and type S (Refer to fields that can be substituted)
Remove the tick in the checkbox "Exclude" againest your relevant field.
위 작업을 한후 RGUGBR00 프로그램을 실행하여 active한다.
PROGRAM ZRGGBS000 .
*---------------------------------------------------------------------*
* Corrections/ repair
* wms092357 070703 Note 638886: template routines to be used for
* workaround to substitute bseg-bewar from bseg-xref1/2
*---------------------------------------------------------------------*
* *
* Substitutions: EXIT-Formpool for Uxxx-Exits *
* *
* This formpool is used by SAP for testing purposes only. *
* *
* Note: If you define a new user exit, you have to enter your *
* user exit in the form routine GET_EXIT_TITLES. *
* *
*---------------------------------------------------------------------*
INCLUDE FGBBGD00. "Standard data types
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*
* PLEASE INCLUDE THE FOLLOWING "TYPE-POOL" AND "TABLES" COMMANDS *
* IF THE ACCOUNTING MODULE IS INSTALLED IN YOUR SYSTEM *
TYPE-POOLS: GB002. " TO BE INCLUDED IN "wms092357
TABLES: BKPF, " ANY SYSTEM THAT "wms092357
BSEG, " HAS 'FI' INSTALLED "wms092357
COBL, "wms092357
CSKS, "wms092357
ANLZ, "wms092357
GLU1. "wms092357
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*
*----------------------------------------------------------------------*
* FORM GET_EXIT_TITLES *
*----------------------------------------------------------------------*
* returns name and title of all available standard-exits *
* every exit in this formpool has to be added to this form. *
* You have to specify a parameter type in order to enable the *
* code generation program to determine correctly how to *
* generate the user exit call, i.e. how many and what kind of *
* parameter(s) are used in the user exit. *
* The following parameter types exist: *
* *
* TYPE Description Usage *
* ------------------------------------------------------------ *
* C_EXIT_PARAM_NONE Use no parameter Subst. and Valid. *
* except B_RESULT *
* C_EXIT_PARAM_FIELD Use one field as param. Only Substitution *
* C_EXIT_PARAM_CLASS Use a type as parameter Subst. and Valid *
* *
*----------------------------------------------------------------------*
* --> EXIT_TAB table with exit-name and exit-titles *
* structure: NAME(5), PARAM(1), TITEL(60)
*----------------------------------------------------------------------*
FORM GET_EXIT_TITLES TABLES ETAB.
DATA: BEGIN OF EXITS OCCURS 50,
NAME(5) TYPE C,
PARAM LIKE C_EXIT_PARAM_NONE,
TITLE(60) TYPE C,
END OF EXITS.
EXITS-NAME = 'U100'.
EXITS-PARAM = C_EXIT_PARAM_NONE.
EXITS-TITLE = TEXT-100. "Cost center from CSKS
APPEND EXITS.
EXITS-NAME = 'U101'.
EXITS-PARAM = C_EXIT_PARAM_FIELD.
EXITS-TITLE = TEXT-101. "Cost center from CSKS
APPEND EXITS.
* begin of insertion "wms092357
EXITS-NAME = 'U200'.
EXITS-PARAM = C_EXIT_PARAM_FIELD.
EXITS-TITLE = TEXT-200. "Cons. transaction type
APPEND EXITS. "from xref1/2
* end of insertion "wms092357
EXITS-NAME = 'U300'.
EXITS-PARAM = C_EXIT_PARAM_CLASS.
EXITS-TITLE = TEXT-300.
APPEND EXITS.
"[FI] 반제전표의 원전표 XBLNR_ALT 추출 - Get Cleaning Doc. Oring Doc-XBLNR_ALT
EXITS-NAME = 'U400'.
* EXITS-PARAM = C_EXIT_PARAM_NONE. "전표라인
EXITS-PARAM = C_EXIT_PARAM_CLASS. "전표완료
EXITS-TITLE = TEXT-400.
APPEND EXITS.
EXITS-NAME = 'U301'.
EXITS-PARAM = C_EXIT_PARAM_NONE.
EXITS-TITLE = TEXT-301.
APPEND EXITS.
************************************************************************
* PLEASE DELETE THE FIRST '*' FORM THE BEGINING OF THE FOLLOWING LINES *
* IF THE ACCOUNTING MODULE IS INSTALLED IN YOUR SYSTEM: *
* EXITS-NAME = 'U102'.
* EXITS-PARAM = C_EXIT_PARAM_CLASS.
* EXITS-TITLE = TEXT-102. "Sum is used for the reference.
* APPEND EXITS.
***********************************************************************
** EXIT EXAMPLES FROM PUBLIC SECTOR INDUSTRY SOLUTION
**
** PLEASE DELETE THE FIRST '*' FORM THE BEGINING OF THE FOLLOWING LINE
** TO ENABLE PUBLIC SECTOR EXAMPLE SUBSTITUTION EXITS
***********************************************************************
INCLUDE RGGBS_PS_TITLES.
REFRESH ETAB.
LOOP AT EXITS.
ETAB = EXITS.
APPEND ETAB.
ENDLOOP.
ENDFORM. "GET_EXIT_TITLES
* eject
*---------------------------------------------------------------------*
* FORM U100 *
*---------------------------------------------------------------------*
* Reads the cost-center from the CSKS table . *
*---------------------------------------------------------------------*
FORM U100.
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* PLEASE DELETE THE FIRST '*' FORM THE BEGINING OF THE FOLLOWING LINES *
* IF THE ACCOUNTING MODULE IS INSTALLED IN YOUR SYSTEM: *
* SELECT * FROM CSKS
* WHERE KOSTL EQ COBL-KOSTL
* AND KOKRS EQ COBL-KOKRS.
* IF CSKS-DATBI >= SY-DATUM AND
* CSKS-DATAB <= SY-DATUM.
*
* MOVE CSKS-ABTEI TO COBL-KOSTL.
*
* ENDIF.
* ENDSELECT.
ENDFORM. "U100
* eject
*---------------------------------------------------------------------*
* FORM U101 *
*---------------------------------------------------------------------*
* Reads the cost-center from the CSKS table for accounting *
* area '0001'. *
* This exit uses a parameter for the cost_center so it can *
* be used irrespective of the table used in the callup point. *
*---------------------------------------------------------------------*
FORM U101 USING COST_CENTER.
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* PLEASE DELETE THE FIRST '*' FORM THE BEGINING OF THE FOLLOWING LINES *
* IF THE ACCOUNTING MODULE IS INSTALLED IN YOUR SYSTEM: *
* SELECT * FROM CSKS
* WHERE KOSTL EQ COST_CENTER
* AND KOKRS EQ '0001'.
* IF CSKS-DATBI >= SY-DATUM AND
* CSKS-DATAB <= SY-DATUM.
*
* MOVE CSKS-ABTEI TO COST_CENTER .
*
* ENDIF.
* ENDSELECT.
ENDFORM. "U101
* eject
*---------------------------------------------------------------------*
* FORM U102 *
*---------------------------------------------------------------------*
* Inserts the sum of the posting into the reference field. *
* This exit can be used in FI for the complete document. *
* The complete data is passed in one parameter. *
*---------------------------------------------------------------------*
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* PLEASE DELETE THE FIRST '*' FORM THE BEGINING OF THE FOLLOWING LINES *
* IF THE ACCOUNTING MODULE IS INSTALLED IN YOUR SYSTEM: *
*FORM u102 USING bool_data TYPE gb002_015.
*DATA: SUM(10) TYPE C.
*
* LOOP AT BOOL_DATA-BSEG INTO BSEG
* WHERE SHKZG = 'S'.
* BSEG-ZUONR = 'Test'.
* MODIFY BOOL_DATA-BSEG FROM BSEG.
* ADD BSEG-DMBTR TO SUM.
* ENDLOOP.
*
* BKPF-XBLNR = TEXT-001.
* REPLACE '&' WITH SUM INTO BKPF-XBLNR.
*
*ENDFORM.
***********************************************************************
** EXIT EXAMPLES FROM PUBLIC SECTOR INDUSTRY SOLUTION
**
** PLEASE DELETE THE FIRST '*' FORM THE BEGINING OF THE FOLLOWING LINE
** TO ENABLE PUBLIC SECTOR EXAMPLE SUBSTITUTION EXITS
***********************************************************************
*INCLUDE rggbs_ps_forms.
*eject
* begin of insertion "wms092357
*&---------------------------------------------------------------------*
*& Form u200
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM U200 USING E_RMVCT TYPE BSEG-BEWAR.
PERFORM XREF_TO_RMVCT USING BKPF BSEG 1 CHANGING E_RMVCT.
ENDFORM.
*--------------------------------------------------------------------*
* FORM U300
*--------------------------------------------------------------------*
* Clearing A/P
*--------------------------------------------------------------------*
FORM U300 USING BOOL_DATA TYPE GB002_015.
* BOOL_DATA TYPE GB002_012.
* BOOL_DATA TYPE GB002_013.
DATA : BEGIN OF LT_DOC OCCURS 0,
BUKRS LIKE BSEG-BUKRS,
GJAHR LIKE BSEG-GJAHR,
BELNR LIKE BKPF-BELNR,
WRBTR LIKE BSEG-WRBTR,
END OF LT_DOC.
DATA : LV_STRU TYPE STRING,
LS_BSEG TYPE BSEG.
DATA : LV_BKTXT TYPE BKTXT.
FIELD-SYMBOLS: <FS_REGUH> TYPE REGUH.
CLEAR LV_BKTXT.
CHECK BKPF-BLART EQ 'ZP'.
CHECK BKPF-TCODE EQ 'F110'.
* AUTO PAYMENT 시 지급처리되는 전표들을 가져오기 위한 LOGIC
* Assign REGUH reference area in SAPF110S payment program
LV_STRU = '(SAPF110S)REGUH'.
ASSIGN (LV_STRU) TO <FS_REGUH>.
CHECK SY-SUBRC EQ 0.
CHECK <FS_REGUH> IS NOT INITIAL.
CLEAR : LT_DOC, LT_DOC[].
SELECT ZBUKR AS BUKRS
BELNR
GJAHR
WRBTR
INTO CORRESPONDING FIELDS OF TABLE LT_DOC
FROM REGUP
WHERE LAUFD EQ <FS_REGUH>-LAUFD
AND LAUFI EQ <FS_REGUH>-LAUFI.
SORT LT_DOC BY WRBTR DESCENDING.
READ TABLE LT_DOC INDEX 1.
CLEAR LV_BKTXT.
SELECT SINGLE BKTXT
INTO LV_BKTXT
FROM BKPF
WHERE BUKRS EQ LT_DOC-BUKRS
AND BELNR EQ LT_DOC-BELNR
AND GJAHR EQ LT_DOC-GJAHR.
MOVE LV_BKTXT TO BKPF-BKTXT.
LOOP AT BOOL_DATA-BSEG INTO LS_BSEG.
MOVE LV_BKTXT TO LS_BSEG-SGTXT.
MODIFY BOOL_DATA-BSEG FROM LS_BSEG.
CLEAR LS_BSEG.
ENDLOOP.
ENDFORM. "U300
*&---------------------------------------------------------------------*
*& Form xref_to_rmvct
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM XREF_TO_RMVCT
USING IS_BKPF TYPE BKPF
IS_BSEG TYPE BSEG
I_XREF_FIELD TYPE I
CHANGING C_RMVCT TYPE RMVCT.
DATA L_MSGV TYPE SYMSGV.
STATICS ST_RMVCT TYPE HASHED TABLE OF RMVCT WITH UNIQUE DEFAULT KEY.
* either bseg-xref1 or bseg-xref2 must be used as source...
IF I_XREF_FIELD <> 1 AND I_XREF_FIELD <> 2.
MESSAGE X000(GK) WITH 'UNEXPECTED VALUE I_XREF_FIELD ='
I_XREF_FIELD '(MUST BE = 1 OR = 2)' ''.
ENDIF.
IF ST_RMVCT IS INITIAL.
SELECT TRTYP FROM T856 INTO TABLE ST_RMVCT.
ENDIF.
IF I_XREF_FIELD = 1.
C_RMVCT = IS_BSEG-XREF1.
ELSE.
C_RMVCT = IS_BSEG-XREF2.
ENDIF.
IF C_RMVCT IS INITIAL.
WRITE I_XREF_FIELD TO L_MSGV LEFT-JUSTIFIED.
CONCATENATE TEXT-M00 L_MSGV INTO L_MSGV SEPARATED BY SPACE.
* cons. transaction type is not specified => send an error message...
MESSAGE E123(G3) WITH L_MSGV.
* Bitte geben Sie im Feld &1 eine Konsolidierungsbewegungsart an
ENDIF.
* c_rmvct <> initial...
READ TABLE ST_RMVCT TRANSPORTING NO FIELDS FROM C_RMVCT.
CHECK NOT SY-SUBRC IS INITIAL.
* cons. transaction type does not exist => send error message...
WRITE I_XREF_FIELD TO L_MSGV LEFT-JUSTIFIED.
CONCATENATE TEXT-M00 L_MSGV INTO L_MSGV SEPARATED BY SPACE.
MESSAGE E124(G3) WITH C_RMVCT L_MSGV.
* KonsBewegungsart &1 ist ungültig (bitte Eingabe im Feld &2 korrigieren
ENDFORM.
* end of insertion "wms092357
*--------------------------------------------------------------------*
* FORM U400
*--------------------------------------------------------------------*
* Clearing A/P
*--------------------------------------------------------------------*
FORM U400 USING BOOL_DATA TYPE GB002_015.
****DATA: BEGIN OF indtab OCCURS 15,
**** block(1) TYPE c, " Kennz. Block-Kommando
**** comnd(2) TYPE c, " Zeilen-Kommando
**** klick(2) TYPE c, " Zeilen-Kommando
**** posnr(4) TYPE p, " Zeilennr. in POSTAB
**** psbet LIKE rf05a-psbet, " angezeigter Betrag
**** psdif LIKE df05b-psdif, " angezeigte Differenz
**** pszah LIKE df05b-pszah, " angezeigter Zahlbetr
**** rstgr LIKE df05b-rstgr, " Restegrund
**** sknto(4) TYPE p, " Skontobetrag
**** skfbt(4) TYPE p, " Skontofähiger Betrag
**** psskp LIKE bseg-zbd1p, " Skontoprozente
**** inpus(1) TYPE c, " Eingabe Skonto
**** inpud(1) TYPE c, " Eingabe Differenz
**** tabix LIKE sy-tabix, "
**** xskf0 TYPE c, " SKFBT = 0
**** maxsp LIKE bseg-zbd1p, " Max. Skontoprozent
**** bukrs LIKE bkpf-bukrs, " Buchungskreis
**** pyord LIKE pyordh-pyord, " Zahlungsauftrag
**** pspen LIKE df05b-pspen, " Strafzinsen
**** xppiv TYPE xppiv, " Part.Pay for Inv.
**** END OF indtab.
****
****
**** BREAK-POINT ID Z_BREAK_POINT.
****
**** DATA : LV_STRU TYPE STRING.
****
**** FIELD-SYMBOLS: <BKPF> like indtab.
****
***** Assign REGUH reference area in SAPF110S payment program
**** LV_STRU = '(SAPMF05A)INDTAB'.
****
**** ASSIGN (LV_STRU) TO <BKPF>.
****
**** CHECK SY-SUBRC EQ 0.
****
**** CHECK <BKPF> IS NOT INITIAL.
****
**** DATA : LS_ORIGIN_BKPF LIKE BKPF.
**** DATA : LT_ORIGIN_BSEG LIKE BSEG OCCURS 0 WITH HEADER LINE.
**** DATA : LV_T_BSEG_TABIX TYPE SY-TABIX.
****
**** IF BKPF-BLART = 'ZV'
**** OR BKPF-BLART = 'ZP'
**** .
******** LOOP AT BSEG.
********
******** LV_T_BSEG_TABIX = SY-TABIX.
********
******** CHECK BSEG-BELNR = BSEG-AUGBL.
********
******** CLEAR: LT_ORIGIN_BSEG, LT_ORIGIN_BSEG[].
******** SELECT * INTO TABLE LT_ORIGIN_BSEG
******** FROM BSEG
******** WHERE BUKRS = <BKPF>-BUKRS
******** AND AUGDT = <BKPF>-BUDAT
******** AND AUGBL = <BKPF>-BELNR
******** .
******** LOOP AT LT_ORIGIN_BSEG.
******** CLEAR: LS_ORIGIN_BKPF.
******** SELECT SINGLE * INTO LS_ORIGIN_BKPF
******** FROM BKPF
******** WHERE BUKRS = LT_ORIGIN_BSEG-BUKRS
******** AND BELNR = LT_ORIGIN_BSEG-BELNR
******** AND GJAHR = LT_ORIGIN_BSEG-GJAHR
******** AND XBLNR_ALT >= '0000000000000000'
******** .
******** IF SY-SUBRC = 0.
*********전표헤더
******** BOOL_DATA-BKPF-XBLNR_ALT = LS_ORIGIN_BKPF-XBLNR_ALT.
********
******** EXIT.
********
******** ENDIF.
******** ENDLOOP.
******** ENDLOOP.
**** ENDIF.
CHECK 1 = 2. "아래 로직 사용 안함
*--
*--[START] VAT BSEG LINE : SET GSBER, XREF1, XREF2, XREF3 SGTXT
*--
DATA : LV_TAX_TABIX LIKE SY-TABIX.
DATA : LT_TMP_BSEG LIKE BSEG OCCURS 0 WITH HEADER LINE.
DATA : LT_CHK_BSEG LIKE BSEG OCCURS 0 WITH HEADER LINE.
DATA : LS_BSEG LIKE BSEG.
DATA : LV_MODIFY_FLAG TYPE CHAR01.
CLEAR : LT_TMP_BSEG, LT_TMP_BSEG[].
CLEAR : LT_CHK_BSEG, LT_CHK_BSEG[].
CLEAR : LS_BSEG.
CONSTANTS C_PURCH_HKONT TYPE SAKNR VALUE '1115020101'. "Prepaid Value Added Tax-General
CONSTANTS C_SALES_HKONT TYPE SAKNR VALUE '2109010101'. "Value Added Tax Withheld-General
**** IF SY-UNAME = 'FI01' OR SY-UNAME = 'DEV-TR'.
**** BREAK-POINT.
**** ENDIF.
LT_TMP_BSEG[] = BOOL_DATA-BSEG[].
LOOP AT BOOL_DATA-BSEG INTO LS_BSEG WHERE HKONT = C_PURCH_HKONT
OR HKONT = C_SALES_HKONT.
LV_TAX_TABIX = SY-TABIX.
CASE LS_BSEG-HKONT.
WHEN C_PURCH_HKONT
OR C_SALES_HKONT
.
CLEAR : LV_MODIFY_FLAG.
LOOP AT LT_TMP_BSEG WHERE KOART = 'S' "G/L
AND MWSKZ = LS_BSEG-MWSKZ
AND WRBTR = LS_BSEG-HWBAS
.
READ TABLE LT_CHK_BSEG WITH KEY BUKRS = LT_TMP_BSEG-BUKRS
BELNR = LT_TMP_BSEG-BELNR
GJAHR = LT_TMP_BSEG-GJAHR
BUZEI = LT_TMP_BSEG-BUZEI
.
IF SY-SUBRC = 0.
CONTINUE.
ELSE.
APPEND LT_TMP_BSEG TO LT_CHK_BSEG.
ENDIF.
IF NOT LT_TMP_BSEG-GSBER IS INITIAL.
IF LS_BSEG-GSBER IS INITIAL.
LS_BSEG-GSBER = LT_TMP_BSEG-GSBER.
LS_BSEG-XREF1 = LT_TMP_BSEG-XREF1.
LS_BSEG-XREF2 = LT_TMP_BSEG-XREF2.
LS_BSEG-XREF3 = LT_TMP_BSEG-XREF3.
LS_BSEG-SGTXT = LT_TMP_BSEG-SGTXT.
MODIFY BOOL_DATA-BSEG FROM LS_BSEG INDEX LV_TAX_TABIX.
LV_MODIFY_FLAG = 'X'.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
"MODIFY가 안된경우 세액을 제외 하고 비교
IF LV_MODIFY_FLAG IS INITIAL.
LOOP AT LT_TMP_BSEG WHERE KOART = 'S' "G/L
AND MWSKZ = LS_BSEG-MWSKZ
.
READ TABLE LT_CHK_BSEG WITH KEY BUKRS = LT_TMP_BSEG-BUKRS
BELNR = LT_TMP_BSEG-BELNR
GJAHR = LT_TMP_BSEG-GJAHR
BUZEI = LT_TMP_BSEG-BUZEI
.
IF SY-SUBRC = 0.
CONTINUE.
ELSE.
APPEND LT_TMP_BSEG TO LT_CHK_BSEG.
ENDIF.
IF NOT LT_TMP_BSEG-GSBER IS INITIAL.
IF LS_BSEG-GSBER IS INITIAL.
LS_BSEG-GSBER = LT_TMP_BSEG-GSBER.
LS_BSEG-XREF1 = LT_TMP_BSEG-XREF1.
LS_BSEG-XREF2 = LT_TMP_BSEG-XREF2.
LS_BSEG-XREF3 = LT_TMP_BSEG-XREF3.
LS_BSEG-SGTXT = LT_TMP_BSEG-SGTXT.
MODIFY BOOL_DATA-BSEG FROM LS_BSEG INDEX LV_TAX_TABIX.
LV_MODIFY_FLAG = 'X'.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDCASE.
ENDLOOP.
*--
*--[END] VAT BSEG LINE : SET GSBER, XREF1, XREF2, XREF3 SGTXT
*--
* CASE BSEG-KOART.
* WHEN 'D'. "Customer KNB1
* IF BSEG-ZLSCH IS INITIAL.
* SELECT SINGLE ZWELS INTO BSEG-ZLSCH "Payment Method
* FROM KNB1
* WHERE BUKRS = BKPF-BUKRS
* AND KUNNR = BSEG-KUNNR.
* ENDIF.
* WHEN 'K'. "Vendor LFB1
* IF BSEG-ZLSCH IS INITIAL.
* SELECT SINGLE ZWELS INTO BSEG-ZLSCH "Payment Method
* FROM LFB1
* WHERE BUKRS = BKPF-BUKRS
* AND LIFNR = BSEG-LIFNR.
* ENDIF.
* ENDCASE.
ENDFORM.
*--------------------------------------------------------------------*
* FORM U301
*--------------------------------------------------------------------*
* TR Recon Account Subs
*--------------------------------------------------------------------*
FORM U301.
CHECK SY-TCODE EQ 'TBB1'.
IF BSEG-BSCHL EQ '01' OR
BSEG-BSCHL EQ '11'.
MOVE '2104010102' TO BSEG-HKONT.
MOVE 'B' TO BSEG-ZLSPR.
ENDIF.
ENDFORM. "U301
피드 구독하기:
글 (Atom)