2017년 2월 21일 화요일

ZDOWNLOAD_TABLE_DATA

*&---------------------------------------------------------------------*
*& 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
DATABEGIN OF GS_LOG,
        SEQNO(4TYPE 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 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 (33TX_CBOX1.
*SELECTION-SCREEN POSITION 33.
* 일반테이블
PARAMETER RB_NORM RADIOBUTTON GROUP RB1
                  USER-COMMAND RB1
                  DEFAULT 'X'.
SELECTION-SCREEN COMMENT (20TX_RBNOR FOR FIELD RB_NORM.
* DDIC 테이블
PARAMETER RB_DDIC RADIOBUTTON GROUP RB1.
SELECTION-SCREEN COMMENT (20TX_RBDDI FOR FIELD RB_DDIC.
SELECTION-SCREEN END OF LINE.

* 파일경로
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (33TX_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 (30TX_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 (30TX_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 (33TX_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(DBWITH
          '파일경로는 필수입력입니다.'.
      ENDIF.

      CASE 'X'.
        WHEN RB_NORM.  "일반테이블
          IF S_TABNM[] IS INITIAL.
            MESSAGE E000(DBWITH
              '일반테이블 선택시 테이블명은 필수입력입니다.'.
          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 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.
  DATABEGIN OF LT_DD02V OCCURS 0,
          TABNAME TYPE DD02V-TABNAME,
          DDTEXT TYPE DD02V-DDTEXT,
        END OF LT_DD02V.
  DATA:
    L_SEQNO(4TYPE 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(11TYPE 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

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-POOLSGB002" TO BE INCLUDED IN                       "wms092357
TABLESBKPF,      " 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.

  DATABEGIN OF EXITS OCCURS 50,
          NAME(5)   TYPE C,
          PARAM     LIKE C_EXIT_PARAM_NONE,
          TITLE(60TYPE 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 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_STRUTO <FS_REGUH>.

  CHECK SY-SUBRC EQ 0.

  CHECK <FS_REGUH> IS NOT INITIAL.

  CLEAR LT_DOCLT_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 <> AND I_XREF_FIELD <> 2.
    MESSAGE X000(GKWITH '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(G3WITH 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(G3WITH 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 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 WITH HEADER LINE.
  DATA LT_CHK_BSEG      LIKE BSEG OCCURS WITH HEADER LINE.
  DATA LS_BSEG          LIKE BSEG.
  DATA LV_MODIFY_FLAG   TYPE CHAR01.
  CLEAR LT_TMP_BSEGLT_TMP_BSEG[].
  CLEAR LT_CHK_BSEGLT_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