2017년 2월 21일 화요일

ZRGGBR000

* 대체할 필드가 제외되어 없을 경우
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 ZRGGBR000 .
*---------------------------------------------------------------------*
*                                                                     *
*   Regeln: EXIT-Formpool for Uxxx-Exits                              *
*                                                                     *
*   This formpool is used by SAP for demonstration 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.               "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
*TABLES: BKPF,      " ANY SYSTEM THAT
*        BSEG,      " HAS 'FI' INSTALLED
*        COBL,
*        GLU1.
*ENHANCEMENT-POINT RGGBR000_01 SPOTS ES_RGGBR000 STATIC.
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*


*----------------------------------------------------------------------*
*       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_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.

  DATABEGIN OF EXITS OCCURS 50,
          NAME(5)   TYPE C,
          PARAM     LIKE C_EXIT_PARAM_NONE,
          TITLE(60TYPE C,
        END OF EXITS.
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* PLEASE DELETE THE FIRST '*' FORM THE BEGINING OF THE FOLLOWING LINES *
*        IF THE ACCOUNTING MODULE IS INSTALLED IN YOUR SYSTEM:         *
*  EXITS-NAME  = 'U101'.
*  EXITS-PARAM = C_EXIT_PARAM_CLASS.
*  EXITS-TITLE = TEXT-100.                 "Posting date check
*  APPEND EXITS.

  EXITS-NAME  'U100'.
  EXITS-PARAM C_EXIT_PARAM_NONE.        "Complete data used in exit.
  EXITS-TITLE TEXT-101.                 "Posting date check
  APPEND EXITS.

* forms for SAP_EIS
  EXITS-NAME  'US001'.                  "single validation: only one
  EXITS-PARAM C_EXIT_PARAM_NONE.        "data record used
  EXITS-TITLE TEXT-102.                 "Example EIS
  APPEND EXITS.

  EXITS-NAME  'UM001'.                  "matrix validation:
  EXITS-PARAM C_EXIT_PARAM_CLASS.       "complete data used in exit.
  EXITS-TITLE TEXT-103.                 "Example EIS
  APPEND EXITS.

  " 예산 통제(코스트센터 / 오더 )
  EXITS-NAME  'U200'.                  "유효성 체크
  EXITS-PARAM C_EXIT_PARAM_CLASS.
  EXITS-TITLE TEXT-200.
  APPEND EXITS.

  " 선급비용/선수수익 전표 역분개시 유효성체크
  EXITS-NAME  'U300'.                  "유효성 체크
  EXITS-PARAM C_EXIT_PARAM_CLASS.
  EXITS-TITLE TEXT-300.
  APPEND EXITS.

* Item : 증빙일자 마감 점검
*        전표-증빙첨부서번호 점검
  EXITS-NAME  'U701'.
  EXITS-PARAM C_EXIT_PARAM_NONE.
  EXITS-TITLE TEXT-701.
  APPEND EXITS.
  " 조정임시계정 점검
  EXITS-NAME  'U702'.
*  EXITS-PARAM = C_EXIT_PARAM_CLASS.  "전표완료
*  EXITS-PARAM = C_EXIT_PARAM_FIELD.
  EXITS-PARAM C_EXIT_PARAM_NONE.    "전표라인
  EXITS-TITLE TEXT-201.
  APPEND EXITS.
  " Check reversal availability(역분개가능여부 점검)
  EXITS-NAME  'U703'.
  EXITS-PARAM C_EXIT_PARAM_NONE.    "전표라인
  EXITS-TITLE TEXT-703.
  APPEND EXITS.

  " 세율에 따른 허용 범위 검사 Tax tolerance has been exceeded.
  EXITS-NAME  'U800'.
*  EXITS-PARAM = C_EXIT_PARAM_CLASS.  "전표완료
*  EXITS-PARAM = C_EXIT_PARAM_FIELD.
  EXITS-PARAM C_EXIT_PARAM_NONE.    "전표라인
  EXITS-TITLE TEXT-800.
  APPEND EXITS.

  " Payment Block 변경시 사용자 Role체크
  EXITS-NAME  'U301'.                  "유효성 체크
  EXITS-PARAM C_EXIT_PARAM_NONE.       "전표라인
  EXITS-TITLE TEXT-301.
  APPEND EXITS.

  " Check Account ID for Bank Account
  EXITS-NAME  'U302'.                  "유효성 체크
  EXITS-PARAM C_EXIT_PARAM_NONE.       "전표라인
  EXITS-TITLE TEXT-302.
  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 RGGBR_PS_TITLES.

***********************************************************************
** EXIT EXAMPLES FROM Argentina Legal Change - Law Res 177
***********************************************************************
  INCLUDE RGGBS_AR_TITLES.

  REFRESH ETAB.
  LOOP AT EXITS.
    ETAB EXITS.
    APPEND ETAB.
  ENDLOOP.

ENDFORM.                    "GET_EXIT_TITLES

*eject
*----------------------------------------------------------------------*
*       FORM U100                                                      *
*----------------------------------------------------------------------*
*       Example of an exit for a boolean rule                          *
*       This exit can be used in FI for callup points 1,2 or 3.        *
*----------------------------------------------------------------------*
*  <--  B_RESULT    T = True  F = False                                *
*----------------------------------------------------------------------*
FORM U100  USING B_RESULT.

*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* PLEASE DELETE THE FIRST '*' FORM THE BEGINING OF THE FOLLOWING LINES *
*        IF THE ACCOUNTING MODULE IS INSTALLED IN YOUR SYSTEM:         *
*
*   IF SY-DATUM = BKPF-BUDAT.
*     B_RESULT  = B_TRUE.
*  ELSE.
*    B_RESULT  = B_FALSE.
*  ENDIF.

*ENHANCEMENT-POINT RGGBR000_02 SPOTS ES_RGGBR000 STATIC.

*ENHANCEMENT-POINT RGGBR000_03 SPOTS ES_RGGBR000.


ENDFORM.                                                    "U100

*eject
*----------------------------------------------------------------------*
*       FORM U101                                                      *
*----------------------------------------------------------------------*
*       Example of an exit using the complete data from one            *
*       multi-line rule.                                               *
*       This exit is intended for use from callup point 3, in FI.      *
*                                                                      *
*       If account 400000 is used, then account 399999 must be posted  *
*       to in another posting line.                                    *
*----------------------------------------------------------------------*
*  -->  BOOL_DATA   The complete posting data.                         *
*  <--  B_RESULT    T = True  F = False                                *
*----------------------------------------------------------------------*

*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* PLEASE DELETE THE FIRST '*' FORM THE BEGINING OF THE FOLLOWING LINES *
*        IF THE ACCOUNTING MODULE IS INSTALLED IN YOUR SYSTEM:         *
*FORM u101 USING    bool_data TYPE gb002_015
*          CHANGING B_RESULT.
*  DATA: B_ACC_400000_USED LIKE D_BOOL VALUE 'F'.
*
*  B_RESULT = B_TRUE.
** Has account 400000 has been used?
*  LOOP AT BOOL_DATA-BSEG INTO BSEG
*                 WHERE HKONT  = '0000400000'.
*     B_ACC_400000_USED = B_TRUE.
*     EXIT.
*  ENDLOOP.
*
** Check that account 400000 has been used.
*  CHECK B_ACC_400000_USED = B_TRUE.
*
*  B_RESULT = B_FALSE.
*  LOOP AT BOOL_DATA-BSEG INTO BSEG
*                 WHERE HKONT  = '0000399999'.
*     B_RESULT = B_TRUE.
*     EXIT.
* ENDLOOP.
*
*ENDFORM.

*eject
*----------------------------------------------------------------------*
*       FORM US001
*----------------------------------------------------------------------*
*       Example of an exit for a boolean rule in SAP-EIS
*       for aspect 001 (single validation).
*       one data record is transfered in structure CF<asspect>
*----------------------------------------------------------------------
*       Attention: for any FORM one has to make an entry in the
*       form GET_EXIT_TITLES at the beginning of this include
*----------------------------------------------------------------------*
*  <--  B_RESULT    T = True  F = False                                *
*----------------------------------------------------------------------*
FORM US001 USING B_RESULT.

*TABLES CF001.                                 "table name aspect 001
*
*  IF ( CF001-SPART = '00000001' OR
*       CF001-GEBIE = '00000001' ) AND
*       CF001-ERLOS >= '1000000'.
*
**   further checks ...
*
*    B_RESULT  = B_TRUE.
*  ELSE.
*
**   further checks ...
*
*    B_RESULT  = B_FALSE.
*  ENDIF.

ENDFORM.                                                    "US001

*eject
*----------------------------------------------------------------------*
*       FORM UM001
*----------------------------------------------------------------------*
*       Example of an exit for a boolean rule in SAP-EIS
*       for aspect 001 (matrix validation).
*       Data is transfered in BOOL_DATA:
*       BOOL_DATA-CF<aspect> is intern table of structure CF<asspect>
*----------------------------------------------------------------------
*       Attention: for any FORM one has to make an entry in the
*       form GET_EXIT_TITLES at the beginning of this include
*----------------------------------------------------------------------*
*  <--  B_RESULT    T = True  F = False                                *
*----------------------------------------------------------------------*
FORM UM001 USING BOOL_DATA    "TYPE GB002_<boolean class of aspect 001>
           CHANGING B_RESULT.

*DATA: LC_CF001 LIKE CF001.
*DATA: LC_COUNT TYPE I.

*  B_RESULT = B_TRUE.
*  CLEAR LC_COUNT.
*  process data records in BOOL_DATA
*  LOOP AT BOOL_DATA-CF001 INTO LC_CF001.
*    IF LC_CF001-SPART = '00000001'.
*      ADD 1 TO LC_COUNT.
*      IF LC_COUNT >= 2.
**       division '00000001' may only occur once !
*        B_RESULT = B_FALSE.
*        EXIT.
*      ENDIF.
*    ENDIF.
*
**   further checks ....
*
*  ENDLOOP.

ENDFORM.                                                    "UM001


***********************************************************************
** 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 rggbr_ps_forms.

***********************************************************************
** EXIT EXAMPLES FROM Argentina Legal Change - Law Res 177
***********************************************************************
INCLUDE RGGBS_AR_FORMS.


" 예산 통제 정의
*&---------------------------------------------------------------------*
*&      Form  U200
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->BOOL_DATA  text
*      -->B_RESULT   text
*----------------------------------------------------------------------*
FORM U200  USING BOOL_DATA TYPE GB002_015
          CHANGING B_RESULT.

  DATA LV_BUKRS LIKE BKPF-BUKRS.
  DATA LV_BUDAT LIKE BKPF-BUDAT.
  DATA LV_WAERS LIKE BKPF-WAERS.
  DATA LS_BSEG LIKE BSEG.
  DATA LV_CODE TYPE ZE_RETCD.
  DATA LV_MSG TYPE ZE_MESSAGE.

  DATA LV_BELNR    LIKE BKPF-BELNR.
  DATA LV_GJAHR    LIKE BKPF-GJAHR.

  DATA BEGIN OF LT_KOSTL_CHECK OCCURS 0,
           KOSTL LIKE CSKS-KOSTL,
           KSTAR LIKE CSKA-KSTAR,
           DMBTR LIKE BSEG-DMBTR,
         END OF   LT_KOSTL_CHECK.

  DATA BEGIN OF LT_AUNFR_CHECK OCCURS 0,
           AUFNR LIKE AUFK-AUFNR,
           DMBTR LIKE BSEG-DMBTR,
         END OF   LT_AUNFR_CHECK.

  DATA LS_BKPF LIKE BKPF.

*  " 임시 ★ FI 테스트 중에 임시로 막음.
*  IF NOT ( SY-UNAME = 'CO02' OR SY-UNAME = 'CO03' OR SY-UNAME = 'CO01' ).
*    B_RESULT = B_TRUE.
*    EXIT.
*  ENDIF.
*
  " 1. 헤더 정보
  LV_BUKRS BOOL_DATA-BKPF-BUKRS.
  LV_GJAHR BOOL_DATA-BKPF-GJAHR.
  LV_BELNR BOOL_DATA-BKPF-BELNR.
  LV_BUKRS BOOL_DATA-BKPF-BUKRS.
  LV_BUDAT BOOL_DATA-BKPF-BUDAT.
*
  SELECT SINGLE WAERS " 회사코드 통화 조회
    INTO LV_WAERS
    FROM T001
    WHERE BUKRS LV_BUKRS.
*
**  IF LV_BELNR IS NOT INITIAL.
**    SELECT SINGLE * FROM BKPF INTO LS_BKPF
**      WHERE BUKRS = LV_BUKRS
**      AND GJAHR = LV_GJAHR
**      AND BELNR = LV_BELNR.
**
**    IF SY-SUBRC EQ 0.
**      IF LS_BKPF-BSTAT = 'V'. " 이미 임시전표 발생 단계에서 체크가 되었다.
**        B_RESULT = B_TRUE.
**        EXIT.
**      ENDIF.
**    ENDIF.
**  ENDIF.

  SELECT SINGLE FROM BKPF INTO LS_BKPF
      WHERE BUKRS LV_BUKRS
      AND GJAHR LV_GJAHR
      AND BELNR LV_BELNR.
*
  IF SY-SUBRC EQ 0.
    B_RESULT B_TRUE.
    EXIT.
  ENDIF.
*
  " 코스트센터-원가요소별 기표 내역 Collect.
  LOOP AT BOOL_DATA-BSEG INTO LS_BSEG
      WHERE KOSTL IS NOT INITIAL.
    LT_KOSTL_CHECK-KOSTL LS_BSEG-KOSTL.
    LT_KOSTL_CHECK-KSTAR LS_BSEG-HKONT.
    IF LS_BSEG-SHKZG 'H'.
      LT_KOSTL_CHECK-DMBTR LS_BSEG-DMBTR * -1.
    ELSE.
      LT_KOSTL_CHECK-DMBTR LS_BSEG-DMBTR.
    ENDIF.
    COLLECT LT_KOSTL_CHECK.
    CLEAR LS_BSEGLT_KOSTL_CHECK.
  ENDLOOP.
*
*  " 오더별 기표 내역 Collect
  LOOP AT BOOL_DATA-BSEG INTO LS_BSEG
      WHERE AUFNR IS NOT INITIAL.
    LT_AUNFR_CHECK-AUFNR LS_BSEG-AUFNR.
    IF LS_BSEG-SHKZG 'H'.
      LT_AUNFR_CHECK-DMBTR LS_BSEG-DMBTR * -1.
    ELSE.
      LT_AUNFR_CHECK-DMBTR LS_BSEG-DMBTR.
    ENDIF.
    COLLECT LT_AUNFR_CHECK.
    CLEAR LS_BSEGLT_AUNFR_CHECK.
  ENDLOOP.
*
  IF LT_AUNFR_CHECK[] IS INITIAL.
    " 코스트센터 체크
    LOOP AT LT_KOSTL_CHECK.
      CALL FUNCTION 'ZCO_CHECK_KBUDGET'
        EXPORTING
          I_BUKRS  LV_BUKRS
          I_BUDAT  LV_BUDAT
          I_KSTAR  LT_KOSTL_CHECK-KSTAR
          I_KOSTL  LT_KOSTL_CHECK-KOSTL
          I_DMBTR  LT_KOSTL_CHECK-DMBTR
          I_WAERS  LV_WAERS
        IMPORTING
          E_RETCD  LV_CODE
          E_RETMSG LV_MSG.

      IF LV_CODE 'E'.
        B_RESULT B_FALSE.
        MESSAGE E000(ZFIMWITH LV_MSG.
        EXIT.
      ENDIF.
    ENDLOOP.
  ELSE.
*  " 오더  체크
    LOOP AT LT_AUNFR_CHECK.
      CALL FUNCTION 'ZCO_CHECK_OBUDGET'
        EXPORTING
          I_BUKRS  LV_BUKRS
          I_BUDAT  LV_BUDAT
          I_AUFNR  LT_AUNFR_CHECK-AUFNR
          I_DMBTR  LT_AUNFR_CHECK-DMBTR
          I_WAERS  LV_WAERS
        IMPORTING
          E_RETCD  LV_CODE
          E_RETMSG LV_MSG.

      IF LV_CODE 'E'.
        B_RESULT B_FALSE.
        MESSAGE E000(ZFIMWITH LV_MSG.
        EXIT.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDFORM.                    "U200
*--------------------------------------------------------------------*
*    FORM U300
*--------------------------------------------------------------------*
*    선급비용/선수수익 전표 역분개시 유효성체크
*--------------------------------------------------------------------*
FORM U300  USING BOOL_DATA TYPE GB002_015
          CHANGING B_RESULT.

  DATA LV_BELNR TYPE BELNR_D.

  CLEAR LV_BELNR.
  SELECT SINGLE A~BELNR
    INTO LV_BELNR
    FROM ZFIT0030 AS A
    INNER JOIN ZFIT0032 AS B
      ON A~BUKRS B~BUKRS
     AND A~CLAPR B~CLAPR
     AND A~MSTNO B~MSTNO
   WHERE A~BUKRS EQ BOOL_DATA-BKPF-BUKRS
     AND A~SPMON EQ BOOL_DATA-BKPF-BUDAT+0(6)
     AND A~BELNR EQ BOOL_DATA-BKPF-STBLG
     AND B~SEDOC NE SPACE.
  IF LV_BELNR NE SPACE.
    B_RESULT B_FALSE.
    MESSAGE E000(ZFIMWITH TEXT-M01.
    EXIT.
  ENDIF.

ENDFORM.                                                    "U702
*--------------------------------------------------------------------*
*       FORM U701
*--------------------------------------------------------------------*
*    증빙일자 마감 체크
*--------------------------------------------------------------------*
FORM U701  CHANGING B_RESULT.

  DATA L_CHECK_FLAG.
  CLEARL_CHECK_FLAG.

  B_RESULT B_TRUE.

* T-CODE가 FB02가 아니면(전표헤더 텍스트만 고치는데 전기일,증빙일
* 체크하기때문에)
  IF SY-TCODE <> 'FB02' AND SY-TCODE <> 'FB03'.
    CALL FUNCTION 'ZFI_CHECK_DATE'
      EXPORTING
        L_BUKRS      BKPF-BUKRS
        L_BLDAT      BKPF-BLDAT
        L_BUDAT      BKPF-BUDAT
        L_BLART      BKPF-BLART
      IMPORTING
        L_CHECK_FLAG L_CHECK_FLAG.
*             EXCEPTIONS
*               001                = 1
*               OTHERS             = 2

    IF SY-SUBRC <> 0.
      B_RESULT B_FALSE.
    ENDIF.
  ENDIF.

  IF L_CHECK_FLAG 'X'.
    B_RESULT B_FALSE.
  ENDIF.

ENDFORM.                                                    "u701
*--------------------------------------------------------------------*
*    FORM U702
*--------------------------------------------------------------------*
*    Can not process journalizing for this account  조정임시계정 점검
*--------------------------------------------------------------------*
FORM U702  CHANGING B_RESULT.
  DATA LV_SS(100).

  B_RESULT B_FALSE.

  CONCATENATE 'Account' BSEG-HKONT 'can not be Journaied'
          INTO LV_SS SEPARATED BY SPACE.

  MESSAGE E001(ZFIMWITH LV_SS.
*  MESSAGE E005(ZFIM) WITH BSEG-HKONT.  "계정 &로는 분개처리 할 수 없습니다.

ENDFORM.                                                    "U702
*----------------------------------------------------------------------*
*    FORM U703
*----------------------------------------------------------------------*
*    Check reversal availability(역분개가능여부 점검)
*----------------------------------------------------------------------*
FORM U703 CHANGING B_RESULT.
  DATA LV_ZCBO_TCODE_FB08   TYPE SY-TCODE.
  DATA LV_SS(100).

  GET PARAMETER ID 'ZCBO_TCODE_FB08' FIELD LV_ZCBO_TCODE_FB08.

  B_RESULT B_TRUE.

  IF  NOT BKPF-XBLNR_ALT IS INITIAL  "Bundle Document = Alternative Reference Number
  AND LV_ZCBO_TCODE_FB08 IS INITIAL
  AND (
          SY-TCODE 'FB08' "Reverse Document
      OR  SY-TCODE 'F.80' "Mass Reversal of Documents
      )
    .
    B_RESULT B_FALSE.

    CONCATENATE 'Can not be reversed. Bundle Doc.No :' BKPF-XBLNR_ALT
           INTO LV_SS SEPARATED BY SPACE.

    MESSAGE E001(ZFIMWITH LV_SS.
  ENDIF.

  "지급접수된 것은 역분개 못함
  IF BKPF-ZEVD_CHK 'X'.
    B_RESULT B_FALSE.

    CONCATENATE 'Can not be reversed. Document Receipt Doc.No :' BKPF-XBLNR_ALT
           INTO LV_SS SEPARATED BY SPACE.

    MESSAGE E001(ZFIMWITH LV_SS.
  ENDIF.

*  DATA  l_msgtxt TYPE bapi_msg.
*
***역분개 가능여부 체크
*
***1.전자세금계산서 발행이 된 전표에 대해서는 역분개를 하지 못하도록
***  처리함.
*  PERFORM reverse_check(saplz_fi_bte) USING bkpf-bukrs bkpf-blart
*                                            bkpf-stblg bkpf-stjah
*                                            l_msgtxt '' bkpf-budat.
*  IF l_msgtxt IS NOT INITIAL.
*    MESSAGE e001(zmfi) WITH l_msgtxt.
*  ENDIF.

ENDFORM.                                                    "U703
*----------------------------------------------------------------------*
*    FORM U800
*----------------------------------------------------------------------*
*    세율에 따른 허용 범위 검사 Tax tolerance has been exceeded.
*----------------------------------------------------------------------*
FORM U800 CHANGING B_RESULT.
  DATA LS_T001        LIKE T001.    "Company Codes
  DATA LS_T005        LIKE T005.    "Countries
  DATA LT_T007A       LIKE T007A OCCURS WITH HEADER LINE.
  DATA LS_T007A       LIKE T007A.   "Tax Keys
  DATA LT_A003        LIKE A003 OCCURS WITH HEADER LINE.
  DATA LS_A003        LIKE A003.    "Tax Classification
  DATA LT_KONP        LIKE KONP OCCURS WITH HEADER LINE.
  DATA LS_KONP        LIKE KONP.    "Conditions (Item)

  DATA LT_T030K       LIKE T030K OCCURS WITH HEADER LINE"Tax Accounts Determination

  RANGES LR_HKONT       FOR T030K-KONTS.

*
  B_RESULT B_TRUE.
*

  CLEARLS_T001 .
  CLEARLS_T005 .
  CLEARLT_T007ALT_T007A[].
  CLEARLS_T007A.
  CLEARLT_A003,  LT_A003[].
  CLEARLS_A003 .
  CLEARLT_KONP,  LT_KONP[].
  CLEARLS_KONP .

  CLEARLT_T030KLT_T030K[].

  CLEARLR_HKONTLR_HKONT[].

  SELECT  SINGLE INTO LS_T001
    FROM  T001
    WHERE BUKRS BKPF-BUKRS.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.

  SELECT  SINGLE INTO LS_T005
    FROM  T005
    WHERE LAND1 LS_T001-LAND1.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.

  SELECT  INTO TABLE LT_T007A
    FROM  T007A
    WHERE KALSM LS_T005-KALSM
    .
  IF LT_T007A[] IS INITIAL.
    EXIT.
  ENDIF.
  SORT LT_T007A BY  KALSM MWSKZ.

  SELECT  INTO TABLE LT_T030K
    FROM  T030K
    WHERE KTOPL LS_T001-KTOPL
    .
  IF LT_T030K[] IS INITIAL.
    EXIT.
  ENDIF.

  SELECT  INTO TABLE LT_A003
    FROM  A003
    WHERE KAPPL 'TX'
    AND   KSCHL > SPACE
    AND   ALAND LS_T001-LAND1
    .
  IF LT_A003[] IS INITIAL.
    EXIT.
  ENDIF.
  SORT LT_A003  BY  KAPPL ALAND MWSKZ.

  SELECT  INTO TABLE LT_KONP
    FROM  KONP
    FOR ALL ENTRIES IN LT_A003
    WHERE KNUMH LT_A003-KNUMH
    .
  IF LT_A003[] IS INITIAL.
    EXIT.
  ENDIF.
  SORT LT_KONP  BY  KNUMH KOPOS.

  LOOP AT LT_T030K.
    CLEARLR_HKONT.
    LR_HKONT-SIGN   'I'.
    LR_HKONT-OPTION 'BT'.
    LR_HKONT-LOW    LT_T030K-KONTS.
    LR_HKONT-HIGH   LT_T030K-KONTH.
    APPEND LR_HKONT.
    CLEARLR_HKONT.
  ENDLOOP.

  DATA LV_FWBAS             LIKE BSEG-FWBAS.  "Base amount 세금계정에서 공급가액+세액
  DATA LV_WMWST             LIKE BSEG-WMWST.  "Tax amount
  DATA LV_WRBTR             LIKE BSEG-WRBTR.  "Amount   세금계정에서 세액
  DATA LV_WRBTR_PLUS        LIKE BSEG-WRBTR.  "Amount   세금계정에서 세액
  DATA LV_WRBTR_MINUS       LIKE BSEG-WRBTR.  "Amount   세금계정에서 세액

  DATA LV_BASE_KBETR        TYPE FWSTE.       "Condition amount or percentage where no scale exists
  DATA LV_CALC_KBETR        TYPE FWSTE.       "Condition amount or percentage where no scale exists
  DATA LV_DIFF_KBETR        TYPE FWSTE.       "Condition amount or percentage where no scale exists
  DATA LV_SWELL             TYPE FWSTE.       "Condition amount or percentage where no scale exists
  DATA LV_MIN_SWELL         TYPE FWSTE.       "Condition amount or percentage where no scale exists

*  BREAK-POINT ID Z_BREAK_POINT.

  IF BSEG-HKONT IN LR_HKONT.

*    BREAK-POINT ID Z_BREAK_POINT.

    IF BSEG-WRBTR 0.
      EXIT.
    ENDIF.

    CLEARLS_T007A.
    READ TABLE LT_T007A INTO LS_T007A WITH KEY MWSKZ BSEG-MWSKZ.
    IF SY-SUBRC <> 0.
      EXIT.
    ENDIF.

    CLEARLS_A003.
    READ TABLE LT_A003 INTO LS_A003 WITH KEY MWSKZ BSEG-MWSKZ.
    IF SY-SUBRC <> 0.
      EXIT.
    ENDIF.

    CLEARLS_KONP.
    READ TABLE LT_KONP INTO LS_KONP WITH KEY KNUMH LS_A003-KNUMH.
    IF SY-SUBRC <> 0.
      EXIT.
    ENDIF.

*    IF LS_KONP-KBETR = 0.
*      EXIT.
*    ENDIF.

    LV_BASE_KBETR LS_KONP-KBETR * 10.

    "입력 금액으로 세율 계산
    LV_WRBTR ABSBSEG-WRBTR ).  "세금게정의 세액
    LV_FWBAS ABSBSEG-FWBAS ).  "세금게정의 공급가액+세액

    LV_CALC_KBETR LV_WRBTR / LV_FWBAS 10000.

    LV_DIFF_KBETR LV_BASE_KBETR LV_CALC_KBETR.
    LV_DIFF_KBETR ABSLV_DIFF_KBETR ).

    LV_SWELL LV_BASE_KBETR * LS_T007A-TOLERANCE / 100.

    IF LV_SWELL IS INITIAL.
      PACK '1' TO LV_MIN_SWELL.
    ELSE.
      LV_MIN_SWELL LV_SWELL / 100.
    ENDIF.

    DATALS_T001R TYPE T001R.
    CLEARLS_T001R.
    SELECT SINGLE INTO LS_T001R FROM T001R
      WHERE BUKRS BSEG-BUKRS
      AND   WAERS BKPF-WAERS.
    IF SY-SUBRC 0.
      LV_MIN_SWELL LV_MIN_SWELL * LS_T001R-REINH.
    ENDIF.

    DATAL_T001Z   LIKE T001Z.
    CALL FUNCTION 'READ_ADD_COMPANY_CODE_INFO'    "N943614
      EXPORTING                                   "N943614
        IC_BUKRS  BSEG-BUKRS                 "N943614
        IC_PARTY  'PTAXCK'                "N943614
      IMPORTING                                   "N943614
        ES_T001Z  L_T001Z                 "N943614
      EXCEPTIONS                                  "N943614
        NOT_FOUND 1                       "N943614
        OTHERS    2.                      "N943614
* Wenn Parameter für BUKRS gesetzt keine Message"N943614
* If L_t001Z-PAVAL = 'X'.              "N943614 "N956637
    IF L_T001Z-PAVAL(3'X  '.                            "N956637
      LV_MIN_SWELL 0.                                     "N943614
    ELSEIF  L_T001Z-PAVAL(3'X1 '.                       "N956637
      LV_MIN_SWELL '0.01'.                                "N956637
      IF LS_T001R-REINH <> 0.                               "N956637
        LV_MIN_SWELL LV_MIN_SWELL * LS_T001R-REINH.       "N956637
      ENDIF.                                                "N956637
    ELSEIF  L_T001Z-PAVAL(3CO '0123456789'.               "N956637
      LV_MIN_SWELL L_T001Z-PAVAL(3100.                "N956637
    ENDIF.                                                  "N943614
* end of note 943614

    IF LV_MIN_SWELL > LV_SWELL.
      LV_SWELL LV_MIN_SWELL.
    ENDIF.


    LV_SWELL ABSLV_SWELL ).

    IF LV_DIFF_KBETR > LV_SWELL.
      B_RESULT B_FALSE.

      MESSAGE E000(ZFIMWITH TEXT-800.
    ENDIF.

  ENDIF.

ENDFORM.                                                    "U800
*--------------------------------------------------------------------*
*    FORM U301
*--------------------------------------------------------------------*
*    At changing Payment Block, check user's Role
*--------------------------------------------------------------------*
FORM U301  CHANGING B_RESULT.

  DATA BEGIN OF LT_BLOCK OCCURS 0,
           ZLSPR LIKE BSEG-ZLSPR,
         END OF LT_BLOCK.

  DATA LV_AGR_NAME TYPE AGR_NAME.
  DATA LT_AGR_TCODES LIKE AGR_TCODES OCCURS WITH HEADER LINE.
  DATA LV_ZLSPR LIKE BSEG-ZLSPR.

**  IF SYST-TCODE EQ 'FB02' OR
**     SYST-TCODE EQ 'FB03' OR
**     SYST-TCODE EQ 'FB09' .
**
**    CLEAR : LT_AGR_TCODES, LT_AGR_TCODES[].
**    SELECT *
**      INTO CORRESPONDING FIELDS OF TABLE LT_AGR_TCODES
**      FROM AGR_TCODES
**     WHERE TCODE IN (C_ZFIO007, C_ZTRR103, C_ZTRR104).
**
**    LOOP AT LT_AGR_TCODES.
**      CLEAR LV_AGR_NAME.
**      SELECT SINGLE AGR_NAME
**        INTO LV_AGR_NAME
**        FROM AGR_USERS
**       WHERE AGR_NAME EQ LT_AGR_TCODES-AGR_NAME
**         AND UNAME    EQ SY-UNAME
**         AND FROM_DAT <= SY-DATUM
**         AND TO_DAT   => SY-DATUM.
**      CHECK SY-SUBRC EQ 0.
**      IF LT_AGR_TCODES-TCODE EQ C_ZFIO007.
**        MOVE 'B' TO LT_BLOCK-ZLSPR.
**      ELSEIF LT_AGR_TCODES-TCODE EQ C_ZTRR103.
**        MOVE 'C' TO LT_BLOCK-ZLSPR.
**      ELSEIF LT_AGR_TCODES-TCODE EQ C_ZTRR104.
**        MOVE ' ' TO LT_BLOCK-ZLSPR.
**      ENDIF.
**      APPEND LT_BLOCK.  CLEAR LT_BLOCK.
**    ENDLOOP.
**
**    READ TABLE LT_BLOCK WITH KEY ZLSPR = BSEG-ZLSPR.
**    IF SY-SUBRC NE 0.
**      MESSAGE E000(ZFIM) WITH TEXT-E01.
**    ENDIF.
**
**  ENDIF.

  CLEAR LV_ZLSPR.
  SELECT SINGLE ZLSPR
    INTO LV_ZLSPR
    FROM BSEG
   WHERE BUKRS EQ BSEG-BUKRS
     AND BELNR EQ BSEG-BELNR
     AND GJAHR EQ BSEG-GJAHR
     AND BUZEI EQ BSEG-BUZEI.

  CHECK SY-SUBRC EQ 0.

  IF BSEG-KOART EQ 'K' OR
    BSEG-KOART EQ 'D' AND
    BSEG-BSCHL EQ '11' OR BSEG-BSCHL EQ '14' ).

    IF LV_ZLSPR NE 'B' AND BSEG-ZLSPR EQ 'B'.
      MESSAGE E000(ZFIMWITH TEXT-E02.
    ELSEIF LV_ZLSPR NE 'C' AND BSEG-ZLSPR EQ 'C'.
      MESSAGE E000(ZFIMWITH TEXT-E03.
    ELSEIF LV_ZLSPR NE ' ' AND BSEG-ZLSPR EQ ' '.
      MESSAGE E000(ZFIMWITH TEXT-E04.
    ENDIF.
  ENDIF.

ENDFORM.
*--------------------------------------------------------------------*
*    FORM U301
*--------------------------------------------------------------------*
*    At changing Payment Block, check user's Role
*--------------------------------------------------------------------*
FORM U302  CHANGING B_RESULT.

  IF BSEG-HBKID NE SPACE.
    IF BSEG-HKTID EQ SPACE.
      MESSAGE E000(ZFIMWITH TEXT-E05.
    ENDIF.
  ENDIF.

ENDFORM.

CBO TABLE 변경 프로그램

************************************************************************
* Report            : ZCBOTABLE
* Module/Sub-Module : CA
* Type              :
* T_CODE            :
* Previous Vesion   : SAP ERP 7.0
* Description       : Table 데이터 수정
************************************************************************
*                          MODIFICATION LOG
*
* DATE         AUTHORS           DESCRIPTION
* ----------- ----------------- -------------------------------------- *
* 2010/11/08    XXXX       initial realease
************************************************************************

REPORT  ZCBOTABLE.

TABLESdd02l.

DATAg_tabname(30)  TYPE c          VALUE '/1BCDWB/DB',
      action         TYPE sy-ucomm   VALUE 'ANZE',
      global_auth(4TYPE c,
      g_data_exit    LIKE rs38l-name VALUE 'UPDA'.

DATAmem_id(16VALUE 'TABELLENANZEIGER'.

SELECTION-SCREENSKIP.
PARAMETERStabname  LIKE databrowse-tablename MEMORY ID dtb.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR tabname.
  PERFORM f4_objname.

AT SELECTION-SCREEN.
  IF tabname(1<> 'Y' AND tabname(1<> 'Z'.
*    MESSAGE e416(mo) WITH tabname.
  ENDIF.

  SELECT FROM  dd02l
           WHERE  tabname  tabname
           AND    as4local 'A'
           AND   tabclass  <> 'INTTAB' AND tabname <> 'APPEND' AND
                   tabclass  <> 'VIEW' ).
    EXIT.
  ENDSELECT.

  IF sy-subrc <> 0.  MESSAGE e402(moWITH tabname.  ENDIF.

START-OF-SELECTION.

  CONCATENATE g_tabname tabname INTO g_tabname.
  dd02l-mainflag 'X'.
  EXPORT action dd02l-mainflag global_auth
                TO MEMORY ID mem_id.

  SUBMIT (g_tabnameVIA SELECTION-SCREEN AND RETURN.

*&---------------------------------------------------------------------*
*&      Form  F4_OBJNAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f4_objname.

  DATAdnum   LIKE d020s-dnum,
        repid  LIKE sy-repid.

  dnum sy-dynnr.  repid sy-repid.
  CALL FUNCTION 'RS_HELP_HANDLING'
       EXPORTING
            dynpfield                 'TABNAME'
            dynpname                  dnum
            object                    'TB  '
            progname                  repid
            suppress_selection_screen 'X'.

ENDFORM.                    " F4_OBJNAME

2017년 2월 16일 목요일

RFC LOG 및 TEST DIRECTORY 생성


1. RFC에 아래 코딩을 제일 상단에 작성한다.

  INCLUDE FBGENMAC.
  FBGENMAC 'Z**(RFC ID)'.


예제.

FUNCTION ZFI_IF_DOC_POSTING_ASSET_RET.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(IS_SYS) TYPE  ZFIS_IF_SYS_INFO OPTIONAL
*"     VALUE(I_BDC_MODE) TYPE  RFPDO-ALLGAZMD DEFAULT 'N'
*"     VALUE(I_BUKRS) TYPE  BUKRS
*"     VALUE(I_GJAHR) TYPE  GJAHR
*"     VALUE(I_BELNR) TYPE  BELNR_D
*"  EXPORTING
*"     VALUE(ES_RETURN) TYPE  BAPIRET2
*"     VALUE(E_SERIAL) TYPE  VVNLFDNUM
*"     VALUE(E_BUKRS) TYPE  BUKRS
*"     VALUE(E_BELNR) TYPE  BELNR_D
*"     VALUE(E_GJAHR) TYPE  GJAHR
*"     VALUE(E_BELNR_PL) TYPE  BELNR_D
*"  TABLES
*"      T_BKPF STRUCTURE  ZFIS_IF_ZBBKPF
*"      T_BSEG STRUCTURE  ZFIS_IF_ZBBSEG
*"      T_BTAX STRUCTURE  ZFIS_IF_ZBBTAX OPTIONAL
*"      T_CLEAR STRUCTURE  ZFIS_IF_ZBBCLEAR OPTIONAL
*"      T_ZFIMSG STRUCTURE  ZFIS_IF_ZFIMSG OPTIONAL
*"      T_FIDOC_RESULT STRUCTURE  ZFIS_IF_ZFIDOC_RESULT OPTIONAL
*"----------------------------------------------------------------------

  INCLUDE FBGENMAC.
  FBGENMAC 'ZFI_IF_DOC_POSTING_ASSET_RET'.



2. STANDARD 프로그램 FBGENDAT 실행 
 FUNCTION MODULE 에 해당 RFC를 입력 
 MODE = 'B'  (일반적인 값)
 라디오버튼 선택 - Activate this entry

3. RFC I/F 사용자 ID
  SU01에서
  PARAMETER TAB에 PARAMETER를 추가.

  FBGENDAT = 'X' Active Indicator BAPI Test Data Generation

대체필드 활성화

Substitution 시 대체필드가 보이지 않을 경우

VIEW : VWTYGB01 의 exclude 필드값을 확인한다.

T-CODE : GGB1  참고 : GGB3 / GGB4

2017년 2월 9일 목요일

SMW0 의 템플릿 사용하여 SAP DATA EXCEL로 전송하기

http://bathildis.tistory.com/12

1. SMW0에 템플릿 UPLOAD
 - EXCEL버전 확인필요( EXCEL 97-2003)

2. 소스

*&---------------------------------------------------------------------*
*& Report  ZEXCELDOWN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZEXCELDOWN.

*======================================================================*
* INCLUDE
*======================================================================*
INCLUDE ztlaytop.
INCLUDE ztlayf01.

*======================================================================*
* INITIALIZATION
*======================================================================*
INITIALIZATION.

*======================================================================*
* AT SELECTION-SCREEN OUTPUT
*======================================================================*
AT SELECTION-SCREEN OUTPUT.

*======================================================================*
* START-OF-SELECTION
*======================================================================*
START-OF-SELECTION.
  PERFORM get_data.

*======================================================================*
* END-OF-SELECTION
*======================================================================*
END-OF-SELECTION.
  IF gt_list[] IS NOT INITIAL.
    PERFORM GET_EXCEL.
  ENDIF.




*&---------------------------------------------------------------------*
*&  Include           ZTLAYTOP
*&---------------------------------------------------------------------*

*======================================================================*
* TABLES
*======================================================================*
TABLES dd03l" 테이블필드
         dd03t" DD: 필드에 대한 텍스트 (언어종속)
         dd04t" R/3 DD: Data element 텍스트

*======================================================================*
* INTERNAL TABLES
*======================================================================*
*// DISPLAY
DATA BEGIN OF gs_list OCCURS 0,
         position  LIKE dd03l-position,
         fieldname LIKE dd03l-fieldname,
         rollname  LIKE dd03l-rollname,
         notnull   LIKE dd03l-notnull,
         keyflag   LIKE dd03l-keyflag,
         datatype  LIKE dd03l-datatype,
         intlen    LIKE dd03l-intlen,
         decimals  LIKE dd03l-decimals,
         ddtext    LIKE dd03t-ddtext,
       END OF gs_list.
DATA gt_list LIKE gs_list OCCURS WITH HEADER LINE.

*======================================================================*
* VARIANTS
*======================================================================*
DATA ok_code TYPE sy-ucomm.
DATA g_tabtx LIKE dd02t-ddtext.

*======================================================================*
* EXCEL 출력 관련
*======================================================================*

INCLUDE officeintegrationinclude.
DATAgv_retcode     TYPE t_oi_ret_string,
      gc_factory     TYPE REF TO i_oi_document_factory,
      gc_link_server TYPE REF TO i_oi_link_server,
      gv_doc_size    TYPE i,
      gv_doc_format  TYPE LENGTH 80,
      gv_doc_type    TYPE LENGTH 80 VALUE soi_doctype_word97_document,
      gt_doc_table   TYPE TABLE OF w3mime,
      gc_document    TYPE REF TO i_oi_document_proxy.

* Excel 헤더
DATABEGIN OF gs_xls_header,
        d01(60),
        d02(60),
      END OF gs_xls_header,
      gt_xls_header LIKE TABLE OF gs_xls_header.

* Excel 아이템
DATABEGIN OF gs_xls_item11,
        d01(60,
        d02(60,
        d03(60,
        d04(60,
        d05(60,
        d06(60,
        d07(60,
        d08(60,
        d09(60,
      END OF gs_xls_item11,
      gt_xls_item11 LIKE TABLE OF gs_xls_item11.

*======================================================================*
* SELECTION-SCREEN
*======================================================================*
*// 조회조건
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS p_tabnm LIKE dd03l-tabname OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.


*&---------------------------------------------------------------------*
*&  Include           ZTLAYF01
*&---------------------------------------------------------------------*

FORM get_data .

  clear gt_listgt_list[].

  SELECT position
         fieldname
         rollname
         notnull
         keyflag
         datatype
         intlen
         decimals
    INTO CORRESPONDING FIELDS OF TABLE gt_list
    FROM dd03l
   WHERE tabname EQ p_tabnm.

  SORT gt_list BY position.

  CHECK gt_list[] IS NOT INITIAL.

  CLEAR g_tabtx.

  SELECT SINGLE ddtext
    INTO g_tabtx
    FROM dd02t
   WHERE tabname    EQ p_tabnm
     AND ddlanguage EQ sy-langu.

  LOOP AT gt_list.

    IF gt_list-rollname IS INITIAL.

      SELECT SINGLE ddtext
        INTO gt_list-ddtext
        FROM dd03t
       WHERE tabname    EQ p_tabnm
         AND ddlanguage EQ sy-langu
         AND fieldname  EQ gt_list-fieldname.

    ELSE.

      SELECT SINGLE ddtext
        INTO gt_list-ddtext
        FROM dd04t
       WHERE rollname   EQ gt_list-rollname
         AND ddlanguage EQ sy-langu.

    ENDIF.

    MODIFY gt_list INDEX sy-tabix.

  ENDLOOP.

ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------*
*&      Form  GET_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_excel.

  PERFORM get_print_data."엑셀에 뿌려질 데이터를 모음.
  PERFORM exec_print.    "엑셀 오브젝트 생성 메서드실행.

ENDFORM.                    " GET_EXCEL

*&---------------------------------------------------------------------*
*&      Form  GET_PRINT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_print_data .

* HEADER DATE 조합
  PERFORM make_header_data.

* ITEM DATA 조합
  PERFORM make_item_data.

ENDFORM.                    " GET_PRINT_DATA

*&---------------------------------------------------------------------*
*&      Form  MAKE_HEADER_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM make_header_data .

  CLEARgs_xls_headergt_xls_header.

* HEADER DATA

  gs_xls_header-d01 p_tabnm.
  gs_xls_header-d02 g_tabtx.

  APPEND gs_xls_header TO gt_xls_header.

ENDFORM.                    " MAKE_HEADER_DATA
*&---------------------------------------------------------------------*
*&      Form  MAKE_ITEM_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM make_item_data .

  CLEARgs_xls_item11gt_xls_item11.

  LOOP AT gt_list.

    gs_xls_item11-d01 gt_list-position.
    gs_xls_item11-d02 gt_list-fieldname.
    gs_xls_item11-d03 gt_list-rollname.
    gs_xls_item11-d04 gt_list-notnull.
    gs_xls_item11-d05 gt_list-keyflag.
    gs_xls_item11-d06 gt_list-datatype.
    gs_xls_item11-d07 gt_list-intlen.
    gs_xls_item11-d08 gt_list-decimals.
    gs_xls_item11-d09 gt_list-ddtext.

    APPEND gs_xls_item11 TO gt_xls_item11.
    CLEAR  gs_xls_item11.

  ENDLOOP.

ENDFORM.                    " MAKE_ITEM_DATA

*&---------------------------------------------------------------------*
*&      Form  EXEC_PRINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM exec_print .

  PERFORM init_factory.
  PERFORM open_doc.
  PERFORM close_factory.

ENDFORM.                    " EXEC_PRINT

*&---------------------------------------------------------------------*
*&      Form  INIT_FACTORY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM init_factory .
  CHECK gc_factory IS INITIAL.

  CALL METHOD c_oi_factory_creator=>get_document_factory
    IMPORTING
      factory gc_factory
      retcode gv_retcode.

  IF gv_retcode NE c_oi_errors=>ret_ok.
    EXIT.
  ENDIF.

  CALL METHOD gc_factory->start_factory
    EXPORTING
      r3_application_name 'WORK_ORDER'
    IMPORTING
      retcode             gv_retcode.


  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.

  CALL METHOD gc_factory->get_link_server
    IMPORTING
      link_server gc_link_server
      retcode     gv_retcode.

  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.

  CALL METHOD gc_link_server->start_link_server
    IMPORTING
      retcode gv_retcode.

  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.

ENDFORM.                    " INIT_FACTORY

*&---------------------------------------------------------------------*
*&      Form  OPEN_DOC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM open_doc .

  CALL METHOD gc_link_server->add_table_item2
    EXPORTING
      item_name  'HEADER'
    IMPORTING
      retcode    gv_retcode
    CHANGING
      data_table gt_xls_header.


  CALL METHOD gc_link_server->add_table_item2
    EXPORTING
      item_name  'ITEM11'
    IMPORTING
      retcode    gv_retcode
    CHANGING
      data_table gt_xls_item11.

  CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
    EXPORTING
      object_id        'YTAB'
    IMPORTING
      data_size        gv_doc_size
      document_format  gv_doc_format
      document_type    gv_doc_type
    TABLES
      data_table       gt_doc_table
    EXCEPTIONS
      object_not_found 1
      internal_error   2
      OTHERS           3.

  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
         WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  IF gv_doc_size NE 0.

    CALL METHOD gc_factory->get_document_proxy
      EXPORTING
        document_type  gv_doc_type
      IMPORTING
        document_proxy gc_document
        retcode        gv_retcode.
    CALL METHOD c_oi_errors=>show_message
      EXPORTING
        type 'E'.

    CALL METHOD gc_document->open_document_from_table
      EXPORTING
        document_table   gt_doc_table
        document_size    gv_doc_size
        protect_document space
        startup_macro    'MACRO1'
      IMPORTING
        retcode          gv_retcode.
    CALL METHOD c_oi_errors=>show_message
      EXPORTING
        type 'E'.

  ELSE.

  ENDIF.

ENDFORM.                    " OPEN_DOC

*&---------------------------------------------------------------------*
*&      Form  CLOSE_FACTORY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM close_factory .
  IF NOT gc_link_server IS INITIAL.
    CALL METHOD gc_link_server->stop_link_server
      IMPORTING
        retcode gv_retcode.
    FREE gc_link_server.
  ENDIF.
  IF NOT gc_factory IS INITIAL.
    CALL METHOD gc_factory->stop_factory
      IMPORTING
        retcode gv_retcode.
    FREE gc_factory.
  ENDIF.

ENDFORM.                    " CLOSE_FACTORY


3. 매크로 

Option Explicit

Dim R3Table As Object
Dim R3Table11 As Object

Sub Macro1()

    Dim r_count As Long
    Dim i, i_row As Long

    Application.WindowState = xlMaximized
    ActiveWindow.WindowState = xlMaximized

'----------------------------
'--------헤더 데이터 입력S1
'----------------------------
    ActiveWorkbook.Sheets(1).Activate
    Set R3Table = ThisWorkbook.Container.LinkServer.Items("HEADER").Table
    
    Range("D3:J3").Select
    Cells(3, 4) = CVar(R3Table.Value(1, 1))    '테이블ID
    
    Range("D4:J4").Select
    Cells(4, 4) = CVar(R3Table.Value(1, 2))    '테이블명

'----------------------------
'--------아이템 데이터 입력S1
'----------------------------

    Set R3Table11 = ThisWorkbook.Container.LinkServer.Items("ITEM11").Table
    r_count = R3Table11.RowCount
    
    i_row = 6
    
    For i = 1 To r_count

        Cells(i_row, 2) = CVar(R3Table11.Value(i, 1)) '1
        Cells(i_row, 3) = CVar(R3Table11.Value(i, 2)) '2
        Cells(i_row, 4) = CVar(R3Table11.Value(i, 3)) '3
        Cells(i_row, 5) = CVar(R3Table11.Value(i, 4)) '4
        Cells(i_row, 6) = CVar(R3Table11.Value(i, 5)) '5
        Cells(i_row, 7) = CVar(R3Table11.Value(i, 6)) '6
        Cells(i_row, 8) = CVar(R3Table11.Value(i, 7)) '7
        Cells(i_row, 9) = CVar(R3Table11.Value(i, 8)) '8
        Cells(i_row, 10) = CVar(R3Table11.Value(i, 9)) '9
        
        i_row = i_row + 1
        
    Next i
        
    With Range("B2").CurrentRegion
        .Borders.LineStyle = xlNone
        .Borders.LineStyle = 1
    End With
    
    Range("A1").Select
    

End Sub



4. 엑셀양식