SAP BP insert update delete


REPORT ZAC00160 NO STANDARD PAGE HEADING
                 LINE-SIZE 170
                 LINE-COUNT 58
                 MESSAGE-ID ZAC001.

*----------------------------------------------------------------------*
*                         定数の定義
*----------------------------------------------------------------------*
CONSTANTS:
  C_A(1)      TYPE C    VALUE 'A',
  C_E(1)      TYPE C    VALUE 'E',
  C_X(1)      TYPE C    VALUE 'X',
  C_S(1)      TYPE C    VALUE 'S',
  C_SLASH     TYPE CHAR1 VALUE '/',
  C_REQ       TYPE C    VALUE '+',
  C_MIN       TYPE C    VALUE '-',
  C_2         TYPE C    VALUE '2',
  C_I         TYPE C    VALUE 'I',
  C_U         TYPE C    VALUE 'U',
  C_D         TYPE C    VALUE 'D',
  C_CHECK(5)  TYPE C    VALUE 'CHECK',
  C_UTF8      TYPE ABAP_ENCOD VALUE  '4110',
  C_TYPE(10)  TYPE VALUE 'ASC',          " タブ区切りFILE
  C_TAB       TYPE VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
  C_TYP_E(01TYPE VALUE 'E',            " メッセージタイプ
  C_CHK(01)   TYPE VALUE 'X'.            " チェック

*&---------------------------------------------------------------------*
*                         型定義
*&---------------------------------------------------------------------*
TYPES:

  BEGIN OF TYP_SFILE,
    FIELD TYPE STRING,
  END OF TYP_SFILE,

  BEGIN OF TYP_FILE,
    PARTNER    TYPE  BUT000-PARTNER,    "ビジネスパートナ番号
    RLTYP      TYPE  STRING,            "BP 役割の登録
    BU_GROUP   TYPE  STRING ,           "グルーピング
    TITLE      TYPE  STRING,            "タイトル(敬称)
    NAME1      TYPE  ADRC-NAME1,        "名称
    NAME2      TYPE  ADRC-NAME2,        "名称 2
    SORT1      TYPE  ADRC-SORT1,        "検索語句1/2
    SORT2      TYPE  ADRC-SORT2,        "検索語句2/2
    STREET     TYPE  ADRC-STREET,       "地名
    HOUSE_NUM1 TYPE  ADRC-HOUSE_NUM1,   "番地-号
    POST_CODE1 TYPE  ADRC-POST_CODE1,   "郵便番号
    CITY1      TYPE  ADRC-CITY1,        "市区町村
    COUNTRY    TYPE  STRING,            "国コード
    REGION     TYPE  STRING,            "地域 (都道府県)
    TIME_ZONE  TYPE  ADRC-TIME_ZONE,    "タイムゾーン
    LANGU      TYPE  STRING,            "言語
    TEL_NUMBER TYPE  ADRC-TEL_NUMBER,   "電話
    FAX_NUMBER TYPE  ADRC-FAX_NUMBER,   "FAX
    SMTP_ADDR1 TYPE  ADR6-SMTP_ADDR,    "E-Mail(1)
    SMTP_ADDR2 TYPE  ADR6-SMTP_ADDR,    "E-Mail(2)
    SMTP_ADDR3 TYPE  ADR6-SMTP_ADDR,    "E-Mail(3)
    LEGAL_ORG  TYPE  STRING,            "法的実体
    VBUND      TYPE  LFA1-VBUND,        "取引先
    BKVID      TYPE  BUT0BK-BKVID,      "ID
    BANKS      TYPE  BUT0BK-BANKS,      "国
    BANKL      TYPE  BUT0BK-BANKL,      "銀行コード
    BANKN      TYPE  BUT0BK-BANKN,      "銀行口座
    BKONT      TYPE  STRING,            "管理キー
    KOINH      TYPE  BUT0BK-KOINH,      "口座名義人
    BKREF      TYPE  BUT0BK-BKREF,      "支払参照
    XBLCK      TYPE  STRING,            "共通ブロック
    LIFNR      TYPE  LFA1-LIFNR,        "仕入先コード"
    KUNNR      TYPE  LFA1-KUNNR,        "得意先コード
    DLGRP      TYPE  STRING,            "サービス業者価格決定グループ
    PROFS      TYPE  LFA1-PROFS,        "職業
    ZSABE      TYPE  LFB1-ZSABE,        "仕入先担当者
    BUKRS      TYPE  STRING,            "会社コード
    AKONT      TYPE  LFB1-AKONT,        "統制勘定
    FDGRV      TYPE  LFB1-FDGRV,        "CM 計画グループ
    ALTKN      TYPE  LFB1-ALTKN,        "旧勘定コード
    ZTERM      TYPE  LFB1-ZTERM,        "支払条件
    BUSAB      TYPE  STRING,            "記帳担当者
    WITHT      TYPE  STRING,            "源泉徴収税タイプコード
    WT_WITHCD  TYPE  STRING,            "源泉徴収税コード
    WT_SUBJCT  TYPE  STRING,            "源泉徴収課税対象
  END OF  TYP_FILE,
  TYP_I_FILE TYPE STANDARD TABLE OF TYP_FILE,

  BEGIN OF TYP_FILE_ERR,
    PARTNER    TYPE  BUT000-PARTNER,    "ビジネスパートナ番号
    RLTYP      TYPE  STRING,  "BP 役割の登録
    BU_GROUP   TYPE  STRING,  "グルーピング
    TITLE      TYPE  STRING,  "タイトル(敬称)
    NAME1      TYPE  STRING,  "名称
    NAME2      TYPE  STRING,  "名称 2
    SORT1      TYPE  STRING,  "検索語句1/2
    SORT2      TYPE  STRING,  "検索語句2/2
    STREET     TYPE  STRING,  "地名
    HOUSE_NUM1 TYPE  STRING,  "番地-号
    POST_CODE1 TYPE  STRING,  "郵便番号
    CITY1      TYPE  STRING,  "市区町村
    COUNTRY    TYPE  STRING,  "国コード
    REGION     TYPE  STRING,  "地域 (都道府県)
    TIME_ZONE  TYPE  STRING,  "タイムゾーン
    LANGU      TYPE  STRING,  "言語
    TEL_NUMBER TYPE  STRING,  "電話
    FAX_NUMBER TYPE  STRING,  "FAX
    SMTP_ADDR1 TYPE  STRING,  "E-Mail(1)
    SMTP_ADDR2 TYPE  STRING,  "E-Mail(2)
    SMTP_ADDR3 TYPE  STRING,  "E-Mail(3)
    LEGAL_ORG  TYPE  STRING,  "法的実体
    VBUND      TYPE  STRING,  "取引先
    BKVID      TYPE  STRING,  "ID
    BANKS      TYPE  STRING,  "国
    BANKL      TYPE  STRING,  "銀行コード
    BANKN      TYPE  STRING,  "銀行口座
    BKONT      TYPE  STRING,  "管理キー
    KOINH      TYPE  STRING,  "口座名義人
    BKREF      TYPE  STRING,  "支払参照
    XBLCK      TYPE  STRING,  "共通ブロック
    LIFNR      TYPE  STRING,  "仕入先コード"
    KUNNR      TYPE  STRING,  "得意先コード
    DLGRP      TYPE  STRING,  "サービス業者価格決定グループ
    PROFS      TYPE  STRING,  "職業
    ZSABE      TYPE  STRING,  "仕入先担当者
    BUKRS      TYPE  STRING,  "会社コード
    AKONT      TYPE  STRING,  "統制勘定
    FDGRV      TYPE  STRING,  "CM 計画グループ
    ALTKN      TYPE  STRING,  "旧勘定コード
    ZTERM      TYPE  STRING,  "支払条件
    BUSAB      TYPE  STRING,  "記帳担当者
    WITHT      TYPE  STRING,  "源泉徴収税タイプコード
    WT_WITHCD  TYPE  STRING,  "源泉徴収税コード
    WT_SUBJCT  TYPE  STRING,  "源泉徴収課税対象
    ID         TYPE  STRING,  "エラーメッセージのID(メッセージクラス+番号)
    MESSAGE    TYPE  STRING,  "エラーの内容を表示
  END OF  TYP_FILE_ERR,

  BEGIN OF TYP_BAK,
    PARTNER    TYPE  BUT000-PARTNER,    "ビジネスパートナ番号
    RLTYP      TYPE  STRING,  "BP 役割の登録
    BU_GROUP   TYPE  STRING,  "グルーピング
    TITLE      TYPE  STRING,  "タイトル(敬称)
    NAME1      TYPE  STRING,  "名称
    NAME2      TYPE  STRING,  "名称 2
    SORT1      TYPE  STRING,  "検索語句1/2
    SORT2      TYPE  STRING,  "検索語句2/2
    STREET     TYPE  STRING,  "地名
    HOUSE_NUM1 TYPE  STRING,  "番地-号
    POST_CODE1 TYPE  STRING,  "郵便番号
    CITY1      TYPE  STRING,  "市区町村
    COUNTRY    TYPE  STRING,  "国コード
    REGION     TYPE  STRING,  "地域 (都道府県)
    TIME_ZONE  TYPE  STRING,  "タイムゾーン
    LANGU      TYPE  STRING,  "言語
    TEL_NUMBER TYPE  STRING,  "電話
    FAX_NUMBER TYPE  STRING,  "FAX
    SMTP_ADDR1 TYPE  STRING,  "E-Mail(1)
    SMTP_ADDR2 TYPE  STRING,  "E-Mail(2)
    SMTP_ADDR3 TYPE  STRING,  "E-Mail(3)
    LEGAL_ORG  TYPE  STRING,  "法的実体
    VBUND      TYPE  STRING,  "取引先
    BKVID      TYPE  STRING,  "ID
    BANKS      TYPE  STRING,  "国
    BANKL      TYPE  STRING,  "銀行コード
    BANKN      TYPE  STRING,  "銀行口座
    BKONT      TYPE  STRING,  "管理キー
    KOINH      TYPE  STRING,  "口座名義人
    BKREF      TYPE  STRING,  "支払参照
    XBLCK      TYPE  STRING,  "共通ブロック
    LIFNR      TYPE  STRING,  "仕入先コード"
    KUNNR      TYPE  STRING,  "得意先コード
    DLGRP      TYPE  STRING,  "サービス業者価格決定グループ
    PROFS      TYPE  STRING,  "職業
    ZSABE      TYPE  STRING,  "仕入先担当者
    BUKRS      TYPE  STRING,  "会社コード
    AKONT      TYPE  STRING,  "統制勘定
    FDGRV      TYPE  STRING,  "CM 計画グループ
    ALTKN      TYPE  STRING,  "旧勘定コード
    ZTERM      TYPE  STRING,  "支払条件
    BUSAB      TYPE  STRING,  "記帳担当者
    WITHT      TYPE  STRING,  "源泉徴収税タイプコード
    WT_WITHCD  TYPE  STRING,  "源泉徴収税コード
    WT_SUBJCT  TYPE  STRING,  "源泉徴収課税対象
  END OF  TYP_BAK,

  BEGIN OF TYP_MSG,
    COL1 TYPE STRING,
    COL2 TYPE STRING,
    COL3 TYPE STRING,
  END OF TYP_MSG,
  TYP_BDCMSGCOLL TYPE STANDARD TABLE OF BDCMSGCOLL,

  BEGIN OF TYP_CHECK,
    KEY01 TYPE ZCAT_MA001-KEY01,      "検索キー1
    NUMB  TYPE ZCAT_MA001-NUMB,       "ABAP: 現在の選択番号
    LOW   TYPE ZCAT_MA001-LOW,        "LOW
    HIGH  TYPE ZCAT_MA001-HIGH,       "HIGH
  END OF TYP_CHECK,
  TYP_BAPIRET TYPE STANDARD TABLE OF BAPIRET2,

* 電子メールアドレス
  BEGIN OF TYP_EMAIL,
    CONSNUMBER TYPE ADR6-CONSNUMBER,            "連続番号
    SMTP_ADDR  TYPE ADR6-SMTP_ADDR,             "電子メールアドレス
  END OF TYP_EMAIL,

* 銀行詳細
  BEGIN OF TYP_BUT0BK,
    BKVID TYPE BUT0BK-BKVID,                    "銀行詳細 ID
  END OF TYP_BUT0BK.

*&---------------------------------------------------------------------*
*                         内部テーブル定義
*&---------------------------------------------------------------------*
DATA:
  I_BAK     TYPE STANDARD TABLE OF TYP_BAK,       "バックアップファイル作成
  I_ERR     TYPE STANDARD TABLE OF TYP_FILE_ERR,  "エラーファイル
  I_RFILE   TYPE STANDARD TABLE OF TYP_MSG,       "処理結果情報ファイル
  I_FILE    TYPE STANDARD TABLE OF TYP_FILE,      "インプットファイル
  I_CHECK   TYPE STANDARD TABLE OF TYP_CHECK,     "必須項目チェック
  I_MSG     TYPE STANDARD TABLE OF TYP_MSG,
  I_BDCDATA TYPE STANDARD TABLE OF BDCDATA,
  I_MESSTAB TYPE STANDARD TABLE OF BDCMSGCOLL,
  H_CHECK   TYPE TYP_CHECK.                       "必須項目チェック

*&---------------------------------------------------------------------*
*                         変数定義
*&---------------------------------------------------------------------*
DATA:
  G_NAME  TYPE STRING,
  G_EFILE TYPE RLGRAP-FILENAME,             " エラーファイル名
  G_BFILE TYPE RLGRAP-FILENAME,             " バックアップファイル名
  G_DO    TYPE I,                           " 処理件数
  G_OK    TYPE I,                           " 正常件数
  G_ERR   TYPE I.                           " エラー件数

*&---------------------------------------------------------------------*
*                         選択画面定義
*&---------------------------------------------------------------------*
SELECTION-SCREEN  BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.
PARAMETERS:  P_LOGIN RADIOBUTTON GROUP RB1 DEFAULT  'X' USER-COMMAND U1."登録
PARAMETERS:  P_UPDATE RADIOBUTTON GROUP RB1.  "変更
PARAMETERS:  P_RE     RADIOBUTTON GROUP RB1.  "登録/変更(インターフェースファイル取込用)
SELECTION-SCREEN  END OF BLOCK BL1 .

PARAMETERSP_IFILE TYPE RLGRAP-FILENAME."インプットファイル名
PARAMETERSP_RFILE TYPE RLGRAP-FILENAME ."処理結果ファイル名

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN  BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-002.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:  P_SERVE RADIOBUTTON GROUP RB2 USER-COMMAND U2."サーバー
SELECTION-SCREEN COMMENT 3(6TEXT-017.
SELECTION-SCREEN COMMENT 12(20TEXT-028.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:  P_LOCAL RADIOBUTTON GROUP RB2  DEFAULT  'X'"ローカル
SELECTION-SCREEN COMMENT 3(6TEXT-018.
SELECTION-SCREEN COMMENT 12(20TEXT-029.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN  END OF BLOCK BL2.

SELECTION-SCREEN  BEGIN OF BLOCK BL3 WITH FRAME TITLE TEXT-030.
PARAMETERS:CB_TSTCK AS CHECKBOX DEFAULT 'X'."テスト実行
PARAMETERS:CB_HEAD AS CHECKBOX DEFAULT  'X'."ヘッダ行あり
SELECTION-SCREEN  END OF BLOCK BL3.

*&---------------------------------------------------------------------*
*                           INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.

* 初期化処理
  PERFORM FRM_INIT_DATA.

*&---------------------------------------------------------------------*
*&  AT SELECTION-SCREEN ON VALUE-REQUEST
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_IFILE.  " インプットファイル名
  IF P_LOCAL =  'X' .
    PERFORM FRM_FILENAME_GET CHANGING P_IFILE.
  ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_RFILE.  " 処理結果ファイル名
  IF P_LOCAL =  'X' .
    PERFORM FRM_FILENAME_GET_O CHANGING P_RFILE.
  ENDIF.

*&---------------------------------------------------------------------*
*                           AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.

  PERFORM FRM_INPUT_CH.

*&---------------------------------------------------------------------*
*                           AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.

* 選択画面のチェック
  PERFORM  FRM_SCREEN_CHECK.

*&---------------------------------------------------------------------*
*&  メイン処理
*&---------------------------------------------------------------------*
START-OF-SELECTION.

* 入力チェック
  PERFORM FRM_INPUT_CHECK.

* ファイルアップロード
  PERFORM  FRM_UPLOAD_DATA.

* バッチインプット
  PERFORM  FRM_BAPI_PROCESS.

* 帳票結果とファイル出力
  PERFORM  FRM_RESULT_PROCESS.

*&---------------------------------------------------------------------*
*&  TOP-OF-PAGE
*&---------------------------------------------------------------------*
TOP-OF-PAGE.

  PERFORM FRM_TOP_PAGE.

*&---------------------------------------------------------------------*
*& Form INPUT_CHECK
*&---------------------------------------------------------------------*
FORM FRM_INPUT_CHECK .

  DATA:
    L_H               TYPE STRING,
    L_NAME            TYPE STRING,
    L_IFILENAME_SPLIT TYPE RLGRAP-FILENAME,
    L_IFILEPATH_SPLIT TYPE RLGRAP-FILENAME,
    L_PATH            TYPE STRING.

*ファイルオプションのチェック
  IF P_SERVE =  'X'  AND SY-BATCH =  SPACE"サーバー
    MESSAGE S007(ZAC001DISPLAY LIKE C_TYP_E.
    LEAVE LIST-PROCESSING.
  ENDIF.

*インプットファイルパス分割処理
  L_PATH P_IFILE.
  PERFORM FRM_SPLIT_PATH USING L_PATH
                      CHANGING L_IFILENAME_SPLIT
                               L_IFILEPATH_SPLIT .

  SPLIT L_IFILENAME_SPLIT  AT '.' INTO L_NAME L_H."インプットファイル名
  G_NAME L_IFILENAME_SPLIT.
*エラーファイル名作成
  CONCATENATE L_IFILEPATH_SPLIT L_NAME '_' 'ERR.TXT' INTO G_EFILE.
*バックアップファイル名作成
  CONCATENATE L_IFILEPATH_SPLIT L_NAME '.BAK' INTO G_BFILE.
*処理結果ファイル名作成
  IF P_RFILE IS INITIAL AND P_IFILE IS NOT INITIAL.
    CONCATENATE L_IFILEPATH_SPLIT L_NAME '_' SY-DATUM SY-UZEIT '.LOG'
           INTO P_RFILE.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILENAME_GET
*&---------------------------------------------------------------------*
*&       インプットファイル名
*&---------------------------------------------------------------------*
FORM FRM_FILENAME_GET  CHANGING O_IFILE.

  DATA:
    LI_FILE TYPE  FILETABLE,        "ファイル名一覧格納
    LH_FILE LIKE  LINE OF LI_FILE "ヘッダ
    L_RC    TYPE  I,                "結果
    L_TITLE TYPE  STRING.           "WINDOW TITLE

  L_TITLE TEXT-003.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE            L_TITLE
    CHANGING
      FILE_TABLE              LI_FILE
      RC                      L_RC
    EXCEPTIONS
      FILE_OPEN_DIALOG_FAILED 1
      CNTL_ERROR              2
      ERROR_NO_GUI            3
      NOT_SUPPORTED_BY_GUI    4
      OTHERS                  5.
  CASE SY-SUBRC.
    WHEN 0.
      IF L_RC < 0.
      ELSE.
        READ TABLE LI_FILE INTO LH_FILE INDEX 1.
        O_IFILE LH_FILE-FILENAME.
      ENDIF.
    WHEN OTHERS.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*&       ファイルアップロード
*&---------------------------------------------------------------------*
FORM FRM_UPLOAD_DATA .

* ファイルの保存場所によってアップロード方法を変える
  IF SY-BATCH IS NOT INITIAL.

    PERFORM FRM_UPLOAD_SERVER_DATA.          " サーバからデータをUL

  ELSEIF P_LOCAL C_CHK.

    PERFORM FRM_UPLOAD_LOCAL_DATA.           " ローカルからデータをUL

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_SERVER_DATA
*&---------------------------------------------------------------------*
*& サーバからデータをUL
*&---------------------------------------------------------------------*
FORM FRM_UPLOAD_SERVER_DATA .
  DATA :
    LH_SFILE TYPE TYP_SFILE,
    LI_SFILE TYPE STANDARD TABLE OF TYP_SFILE.
  DATA LH_FILE TYPE TYP_FILE.


*----- 入力ファイル読込
  OPEN DATASET P_IFILE FOR INPUT IN TEXT MODE
                           WITH SMART LINEFEED
                           ENCODING UTF-IGNORING CONVERSION ERRORS
                           SKIPPING BYTE-ORDER MARK.

  DO.
    CLEAR LH_SFILE.
    READ DATASET P_IFILE INTO LH_SFILE-FIELD.
    IF SY-SUBRC <> 0.
      EXIT.
    ELSE.
      APPEND LH_SFILE TO LI_SFILE.
    ENDIF.
  ENDDO.

  IF LI_SFILE IS INITIAL.
    MESSAGE E009(ZAC001WITH G_NAME.
*   入力ファイルの読込でエラーが発生しました
  ENDIF.
*----- ファイルクローズ(UNIX FILE)
  CLOSE DATASET P_IFILE.

*タブで区切り編集
  CLEAR LH_SFILE.
  LOOP AT LI_SFILE INTO LH_SFILE.
    SPLIT LH_SFILE-FIELD
       AT C_TAB
     INTO LH_FILE-PARTNER      "ビジネスパートナ番号"
          LH_FILE-RLTYP        "BP 役割の登録
          LH_FILE-BU_GROUP     "グルーピング
          LH_FILE-TITLE        "タイトル(敬称)
          LH_FILE-NAME1        "名称
          LH_FILE-NAME2        "名称 2
          LH_FILE-SORT1        "検索語句1/2
          LH_FILE-SORT2        "検索語句2/2
          LH_FILE-STREET       "地名
          LH_FILE-HOUSE_NUM1   "番地-号
          LH_FILE-POST_CODE1   "郵便番号
          LH_FILE-CITY1        "市区町村
          LH_FILE-COUNTRY      "国コード
          LH_FILE-REGION       "地域 (都道府県)
          LH_FILE-TIME_ZONE    "タイムゾーン
          LH_FILE-LANGU        "言語
          LH_FILE-TEL_NUMBER   "電話
          LH_FILE-FAX_NUMBER   "FAX
          LH_FILE-SMTP_ADDR1   "E-Mail(1)
          LH_FILE-SMTP_ADDR2   "E-Mail(2)
          LH_FILE-SMTP_ADDR3   "E-Mail(3)
          LH_FILE-LEGAL_ORG    "法的実体
          LH_FILE-VBUND        "取引先
          LH_FILE-BKVID        "ID
          LH_FILE-BANKS        "国
          LH_FILE-BANKL        "銀行コード
          LH_FILE-BANKN        "銀行口座
          LH_FILE-BKONT        "管理キー
          LH_FILE-KOINH        "口座名義人
          LH_FILE-BKREF        "支払参照
          LH_FILE-XBLCK        "共通ブロック
          LH_FILE-LIFNR        "仕入先コード"
          LH_FILE-KUNNR        "得意先コード
          LH_FILE-DLGRP        "サービス業者価格決定グループ
          LH_FILE-PROFS        "職業
          LH_FILE-ZSABE        "仕入先担当者
          LH_FILE-BUKRS        "会社コード
          LH_FILE-AKONT        "統制勘定
          LH_FILE-FDGRV        "CM 計画グループ
          LH_FILE-ALTKN        "旧勘定コード
          LH_FILE-ZTERM        "支払条件
          LH_FILE-BUSAB        "記帳担当者
          LH_FILE-WITHT        "源泉徴収税タイプコード
          LH_FILE-WT_WITHCD    "源泉徴収税コード
          LH_FILE-WT_SUBJCT.    "源泉徴収課税対象

    APPEND LH_FILE TO I_FILE .
  ENDLOOP.

*件数の判断
  PERFORM FRM_SPLIT_FILE_ACOUNT USING I_FILE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_LOCAL_DATA
*&---------------------------------------------------------------------*
*& ローカルからデータをUL
*&---------------------------------------------------------------------*
FORM FRM_UPLOAD_LOCAL_DATA .

  DATA L_FNAME TYPE STRING.


  L_FNAME  P_IFILE.
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      FILENAME                L_FNAME  " ファイル名
      FILETYPE                C_TYPE   " タイプ'ASC'
      HAS_FIELD_SEPARATOR     C_CHK    " X: タブ区切り
    TABLES
      DATA_TAB                I_FILE   " 入力データ
    EXCEPTIONS
      FILE_OPEN_ERROR         1
      FILE_READ_ERROR         2
      NO_BATCH                3
      GUI_REFUSE_FILETRANSFER 4
      INVALID_TYPE            5
      NO_AUTHORITY            6
      UNKNOWN_ERROR           7
      BAD_DATA_FORMAT         8
      HEADER_NOT_ALLOWED      9
      SEPARATOR_NOT_ALLOWED   10
      HEADER_TOO_LONG         11
      UNKNOWN_DP_ERROR        12
      ACCESS_DENIED           13
      DP_OUT_OF_MEMORY        14
      DISK_FULL               15
      DP_TIMEOUT              16
      OTHERS                  17.

  IF SY-SUBRC <> 0.
    MESSAGE S009(ZAC001WITH G_NAME DISPLAY LIKE C_TYP_E.
    LEAVE LIST-PROCESSING.
  ENDIF.

*件数の判断
  PERFORM FRM_SPLIT_FILE_ACOUNT  USING I_FILE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SPLIT_FILE_ACOUNT
*&---------------------------------------------------------------------*
*& 件数計算なだ
*&---------------------------------------------------------------------*
FORM FRM_SPLIT_FILE_ACOUNT USING    I_FILE TYPE TYP_I_FILE.

  DATA  LH_BAK TYPE TYP_BAK.
  DATA  LH_FILE TYPE TYP_FILE.
  DATA  LH_ERR TYPE TYP_FILE_ERR.


* BAKファイル作成用内部テーブルの保持
  LOOP AT I_FILE INTO LH_FILE.
    MOVE-CORRESPONDING LH_FILE TO LH_BAK.
    APPEND LH_BAK TO I_BAK.
  ENDLOOP.

  IF CB_HEAD IS NOT INITIAL."ヘッダ行あり
* エラーファイルヘッダ作成
    READ TABLE I_BAK INTO LH_BAK INDEX 1.
    LH_ERR-ID      TEXT-022.
    LH_ERR-MESSAGE TEXT-023.
    MOVE-CORRESPONDING LH_BAK TO LH_ERR.
    APPEND LH_ERR TO I_ERR.
* インプットファイルヘッダ削除
    DELETE I_FILE INDEX 1.
  ENDIF.

  CLEAR G_DO.
  G_DO LINESI_FILE  ).

*----- 対象データが0件の場合
  IF G_DO 0.
    IF SY-BATCH IS INITIAL.
      MESSAGE S010 DISPLAY LIKE 'E'.
*   処理対象件数は0件でした
      LEAVE LIST-PROCESSING.
    ELSE.
      MESSAGE E010.
    ENDIF.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_CHECK
*&---------------------------------------------------------------------*
*&    データチェック
*&---------------------------------------------------------------------*
FORM FRM_DATA_CHECK  USING  PI_LH_FILE_BAK TYPE TYP_FILE
                            PI_LINE TYPE I
                   CHANGING PO_LH_FILE TYPE TYP_FILE
                            PO_FLG TYPE CHAR1.
  DATA:
    L_BUKRS TYPE CHAR4,
    L_LIFNR TYPE CHAR10,
    LH_LFB1 TYPE LFB1,
    LH_ERR  TYPE TYP_FILE_ERR,
    LH_MSG  TYPE TYP_MSG.

  CLEAR PO_FLG.
*  IF PI_LH_FILE-LIFNR IS INITIAL.
*    PO_FLG  = 'X'.
*
*    CLEAR LH_MSG.
*    LH_MSG-COL1 = PI_LINE.
*    MESSAGE S030 WITH TEXT-031 INTO LH_MSG-COL3.
*    CONCATENATE 'ZAC001' '030' INTO LH_MSG-COL2 SEPARATED BY SPACE.
*    APPEND LH_MSG TO I_MSG.
*
**エラーファイル
*    CLEAR LH_ERR.
*    MOVE-CORRESPONDING PI_LH_FILE TO LH_ERR.
*    LH_ERR-ID = LH_MSG-COL2.
*    LH_ERR-MESSAGE = LH_MSG-COL3.
*    APPEND LH_ERR TO I_ERR.
*  ENDIF.

* 登録
  IF P_LOGIN IS NOT INITIAL.
*   登録のチェック
    PERFORM FRM_CHECK_INSERT USING PI_LH_FILE_BAK
                                   PI_LINE
                          CHANGING PO_LH_FILE
                                   PO_FLG.
* 変更
  ELSEIF P_UPDATE IS NOT INITIAL.
*   変更のチェック
    PERFORM FRM_CHECK_UPDATE USING PI_LH_FILE_BAK
                                   PI_LINE
                          CHANGING PO_LH_FILE
                                   PO_FLG.
* 登録/変更(インターフェースファイル取込用)
  ELSE.
*   ビジネスパートナー取得
    CLEAR L_LIFNR.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  PO_LH_FILE-LIFNR
      IMPORTING
        OUTPUT L_LIFNR.

*   入力ファイルの仕入先コードの存在確認を行う(仕入先マスタ登録/変更 判断用)
    SELECT SINGLE BUKRS
      INTO L_BUKRS
      FROM LFB1
     WHERE LIFNR L_LIFNR.  "仕入先コード"
    IF SY-SUBRC <> 0.
*     登録のチェック
      PERFORM FRM_CHECK_INSERT USING PI_LH_FILE_BAK
                                     PI_LINE
                            CHANGING PO_LH_FILE
                                     PO_FLG.
    ELSE.
      IF L_BUKRS <> PO_LH_FILE-BUKRS.
*       エラーメッセージ編集
        CLEAR LH_MSG.
        LH_MSG-COL1 PI_LINE.
        MESSAGE S174 WITH PO_LH_FILE-LIFNR L_BUKRS INTO LH_MSG-COL3.
        CONCATENATE 'ZAC001' '174' INTO LH_MSG-COL2 SEPARATED BY SPACE.
        APPEND LH_MSG TO I_MSG.

*       エラーファイル
        CLEAR LH_ERR.
        MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
        LH_ERR-ID LH_MSG-COL2.
        LH_ERR-MESSAGE LH_MSG-COL3.
        APPEND LH_ERR TO I_ERR.

        PO_FLG =  'X'.
        RETURN.
      ELSE.
*       変更のチェック
        PERFORM FRM_CHECK_UPDATE USING PI_LH_FILE_BAK
                                       PI_LINE
                              CHANGING PO_LH_FILE
                                       PO_FLG.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_INSERT
*&---------------------------------------------------------------------*
*& 登録のチェック
*&---------------------------------------------------------------------*
FORM FRM_CHECK_INSERT USING PI_LH_FILE_BAK TYPE TYP_FILE
                            PI_LINE    TYPE I
                   CHANGING PO_LH_FILE TYPE TYP_FILE
                            PO_FLG     TYPE CHAR1.

  DATALH_CHECK TYPE TYP_CHECK,       "必須項目チェック
        LH_ERR   TYPE TYP_FILE_ERR,
        LH_MSG   TYPE TYP_MSG,
        L_BUKRS  TYPE CHAR4,
        L_LIFNR  TYPE LFA1-LIFNR,
        L_SAKNR  TYPE SKB1-SAKNR.     "G/L 勘定コード

  FIELD-SYMBOLS <LFS_FIELD> TYPE ANY.

* インプットデータの必須項目チェック
  LOOP AT I_CHECK INTO H_CHECK WHERE KEY01 PO_LH_FILE-RLTYP.
    ASSIGN COMPONENT H_CHECK-NUMB OF STRUCTURE PO_LH_FILE TO <LFS_FIELD>.
    IF H_CHECK-LOW C_REQ
       AND <LFS_FIELD> IS INITIAL
       OR  <LFS_FIELD> C_SLASH ).
*     エラーメッセージ編集
      CLEAR LH_MSG.
      LH_MSG-COL1 PI_LINE.
      MESSAGE S163 WITH PO_LH_FILE-RLTYP H_CHECK-HIGH INTO LH_MSG-COL3.
      CONCATENATE 'ZAC001' '163' INTO LH_MSG-COL2 SEPARATED BY SPACE.
      APPEND LH_MSG TO I_MSG.

*     エラーファイル
      CLEAR LH_ERR.
      MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
      LH_ERR-ID LH_MSG-COL2.
      LH_ERR-MESSAGE LH_MSG-COL3.
      APPEND LH_ERR TO I_ERR.

      PO_FLG =  'X'.
      RETURN.
    ENDIF.

    IF H_CHECK-LOW C_MIN.
      <LFS_FIELD> C_SLASH.
    ENDIF.
  ENDLOOP.

* 存在チェック
* 仕入先マスタ存在チェック
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  PO_LH_FILE-LIFNR
    IMPORTING
      OUTPUT L_LIFNR.

  SELECT BUKRS UP TO ROWS
    FROM LFB1
    INTO L_BUKRS
   WHERE LIFNR L_LIFNR.
  ENDSELECT.
  IF SY-SUBRC 0.
    IF L_BUKRS PO_LH_FILE-BUKRS.
*     エラーメッセージ編集
      CLEAR LH_MSG.
      LH_MSG-COL1 PI_LINE.
      MESSAGE S158 WITH PO_LH_FILE-LIFNR PO_LH_FILE-BUKRS SPACE INTO LH_MSG-COL3.
      CONCATENATE 'ZAC001' '158' INTO LH_MSG-COL2 SEPARATED BY SPACE.
      APPEND LH_MSG TO I_MSG.

*     エラーファイル
      CLEAR LH_ERR.
      MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
      LH_ERR-ID LH_MSG-COL2.
      LH_ERR-MESSAGE LH_MSG-COL3.
      APPEND LH_ERR TO I_ERR.

      PO_FLG =  'X'.
      RETURN.
    ELSE.
*     エラーメッセージ編集
      CLEAR LH_MSG.
      LH_MSG-COL1 PI_LINE.
      MESSAGE S174 WITH PO_LH_FILE-LIFNR L_BUKRS INTO LH_MSG-COL3.
      CONCATENATE 'ZAC001' '174' INTO LH_MSG-COL2 SEPARATED BY SPACE.
      APPEND LH_MSG TO I_MSG.

*     エラーファイル
      CLEAR LH_ERR.
      MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
      LH_ERR-ID LH_MSG-COL2.
      LH_ERR-MESSAGE LH_MSG-COL3.
      APPEND LH_ERR TO I_ERR.

      PO_FLG =  'X'.
      RETURN.
    ENDIF.
  ENDIF.
* 会社コードの存在チェック
  SELECT COUNT(*)
    FROM T001
   WHERE BUKRS PO_LH_FILE-BUKRS.
  IF SY-SUBRC <> 0.
*   エラーメッセージ編集
    CLEAR LH_MSG.
    LH_MSG-COL1 PI_LINE.
    MESSAGE S056 WITH PO_LH_FILE-BUKRS SPACE INTO LH_MSG-COL3.
    CONCATENATE 'ZAC001' '056' INTO LH_MSG-COL2 SEPARATED BY SPACE.
    APPEND LH_MSG TO I_MSG.

*   エラーファイル
    CLEAR LH_ERR.
    MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
    LH_ERR-ID LH_MSG-COL2.
    LH_ERR-MESSAGE LH_MSG-COL3.
    APPEND LH_ERR TO I_ERR.

    PO_FLG =  'X'.
    RETURN.
  ENDIF.

* 会社コードの権限チェック
  L_BUKRS PO_LH_FILE-BUKRS.

  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
           ID 'BUKRS' FIELD L_BUKRS
           ID 'ACTVT' FIELD '01'.

  IF SY-SUBRC <> 0.
*   エラーメッセージ編集
    CLEAR LH_MSG.
    LH_MSG-COL1 PI_LINE.
    MESSAGE S011 WITH L_BUKRS SPACE INTO LH_MSG-COL3.
    CONCATENATE 'ZAC001' '011' INTO LH_MSG-COL2 SEPARATED BY SPACE.
    APPEND LH_MSG TO I_MSG.

*   エラーファイル
    CLEAR LH_ERR.
    MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
    LH_ERR-ID LH_MSG-COL2.
    LH_ERR-MESSAGE LH_MSG-COL3.
    APPEND LH_ERR TO I_ERR.

    PO_FLG =  'X'.
    RETURN.
  ENDIF.

* BP 役割の登録
  SELECT COUNT(*)
    FROM TB003
   WHERE ROLE PO_LH_FILE-RLTYP
     AND XSUPPRESS SPACE.
  IF SY-SUBRC <> 0.
*   エラーメッセージ編集
    CLEAR LH_MSG.
    LH_MSG-COL1 PI_LINE.
    MESSAGE S160 WITH PO_LH_FILE-RLTYP SPACE INTO LH_MSG-COL3.
    CONCATENATE 'ZAC001' '160' INTO LH_MSG-COL2 SEPARATED BY SPACE.
    APPEND LH_MSG TO I_MSG.

*   エラーファイル
    CLEAR LH_ERR.
    MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
    LH_ERR-ID LH_MSG-COL2.
    LH_ERR-MESSAGE LH_MSG-COL3.
    APPEND LH_ERR TO I_ERR.

    PO_FLG =  'X'.
    RETURN.
  ENDIF.

* グルーピング
  SELECT COUNT(*)
    FROM TB001
   WHERE BU_GROUP PO_LH_FILE-BU_GROUP.
  IF SY-SUBRC <> 0.
*   エラーメッセージ編集
    CLEAR LH_MSG.
    LH_MSG-COL1 PI_LINE.
    MESSAGE S161 WITH PO_LH_FILE-BU_GROUP SPACE INTO LH_MSG-COL3.
    CONCATENATE 'ZAC001' '161' INTO LH_MSG-COL2 SEPARATED BY SPACE.
    APPEND LH_MSG TO I_MSG.

*   エラーファイル
    CLEAR LH_ERR.
    MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
    LH_ERR-ID LH_MSG-COL2.
    LH_ERR-MESSAGE LH_MSG-COL3.
    APPEND LH_ERR TO I_ERR.

    PO_FLG =  'X'.
    RETURN.
  ENDIF.

* 勘定コードの存在チェック
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  PO_LH_FILE-AKONT
    IMPORTING
      OUTPUT L_SAKNR.

  SELECT COUNT(*)
    FROM SKB1
   WHERE BUKRS PO_LH_FILE-BUKRS
     AND SAKNR L_SAKNR.
  IF SY-SUBRC <> 0.
*   エラーメッセージ編集
    CLEAR LH_MSG.
    LH_MSG-COL1 PI_LINE.
    MESSAGE S178 WITH PO_LH_FILE-BUKRS PO_LH_FILE-AKONT SPACE INTO LH_MSG-COL3.
    CONCATENATE 'ZAC001' '178' INTO LH_MSG-COL2 SEPARATED BY SPACE.
    APPEND LH_MSG TO I_MSG.

*   エラーファイル
    CLEAR LH_ERR.
    MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
    LH_ERR-ID LH_MSG-COL2.
    LH_ERR-MESSAGE LH_MSG-COL3.
    APPEND LH_ERR TO I_ERR.

    PO_FLG =  'X'.
    RETURN.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_UPDATE
*&---------------------------------------------------------------------*
*& 変更のチェック
*&---------------------------------------------------------------------*
FORM FRM_CHECK_UPDATE USING PI_LH_FILE_BAK TYPE TYP_FILE
                            PI_LINE    TYPE I
                   CHANGING PO_LH_FILE TYPE TYP_FILE
                            PO_FLG     TYPE CHAR1.

  DATALH_CHECK  TYPE TYP_CHECK,       "必須項目チェック
        LH_ERR    TYPE TYP_FILE_ERR,
        LH_MSG    TYPE TYP_MSG,
        L_BUKRS   TYPE CHAR4,
        L_GUID    TYPE CVI_VEND_LINK-PARTNER_GUID,
        L_PARTNER TYPE BUT000-PARTNER,
        L_RLTYP   TYPE BUT100-RLTYP,
        L_LIFNR   TYPE LFA1-LIFNR,
        L_BUGRP   TYPE BUT000-BU_GROUP"ビジネスパートナグルーピング
        L_SAKNR   TYPE SKB1-SAKNR.     "G/L 勘定コード

  FIELD-SYMBOLS <LFS_FIELD> TYPE ANY.

* インプットデータの必須項目チェック
  LOOP AT I_CHECK INTO H_CHECK WHERE KEY01 PO_LH_FILE-RLTYP.
    ASSIGN COMPONENT H_CHECK-NUMB OF STRUCTURE PO_LH_FILE TO <LFS_FIELD>.
    IF H_CHECK-LOW C_REQ
       AND <LFS_FIELD> IS INITIAL.
*     エラーメッセージ編集
      CLEAR LH_MSG.
      LH_MSG-COL1 PI_LINE.
      MESSAGE S163 WITH PO_LH_FILE-RLTYP H_CHECK-HIGH INTO LH_MSG-COL3.
      CONCATENATE 'ZAC001' '163' INTO LH_MSG-COL2 SEPARATED BY SPACE.
      APPEND LH_MSG TO I_MSG.

*     エラーファイル
      CLEAR LH_ERR.
      MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
      LH_ERR-ID LH_MSG-COL2.
      LH_ERR-MESSAGE LH_MSG-COL3.
      APPEND LH_ERR TO I_ERR.

      PO_FLG =  'X'.
      RETURN.
    ENDIF.
  ENDLOOP.

* 存在チェック
* 仕入先マスタ存在チェック
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  PO_LH_FILE-LIFNR
    IMPORTING
      OUTPUT L_LIFNR.

  SELECT BUKRS UP TO ROWS
    INTO L_BUKRS
    FROM LFB1
   WHERE LIFNR L_LIFNR.
  ENDSELECT.
  IF SY-SUBRC <> 0.
*   エラーメッセージ編集
    CLEAR LH_MSG.
    LH_MSG-COL1 PI_LINE.
    MESSAGE S159 WITH PO_LH_FILE-LIFNR PO_LH_FILE-BUKRS SPACE INTO LH_MSG-COL3.
    CONCATENATE 'ZAC001' '159' INTO LH_MSG-COL2 SEPARATED BY SPACE.
    APPEND LH_MSG TO I_MSG.

*   エラーファイル
    CLEAR LH_ERR.
    MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
    LH_ERR-ID LH_MSG-COL2.
    LH_ERR-MESSAGE LH_MSG-COL3.
    APPEND LH_ERR TO I_ERR.

    PO_FLG =  'X'.
    RETURN.
  ELSEIF L_BUKRS <> PO_LH_FILE-BUKRS.
*   エラーメッセージ編集
    CLEAR LH_MSG.
    LH_MSG-COL1 PI_LINE.
    MESSAGE S174 WITH PO_LH_FILE-LIFNR L_BUKRS INTO LH_MSG-COL3.
    CONCATENATE 'ZAC001' '174' INTO LH_MSG-COL2 SEPARATED BY SPACE.
    APPEND LH_MSG TO I_MSG.

*   エラーファイル
    CLEAR LH_ERR.
    MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
    LH_ERR-ID LH_MSG-COL2.
    LH_ERR-MESSAGE LH_MSG-COL3.
    APPEND LH_ERR TO I_ERR.

    PO_FLG =  'X'.
    RETURN.
  ENDIF.

* 会社コードの存在チェック
  SELECT COUNT(*)
    FROM T001
   WHERE BUKRS PO_LH_FILE-BUKRS.
  IF SY-SUBRC <> 0.
*   エラーメッセージ編集
    CLEAR LH_MSG.
    LH_MSG-COL1 PI_LINE.
    MESSAGE S056 WITH PO_LH_FILE-BUKRS SPACE INTO LH_MSG-COL3.
    CONCATENATE 'ZAC001' '056' INTO LH_MSG-COL2 SEPARATED BY SPACE.
    APPEND LH_MSG TO I_MSG.

*   エラーファイル
    CLEAR LH_ERR.
    MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
    LH_ERR-ID LH_MSG-COL2.
    LH_ERR-MESSAGE LH_MSG-COL3.
    APPEND LH_ERR TO I_ERR.

    PO_FLG =  'X'.
    RETURN.
  ENDIF.

* 会社コードの権限チェック
  L_BUKRS PO_LH_FILE-BUKRS.

  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
           ID 'BUKRS' FIELD L_BUKRS
           ID 'ACTVT' FIELD '02'.

  IF SY-SUBRC <> 0.
*   エラーメッセージ編集
    CLEAR LH_MSG.
    LH_MSG-COL1 PI_LINE.
    MESSAGE S011 WITH L_BUKRS SPACE INTO LH_MSG-COL3.
    CONCATENATE 'ZAC001' '011' INTO LH_MSG-COL2 SEPARATED BY SPACE.
    APPEND LH_MSG TO I_MSG.

*   エラーファイル
    CLEAR LH_ERR.
    MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
    LH_ERR-ID LH_MSG-COL2.
    LH_ERR-MESSAGE LH_MSG-COL3.
    APPEND LH_ERR TO I_ERR.

    PO_FLG =  'X'.
    RETURN.
  ENDIF.

* BP GUID取得
  SELECT PARTNER_GUID UP TO ROWS
    FROM CVI_VEND_LINK
    INTO L_GUID
   WHERE VENDOR L_LIFNR.
  ENDSELECT.

* ビジネスパートナ番号の取得
  SELECT PARTNER UP TO ROWS
    FROM BUT000
    INTO L_PARTNER
   WHERE PARTNER_GUID L_GUID.
  ENDSELECT.

* BP 役割の登録
  SELECT RLTYP UP TO ROWS
    INTO L_RLTYP
    FROM BUT100
   WHERE PARTNER L_PARTNER.
  ENDSELECT.
  IF SY-SUBRC 0
    AND L_RLTYP <> PO_LH_FILE-RLTYP.
    IF PO_LH_FILE-RLTYP <> C_SLASH.
*     エラーメッセージ編集
      CLEAR LH_MSG.
      LH_MSG-COL1 PI_LINE.
      MESSAGE S175 WITH PO_LH_FILE-LIFNR L_RLTYP INTO LH_MSG-COL3.
      CONCATENATE 'ZAC001' '175' INTO LH_MSG-COL2 SEPARATED BY SPACE.
      APPEND LH_MSG TO I_MSG.

*     エラーファイル
      CLEAR LH_ERR.
      MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
      LH_ERR-ID LH_MSG-COL2.
      LH_ERR-MESSAGE LH_MSG-COL3.
      APPEND LH_ERR TO I_ERR.

      PO_FLG =  'X'.
      RETURN.
    ELSE.
      PO_LH_FILE-RLTYP L_RLTYP.
    ENDIF.
  ENDIF.

* グルーピング
  SELECT SINGLE BU_GROUP
    INTO L_BUGRP
    FROM BUT000
   WHERE PARTNER  L_PARTNER.
  IF SY-SUBRC 0
    AND L_BUGRP <> PO_LH_FILE-BU_GROUP.
    IF PO_LH_FILE-BU_GROUP C_SLASH.
      PO_LH_FILE-BU_GROUP L_BUGRP.
    ELSE.

*   エラーメッセージ編集
      CLEAR LH_MSG.
      LH_MSG-COL1 PI_LINE.
      MESSAGE S176 WITH PO_LH_FILE-LIFNR L_BUGRP INTO LH_MSG-COL3.
      CONCATENATE 'ZAC001' '176' INTO LH_MSG-COL2 SEPARATED BY SPACE.
      APPEND LH_MSG TO I_MSG.

*   エラーファイル
      CLEAR LH_ERR.
      MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
      LH_ERR-ID LH_MSG-COL2.
      LH_ERR-MESSAGE LH_MSG-COL3.
      APPEND LH_ERR TO I_ERR.

      PO_FLG =  'X'.
      RETURN.
    ENDIF.
  ENDIF.

* 勘定コードの存在チェック
  IF PO_LH_FILE-AKONT <> C_SLASH.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  PO_LH_FILE-AKONT
      IMPORTING
        OUTPUT L_SAKNR.

    SELECT COUNT(*)
      FROM SKB1
     WHERE BUKRS PO_LH_FILE-BUKRS
       AND SAKNR L_SAKNR.
    IF SY-SUBRC <> 0.
*   エラーメッセージ編集
      CLEAR LH_MSG.
      LH_MSG-COL1 PI_LINE.
      MESSAGE S178 WITH PO_LH_FILE-BUKRS PO_LH_FILE-AKONT SPACE INTO LH_MSG-COL3.
      CONCATENATE 'ZAC001' '178' INTO LH_MSG-COL2 SEPARATED BY SPACE.
      APPEND LH_MSG TO I_MSG.

*   エラーファイル
      CLEAR LH_ERR.
      MOVE-CORRESPONDING PI_LH_FILE_BAK TO LH_ERR.
      LH_ERR-ID LH_MSG-COL2.
      LH_ERR-MESSAGE LH_MSG-COL3.
      APPEND LH_ERR TO I_ERR.

      PO_FLG =  'X'.
      RETURN.
    ENDIF.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FIELD_CHECK
*&---------------------------------------------------------------------*
*& インプットデータの必須項目チェック
*&---------------------------------------------------------------------*
FORM FRM_FIELD_CHECK .
* インプットデータの必須項目チェック
  REFRESH I_CHECK.
  SELECT KEY01       "検索キー1
         NUMB        "ABAP: 現在の選択番号
         LOW         "LOW
         HIGH        "HIGH
    FROM ZCAT_MA001
    INTO TABLE I_CHECK
   WHERE NAME  C_CHECK
     AND PRGNM SY-REPID.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_RESULT_PROCESS
*&---------------------------------------------------------------------*
*&     帳票結果出力とファイル出力
*&---------------------------------------------------------------------*
FORM FRM_RESULT_PROCESS .

*帳票結果出力
  PERFORM FRM_WRITE_RESULT.

*エラーファイルと処理結果ファイルの出力
  PERFORM FRM_OUPUT_FILE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_WRITE_RESULT
*&---------------------------------------------------------------------*
*&    帳票結果出力
*&---------------------------------------------------------------------*
FORM FRM_WRITE_RESULT .

  DATA L_OPTION TYPE STRING.
  DATA L_TEST TYPE STRING.
  DATA LH_MSG TYPE TYP_MSG.
  DATA LH_RFILE TYPE TYP_MSG.
  DATA L_Y TYPE CHAR4.
  DATA L_M TYPE CHAR2.
  DATA L_D TYPE CHAR2.
  DATA L_TIME TYPE STRING.
  DATA L_01 TYPE CHAR2.
  DATA L_02 TYPE CHAR2.
  DATA L_03 TYPE CHAR2.
  DATA L_TEXT TYPE STRING.
  DATA L_TITLE TYPE CHAR50.

  IF CB_TSTCK IS NOT INITIAL.
    L_TITLE TEXT-027.    "仕入先マスタ一括更新結果画面(テスト実行)
  ELSE.
    L_TITLE TEXT-020.    "仕入先マスタ一括更新結果画面
  ENDIF.

  G_OK  G_DO G_ERR."正常件数

  IF P_SERVE IS NOT INITIAL.
    L_OPTION TEXT-017."サーバー
  ELSE.
    L_OPTION TEXT-018."ローカル
  ENDIF.

  IF CB_TSTCK IS NOT INITIAL.
    L_TEST TEXT-019."テスト実行
  ENDIF.

  L_Y SY-DATUM+0(4).
  L_M SY-DATUM+4(2).
  L_D SY-DATUM+6(2).
  CONCATENATE L_Y L_M L_D INTO L_TEXT SEPARATED BY '/'.

  L_01 SY-UZEIT+0(2).
  L_02 SY-UZEIT+2(2).
  L_03 SY-UZEIT+4(2).
  CONCATENATE L_01 L_02 L_03 INTO L_TIME SEPARATED BY ':'.

  WRITE:50(50L_TITLE.            "仕入先マスタ一括更新結果画面
  WRITE:130 SY-DATUM.
  WRITE:145 SY-UZEIT.
  WRITE:155 SY-PAGNO.

  SKIP 2.
  WRITE:TEXT-005.                 "<実行条件>
  WRITE:/2 TEXT-006,24 P_IFILE.   "インプットファイル名
  WRITE:/2 TEXT-007,24 P_RFILE.   "処理結果ファイル名
  WRITE:/2 TEXT-009,24 L_OPTION.  "ファイルオプション
  WRITE:/2 TEXT-010,24 L_TEST.    "テスト実行

  SKIP.
  WRITETEXT-011.                 "<処理結果サマリ>
  WRITE:/2 TEXT-012,24 ':',G_DO.   "処理件数
  WRITE:/2 TEXT-013,24 ':',G_OK.   "正常件数
  WRITE:/2 TEXT-014,24 ':',G_ERR.  "エラー件数

  SKIP.
  WRITE:TEXT-015.                  "<処理結果>
  WRITE:/3   TEXT-021,             "行No.
         18  TEXT-022,             "メッセージID
         45  TEXT-023.             "メッセージ

*  SORT I_MSG BY COL1.
  LOOP AT I_MSG INTO LH_MSG.
    WRITE:/3 LH_MSG-COL1,
           18  LH_MSG-COL2,
           45  LH_MSG-COL3.
  ENDLOOP.


*処理結果情報ファイ編集
  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-026."<ヘッダ情報>
  LH_RFILE-COL2 L_TEXT.
  LH_RFILE-COL3 L_TIME.
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-005."<実行条件>
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-006."インプットファイル名
  LH_RFILE-COL2 P_IFILE.
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-007."処理結果ファイル名
  LH_RFILE-COL2 P_RFILE.
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-009."ファイルオプション
  LH_RFILE-COL2 L_OPTION.
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-010."テスト実行
  LH_RFILE-COL2 L_TEST.
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-011."<処理結果サマリ>
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-012."処理件数
  LH_RFILE-COL2 ':'.
  LH_RFILE-COL3 G_DO.
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-013."正常件数
  LH_RFILE-COL2 ':'.
  LH_RFILE-COL3 G_OK.
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-014."エラー件数
  LH_RFILE-COL2 ':'.
  LH_RFILE-COL3 G_ERR.
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-015."<処理結果>
  APPEND LH_RFILE TO I_RFILE.

  CLEAR LH_RFILE.
  LH_RFILE-COL1 TEXT-021.
  LH_RFILE-COL2 TEXT-022.
  LH_RFILE-COL3 TEXT-023.
  APPEND LH_RFILE TO I_RFILE.

  LOOP AT I_MSG INTO LH_MSG.
    CLEAR LH_RFILE.
    LH_RFILE-COL1 LH_MSG-COL1.
    LH_RFILE-COL2 LH_MSG-COL2.
    LH_RFILE-COL3 LH_MSG-COL3.
    APPEND LH_RFILE TO I_RFILE.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_OUPUT_FILE
*&---------------------------------------------------------------------*
*&       エラーファイルと処理結果ファイルの出力
*&---------------------------------------------------------------------*
FORM FRM_OUPUT_FILE .

  IF P_LOCAL IS INITIAL.

    PERFORM FRM_OUTPUT_SERVE.           " サーバファイル出力

  ELSE.

    PERFORM FRM_OUTPUT_LOCAL.           " ローカルファイル出力

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_SERVE
*&---------------------------------------------------------------------*
*&  サーバファイル出力
*&---------------------------------------------------------------------*
FORM FRM_OUTPUT_SERVE .

  DATA L_FILE TYPE STRING.
  DATA LH_RFILE TYPE TYP_MSG.
  DATA LH_ERR TYPE TYP_FILE_ERR.
  DATA LH_BAK TYPE TYP_BAK.
  DATA L_FLG TYPE CHAR1.
  DATA L_LINE TYPE I.


*-------------処理結果ファイルの出力
  OPEN DATASET P_RFILE FOR OUTPUT
                           IN TEXT MODE
                           ENCODING UTF-IGNORING CONVERSION ERRORS.
  IF SY-SUBRC <> 0.
    IF SY-BATCH IS INITIAL.
      MESSAGE S006(ZAC001DISPLAY LIKE C_TYP_E.
      LEAVE LIST-PROCESSING.
    ELSE.
      MESSAGE E006(ZAC001).
    ENDIF.
  ENDIF.

  LOOP AT I_RFILE INTO LH_RFILE.

    CONCATENATE LH_RFILE-COL1
                LH_RFILE-COL2
                LH_RFILE-COL3
           INTO L_FILE
           SEPARATED BY C_TAB.
    TRANSFER L_FILE TO P_RFILE.
  ENDLOOP.

  IF  L_FILE IS INITIAL.
    MESSAGE E012(ZAC001).
  ENDIF.

  CLOSE DATASET P_RFILE.

*-------------エラーファイル作成
*----- ファイルOPEN
  IF CB_HEAD IS NOT INITIAL."ヘッダ行あり
    DESCRIBE TABLE I_ERR  LINES  L_LINE.

    IF L_LINE > AND CB_TSTCK IS INITIAL.
      L_FLG  'X'.
    ENDIF.
  ELSE.
    IF CB_TSTCK IS INITIAL.
      L_FLG  'X'.
    ENDIF.
  ENDIF.

  IF L_FLG IS NOT INITIAL.
    OPEN DATASET G_EFILE FOR OUTPUT
                             IN TEXT MODE
                             ENCODING UTF-8.

    IF  SY-SUBRC <> 0.
      MESSAGE E012(ZAC001).
    ENDIF.

    LOOP AT I_ERR INTO LH_ERR.
      CLEAR L_FILE.
      CONCATENATE  LH_ERR-PARTNER      "ビジネスパートナ番号"
                   LH_ERR-RLTYP        "BP 役割の登録
                   LH_ERR-BU_GROUP     "グルーピング
                   LH_ERR-TITLE        "タイトル(敬称)
                   LH_ERR-NAME1        "名称
                   LH_ERR-NAME2        "名称 2
                   LH_ERR-SORT1        "検索語句1/2
                   LH_ERR-SORT2        "検索語句2/2
                   LH_ERR-STREET       "地名
                   LH_ERR-HOUSE_NUM1   "番地-号
                   LH_ERR-POST_CODE1   "郵便番号
                   LH_ERR-CITY1        "市区町村
                   LH_ERR-COUNTRY      "国コード
                   LH_ERR-REGION       "地域 (都道府県)
                   LH_ERR-TIME_ZONE    "タイムゾーン
                   LH_ERR-LANGU        "言語
                   LH_ERR-TEL_NUMBER   "電話
                   LH_ERR-FAX_NUMBER   "FAX
                   LH_ERR-SMTP_ADDR1   "E-Mail(1)
                   LH_ERR-SMTP_ADDR2   "E-Mail(2)
                   LH_ERR-SMTP_ADDR3   "E-Mail(3)
                   LH_ERR-LEGAL_ORG    "法的実体
                   LH_ERR-VBUND        "取引先
                   LH_ERR-BKVID        "ID
                   LH_ERR-BANKS        "国
                   LH_ERR-BANKL        "銀行コード
                   LH_ERR-BANKN        "銀行口座
                   LH_ERR-BKONT        "管理キー
                   LH_ERR-KOINH        "口座名義人
                   LH_ERR-BKREF        "支払参照
                   LH_ERR-XBLCK        "共通ブロック
                   LH_ERR-LIFNR        "仕入先コード
                   LH_ERR-KUNNR        "得意先コード
                   LH_ERR-DLGRP        "サービス業者価格決定グループ
                   LH_ERR-PROFS        "職業
                   LH_ERR-ZSABE        "仕入先担当者
                   LH_ERR-BUKRS        "会社コード
                   LH_ERR-AKONT        "統制勘定
                   LH_ERR-FDGRV        "CM 計画グループ
                   LH_ERR-ALTKN        "旧勘定コード
                   LH_ERR-ZTERM        "支払条件
                   LH_ERR-BUSAB        "記帳担当者
                   LH_ERR-WITHT        "源泉徴収税タイプコード
                   LH_ERR-WT_WITHCD    "源泉徴収税コード
                   LH_ERR-WT_SUBJCT    "源泉徴収課税対象
                   LH_ERR-ID           "
                   LH_ERR-MESSAGE      "
              INTO L_FILE SEPARATED BY C_TAB.

      TRANSFER L_FILE TO G_EFILE.
    ENDLOOP.

    CLOSE DATASET G_EFILE.
  ENDIF.

*-------------バックアップファイル作成
*----- ファイルOPEN
  OPEN DATASET G_BFILE FOR OUTPUT
                           IN TEXT MODE
                           ENCODING UTF-IGNORING CONVERSION ERRORS.

  IF  SY-SUBRC <> 0.
    MESSAGE E013(ZAC001).
  ENDIF.

  LOOP AT I_BAK INTO LH_BAK.
    CLEAR L_FILE.
    CONCATENATE  LH_BAK-PARTNER      "ビジネスパートナ番号"
                 LH_BAK-RLTYP        "BP 役割の登録
                 LH_BAK-BU_GROUP     "グルーピング
                 LH_BAK-TITLE        "タイトル(敬称)
                 LH_BAK-NAME1        "名称
                 LH_BAK-NAME2        "名称 2
                 LH_BAK-SORT1        "検索語句1/2
                 LH_BAK-SORT2        "検索語句2/2
                 LH_BAK-STREET       "地名
                 LH_BAK-HOUSE_NUM1   "番地-号
                 LH_BAK-POST_CODE1   "郵便番号
                 LH_BAK-CITY1        "市区町村
                 LH_BAK-COUNTRY      "国コード
                 LH_BAK-REGION       "地域 (都道府県)
                 LH_BAK-TIME_ZONE    "タイムゾーン
                 LH_BAK-LANGU        "言語
                 LH_BAK-TEL_NUMBER   "電話
                 LH_BAK-FAX_NUMBER   "FAX
                 LH_BAK-SMTP_ADDR1   "E-Mail(1)
                 LH_BAK-SMTP_ADDR2   "E-Mail(2)
                 LH_BAK-SMTP_ADDR3   "E-Mail(3)
                 LH_BAK-LEGAL_ORG    "法的実体
                 LH_BAK-VBUND        "取引先
                 LH_BAK-BKVID        "ID
                 LH_BAK-BANKS        "国
                 LH_BAK-BANKL        "銀行コード
                 LH_BAK-BANKN        "銀行口座
                 LH_BAK-BKONT        "管理キー
                 LH_BAK-KOINH        "口座名義人
                 LH_BAK-BKREF        "支払参照
                 LH_BAK-XBLCK        "共通ブロック
                 LH_BAK-LIFNR        "仕入先コード"
                 LH_BAK-KUNNR        "得意先コード
                 LH_BAK-DLGRP        "サービス業者価格決定グループ
                 LH_BAK-PROFS        "職業
                 LH_BAK-ZSABE        "仕入先担当者
                 LH_BAK-BUKRS        "会社コード
                 LH_BAK-AKONT        "統制勘定
                 LH_BAK-FDGRV        "CM 計画グループ
                 LH_BAK-ALTKN        "旧勘定コード
                 LH_BAK-ZTERM        "支払条件
                 LH_BAK-BUSAB        "記帳担当者
                 LH_BAK-WITHT        "源泉徴収税タイプコード
                 LH_BAK-WT_WITHCD    "源泉徴収税コード
                 LH_BAK-WT_SUBJCT    "源泉徴収課税対象
            INTO L_FILE SEPARATED BY C_TAB.

    TRANSFER L_FILE TO G_BFILE.
  ENDLOOP.

  CLOSE DATASET G_BFILE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_LOCAL
*&---------------------------------------------------------------------*
*&  ローカルファイル出力
*&---------------------------------------------------------------------*
FORM FRM_OUTPUT_LOCAL .
  DATA L_FLG TYPE CHAR1.
  DATA L_LINE TYPE I.


*-------------処理結果ファイルの出力
  PERFORM FRM_DOWNLOAD_FILE USING I_RFILE "処理結果ファイル
                                  P_RFILE "処理結果ファイル名
                         CHANGING L_FLG.
  IF L_FLG IS NOT INITIAL.
    MESSAGE S012(ZAC001DISPLAY LIKE C_TYP_E.
    LEAVE LIST-PROCESSING.
  ENDIF.

*-------------エラーファイル作成
  IF CB_HEAD IS NOT INITIAL."ヘッダ行あり
    DESCRIBE TABLE I_ERR  LINES  L_LINE.

    IF L_LINE > AND CB_TSTCK IS INITIAL.
      PERFORM FRM_DOWNLOAD_FILE USING I_ERR   "エラーファイル
                                      G_EFILE "エラーファイル名
                             CHANGING L_FLG.
      IF L_FLG IS NOT INITIAL.
        MESSAGE S012(ZAC001DISPLAY LIKE C_TYP_E.
        LEAVE LIST-PROCESSING.
      ENDIF.
    ENDIF.
  ELSE.
    IF CB_TSTCK IS INITIAL.
      PERFORM FRM_DOWNLOAD_FILE USING I_ERR   "エラーファイル
                                      G_EFILE "エラーファイル名
                             CHANGING L_FLG.
      IF L_FLG IS NOT INITIAL.
        MESSAGE S012(ZAC001DISPLAY LIKE C_TYP_E.
        LEAVE LIST-PROCESSING.
      ENDIF.
    ENDIF.
  ENDIF.


*-------------バックアップファイル作成
  IF CB_TSTCK IS INITIAL.
    PERFORM FRM_DOWNLOAD_FILE USING I_BAK   "バックアップファイル
                                    G_BFILE "バックアップファイル名
                           CHANGING L_FLG.
    IF L_FLG IS NOT INITIAL.
      MESSAGE S013(ZAC001DISPLAY LIKE C_TYP_E.
      LEAVE LIST-PROCESSING.
    ENDIF.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SPLIT_PATH
*&---------------------------------------------------------------------*
*&       ファイルパス分割処理
*&---------------------------------------------------------------------*
FORM FRM_SPLIT_PATH  USING  I_L_PATH TYPE STRING
                   CHANGING  O_FILENAME_SPLIT TYPE RLGRAP-FILENAME
                             O_FILEPATH_SPLIT TYPE RLGRAP-FILENAME.

  IF  P_LOCAL IS NOT INITIAL.            " ローカルの場合
    CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
      EXPORTING
        FULL_NAME     I_L_PATH
      IMPORTING
        STRIPPED_NAME O_FILENAME_SPLIT
        FILE_PATH     O_FILEPATH_SPLIT
      EXCEPTIONS
        X_ERROR       1
        OTHERS        2.

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

  ELSE.
    CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
      EXPORTING
        FULL_NAME     I_L_PATH
      IMPORTING
        STRIPPED_NAME O_FILENAME_SPLIT
        FILE_PATH     O_FILEPATH_SPLIT
      EXCEPTIONS
        X_ERROR       1
        OTHERS        2.

    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 .
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_FILE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
FORM FRM_DOWNLOAD_FILE  USING  I_TAB_FILE TYPE TABLE
                               I_P_FNAME TYPE C
                      CHANGING O_FLG TYPE CHAR1.

  DATAL_FNAME TYPE STRING.                  " 出力ファイル名

*----- 型合わせ
  L_FNAME =  I_P_FNAME.                        " 出力ファイル名

*----- 汎用モジュールの呼出し:ダウンロード
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      FILENAME                L_FNAME      " ファイル名
      FILETYPE                C_TYPE       " ファイルタイプ
      WRITE_FIELD_SEPARATOR   C_TAB        " TAB種別
      CODEPAGE                C_UTF8       " コードページ
    TABLES
      DATA_TAB                I_TAB_FILE   " 内部テーブル
    EXCEPTIONS
      FILE_WRITE_ERROR        1
      NO_BATCH                2
      GUI_REFUSE_FILETRANSFER 3
      INVALID_TYPE            4
      NO_AUTHORITY            5
      UNKNOWN_ERROR           6
      HEADER_NOT_ALLOWED      7
      SEPARATOR_NOT_ALLOWED   8
      FILESIZE_NOT_ALLOWED    9
      HEADER_TOO_LONG         10
      DP_ERROR_CREATE         11
      DP_ERROR_SEND           12
      DP_ERROR_WRITE          13
      UNKNOWN_DP_ERROR        14
      ACCESS_DENIED           15
      DP_OUT_OF_MEMORY        16
      DISK_FULL               17
      DP_TIMEOUT              18
      FILE_NOT_FOUND          19
      DATAPROVIDER_EXCEPTION  20
      CONTROL_FLUSH_ERROR     21
      OTHERS                  22.

  IF SY-SUBRC <> 0.
    O_FLG C_CHK.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILENAME_GET_O
*&---------------------------------------------------------------------*
*&    出力ファイル名の取得
*&---------------------------------------------------------------------*
FORM FRM_FILENAME_GET_O  CHANGING O_RFILE.
  DATA:
    L_FILE TYPE STRING,                   " ファイル名
    L_PATH TYPE STRING,                   " パス
    L_FULL TYPE STRING.                   " フルパス

*----- メソッド:ファイル名取得
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    CHANGING
      FILENAME             L_FILE
      PATH                 L_PATH
      FULLPATH             L_FULL
    EXCEPTIONS
      CNTL_ERROR           1
      ERROR_NO_GUI         2
      NOT_SUPPORTED_BY_GUI 3
      OTHERS               4.

  CASE SY-SUBRC.
    WHEN 0.
      O_RFILE L_FULL.
    WHEN OTHERS.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_INIT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM FRM_INIT_DATA .

  REFRESH:
    I_BAK ,       "バックアップファイル作成
    I_ERR ,       "エラーファイル
    I_RFILE ,     "処理結果情報ファイル
    I_FILE  ,     "インプットファイル
    I_MSG .

  CLEAR:
    G_NAME,
    G_EFILE ,     " エラーファイル名
    G_BFILE ,     " バックアップファイル名
    G_DO    ,     " 処理件数
    G_OK    ,     " 正常件数
    G_ERR   .     " エラー件数

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_TOP_PAGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_TOP_PAGE .
  DATA L_TITLE TYPE CHAR50.

  IF CB_TSTCK IS NOT INITIAL.
    L_TITLE TEXT-027.
  ELSE.
    L_TITLE TEXT-020.
  ENDIF.

  IF  SY-PAGNO <> 1.
    WRITE:50(50L_TITLE.
    WRITE:130 SY-DATUM.
    WRITE:145 SY-UZEIT.
    WRITE:155 SY-PAGNO.

    SKIP.
    WRITE:TEXT-015.                  "<処理結果>
    WRITE:/3   TEXT-021,             "行No.
           18  TEXT-022,             "メッセージID
           35  TEXT-023.             "メッセージ
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_INPUT_CH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM FRM_INPUT_CH .

  LOOP AT SCREEN.
    IF SCREEN-NAME 'P_IFILE'.
      SCREEN-REQUIRED '2'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SCREEN_CHECK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM FRM_SCREEN_CHECK .
  DATA:
    L_RFILEPATH_SPLIT_TMP TYPE STRING,
    L_RFILENAME_SPLIT     TYPE RLGRAP-FILENAME,
    L_RFILEPATH_SPLIT     TYPE RLGRAP-FILENAME,
    L_PATH                TYPE STRING,
    L_RESULT              TYPE ABAP_BOOL,          " 結果
    L_IFILE               TYPE STRING.            " インプットファイル名

  CHECK SY-UCOMM <> 'U1'  AND SY-UCOMM <> 'U2'  .

*入力ファイルの必須チェック
  IF P_IFILE IS INITIAL.
    MESSAGE E004(ZAC001).
  ENDIF.

  IF P_LOCAL =  'X'  AND SY-BATCH =  'X'"'ローカル
    MESSAGE E008(ZAC001.
  ENDIF.

  IF SY-BATCH IS INITIAL.            " ローカルの場合
*-------------.インプットファイルの存在チェック
    L_IFILE  =   P_IFILE.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
      EXPORTING
        FILE                 L_IFILE
      RECEIVING
        RESULT               L_RESULT
      EXCEPTIONS
        CNTL_ERROR           1
        ERROR_NO_GUI         2
        WRONG_PARAMETER      3
        NOT_SUPPORTED_BY_GUI 4
        OTHERS               5.
    CASE SY-SUBRC.
      WHEN 0.
        IF L_RESULT SPACE.
          MESSAGE E005(ZAC001).
        ENDIF.
      WHEN OTHERS.
        MESSAGE E005(ZAC001).
    ENDCASE.

*------------.処理結果ファイルの存在チェック
*処理結果ファイルパス分割処理
    IF P_RFILE IS NOT INITIAL.
      CLEAR L_PATH.
      L_PATH P_RFILE.
      PERFORM FRM_SPLIT_PATH USING L_PATH
                          CHANGING L_RFILENAME_SPLIT
                                   L_RFILEPATH_SPLIT .

*メソッドの呼出し:ディレクトリの存在チェック
      L_RFILEPATH_SPLIT_TMP L_RFILEPATH_SPLIT .
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_EXIST
        EXPORTING
          DIRECTORY            L_RFILEPATH_SPLIT_TMP " ディレクトリ名
        RECEIVING
          RESULT               L_RESULT           " 結果(存在する場合:'X')
        EXCEPTIONS
          CNTL_ERROR           1
          ERROR_NO_GUI         2
          WRONG_PARAMETER      3
          NOT_SUPPORTED_BY_GUI 4
          OTHERS               5.

      CASE SY-SUBRC.
        WHEN 0.
          IF L_RESULT SPACE.
            MESSAGE E006(ZAC001).
          ENDIF.
        WHEN OTHERS.
          MESSAGE E006(ZAC001).
      ENDCASE.
    ENDIF.

  ELSE."サーバの場合
*----- 入力ファイルオープン(UNIX FILE)
    OPEN DATASET P_IFILE FOR INPUT
                              IN TEXT MODE
                              WITH SMART LINEFEED
                              ENCODING UTF-IGNORING CONVERSION ERRORS
                              SKIPPING BYTE-ORDER MARK.
    IF SY-SUBRC <> 0.
      MESSAGE E005(ZAC001).
    ENDIF.

    CLOSE DATASET P_IFILE.

**----- 結果ファイルオープン(UNIX FILE)
    IF P_RFILE IS NOT INITIAL.
      OPEN DATASET P_RFILE FOR OUTPUT
                               IN TEXT MODE
                               ENCODING UTF-IGNORING CONVERSION ERRORS.
      IF SY-SUBRC <> 0.
        MESSAGE E006(ZAC001).
      ENDIF.

      CLOSE DATASET P_RFILE.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BAPI_PROCESS
*&---------------------------------------------------------------------*
*&    バッチインプット
*&---------------------------------------------------------------------*
FORM FRM_BAPI_PROCESS .

  DATA:
    L_LIFNR          TYPE CHAR10,
    LH_CVI_VEND_LINK TYPE CVI_VEND_LINK,
    LH_BUT000        TYPE BUT000,
    LH_MSG           TYPE TYP_MSG"
    L_MSG            TYPE STRING,
    LI_MESSTAB       TYPE STANDARD TABLE OF BAPIRET2,
    LH_MESSTAB       TYPE BAPIRET2,
    L_LINE           TYPE I,
    L_FLG            TYPE CHAR1,
    LH_FILE          TYPE TYP_FILE,
    LH_FILE_BAK      TYPE TYP_FILE.

  CLEAR:
    LH_CVI_VEND_LINK,
    LH_BUT000.

* インプットデータの必須項目チェック
  PERFORM FRM_FIELD_CHECK.

*---------------------登録
  IF P_LOGIN IS NOT INITIAL.

    LOOP AT I_FILE INTO LH_FILE.

      L_LINE SY-TABIX.

      LH_FILE_BAK LH_FILE.
*     ファイルデータチェック
      PERFORM  FRM_DATA_CHECK USING LH_FILE_BAK
                                    L_LINE
                           CHANGING LH_FILE
                                    L_FLG.

      IF L_FLG IS NOT INITIAL.
        G_ERR  G_ERR + 1.
        CONTINUE.
      ENDIF.

*     仕入先マスタ登録
*      PERFORM FRM_BDC_SET_C USING LH_FILE
*                         CHANGING L_FLG
*                                  LI_MESSTAB.

      PERFORM FRM_BAPI_SET_C USING LH_FILE
                         CHANGING L_FLG
                                  LI_MESSTAB.

      IF L_FLG IS NOT INITIAL.
        G_ERR  G_ERR + 1.
        CLEAR LH_MESSTAB.
        DELETE LI_MESSTAB WHERE TYPE <> C_A
                            AND TYPE <> C_E
                            AND TYPE <> C_X.

*       エラーメッセージの編集
        IF LI_MESSTAB IS NOT INITIAL.
          PERFORM FRM_ERR_EDIT USING LH_FILE_BAK
                                     LI_MESSTAB
                                     L_LINE.
        ENDIF.
      ENDIF.

      CLEAR:
        LH_FILE,
        L_FLG,
        LH_MESSTAB.
      REFRESH LI_MESSTAB.
    ENDLOOP.

*---------------------変更
  ELSEIF P_UPDATE IS NOT INITIAL.

    LOOP AT I_FILE INTO LH_FILE.

      L_LINE SY-TABIX.

      LH_FILE_BAK LH_FILE.
*     ファイルデータチェック
      PERFORM  FRM_DATA_CHECK USING LH_FILE_BAK
                                    L_LINE
                           CHANGING LH_FILE
                                    L_FLG.

      IF L_FLG IS NOT INITIAL.
        G_ERR  G_ERR + 1.
        CONTINUE.
      ENDIF.

*     ビジネスパートナー取得
      CLEAR L_LIFNR.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  LH_FILE-LIFNR
        IMPORTING
          OUTPUT L_LIFNR.

      SELECT SINGLE *
               FROM CVI_VEND_LINK
               INTO LH_CVI_VEND_LINK
              WHERE VENDOR L_LIFNR.  "仕入先コード"

      SELECT SINGLE *
               FROM BUT000
               INTO LH_BUT000
              WHERE PARTNER_GUID LH_CVI_VEND_LINK-PARTNER_GUID.

*     仕入先マスタ変更
*      PERFORM FRM_BDC_SET_U USING LH_FILE
*                                  LH_BUT000-PARTNER "ビジネスパートナー
*                         CHANGING L_FLG
*                                  LI_MESSTAB.

      PERFORM FRM_BAPI_SET_U USING LH_FILE
                                   LH_BUT000-PARTNER "ビジネスパートナー
                                   LH_CVI_VEND_LINK-PARTNER_GUID
                          CHANGING L_FLG
                                   LI_MESSTAB.


      IF L_FLG IS NOT INITIAL.
        G_ERR  G_ERR + 1.

        DELETE LI_MESSTAB WHERE TYPE <> C_A
                            AND TYPE <> C_E
                            AND TYPE <> C_X.

*       エラーメッセージの編集
        IF LI_MESSTAB IS NOT INITIAL.
          PERFORM FRM_ERR_EDIT USING LH_FILE_BAK
                                     LI_MESSTAB
                                     L_LINE.
        ENDIF.
      ENDIF.

      CLEAR:
        LH_FILE,
        L_FLG,
        LH_MESSTAB.
      REFRESH LI_MESSTAB.
    ENDLOOP.

*-----------------登録/変更(インターフェースファイル取込用)
  ELSE.

    LOOP AT I_FILE INTO LH_FILE.

      L_LINE SY-TABIX.

      LH_FILE_BAK LH_FILE.
*     ファイルデータチェック
      PERFORM  FRM_DATA_CHECK USING LH_FILE_BAK
                                    L_LINE
                           CHANGING LH_FILE
                                    L_FLG.

      IF L_FLG IS NOT INITIAL.
        G_ERR  G_ERR + 1.
        CONTINUE.
      ENDIF.

*     ビジネスパートナー取得
      CLEAR L_LIFNR.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  LH_FILE-LIFNR
        IMPORTING
          OUTPUT L_LIFNR.

*     ビジネスパートナー取得 (仕入先マスタ登録/変更 判断用)
      SELECT SINGLE *
               FROM CVI_VEND_LINK
               INTO LH_CVI_VEND_LINK
              WHERE VENDOR L_LIFNR.  "仕入先コード"

      SELECT SINGLE *
               FROM BUT000
               INTO LH_BUT000
              WHERE PARTNER_GUID LH_CVI_VEND_LINK-PARTNER_GUID.

      IF LH_BUT000-PARTNER IS INITIAL."ビジネスパートナー
*     仕入先マスタ登録
*        PERFORM FRM_BDC_SET_C USING LH_FILE
*                           CHANGING L_FLG
*                                    LI_MESSTAB.
        PERFORM FRM_BAPI_SET_C USING LH_FILE
                           CHANGING L_FLG
                                    LI_MESSTAB.

        IF L_FLG IS NOT INITIAL.
          G_ERR  G_ERR + 1.

          DELETE LI_MESSTAB WHERE TYPE <> C_A
                              AND TYPE <> C_E
                              AND TYPE <> C_X.

*         エラーメッセージの編集
          IF LI_MESSTAB IS NOT INITIAL.
            PERFORM FRM_ERR_EDIT USING LH_FILE_BAK
                                       LI_MESSTAB
                                       L_LINE.
          ENDIF.
        ENDIF.

      ELSE.
*     仕入先マスタ変更
*        PERFORM FRM_BDC_SET_U USING LH_FILE
*                                    LH_BUT000-PARTNER "ビジネスパートナー
*                           CHANGING L_FLG
*                                    LI_MESSTAB.
        PERFORM FRM_BAPI_SET_U USING LH_FILE
                                     LH_BUT000-PARTNER "ビジネスパートナー
                                     LH_CVI_VEND_LINK-PARTNER_GUID
                            CHANGING L_FLG
                                     LI_MESSTAB.

        IF L_FLG IS NOT INITIAL.
          G_ERR  G_ERR + 1.

          DELETE LI_MESSTAB WHERE TYPE <> C_A
                              AND TYPE <> C_E
                              AND TYPE <> C_X.

*         エラーメッセージの編集
          IF LI_MESSTAB IS NOT INITIAL.
            PERFORM FRM_ERR_EDIT USING LH_FILE_BAK
                                       LI_MESSTAB
                                       L_LINE.
          ENDIF.
        ENDIF.
      ENDIF.

      CLEAR:
        L_FLG,
        LH_MESSTAB,
        LH_CVI_VEND_LINK,
        LH_BUT000.
      REFRESH LI_MESSTAB.
    ENDLOOP.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BDC_SET_C
*&---------------------------------------------------------------------*
*&       仕入先マスタ登録BDC
*&---------------------------------------------------------------------*
FORM FRM_BDC_SET_C  USING  PI_LH_FILE TYPE TYP_FILE
                  CHANGING PO_FLG TYPE CHAR1
                           P0_MESSTAB TYPE TYP_BDCMSGCOLL.

  DATA:
    L_N        TYPE CTU_PARAMS-DISMODE    VALUE 'N',
    LH_MESSTAB TYPE BDCMSGCOLL.

  REFRESH:
      I_BDCDATA,
      P0_MESSTAB.



  PERFORM FRM_BDC_SET USING 'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_OKCODE' '=BUS_LOCATOR_CLOSE'.

  PERFORM FRM_BDC_SET USING 'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_OKCODE' '=SCREEN_1000_CRE_ORGA'.
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_CURSOR' 'BUS_JOEL_MAIN-CHANGE_NUMBER'."
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_SUBSCR' 'SAPLBUPA_DIALOG_JOEL'."

  PERFORM FRM_BDC_SET USING 'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_OKCODE' '=SCREEN_1110_CHG_ROLE'.
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_SUBSCR' 'SAPLBUPA_DIALOG_JOEL'.
  IF PI_LH_FILE-BU_GROUP <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUS_JOEL_MAIN-CREATION_GROUP' PI_LH_FILE-BU_GROUP."グルーピング
  ENDIF.
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_SUBSCR' 'SAPLBUPA_DIALOG_JOEL'.
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_CURSOR' 'BUS_JOEL_MAIN-PARTNER_ROLE'.
  IF PI_LH_FILE-RLTYP <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUS_JOEL_MAIN-PARTNER_ROLE' PI_LH_FILE-RLTYP."BP 役割
  ENDIF.
  PERFORM FRM_BDC_SET USING '' '' '' 'BUS_JOEL_MAIN-PARTNER_TIMEDEP' '000001'.

  PERFORM FRM_BDC_SET USING   'SAPLSPO1' '0600' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=OPT1'.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_01'.

  PERFORM FRM_BDC_SET USING 'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_OKCODE' '=TEST'.
  IF PI_LH_FILE-TITLE <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUS000FLDS-TITLE_MEDI' PI_LH_FILE-TITLE.  "タイトル(敬称)
  ENDIF.
  IF PI_LH_FILE-NAME1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUT000-NAME_ORG1' PI_LH_FILE-NAME1.       "名称
  ENDIF.
  IF PI_LH_FILE-NAME2 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUT000-NAME_ORG2' PI_LH_FILE-NAME2.       "名称2
  ENDIF.
  IF PI_LH_FILE-SORT1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUS000FLDS-BU_SORT1_TXT' PI_LH_FILE-SORT1."検索語句1
  ENDIF.
  IF PI_LH_FILE-SORT2 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUS000FLDS-BU_SORT2_TXT' PI_LH_FILE-SORT2."検索語句2
  ENDIF.
  IF PI_LH_FILE-STREET <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-STREET' PI_LH_FILE-STREET.     "地名
  ENDIF.
  IF PI_LH_FILE-HOUSE_NUM1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-HOUSE_NUM1' PI_LH_FILE-HOUSE_NUM1."番地-号
  ENDIF.
  IF PI_LH_FILE-POST_CODE1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-POST_CODE1' PI_LH_FILE-POST_CODE1."郵便番号
  ENDIF.
  IF PI_LH_FILE-CITY1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-CITY1' PI_LH_FILE-CITY1.       "市区町村
  ENDIF.
  IF PI_LH_FILE-COUNTRY <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-COUNTRY' PI_LH_FILE-COUNTRY.   "国コード
  ENDIF.
  IF PI_LH_FILE-REGION <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-REGION' PI_LH_FILE-REGION.     "地域 (都道府県)
  ENDIF.
  IF PI_LH_FILE-TIME_ZONE <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-TIME_ZONE' PI_LH_FILE-TIME_ZONE."タイムゾーン
  ENDIF.
  IF PI_LH_FILE-LANGU <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-LANGU' PI_LH_FILE-LANGU.       "言語
  ENDIF.
  IF PI_LH_FILE-TEL_NUMBER <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'SZA1_D0100-TEL_NUMBER' PI_LH_FILE-TEL_NUMBER.   "電話
  ENDIF.
  IF PI_LH_FILE-FAX_NUMBER <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'SZA1_D0100-FAX_NUMBER' PI_LH_FILE-FAX_NUMBER."FAX
  ENDIF.

  PERFORM FRM_BDC_SET USING 'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_OKCODE' '=$INT'.

  PERFORM FRM_BDC_SET USING   'SAPLSZA6' '0600' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_CURSOR' 'ADSMTP-SMTP_ADDR(01)'.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=NEWL'.
  IF PI_LH_FILE-SMTP_ADDR1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADSMTP-SMTP_ADDR(01)' PI_LH_FILE-SMTP_ADDR1."E-Mail(1)
  ENDIF.
  PERFORM FRM_BDC_SET USING   'SAPLSZA6' '0600' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_CURSOR' 'ADSMTP-SMTP_ADDR(01)'.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=NEWL'.
  IF PI_LH_FILE-SMTP_ADDR2 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADSMTP-SMTP_ADDR(01)' PI_LH_FILE-SMTP_ADDR2."E-Mail(2)
  ENDIF.
  PERFORM FRM_BDC_SET USING   'SAPLSZA6' '0600' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_CURSOR' 'ADSMTP-SMTP_ADDR(01)'.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=CONT'.
  IF PI_LH_FILE-SMTP_ADDR3 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADSMTP-SMTP_ADDR(01)' PI_LH_FILE-SMTP_ADDR3."E-Mail(3)
  ENDIF.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_SUBSCR' 'SAPLSZA11'.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_03'.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_04'.
*  IF PI_LH_FILE-LEGAL_ORG <> C_SLASH.
*    PERFORM FRM_BDC_SET USING   '' '' '' 'BUT000-LEGAL_ORG' PI_LH_FILE-LEGAL_ORG."法的実体
*  ENDIF.
  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_05'.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_CURSOR' 'GS_BP001-VBUND'.
  IF PI_LH_FILE-VBUND <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_BP001-VBUND' PI_LH_FILE-VBUND."取引先
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_06'.
  IF PI_LH_FILE-BKVID <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BKVID(01)' PI_LH_FILE-BKVID."ID
  ENDIF.
  IF PI_LH_FILE-BANKS <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BANKS(01)' PI_LH_FILE-BANKS."国
  ENDIF.
  IF PI_LH_FILE-BANKL <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BANKL(01)' PI_LH_FILE-BANKL."銀行コード
  ENDIF.
  IF PI_LH_FILE-BANKN <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BANKN(01)' PI_LH_FILE-BANKN."銀行口座
  ENDIF.
  IF PI_LH_FILE-BKONT <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BKONT(01)' PI_LH_FILE-BKONT."管理キー
  ENDIF.
  IF PI_LH_FILE-BKREF <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BKREF(01)' PI_LH_FILE-BKREF."支払参照
  ENDIF.
  IF PI_LH_FILE-KOINH <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-KOINH(01)' PI_LH_FILE-KOINH."口座名義人
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=BUS_MAIN_ENTER'.
  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_07'.
  IF PI_LH_FILE-XBLCK <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUT000-XBLCK' PI_LH_FILE-XBLCK."共通ブロック
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1000_MAIN_P02'.
  IF PI_LH_FILE-LIFNR <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GV_VENDOR_EXT' PI_LH_FILE-LIFNR."仕入先コード
  ENDIF.
  IF PI_LH_FILE-KUNNR <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFA1-KUNNR' PI_LH_FILE-KUNNR."得意先コード
  ENDIF.
  IF PI_LH_FILE-DLGRP <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFA1-DLGRP' PI_LH_FILE-DLGRP."サービス業者価格決定グループ
  ENDIF.
  IF PI_LH_FILE-PROFS <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFA1-PROFS' PI_LH_FILE-PROFS."職業
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLSPO1' '0600' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=OPT2'.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_02'.
  IF PI_LH_FILE-BUKRS <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BS001-BUKRS' PI_LH_FILE-BUKRS."会社コード
  ENDIF.
  IF PI_LH_FILE-AKONT <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-AKONT' PI_LH_FILE-AKONT."統制勘定
  ENDIF.
  IF PI_LH_FILE-FDGRV <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-FDGRV' PI_LH_FILE-FDGRV."CM 計画グループ
  ENDIF.
  IF PI_LH_FILE-WT_SUBJCT <> C_SLASH AND PI_LH_FILE-WT_SUBJCT IS NOT INITIAL.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-QLAND' 'JP'."源泉徴収税国
  ENDIF.
  PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-ALTKN' PI_LH_FILE-ALTKN."旧勘定コード

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_03'.
  IF PI_LH_FILE-ZTERM <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-ZTERM' PI_LH_FILE-ZTERM."支払条件
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_05'."記帳担当者
  IF PI_LH_FILE-BUSAB <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-BUSAB' PI_LH_FILE-BUSAB."記帳担当者
  ENDIF.
  IF PI_LH_FILE-ZSABE <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-ZSABE' PI_LH_FILE-ZSABE."仕入先担当者
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1000_MAIN_P01'."
  IF PI_LH_FILE-WITHT <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'CVIS_LFBW-WITHT(01)' PI_LH_FILE-WITHT."源泉徴収税タイプコード
  ENDIF.
  IF PI_LH_FILE-WT_WITHCD <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'CVIS_LFBW-WT_WITHCD(01)' PI_LH_FILE-WT_WITHCD."源泉徴収税コード
  ENDIF.
  IF PI_LH_FILE-WT_SUBJCT <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'CVIS_LFBW-WT_SUBJCT(01)' PI_LH_FILE-WT_SUBJCT."源泉徴収課税対象
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1000_CHECK'."BDCチェック

  IF PI_LH_FILE-KUNNR <> C_SLASH AND PI_LH_FILE-KUNNR IS NOT INITIAL.
    PERFORM FRM_BDC_SET USING   'SAPLSPO1' '0600' 'X' '' ''.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=OPT2'.
  ENDIF.

  IF CB_TSTCK IS NOT INITIAL.
    PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=BUS_MAIN_BACK'.

    PERFORM FRM_BDC_SET USING   'SAPLSPO1' '0100' 'X' '' ''.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=NO'.
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  IF CB_TSTCK IS INITIAL.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=BUS_MAIN_SAVE'."BDC保存
  ENDIF.

  IF PI_LH_FILE-KUNNR <> C_SLASH AND PI_LH_FILE-KUNNR IS NOT INITIAL.
    PERFORM FRM_BDC_SET USING   'SAPLSPO1' '0600' 'X' '' ''.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=OPT2'.
  ENDIF.

  CALL TRANSACTION 'BP0' USING I_BDCDATA
                          MODE L_N
                        UPDATE C_S
                      MESSAGES INTO P0_MESSTAB.

  IF CB_TSTCK IS INITIAL.
    CLEAR LH_MESSTAB.
    READ TABLE P0_MESSTAB INTO LH_MESSTAB WITH KEY MSGID 'R1'
                                                   MSGNR '214'."登録成功
    IF SY-SUBRC 0.
      COMMIT WORK.
    ELSE.
      PO_FLG 'X'.
      ROLLBACK WORK.
    ENDIF.

  ELSE.

    CLEAR LH_MESSTAB.
    LOOP AT P0_MESSTAB INTO LH_MESSTAB WHERE MSGNR <> '101'
                                         AND MSGNR <> '096'.
      EXIT.
    ENDLOOP.

    IF LH_MESSTAB IS NOT INITIAL.
      PO_FLG 'X'.
    ENDIF.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BAPI_SET_C
*&---------------------------------------------------------------------*
*& 仕入先マスタ登録BAPI
*&---------------------------------------------------------------------*
FORM FRM_BAPI_SET_C  USING  PI_LH_FILE TYPE TYP_FILE
                   CHANGING PO_FLG     TYPE CHAR1
                            PO_MESSTAB TYPE TYP_BAPIRET.

  DATA:LI_PHONE    TYPE STANDARD TABLE OF BAPIADTEL,    "電話番号
       LI_FAX      TYPE STANDARD TABLE OF BAPIADFAX,    "FAX 番号
       LI_EMAIL    TYPE STANDARD TABLE OF BAPIADSMTP,   "電子メール
       LI_RETMSG   TYPE STANDARD TABLE OF BAPIRET2,     "リターンパラメータ
       LI_DATA     TYPE CVIS_EI_EXTERN_T,               "得意先/仕入先統合の受信
       LI_RETURN   TYPE BAPIRETM,                       "複数オブジェクト
       LI_MESSAGE  TYPE BAPIRETCT,                      "リターンパラメータ
       LH_CATEGORY TYPE BAPIBUS1006_HEAD,               "BP ヘッダデータ
       LH_CENTRAL  TYPE BAPIBUS1006_CENTRAL,            "一般 BP データ
       LH_ORGAN    TYPE BAPIBUS1006_CENTRAL_ORGAN,      "組織データ
       LH_ADDRESS  TYPE BAPIBUS1006_ADDRESS,            "BAPI 構造 アドレスデータ
       LH_PHONE    TYPE BAPIADTEL,                      "電話番号
       LH_FAX      TYPE BAPIADFAX,                      "FAX 番号
       LH_EMAIL    TYPE BAPIADSMTP,                     "電子メール
       LH_BUT000   TYPE BUS000___I,                     "ステータス情報
       LH_ROLE     TYPE BUS_EI_BUPA_ROLES,              "ロール登録データ
       LH_BANK     TYPE BUS_EI_BUPA_BANKDETAIL,         "銀行詳細登録
       LH_COMPANY  TYPE VMDS_EI_COMPANY,                "会社コードデータ
       LH_WTAX     TYPE VMDS_EI_WTAX_TYPE,              "源泉徴収税
       LH_DATA     TYPE CVIS_EI_EXTERN,                 "CVI のビジネスパートナ用複合
       LH_MESSTAB  TYPE BDCMSGCOLL,                     "メッセージ
       LH_RETMSG   TYPE BAPIRET2,                       "リターンパラメータ
       LH_RETURN   TYPE BAPIRETI,                       "複数オブジェクト
       LH_MESSAGE  TYPE BAPIRETC,                       "リターンパラメータ
       L_PARTNER   TYPE BU_PARTNER.                     "ビジネスパートナ番号

  REFRESH:
      PO_MESSTAB.

* INSERT BP
  LH_CATEGORY-PARTN_CAT   C_2.                  "ビジネスパートナカテゴリ
  IF PI_LH_FILE-BU_GROUP <> C_SLASH.
    LH_CATEGORY-PARTN_GRP   PI_LH_FILE-BU_GROUP.  "グルーピング
  ENDIF.
  IF PI_LH_FILE-TITLE <> C_SLASH.
    LH_CENTRAL-TITLE_KEY    PI_LH_FILE-TITLE.     "タイトル(敬称)
  ENDIF.
  IF PI_LH_FILE-SORT1 <> C_SLASH.
    LH_CENTRAL-SEARCHTERM1  PI_LH_FILE-SORT1.     "検索語句1
  ENDIF.
  IF PI_LH_FILE-SORT2 <> C_SLASH.
    LH_CENTRAL-SEARCHTERM2  PI_LH_FILE-SORT2.     "検索語句2
  ENDIF.
  IF PI_LH_FILE-XBLCK <> C_SLASH.
    LH_CENTRAL-CENTRALBLOCK PI_LH_FILE-XBLCK.     "共通ブロック
  ENDIF.
  IF PI_LH_FILE-NAME1 <> C_SLASH.
    LH_ORGAN-NAME1    PI_LH_FILE-NAME1.           "名称
  ENDIF.
  IF PI_LH_FILE-NAME2 <> C_SLASH.
    LH_ORGAN-NAME2    PI_LH_FILE-NAME2.           "名称2
  ENDIF.
  IF PI_LH_FILE-POST_CODE1 <> C_SLASH.
    LH_ADDRESS-POSTL_COD1 PI_LH_FILE-POST_CODE1.  "郵便番号
  ENDIF.
  IF PI_LH_FILE-REGION <> C_SLASH.
    LH_ADDRESS-REGION     PI_LH_FILE-REGION.      "地域 (都道府県)
  ENDIF.
  IF PI_LH_FILE-CITY1 <> C_SLASH.
    LH_ADDRESS-CITY       PI_LH_FILE-CITY1.       "市区町村
  ENDIF.
  IF PI_LH_FILE-STREET <> C_SLASH.
    LH_ADDRESS-STREET     PI_LH_FILE-STREET.      "地名
  ENDIF.
  IF PI_LH_FILE-HOUSE_NUM1 <> C_SLASH.
    LH_ADDRESS-HOUSE_NO   PI_LH_FILE-HOUSE_NUM1.  "番地-号
  ENDIF.
  IF PI_LH_FILE-COUNTRY <> C_SLASH.
    LH_ADDRESS-COUNTRY    PI_LH_FILE-COUNTRY.     "国コード
  ENDIF.
  IF PI_LH_FILE-TIME_ZONE <> C_SLASH.
    LH_ADDRESS-TIME_ZONE  PI_LH_FILE-TIME_ZONE.   "タイムゾーン
  ENDIF.
  IF PI_LH_FILE-LANGU <> C_SLASH.
    LH_ADDRESS-LANGU      PI_LH_FILE-LANGU.       "言語
  ENDIF.
  IF PI_LH_FILE-TEL_NUMBER <> C_SLASH.
    LH_PHONE-TELEPHONE PI_LH_FILE-TEL_NUMBER.     "電話
    APPEND LH_PHONE TO LI_PHONE.
  ENDIF.
  IF PI_LH_FILE-FAX_NUMBER <> C_SLASH.
    LH_FAX-FAX PI_LH_FILE-FAX_NUMBER.             "FAX
    APPEND LH_FAX TO LI_FAX.
  ENDIF.
  IF PI_LH_FILE-SMTP_ADDR1 <> C_SLASH.
    LH_EMAIL-E_MAIL PI_LH_FILE-SMTP_ADDR1.        "E-Mail(1)
    APPEND LH_EMAIL TO LI_EMAIL.
  ENDIF.
  IF PI_LH_FILE-SMTP_ADDR2 <> C_SLASH.
    LH_EMAIL-E_MAIL PI_LH_FILE-SMTP_ADDR2.        "E-Mail(2)
    APPEND LH_EMAIL TO LI_EMAIL.
  ENDIF.
  IF PI_LH_FILE-SMTP_ADDR3 <> C_SLASH.
    LH_EMAIL-E_MAIL PI_LH_FILE-SMTP_ADDR3.        "E-Mail(3)
    APPEND LH_EMAIL TO LI_EMAIL.
  ENDIF.

  CALL FUNCTION 'BAPI_BUPA_FS_CREATE_FROM_DATA2'
    EXPORTING
      PARTNERCATEGORY         LH_CATEGORY-PARTN_CAT
      PARTNERGROUP            LH_CATEGORY-PARTN_GRP
      CENTRALDATA             LH_CENTRAL
      CENTRALDATAORGANIZATION LH_ORGAN
      ADDRESSDATA             LH_ADDRESS
    IMPORTING
      BUSINESSPARTNER         L_PARTNER
    TABLES
      TELEFONDATA             LI_PHONE
      FAXDATA                 LI_FAX
      E_MAILDATA              LI_EMAIL
      RETURN                  LI_RETMSG.

* エラーありの場合
  LOOP AT LI_RETMSG INTO LH_RETMSG WHERE TYPE C_A
                                      OR TYPE C_E
                                      OR TYPE C_X.
    APPEND LH_RETMSG TO PO_MESSTAB.
  ENDLOOP.

  IF PO_MESSTAB IS NOT INITIAL.
    PO_FLG 'X'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    RETURN.
  ENDIF.

* エラーなしの場合
  CALL FUNCTION 'BUP_MEMORY_BUT000_GET'
    EXPORTING
      IV_PARTNER L_PARTNER
    IMPORTING
      ES_BUT000  LH_BUT000.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

* UPDATE VENDOR INFO
  LH_DATA-PARTNER-HEADER-OBJECT_INSTANCE-BPARTNER             L_PARTNER.
  LH_DATA-PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID         LH_BUT000-PARTNER_GUID.
  LH_DATA-PARTNER-HEADER-OBJECT_TASK                          C_U.

  IF PI_LH_FILE-VBUND <> C_SLASH.
    LH_DATA-PARTNER-FINSERV_DATA-COMMON-DATA-FSBP_CENTRL-VBUND  PI_LH_FILE-VBUND."取引先
    LH_DATA-PARTNER-FINSERV_DATA-COMMON-DATAX-FSBP_CENTRL-VBUND C_CHK.
  ENDIF.

* ADD ROLE
  IF PI_LH_FILE-RLTYP <> C_SLASH.
    LH_ROLE-TASK     C_I.
    LH_ROLE-DATA_KEY PI_LH_FILE-RLTYP.            "BP 役割
    APPEND LH_ROLE TO LH_DATA-PARTNER-CENTRAL_DATA-ROLE-ROLES.
  ENDIF.

* BANK
  IF PI_LH_FILE-BKVID <> C_SLASH
    AND PI_LH_FILE-BKVID <> SPACE.
    LH_BANK-TASK                C_I.
    LH_BANK-DATA_KEY            PI_LH_FILE-BKVID"ID
  ENDIF.
  IF PI_LH_FILE-BANKS <> C_SLASH.
    LH_BANK-DATA-BANK_CTRY      PI_LH_FILE-BANKS"国
    LH_BANK-DATAX-BANK_CTRY     C_CHK.
  ENDIF.
  IF PI_LH_FILE-BANKL <> C_SLASH.
    LH_BANK-DATA-BANK_KEY       PI_LH_FILE-BANKL"銀行コード
    LH_BANK-DATAX-BANK_KEY      C_CHK.
  ENDIF.
  IF PI_LH_FILE-BANKN <> C_SLASH.
    LH_BANK-DATA-BANK_ACCT      PI_LH_FILE-BANKN"銀行口座
    LH_BANK-DATAX-BANK_ACCT     C_CHK.
  ENDIF.
  IF PI_LH_FILE-BKONT <> C_SLASH.
    LH_BANK-DATA-CTRL_KEY       PI_LH_FILE-BKONT"管理キー
    LH_BANK-DATAX-CTRL_KEY      C_CHK.
  ENDIF.
  IF PI_LH_FILE-BKREF <> C_SLASH.
    LH_BANK-DATA-BANK_REF       PI_LH_FILE-BKREF"支払参照
    LH_BANK-DATAX-BANK_REF      C_CHK.
  ENDIF.
  IF PI_LH_FILE-KOINH <> C_SLASH.
    LH_BANK-DATA-ACCOUNTHOLDER  PI_LH_FILE-KOINH"口座名義人
    LH_BANK-DATAX-ACCOUNTHOLDER C_CHK.
  ENDIF.
  IF LH_BANK-TASK IS NOT INITIAL.
    APPEND LH_BANK TO LH_DATA-PARTNER-CENTRAL_DATA-BANKDETAIL-BANKDETAILS.
  ENDIF.

* Vendor
  IF PI_LH_FILE-LIFNR <> C_SLASH.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  PI_LH_FILE-LIFNR
      IMPORTING
        OUTPUT LH_DATA-VENDOR-HEADER-OBJECT_INSTANCE-LIFNR.   "仕入先コード
  ENDIF.

  LH_DATA-VENDOR-HEADER-OBJECT_TASK               C_I.

  IF PI_LH_FILE-KUNNR <> C_SLASH.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  PI_LH_FILE-KUNNR
      IMPORTING
        OUTPUT LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-KUNNR"得意先コード
    LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-KUNNR C_CHK.
  ENDIF.

  IF PI_LH_FILE-DLGRP <> C_SLASH.
    LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-DLGRP  PI_LH_FILE-DLGRP."サービス業者価格決定グループ
    LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-DLGRP C_CHK.
  ENDIF.
  IF PI_LH_FILE-PROFS <> C_SLASH.
    LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-PROFS  PI_LH_FILE-PROFS."職業
    LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-PROFS C_CHK.
  ENDIF.

* Company
  LH_COMPANY-TASK        C_I.
  IF PI_LH_FILE-BUKRS <> C_SLASH.
    LH_COMPANY-DATA_KEY    PI_LH_FILE-BUKRS.      "会社コード
  ENDIF.
  IF PI_LH_FILE-AKONT <> C_SLASH.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  PI_LH_FILE-AKONT
      IMPORTING
        OUTPUT LH_COMPANY-DATA-AKONT.             "統制勘定
    LH_COMPANY-DATAX-AKONT C_CHK.
  ENDIF.
  IF PI_LH_FILE-FDGRV <> C_SLASH.
    LH_COMPANY-DATA-FDGRV  PI_LH_FILE-FDGRV.      "CM 計画グループ
    LH_COMPANY-DATAX-FDGRV C_CHK.
  ENDIF.
  IF PI_LH_FILE-BANKS <> C_SLASH.
    LH_COMPANY-DATA-QLAND  PI_LH_FILE-BANKS.      "国
    LH_COMPANY-DATAX-QLAND C_CHK.
  ENDIF.
  IF PI_LH_FILE-ALTKN <> C_SLASH.
    LH_COMPANY-DATA-ALTKN  PI_LH_FILE-ALTKN.      "旧勘定コード
    LH_COMPANY-DATAX-ALTKN C_CHK.
  ENDIF.
  IF PI_LH_FILE-ZTERM <> C_SLASH.
    LH_COMPANY-DATA-ZTERM  PI_LH_FILE-ZTERM.      "支払条件
    LH_COMPANY-DATAX-ZTERM C_CHK.
  ENDIF.
  IF PI_LH_FILE-BUSAB <> C_SLASH.
    LH_COMPANY-DATA-BUSAB  PI_LH_FILE-BUSAB.      "記帳担当者
    LH_COMPANY-DATAX-BUSAB C_CHK.
  ENDIF.
  IF PI_LH_FILE-ZSABE <> C_SLASH.
    LH_COMPANY-DATA-ZSABE  PI_LH_FILE-ZSABE.      "仕入先担当者
    LH_COMPANY-DATAX-ZSABE C_CHK.
  ENDIF.

* 源泉徴収税
  IF PI_LH_FILE-WITHT <> C_SLASH
    AND PI_LH_FILE-WITHT <> SPACE.
    LH_WTAX-TASK            C_I.
    LH_WTAX-DATA_KEY-WITHT  PI_LH_FILE-WITHT.     "源泉徴収税タイプコード
  ENDIF.
  IF PI_LH_FILE-WT_WITHCD <> C_SLASH.
    LH_WTAX-DATA-WT_WITHCD  PI_LH_FILE-WT_WITHCD"源泉徴収税コード
    LH_WTAX-DATAX-WT_WITHCD C_CHK.
  ENDIF.
  IF PI_LH_FILE-WT_SUBJCT <> C_SLASH.
    LH_WTAX-DATA-WT_SUBJCT  PI_LH_FILE-WT_SUBJCT"源泉徴収課税対象
    LH_WTAX-DATAX-WT_SUBJCT C_CHK.
    IF PI_LH_FILE-WT_SUBJCT <> SPACE.
      LH_COMPANY-DATA-QLAND  'JP'.
    ELSE.
      LH_COMPANY-DATA-QLAND  SPACE.
    ENDIF.
    LH_COMPANY-DATAX-QLAND C_CHK.
  ENDIF.

  IF LH_WTAX-TASK <> SPACE.
    APPEND LH_WTAX TO LH_COMPANY-WTAX_TYPE-WTAX_TYPE.
  ENDIF.

  APPEND LH_COMPANY TO LH_DATA-VENDOR-COMPANY_DATA-COMPANY.

  APPEND LH_DATA TO LI_DATA.

  CALL METHOD CL_MD_BP_MAINTAIN=>MAINTAIN
    EXPORTING
      I_DATA   LI_DATA
    IMPORTING
      E_RETURN LI_RETURN.

  IF LI_RETURN IS NOT INITIAL.
    LOOP AT LI_RETURN INTO LH_RETURN.
      LI_MESSAGE LH_RETURN-OBJECT_MSG.
      LOOP AT LI_MESSAGE INTO LH_MESSAGE WHERE TYPE C_A
                                             OR TYPE C_E
                                             OR TYPE C_X.
        CLEAR LH_RETMSG.
        MOVE-CORRESPONDING LH_MESSAGE TO LH_RETMSG.
        APPEND LH_RETMSG TO PO_MESSTAB.
      ENDLOOP.
    ENDLOOP.
  ENDIF.

* エラーありの場合
  IF PO_MESSTAB IS NOT INITIAL
     OR CB_TSTCK IS NOT INITIAL.
    IF PO_MESSTAB IS NOT INITIAL.
      PO_FLG 'X'.
    ENDIF.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    RETURN.

* エラーなしの場合
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BDC_SET_U
*&---------------------------------------------------------------------*
*&       仕入先マスタ変更BDC
*&---------------------------------------------------------------------*
FORM FRM_BDC_SET_U  USING    PI_LH_FILE TYPE TYP_FILE
                             PI_PARTNER TYPE CHAR10
                    CHANGING PO_FLG TYPE CHAR1
                             P0_MESSTAB TYPE TYP_BDCMSGCOLL.

  DATA:
    L_KUNNR    TYPE KUNNR,
    LH_MESSTAB TYPE BDCMSGCOLL,
    L_N        TYPE CTU_PARAMS-DISMODE    VALUE 'N'.

  REFRESH:
    I_BDCDATA,
    P0_MESSTAB.

*得意先コード
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  PI_LH_FILE-LIFNR
    IMPORTING
      OUTPUT PI_LH_FILE-LIFNR.

  SELECT SINGLE KUNNR
           FROM LFA1
           INTO L_KUNNR
          WHERE LIFNR PI_LH_FILE-LIFNR.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  PI_LH_FILE-KUNNR
    IMPORTING
      OUTPUT PI_LH_FILE-KUNNR.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=BUS_LOCATOR_CLOSE'.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1000_OPEN'.

  PERFORM FRM_BDC_SET USING   'SAPLBUPA_DIALOG_JOEL' '1600' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=BUS_MAIN_ENTER'.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_CURSOR' 'BUS_JOEL_MAIN-OPEN_NUMBER'.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BUS_JOEL_MAIN-OPEN_NUMBER' PI_PARTNER.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1110_CHG_ROLE'.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BUS_JOEL_MAIN-PARTNER_ROLE' PI_LH_FILE-RLTYP."BP 役割
  PERFORM FRM_BDC_SET USING   '' '' '' 'BUS_JOEL_MAIN-PARTNER_TIMEDEP' '000001'."

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_01'.


  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_01'.
  IF PI_LH_FILE-TITLE <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUS000FLDS-TITLE_MEDI' PI_LH_FILE-TITLE.  "タイトル(敬称)
  ENDIF.
  IF PI_LH_FILE-NAME1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUT000-NAME_ORG1' PI_LH_FILE-NAME1.       "名称
  ENDIF.
  IF PI_LH_FILE-NAME2 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUT000-NAME_ORG2' PI_LH_FILE-NAME2.       "名称2
  ENDIF.
  IF PI_LH_FILE-SORT1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUS000FLDS-BU_SORT1_TXT' PI_LH_FILE-SORT1."検索語句1
  ENDIF.
  IF PI_LH_FILE-SORT2 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUS000FLDS-BU_SORT2_TXT' PI_LH_FILE-SORT2."検索語句2
  ENDIF.
  IF PI_LH_FILE-STREET <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-STREET' PI_LH_FILE-STREET.     "地名
  ENDIF.
  IF PI_LH_FILE-HOUSE_NUM1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-HOUSE_NUM1' PI_LH_FILE-HOUSE_NUM1."番地-号
  ENDIF.
  IF PI_LH_FILE-POST_CODE1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-POST_CODE1' PI_LH_FILE-POST_CODE1."郵便番号
  ENDIF.
  IF PI_LH_FILE-CITY1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-CITY1' PI_LH_FILE-CITY1.       "市区町村
  ENDIF.
  IF PI_LH_FILE-COUNTRY <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-COUNTRY' PI_LH_FILE-COUNTRY.   "国コード
  ENDIF.
  IF PI_LH_FILE-REGION <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-REGION' PI_LH_FILE-REGION.     "地域 (都道府県)
  ENDIF.
  IF PI_LH_FILE-TIME_ZONE <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-TIME_ZONE' PI_LH_FILE-TIME_ZONE."タイムゾーン
  ENDIF.
  IF PI_LH_FILE-LANGU <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADDR1_DATA-LANGU' PI_LH_FILE-LANGU.       "言語
  ENDIF.
  IF PI_LH_FILE-TEL_NUMBER <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'SZA1_D0100-TEL_NUMBER' PI_LH_FILE-TEL_NUMBER.   "電話
  ENDIF.
  IF PI_LH_FILE-FAX_NUMBER <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'SZA1_D0100-FAX_NUMBER' PI_LH_FILE-FAX_NUMBER."FAX
  ENDIF.

  PERFORM FRM_BDC_SET USING 'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING '' '' '' 'BDC_OKCODE' '=$INT'.

  PERFORM FRM_BDC_SET USING   'SAPLSZA6' '0600' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=DELL'.
  IF PI_LH_FILE-SMTP_ADDR1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'G_SELECTED(01)' 'X'.
  ENDIF.
  IF PI_LH_FILE-SMTP_ADDR2 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'G_SELECTED(02)' 'X'.
  ENDIF.
  IF PI_LH_FILE-SMTP_ADDR3 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'G_SELECTED(03)' 'X'.
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLSZA6' '0600' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_CURSOR' 'ADSMTP-SMTP_ADDR(01)'.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=NEWL'.
  IF PI_LH_FILE-SMTP_ADDR1 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADSMTP-SMTP_ADDR(01)' PI_LH_FILE-SMTP_ADDR1."E-Mail(1)
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLSZA6' '0600' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_CURSOR' 'ADSMTP-SMTP_ADDR(01)'.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=NEWL'.
  IF PI_LH_FILE-SMTP_ADDR2 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADSMTP-SMTP_ADDR(01)' PI_LH_FILE-SMTP_ADDR2."E-Mail(2)
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLSZA6' '0600' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_CURSOR' 'ADSMTP-SMTP_ADDR(01)'.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=CONT'.
  IF PI_LH_FILE-SMTP_ADDR3 <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'ADSMTP-SMTP_ADDR(01)' PI_LH_FILE-SMTP_ADDR3."E-Mail(3)
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_03'.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_04'.
*  IF PI_LH_FILE-LEGAL_ORG <> C_SLASH.
*    PERFORM FRM_BDC_SET USING   '' '' '' 'BUT000-LEGAL_ORG' PI_LH_FILE-LEGAL_ORG."法的実体
*  ENDIF.
  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_05'.
  IF PI_LH_FILE-VBUND <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_BP001-VBUND' PI_LH_FILE-VBUND."取引先
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_06'.
  IF PI_LH_FILE-BANKS <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BANKS(01)' PI_LH_FILE-BANKS."国
  ENDIF.
  IF PI_LH_FILE-BANKL <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BANKL(01)' PI_LH_FILE-BANKL."銀行コード
  ENDIF.
  IF PI_LH_FILE-BANKN <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BANKN(01)' PI_LH_FILE-BANKN."銀行口座
  ENDIF.
  IF PI_LH_FILE-BKONT <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BKONT(01)' PI_LH_FILE-BKONT."管理キー
  ENDIF.
  IF PI_LH_FILE-BKREF <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-BKREF(01)' PI_LH_FILE-BKREF."支払参照
  ENDIF.
  IF PI_LH_FILE-KOINH <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GT_BUT0BK-KOINH(01)' PI_LH_FILE-KOINH."口座名義人
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_07'.
  IF PI_LH_FILE-XBLCK <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BUT000-XBLCK' PI_LH_FILE-XBLCK."共通ブロック
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1000_MAIN_P02'.
  IF PI_LH_FILE-KUNNR <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFA1-KUNNR' PI_LH_FILE-KUNNR."得意先コード
  ENDIF.
  IF PI_LH_FILE-DLGRP <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFA1-DLGRP' PI_LH_FILE-DLGRP."サービス業者価格決定グループ
  ENDIF.
  IF PI_LH_FILE-PROFS <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFA1-PROFS' PI_LH_FILE-PROFS."職業
  ENDIF.

  IF PI_LH_FILE-KUNNR <> C_SLASH
    AND PI_LH_FILE-KUNNR IS NOT INITIAL
    AND PI_LH_FILE-KUNNR <> L_KUNNR.
    PERFORM FRM_BDC_SET USING   'SAPLSPO1' '0600' 'X' '' ''.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=OPT2'.
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=BUS_MAIN_ENTER'.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_02'.
  IF PI_LH_FILE-BUKRS <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BS001-BUKRS' PI_LH_FILE-BUKRS."会社コード
  ENDIF.
  IF PI_LH_FILE-AKONT <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-AKONT' PI_LH_FILE-AKONT."統制勘定
  ENDIF.
  IF PI_LH_FILE-FDGRV <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-FDGRV' PI_LH_FILE-FDGRV."CM 計画グループ
  ENDIF.
  IF PI_LH_FILE-WT_SUBJCT <> C_SLASH AND PI_LH_FILE-WT_SUBJCT IS NOT INITIAL.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-QLAND' 'JP'."源泉徴収税国
  ENDIF.
  PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-ALTKN' PI_LH_FILE-ALTKN."旧勘定コード

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_03'.
  IF PI_LH_FILE-ZTERM <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-ZTERM' PI_LH_FILE-ZTERM."支払条件
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1100_TAB_05'."記帳担当者
  IF PI_LH_FILE-BUSAB <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-BUSAB' PI_LH_FILE-BUSAB."記帳担当者
  ENDIF.
  IF PI_LH_FILE-ZSABE <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'GS_LFB1-ZSABE' PI_LH_FILE-ZSABE."仕入先担当者
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1000_MAIN_P01'."
  IF PI_LH_FILE-WITHT <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'CVIS_LFBW-WITHT(01)' PI_LH_FILE-WITHT."源泉徴収税タイプコード
  ENDIF.
  IF PI_LH_FILE-WT_WITHCD <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'CVIS_LFBW-WT_WITHCD(01)' PI_LH_FILE-WT_WITHCD."源泉徴収税コード
  ENDIF.
  IF PI_LH_FILE-WT_SUBJCT <> C_SLASH.
    PERFORM FRM_BDC_SET USING   '' '' '' 'CVIS_LFBW-WT_SUBJCT(01)' PI_LH_FILE-WT_SUBJCT."源泉徴収課税対象
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=SCREEN_1000_CHECK'."BDCチェック

  IF PI_LH_FILE-KUNNR <> C_SLASH
    AND PI_LH_FILE-KUNNR IS NOT INITIAL
    AND PI_LH_FILE-KUNNR <> L_KUNNR.
    PERFORM FRM_BDC_SET USING   'SAPLSPO1' '0600' 'X' '' ''.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=OPT2'.
  ENDIF.

  IF CB_TSTCK IS NOT INITIAL.
    PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=BUS_MAIN_BACK'.

    PERFORM FRM_BDC_SET USING   'SAPLSPO1' '0100' 'X' '' ''.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=NO'.
  ENDIF.

  PERFORM FRM_BDC_SET USING   'SAPLBUS_LOCATOR' '3000' 'X' '' ''.
  IF CB_TSTCK IS INITIAL.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=BUS_MAIN_SAVE'."BDC保存
  ENDIF.

  IF PI_LH_FILE-KUNNR <> C_SLASH
    AND PI_LH_FILE-KUNNR IS NOT INITIAL
    AND PI_LH_FILE-KUNNR <> L_KUNNR.
    PERFORM FRM_BDC_SET USING   'SAPLSPO1' '0600' 'X' '' ''.
    PERFORM FRM_BDC_SET USING   '' '' '' 'BDC_OKCODE' '=OPT2'.
  ENDIF.

  CALL TRANSACTION 'BUP2' USING I_BDCDATA
                          MODE L_N
                        UPDATE C_S
                      MESSAGES INTO P0_MESSTAB.

  IF CB_TSTCK IS INITIAL.
    CLEAR LH_MESSTAB.
    READ TABLE P0_MESSTAB INTO LH_MESSTAB WITH KEY MSGID 'R1'
                                                   MSGNR '215'."変更成功
    IF SY-SUBRC 0.
      COMMIT WORK.
    ELSE.
      PO_FLG 'X'.
      ROLLBACK WORK.
    ENDIF.

  ELSE.

    CLEAR LH_MESSTAB.
    LOOP AT P0_MESSTAB INTO LH_MESSTAB WHERE MSGNR <> '108'.
      EXIT.
    ENDLOOP.

    IF LH_MESSTAB IS NOT INITIAL.
      PO_FLG 'X'.
    ENDIF.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BAPI_SET_U
*&---------------------------------------------------------------------*
*& 仕入先マスタ変更BAPI
*&---------------------------------------------------------------------*
FORM FRM_BAPI_SET_U  USING   PI_LH_FILE TYPE TYP_FILE
                             PI_PARTNER TYPE CHAR10
                             PI_GUID TYPE BU_PARTNER_GUID
                    CHANGING PO_FLG     TYPE CHAR1
                             PO_MESSTAB TYPE TYP_BAPIRET.
  DATA:LI_PHONE    TYPE STANDARD TABLE OF BAPIADTEL,    "電話番号
       LI_FAX      TYPE STANDARD TABLE OF BAPIADFAX,    "FAX 番号
       LI_EMAIL    TYPE STANDARD TABLE OF BAPIADSMTP,   "電子メール
       LI_RETMSG   TYPE STANDARD TABLE OF BAPIRET2,     "リターンパラメータ
       LI_DATA     TYPE CVIS_EI_EXTERN_T,               "得意先/仕入先統合の受信
       LI_RETURN   TYPE BAPIRETM,                       "複数オブジェクト
       LI_MESSAGE  TYPE BAPIRETCT,                      "リターンパラメータ
       LI_ADR6     TYPE STANDARD TABLE OF TYP_EMAIL,    "電子メールアドレス
       LI_BUT0BK   TYPE STANDARD TABLE OF TYP_BUT0BK,   "銀行詳細
       LH_CATEGORY TYPE BAPIBUS1006_HEAD,               "BP ヘッダデータ
       LH_CENTRAL  TYPE BAPIBUS1006_CENTRAL,            "一般 BP データ
       LH_ORGAN    TYPE BAPIBUS1006_CENTRAL_ORGAN,      "組織データ
       LH_ADDRESS  TYPE BUS_EI_BUPA_ADDRESS,            "BAPI 構造 アドレスデータ
       LH_PHONE    TYPE BUS_EI_BUPA_TELEPHONE,          "電話番号
       LH_FAX      TYPE BUS_EI_BUPA_FAX,                "FAX 番号
       LH_EMAIL    TYPE BUS_EI_BUPA_SMTP,               "電子メール
       LH_BUT000   TYPE BUS000___I,                     "ステータス情報
       LH_ROLE     TYPE BUS_EI_BUPA_ROLES,              "ロール登録データ
       LH_BANK     TYPE BUS_EI_BUPA_BANKDETAIL,         "銀行詳細登録
       LH_COMPANY  TYPE VMDS_EI_COMPANY,                "会社コードデータ
       LH_WTAX     TYPE VMDS_EI_WTAX_TYPE,              "源泉徴収税
       LH_DATA     TYPE CVIS_EI_EXTERN,                 "CVI のビジネスパートナ用複合
       LH_MESSTAB  TYPE BDCMSGCOLL,                     "メッセージ
       LH_RETMSG   TYPE BAPIRET2,                       "リターンパラメータ
       LH_RETURN   TYPE BAPIRETI,                       "複数オブジェクト
       LH_MESSAGE  TYPE BAPIRETC,                       "リターンパラメータ
       LH_ADR6     TYPE TYP_EMAIL,                      "電子メールアドレス
       LH_BUT0BK   TYPE TYP_BUT0BK,                     "銀行詳細
       L_ADDNUM    TYPE BUT020-ADDRNUMBER,              "ビジネスパートナ番号
       L_ADDGUID   TYPE BU_ADDRESS_GUID,                "アドレス GUID
       L_WITHT     TYPE LFBW-WITHT.                     "源泉徴収税タイプコード

  REFRESH:
      PO_MESSTAB.

* UPDATE VENDOR INFO
  LH_DATA-PARTNER-HEADER-OBJECT_INSTANCE-BPARTNER             PI_PARTNER.
  LH_DATA-PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID         PI_GUID.
  LH_DATA-PARTNER-HEADER-OBJECT_TASK                          C_U.

  IF PI_LH_FILE-BU_GROUP <> C_SLASH.
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-GROUPING PI_LH_FILE-BU_GROUP"グルーピング
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-CATEGORY C_2.                 "ビジネスパートナカテゴリ
  ENDIF.

  IF PI_LH_FILE-TITLE <> C_SLASH.
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-TITLE_KEY  PI_LH_FILE-TITLE"タイトル(敬称)
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-TITLE_KEY C_CHK.
  ENDIF.

  IF PI_LH_FILE-SORT1 <> C_SLASH.
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-SEARCHTERM1  PI_LH_FILE-SORT1"検索語句1
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-SEARCHTERM1 C_CHK.
  ENDIF.

  IF PI_LH_FILE-SORT2 <> C_SLASH.
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-SEARCHTERM2  PI_LH_FILE-SORT2"検索語句2
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-SEARCHTERM2 C_CHK.
  ENDIF.

  IF PI_LH_FILE-XBLCK <> C_SLASH.
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-CENTRALBLOCK  PI_LH_FILE-XBLCK"共通ブロック
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-CENTRALBLOCK C_CHK.
  ENDIF.

  IF PI_LH_FILE-NAME1 <> C_SLASH.
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME1  PI_LH_FILE-NAME1"名称
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME1 C_CHK.
  ENDIF.

  IF PI_LH_FILE-NAME2 <> C_SLASH.
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME2  PI_LH_FILE-NAME2"名称2
    LH_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME2 C_CHK.
  ENDIF.

  LH_ADDRESS-TASK C_U.

* 取得ADD GUID
  SELECT ADDRESS_GUID
          ADDRNUMBER UP TO ROWS
    FROM BUT020
    INTO (L_ADDGUID,
         L_ADDNUM)
   WHERE PARTNER PI_PARTNER.              "取引先コード
  ENDSELECT.
  IF SY-SUBRC 0.
    LH_ADDRESS-DATA_KEY-GUID L_ADDGUID.
  ENDIF.

  IF PI_LH_FILE-STREET <> C_SLASH.
    LH_ADDRESS-DATA-POSTAL-DATA-STREET  PI_LH_FILE-STREET.      "地名
    LH_ADDRESS-DATA-POSTAL-DATAX-STREET C_CHK.
  ENDIF.

  IF PI_LH_FILE-POST_CODE1 <> C_SLASH.
    LH_ADDRESS-DATA-POSTAL-DATA-POSTL_COD1  PI_LH_FILE-POST_CODE1.  "郵便番号
    LH_ADDRESS-DATA-POSTAL-DATAX-POSTL_COD1 C_CHK.
  ENDIF.

  IF PI_LH_FILE-REGION <> C_SLASH.
    LH_ADDRESS-DATA-POSTAL-DATA-REGION  PI_LH_FILE-REGION.      "地域 (都道府県)
    LH_ADDRESS-DATA-POSTAL-DATAX-REGION C_CHK.
  ENDIF.

  IF PI_LH_FILE-CITY1 <> C_SLASH.
    LH_ADDRESS-DATA-POSTAL-DATA-CITY  PI_LH_FILE-CITY1.       "市区町村
    LH_ADDRESS-DATA-POSTAL-DATAX-CITY C_CHK.
  ENDIF.

  IF PI_LH_FILE-HOUSE_NUM1 <> C_SLASH.
    LH_ADDRESS-DATA-POSTAL-DATA-HOUSE_NO  PI_LH_FILE-HOUSE_NUM1.       "番地-号
    LH_ADDRESS-DATA-POSTAL-DATAX-HOUSE_NO C_CHK.
  ENDIF.

  IF PI_LH_FILE-COUNTRY <> C_SLASH.
    LH_ADDRESS-DATA-POSTAL-DATA-COUNTRY  PI_LH_FILE-COUNTRY.     "国コード
    LH_ADDRESS-DATA-POSTAL-DATAX-COUNTRY C_CHK.
  ENDIF.

  IF PI_LH_FILE-TIME_ZONE <> C_SLASH.
    LH_ADDRESS-DATA-POSTAL-DATA-TIME_ZONE  PI_LH_FILE-TIME_ZONE.   "タイムゾーン
    LH_ADDRESS-DATA-POSTAL-DATAX-TIME_ZONE C_CHK.
  ENDIF.

  IF PI_LH_FILE-LANGU <> C_SLASH.
    LH_ADDRESS-DATA-POSTAL-DATA-LANGU  PI_LH_FILE-LANGU.        "言語
    LH_ADDRESS-DATA-POSTAL-DATAX-LANGU C_CHK.
  ENDIF.

  IF PI_LH_FILE-TEL_NUMBER <> C_SLASH.
    LH_PHONE-CONTACT-TASK            C_U.
    LH_PHONE-CONTACT-DATA-TELEPHONE  PI_LH_FILE-TEL_NUMBER.     "電話
    LH_PHONE-CONTACT-DATAX-TELEPHONE C_CHK.
    APPEND LH_PHONE TO LH_ADDRESS-DATA-COMMUNICATION-PHONE-PHONE.
  ENDIF.

  IF PI_LH_FILE-FAX_NUMBER <> C_SLASH.
    LH_FAX-CONTACT-TASK      C_U.
    LH_FAX-CONTACT-DATA-FAX  PI_LH_FILE-FAX_NUMBER.             "FAX
    LH_FAX-CONTACT-DATAX-FAX C_CHK.
    APPEND LH_FAX TO LH_ADDRESS-DATA-COMMUNICATION-FAX-FAX.
  ENDIF.

* 取得E-MAIL
  SELECT CONSNUMBER
         SMTP_ADDR
    FROM ADR6
    INTO TABLE LI_ADR6
   WHERE ADDRNUMBER L_ADDNUM  "アドレス番号
     AND CONSNUMBER <= 3.

  IF PI_LH_FILE-SMTP_ADDR1 <> C_SLASH.
    LH_EMAIL-CONTACT-TASK C_U.
    LH_EMAIL-CONTACT-DATA-E_MAIL PI_LH_FILE-SMTP_ADDR1.        "E-Mail(1)
    LH_EMAIL-CONTACT-DATAX-E_MAIL C_CHK.
    APPEND LH_EMAIL TO LH_ADDRESS-DATA-COMMUNICATION-SMTP-SMTP.
  ELSE.
    CLEAR LH_ADR6.
    READ TABLE LI_ADR6 INTO LH_ADR6 WITH KEY CONSNUMBER 1.
    IF SY-SUBRC 0
       AND LH_ADR6-SMTP_ADDR IS NOT INITIAL.
      LH_EMAIL-CONTACT-TASK C_U.
      LH_EMAIL-CONTACT-DATA-E_MAIL LH_ADR6-SMTP_ADDR.        "E-Mail(1)
      LH_EMAIL-CONTACT-DATAX-E_MAIL C_CHK.
      APPEND LH_EMAIL TO LH_ADDRESS-DATA-COMMUNICATION-SMTP-SMTP.
    ENDIF.
  ENDIF.

  IF PI_LH_FILE-SMTP_ADDR2 <> C_SLASH.
    LH_EMAIL-CONTACT-TASK C_U.
    LH_EMAIL-CONTACT-DATA-E_MAIL PI_LH_FILE-SMTP_ADDR2.        "E-Mail(2)
    LH_EMAIL-CONTACT-DATAX-E_MAIL C_CHK.
    APPEND LH_EMAIL TO LH_ADDRESS-DATA-COMMUNICATION-SMTP-SMTP.
  ELSE.
    CLEAR LH_ADR6.
    READ TABLE LI_ADR6 INTO LH_ADR6 WITH KEY CONSNUMBER 2.
    IF SY-SUBRC 0
       AND LH_ADR6-SMTP_ADDR IS NOT INITIAL.
      LH_EMAIL-CONTACT-TASK C_U.
      LH_EMAIL-CONTACT-DATA-E_MAIL LH_ADR6-SMTP_ADDR.        "E-Mail(2)
      LH_EMAIL-CONTACT-DATAX-E_MAIL C_CHK.
      APPEND LH_EMAIL TO LH_ADDRESS-DATA-COMMUNICATION-SMTP-SMTP.
    ENDIF.
  ENDIF.

  IF PI_LH_FILE-SMTP_ADDR3 <> C_SLASH.
    LH_EMAIL-CONTACT-TASK C_U.
    LH_EMAIL-CONTACT-DATA-E_MAIL PI_LH_FILE-SMTP_ADDR3.        "E-Mail(3)
    LH_EMAIL-CONTACT-DATAX-E_MAIL C_CHK.
    APPEND LH_EMAIL TO LH_ADDRESS-DATA-COMMUNICATION-SMTP-SMTP.
  ELSE.
    CLEAR LH_ADR6.
    READ TABLE LI_ADR6 INTO LH_ADR6 WITH KEY CONSNUMBER 3.
    IF SY-SUBRC 0
       AND LH_ADR6-SMTP_ADDR IS NOT INITIAL.
      LH_EMAIL-CONTACT-TASK C_U.
      LH_EMAIL-CONTACT-DATA-E_MAIL LH_ADR6-SMTP_ADDR.        "E-Mail(3)
      LH_EMAIL-CONTACT-DATAX-E_MAIL C_CHK.
      APPEND LH_EMAIL TO LH_ADDRESS-DATA-COMMUNICATION-SMTP-SMTP.
    ENDIF.
  ENDIF.

  APPEND LH_ADDRESS TO LH_DATA-PARTNER-CENTRAL_DATA-ADDRESS-ADDRESSES.

  IF PI_LH_FILE-VBUND <> C_SLASH.
    LH_DATA-PARTNER-FINSERV_DATA-COMMON-DATA-FSBP_CENTRL-VBUND  PI_LH_FILE-VBUND."取引先
    LH_DATA-PARTNER-FINSERV_DATA-COMMON-DATAX-FSBP_CENTRL-VBUND C_CHK.
  ENDIF.

* ADD ROLE
  IF PI_LH_FILE-RLTYP <> C_SLASH.
    LH_ROLE-TASK     C_U.
    LH_ROLE-DATA_KEY PI_LH_FILE-RLTYP.            "BP 役割
    APPEND LH_ROLE TO LH_DATA-PARTNER-CENTRAL_DATA-ROLE-ROLES.
  ENDIF.

* BANK
* 取得銀行詳細
  SELECT BKVID
    FROM BUT0BK
    INTO TABLE LI_BUT0BK
   WHERE PARTNER PI_PARTNER.

  IF LI_BUT0BK IS INITIAL.
    LH_BANK-TASK C_I.
  ELSE.
    READ TABLE LI_BUT0BK TRANSPORTING NO FIELDS WITH KEY BKVID PI_LH_FILE-BKVID.
    IF SY-SUBRC 0.
      LH_BANK-TASK C_U.
    ELSE.
      LOOP AT LI_BUT0BK INTO LH_BUT0BK.
        LH_BANK-TASK C_D.
        LH_BANK-DATA_KEY LH_BUT0BK-BKVID"ID
        APPEND LH_BANK TO LH_DATA-PARTNER-CENTRAL_DATA-BANKDETAIL-BANKDETAILS.
      ENDLOOP.
      LH_BANK-TASK C_I.
    ENDIF.
  ENDIF.

  IF PI_LH_FILE-BKVID <> C_SLASH
    AND PI_LH_FILE-BKVID <> SPACE.
    LH_BANK-DATA_KEY            PI_LH_FILE-BKVID"ID
  ELSE.
    CLEAR LH_BANK-TASK.
  ENDIF.
  IF PI_LH_FILE-BANKS <> C_SLASH.
    LH_BANK-DATA-BANK_CTRY      PI_LH_FILE-BANKS"国
    LH_BANK-DATAX-BANK_CTRY     C_CHK.
  ENDIF.
  IF PI_LH_FILE-BANKL <> C_SLASH.
    LH_BANK-DATA-BANK_KEY       PI_LH_FILE-BANKL"銀行コード
    LH_BANK-DATAX-BANK_KEY      C_CHK.
  ENDIF.
  IF PI_LH_FILE-BANKN <> C_SLASH.
    LH_BANK-DATA-BANK_ACCT      PI_LH_FILE-BANKN"銀行口座
    LH_BANK-DATAX-BANK_ACCT     C_CHK.
  ENDIF.
  IF PI_LH_FILE-BKONT <> C_SLASH.
    LH_BANK-DATA-CTRL_KEY       PI_LH_FILE-BKONT"管理キー
    LH_BANK-DATAX-CTRL_KEY      C_CHK.
  ENDIF.
  IF PI_LH_FILE-BKREF <> C_SLASH.
    LH_BANK-DATA-BANK_REF       PI_LH_FILE-BKREF"支払参照
    LH_BANK-DATAX-BANK_REF      C_CHK.
  ENDIF.
  IF PI_LH_FILE-KOINH <> C_SLASH.
    LH_BANK-DATA-ACCOUNTHOLDER  PI_LH_FILE-KOINH"口座名義人
    LH_BANK-DATAX-ACCOUNTHOLDER C_CHK.
  ENDIF.
  IF LH_BANK-TASK <> SPACE.
    APPEND LH_BANK TO LH_DATA-PARTNER-CENTRAL_DATA-BANKDETAIL-BANKDETAILS.
  ENDIF.

* Vendor
  IF PI_LH_FILE-LIFNR <> C_SLASH.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  PI_LH_FILE-LIFNR
      IMPORTING
        OUTPUT LH_DATA-VENDOR-HEADER-OBJECT_INSTANCE-LIFNR.   "仕入先コード
  ENDIF.

  LH_DATA-VENDOR-HEADER-OBJECT_TASK               C_U.

  IF PI_LH_FILE-KUNNR <> C_SLASH.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  PI_LH_FILE-KUNNR
      IMPORTING
        OUTPUT LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-KUNNR"得意先コード
    LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-KUNNR C_CHK.
  ENDIF.

  IF PI_LH_FILE-DLGRP <> C_SLASH.
    LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-DLGRP  PI_LH_FILE-DLGRP."サービス業者価格決定グループ
    LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-DLGRP C_CHK.
  ENDIF.
  IF PI_LH_FILE-PROFS <> C_SLASH.
    LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-PROFS  PI_LH_FILE-PROFS."職業
  ELSE.
    SELECT SINGLE PROFS
      FROM LFA1
      INTO LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-PROFS
     WHERE LIFNR LH_DATA-VENDOR-HEADER-OBJECT_INSTANCE-LIFNR.
  ENDIF.
  LH_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-PROFS C_CHK.

* Company
  LH_COMPANY-TASK        C_U.
  IF PI_LH_FILE-BUKRS <> C_SLASH.
    LH_COMPANY-DATA_KEY    PI_LH_FILE-BUKRS.      "会社コード
  ENDIF.
  IF PI_LH_FILE-AKONT <> C_SLASH.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  PI_LH_FILE-AKONT
      IMPORTING
        OUTPUT LH_COMPANY-DATA-AKONT.             "統制勘定
    LH_COMPANY-DATAX-AKONT C_CHK.
  ENDIF.
  IF PI_LH_FILE-FDGRV <> C_SLASH.
    LH_COMPANY-DATA-FDGRV  PI_LH_FILE-FDGRV.      "CM 計画グループ
    LH_COMPANY-DATAX-FDGRV C_CHK.
  ENDIF.
  IF PI_LH_FILE-BANKS <> C_SLASH.
    LH_COMPANY-DATA-QLAND  PI_LH_FILE-BANKS.      "国
    LH_COMPANY-DATAX-QLAND C_CHK.
  ENDIF.
  IF PI_LH_FILE-ALTKN <> C_SLASH.
    LH_COMPANY-DATA-ALTKN  PI_LH_FILE-ALTKN.      "旧勘定コード
    LH_COMPANY-DATAX-ALTKN C_CHK.
  ENDIF.
  IF PI_LH_FILE-ZTERM <> C_SLASH.
    LH_COMPANY-DATA-ZTERM  PI_LH_FILE-ZTERM.      "支払条件
    LH_COMPANY-DATAX-ZTERM C_CHK.
  ENDIF.
  IF PI_LH_FILE-BUSAB <> C_SLASH.
    LH_COMPANY-DATA-BUSAB  PI_LH_FILE-BUSAB.      "記帳担当者
    LH_COMPANY-DATAX-BUSAB C_CHK.
  ENDIF.
  IF PI_LH_FILE-ZSABE <> C_SLASH.
    LH_COMPANY-DATA-ZSABE  PI_LH_FILE-ZSABE.      "仕入先担当者
    LH_COMPANY-DATAX-ZSABE C_CHK.
  ENDIF.

* 取得源泉徴収税
  SELECT WITHT UP TO ROWS
    FROM LFBW
    INTO L_WITHT
   WHERE LIFNR LH_DATA-VENDOR-HEADER-OBJECT_INSTANCE-LIFNR
     AND BUKRS PI_LH_FILE-BUKRS.
  ENDSELECT.

* 源泉徴収税
  IF L_WITHT IS INITIAL.
    IF PI_LH_FILE-WITHT IS INITIAL
      OR  PI_LH_FILE-WITHT C_SLASH .
      CLEAR LH_WTAX-TASK.
    ELSE.
      LH_WTAX-TASK C_I.
      LH_WTAX-DATA_KEY-WITHT  PI_LH_FILE-WITHT.     "源泉徴収税タイプコード
    ENDIF.
  ELSE.
    IF PI_LH_FILE-WITHT IS INITIAL.
      LH_WTAX-TASK C_D.
      LH_WTAX-DATA_KEY-WITHT L_WITHT.     "源泉徴収税タイプコード
    ELSE.
      LH_WTAX-TASK C_U.
      LH_WTAX-DATA_KEY-WITHT  PI_LH_FILE-WITHT.     "源泉徴収税タイプコード
    ENDIF.
  ENDIF.

  IF PI_LH_FILE-WT_WITHCD <> C_SLASH.
    LH_WTAX-DATA-WT_WITHCD  PI_LH_FILE-WT_WITHCD"源泉徴収税コード
    LH_WTAX-DATAX-WT_WITHCD C_CHK.
  ENDIF.
  IF PI_LH_FILE-WT_SUBJCT <> C_SLASH.
    LH_WTAX-DATA-WT_SUBJCT  PI_LH_FILE-WT_SUBJCT"源泉徴収課税対象
    LH_WTAX-DATAX-WT_SUBJCT C_CHK.
    IF PI_LH_FILE-WT_SUBJCT <> SPACE.
      LH_COMPANY-DATA-QLAND  'JP'.
    ELSE.
      LH_COMPANY-DATA-QLAND  SPACE.
    ENDIF.
    LH_COMPANY-DATAX-QLAND C_CHK.
  ENDIF.

  IF LH_WTAX-TASK IS NOT INITIAL.
    APPEND LH_WTAX TO LH_COMPANY-WTAX_TYPE-WTAX_TYPE.
  ENDIF.

  APPEND LH_COMPANY TO LH_DATA-VENDOR-COMPANY_DATA-COMPANY.

  APPEND LH_DATA TO LI_DATA.

  CALL METHOD CL_MD_BP_MAINTAIN=>MAINTAIN
    EXPORTING
      I_DATA   LI_DATA
    IMPORTING
      E_RETURN LI_RETURN.

  IF LI_RETURN IS NOT INITIAL.
    LOOP AT LI_RETURN INTO LH_RETURN.
      LI_MESSAGE LH_RETURN-OBJECT_MSG.
      LOOP AT LI_MESSAGE INTO LH_MESSAGE WHERE TYPE C_A
                                             OR TYPE C_E
                                             OR TYPE C_X.
        CLEAR LH_RETMSG.
        MOVE-CORRESPONDING LH_MESSAGE TO LH_RETMSG.
        APPEND LH_RETMSG TO PO_MESSTAB.
      ENDLOOP.
    ENDLOOP.
  ENDIF.

* エラーありの場合
  IF PO_MESSTAB IS NOT INITIAL
     OR CB_TSTCK IS NOT INITIAL.
    IF PO_MESSTAB IS NOT INITIAL.
      PO_FLG 'X'.
    ENDIF.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    RETURN.

* エラーなしの場合
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BDC_SET
*&---------------------------------------------------------------------*
*& BDC SET
*&---------------------------------------------------------------------*
*      -->I_PROGRAM   プログラム
*      -->I_DYNPRO    Dynpro番号
*      -->I_DYNBEGIN  ID
*      -->I_FNAM      項目名
*      -->I_FVAL      項目値
*&---------------------------------------------------------------------*
FORM FRM_BDC_SET  USING   VALUE(I_PROGRAM)
                           VALUE(I_DYNPRO)
                           VALUE(I_DYNBEGIN)
                           VALUE(I_FNAM)
                           VALUE(I_FVAL).

  DATA LH_BDCDATA TYPE BDCDATA.

  CLEAR LH_BDCDATA.
  LH_BDCDATA-PROGRAM   =  I_PROGRAM.
  LH_BDCDATA-DYNPRO    =  I_DYNPRO.
  LH_BDCDATA-DYNBEGIN  =  I_DYNBEGIN.
  LH_BDCDATA-FNAM      =  I_FNAM .
  LH_BDCDATA-FVAL      =  I_FVAL.
  APPEND LH_BDCDATA TO I_BDCDATA.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ERR_EDIT
*&---------------------------------------------------------------------*
*&  エラーメッセージの編集
*&---------------------------------------------------------------------*
FORM FRM_ERR_EDIT  USING   PI_LH_FILE TYPE TYP_FILE
                            PI_LI_MESSTAB  TYPE TABLE
                            PI_L_LINE TYPE SY-TABIX.

  DATA:
    LH_ERR     TYPE TYP_FILE_ERR,
    LH_MESSTAB TYPE BAPIRET2,
    LH_MSG     TYPE TYP_MSG.

*帳票レイアウエラー
  CLEAR LH_MSG.
  LH_MSG-COL1 PI_L_LINE .
  LOOP AT PI_LI_MESSTAB INTO LH_MESSTAB.
    CONCATENATE LH_MESSTAB-ID LH_MESSTAB-NUMBER
     INTO LH_MSG-COL2 SEPARATED BY SPACE."メッセージID

    MESSAGE ID LH_MESSTAB-ID
          TYPE LH_MESSTAB-TYPE
        NUMBER LH_MESSTAB-NUMBER
          WITH LH_MESSTAB-MESSAGE_V1
               LH_MESSTAB-MESSAGE_V2
               LH_MESSTAB-MESSAGE_V3
               LH_MESSTAB-MESSAGE_V4
          INTO LH_MSG-COL3.

    APPEND LH_MSG TO I_MSG.

    AT FIRST.
*     エラーファイル
      CLEAR:LH_ERR.
      MOVE-CORRESPONDING PI_LH_FILE TO LH_ERR.
      LH_ERR-ID LH_MSG-COL2.
      LH_ERR-MESSAGE LH_MSG-COL3.
      APPEND LH_ERR TO I_ERR.
    ENDAT.
  ENDLOOP.
ENDFORM.

猜你喜欢

转载自blog.csdn.net/LINEZZZ/article/details/78899947