BDC的写法

  
BDC書き方
BDC書き方について、大体二つがあります。前提条件としては外部からデータを内部テーブルに読み込むこと。
一、
       OPEN_GROUP処理を行う
       テーブルBDCTABにデータを書き込む
       INSERT処理を行う
       CLOSE GROUP処理を行う
例:前処理でテーブルTD_IN_ZC30へデータを書き込んで、チェックした。
*- OPEN_GROUP処理を行う
   PERFORM FRM_BDC_OPEN_GROUP.
*&---------------------------------------------------------------------*
*       OPEN_GROUP処理
*----------------------------------------------------------------------*
*       なし
*----------------------------------------------------------------------*
FORM FRM_BDC_OPEN_GROUP .
 
CALL FUNCTION 'BDC_OPEN_GROUP'
 EXPORTING
   CLIENT                    = SY-MANDT          "クライアント
   GROUP                     = SY-TITLE          "セッションネーム
   USER                      = SY-UNAME          "バッチインプットネーム
   PROG                      = SY-CPROG
 EXCEPTIONS
   CLIENT_INVALID            = 1
   DESTINATION_INVALID       = 2
   GROUP_INVALID             = 3
   GROUP_IS_LOCKED           = 4
   HOLDDATE_INVALID          = 5
   INTERNAL_ERROR            = 6
   QUEUE_ERROR               = 7
   RUNNING                   = 8
   SYSTEM_LOCK_ERROR         = 9
   USER_INVALID              = 10
   OTHERS                    = 11.
*- OPEN しなかった場合
 IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
 ENDIF.
 
ENDFORM.                    " FRM_BDC_OPEN_GROUP
 
*- ワークアリアのクリア
   CLEAR:
     TH_IN_ZC30.
 
*- テーブル月次原価振替をループする
   LOOP AT TD_BDC_ZC30 INTO TH_IN_ZC30.
*- 内部指図登録(月次原価振替)
*-- ①内部指図登録:第一画面
    PERFORM FRM_INPUT_BDCDATA USING 'SAPMKAUF'
                                    '0100'
                                    'X'
                                    'BDC_OKCODE'
                                    '=KOKR'.
 
    PERFORM FRM_INPUT_BDCDATA USING ' '
                                    ' '
                                    ' '
                                    'COAS-AUART'
                                    'TH_IN_ZC30-AUART'.
 
*-- ② 管理領域設定
    PERFORM FRM_INPUT_BDCDATA USING 'SAPLSPO4'
                                    '0300'
                                    'X'
                                    'BDC_OKCODE'
                                    '=FURT'.
 
    PERFORM FRM_INPUT_BDCDATA USING ' '
                                    ' '
                                    ' '
                                    'SVALD-VALUE(01)'
                                    'TH_IN_ZC30-KOKRS'.
 
*-- ③内部指図登録:第一画面
    PERFORM FRM_INPUT_BDCDATA USING 'SAPMKAUF'
                                    '0100'
                                    'X'
                                    'BDC_OKCODE'
                                    '/00'.
 
*-- ④内部指図登録:マスタデータ
    IF TH_IN_ZC30-FURIW IS INITIAL.
      PERFORM FRM_INPUT_BDCDATA USING 'SAPMKAUF'
                                      '0600'
                                      'X'
                                      'BDC_OKCODE'
                                      '=ABVO'.
    ELSE.
      PERFORM FRM_INPUT_BDCDATA USING 'SAPMKAUF'
                                      '0600'
                                      ' '
                                      'BDC_OKCODE'
                                      '=BUT3'.
    ENDIF.
 
    PERFORM FRM_INPUT_BDCDATA USING ' '
                                    ' '
                                    ' '
                                    'COAS-AUFNR'
                                    'TH_IN_ZC30-AUFNR'.
 
    PERFORM FRM_INPUT_BDCDATA USING ' '
                                   ' '
                                   ' '
                                   'COAS-KTEXT'
                                   'TH_IN_ZC30-KTEXT'.
 
    PERFORM FRM_INPUT_BDCDATA USING ' '
                                   ' '
                                   ' '
                                   'COAS-BUKRS'
                                  'C001'.
 
    PERFORM FRM_INPUT_BDCDATA USING ' '
                                   ' '
                                   ' '
                                   'COAS-KOSTV'
                                   'TH_IN_ZC30-KOSTV'.
*-- ⑤ 決済規則更新 概要
    PERFORM FRM_INPUT_BDCDATA USING 'SAPLKOBS'
                                    '0130'
                                    'X'
                                    'BDC_OKCODE'
                                    '=BACK'.
 
    PERFORM FRM_INPUT_BDCDATA USING ' '
                                    ' '
                                    ' '
                                    'COBRB-KONTY(01)'
                                    'G/L'.
 
    PERFORM FRM_INPUT_BDCDATA USING ' '
                                    ' '
                                    ' '
                                    'DKOBR-EMPGE(01)'
                                    'TH_IN_ZC30-FURIWA'.
 
    PERFORM FRM_INPUT_BDCDATA USING ' '
                                    ' '
                                    ' '
                                    'COBRB-PERBZ(01)'
                                    'TH_IN_ZC30-KTYPE'.
*-- ⑥内部指図登録:マスタデータ
    PERFORM FRM_INPUT_BDCDATA USING 'SAPMKAUF'
                                    '0600'
                                    ' '
                                    'BDC_OKCODE'
                                    '=VARI'.
 
*-- ⑦内部指図登録:マスタデータ
    PERFORM FRM_INPUT_BDCDATA USING 'SAPMKAUF'
                                    '0600'
                                    ' '
                                    'BDC_OKCODE'
                                    '=SICH'.
上記の書き方が不正です。原因としてはテーブルTD_BDCDATAの中で、下記の五つのフィールドが存在しています。PROGRAM(BDC モジュールプール), DYNPRO(BDC Dynpro 番号), DYNBEGIN(BDC Dynpro 開始), FNAM(項目名), FVAL(BDC 項目値)です。中で、DYNBEGIN(BDC Dynpro 開始)= X の場合、BDCSCREENです。こういう場合だったら、FNAM(項目名), FVAL(BDC 項目値)がスペースでなければなりません。それ以外の場合さえすれば、FNAM(項目名), FVAL(BDC 項目値)がスペースいがいとなります。ですから、DynproとFILEDを二つのFROMに分けて、書くことにしました。
*- 内部指図登録(月次原価振替)
*-- ①内部指図登録:第一画面
    PERFORM FRM_INPUT_DYNPRO USING 'SAPMKAUF' '0100'.
 
    PERFORM FRM_INPUT_FIELD USING: 'BDC_OKCODE' '=KOKR',
                                    'COAS-AUART' TH_IN_ZC30-AUART.
*-- ②管理領域設定(プログラム:SAPLSPO4 Dynpro:0300)
    PERFORM FRM_INPUT_DYNPRO USING 'SAPLSPO4' '0300'.
 
    PERFORM FRM_INPUT_FIELD USING: 'BDC_OKCODE'      '=FURT',
                                    'SVALD-VALUE(01)' TH_IN_ZC30-KOKRS
.
 
*-- ③内部指図登録:第一画面(プログラム:SAPMKAUF Dynpro:0100)
    PERFORM FRM_INPUT_DYNPRO USING 'SAPMKAUF' '0100'.
 
    PERFORM FRM_INPUT_FIELD USING 'BDC_OKCODE' '/00'.
 
*-- ④内部指図登録:マスタデータ(プログラム:SAPMKAUF Dynpro:0600)
    PERFORM FRM_INPUT_DYNPRO USING 'SAPMKAUF' '0600'.
 
    PERFORM FRM_INPUT_FIELD USING: 'BDC_OKCODE' '=ABVO',
                                   'COAS-AUFNR' TH_IN_ZC30-AUFNR,
                                    'COAS-KTEXT' TH_IN_ZC30-KTEXT,
                                    'COAS-BUKRS' 'C001',
                                    'COAS-KOSTV' TH_IN_ZC30-KOSTL.
 
*-- ⑤決済規則更新:概要(プログラム:SAPLKOBS Dynpro:0130)
    PERFORM FRM_INPUT_DYNPRO USING 'SAPLKOBS' '0130'.
 
    PERFORM FRM_INPUT_FIELD USING: 'BDC_OKCODE' '=BACK',
                                    'COBRB-KONTY(01)' 'G/L',
                                    'DKOBR-EMPGE(01)'
                                    TH_IN_ZC30-FURIW,
                                    'COBRB-PERBZ(01)'
                                    TH_IN_ZC30-KTYPE.
 
   CLEAR:
      TH_IN_ZC30.
 
 ENDLOOP.
*&---------------------------------------------------------------------*
*       ディンプロのセット
*----------------------------------------------------------------------*
*      -->I_PROGRAM BDC モジュールプール(USINGパラメータ)
*      -->I_DYNPRO   BDC Dynpro 番号(USINGパラメータ)
*----------------------------------------------------------------------*
FORM FRM_SET_BDC_DYNPRO USING    I_PROGRAM
                                  I_DYNPRO.
 
 DATA:
    LTH_BDC LIKE BDCDATA.
 
  LTH_BDC-PROGRAM = I_PROGRAM.
 LTH_BDC-DYNPRO   = I_DYNPRO.
 LTH_BDC-DYNBEGIN = 'X'.
 
 APPEND LTH_BDC TO TD_BDC.
 
ENDFORM.                    " FRM_SET_BDC_DYNPRO
*&---------------------------------------------------------------------*
*&      Form FRM_SET_BDC_FIELD
*&---------------------------------------------------------------------*
*       項目値のセット
*----------------------------------------------------------------------*
*      -->I_FNAM     項目名(USINGパラメータ)
*      -->I_FVAL     BDC 項目値(USINGパラメータ)
*----------------------------------------------------------------------*
FORM FRM_SET_BDC_FIELD USING    I_FNAM
                                 I_FVAL.
 
 DATA:
    LTH_BDC LIKE BDCDATA.
 
 LTH_BDC-FNAM     = I_FNAM.
 LTH_BDC-FVAL     = I_FVAL.
 
 APPEND LTH_BDC TO TD_BDC.
 
ENDFORM.                    " FRM_SET_BDC_FIELD
 
*&---------------------------------------------------------------------*
*&      Form FRM_INPUT_BDCDATA
*&---------------------------------------------------------------------*
*       BDC登録
*----------------------------------------------------------------------*
*      -->I_PROGRAM    (USINGパラメータ)
*      -->I_DYNPRO     (USINGパラメータ)
*      -->I_DYNBEGIN   (USINGパラメータ)
*      -->I_FNAM       (USINGパラメータ)
*      -->I_FVAL       (USINGパラメータ)
*----------------------------------------------------------------------*
FORM FRM_INPUT_BDCDATA USING I_PROGRAM
                              I_DYNPRO
                              I_DYNBEGIN
                              I_FNAM
                              I_FVAL.
TD_BDCTAB-PROGRAM    = I_PROGRAM.                "BDC モジュールプール
TD_BDCTAB-DYNPRO     = I_DYNPRO.                 "BDC Dynpro 番号
TD_BDCTAB-DYNBEGIN   = I_DYNBEGIN.               "BDC Dynpro 開始
TD_BDCTAB-FNAM       = I_FNAM.                   " 項目名
TD_BDCTAB-FVAL       = I_FVAL.                   "BDC 項目値
 
APPEND  TD_BDCTAB.
CLEAR TD_BDCTAB.
 
ENDFORM.                    " FRM_INPUT_BDCDATA
 
*- INSERT 処理を行う
   PERFORM FRM_BDC_INSERT TABLES TD_BDCTAB.
 
*- CLOSE GROUP
   PERFORM FRM_BDC_CLOSE_GROUP.
 
ENDFORM.                   " FRM_ZC30_BDC
*- INSERT 処理を行う
   PERFORM FRM_BDC_INSERT TABLES TD_BDCTAB.
*&---------------------------------------------------------------------*
*&      Form FRM_BDC_INSERT
*&---------------------------------------------------------------------*
*       INSERT処理を行う
*----------------------------------------------------------------------*
*      -->T_TAB BDCDATA(USINGパラメータ)
*----------------------------------------------------------------------*
FORM FRM_BDC_INSERT TABLES   T_TAB.
 
CALL FUNCTION 'BDC_INSERT'
 EXPORTING
    TCODE                  = 'KO01'
 TABLES
    DYNPROTAB              = T_TAB
 EXCEPTIONS
    INTERNAL_ERROR         = 1
    NOT_OPEN               = 2
    QUEUE_ERROR            = 3
    TCODE_INVALID          = 4
    PRINTING_INVALID       = 5
    POSTING_INVALID        = 6
    OTHERS                 = 7.
IF SY-SUBRC <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
 
ENDFORM.                    " FRM_BDC_INSERT
 
*- CLOSE GROUP
   PERFORM FRM_BDC_CLOSE_GROUP.
*&---------------------------------------------------------------------*
*&      Form FRM_BDC_CLOSE_GROUP
*&---------------------------------------------------------------------*
*       CLOSE GROUP
*----------------------------------------------------------------------*
*       なし
*--------------------------------------------------------------------- -*
FORM FRM_BDC_CLOSE_GROUP .
 
CALL FUNCTION 'BDC_CLOSE_GROUP'
 EXCEPTIONS
    NOT_OPEN          = 1
    QUEUE_ERROR       = 2
    OTHERS            = 3.
IF SY-SUBRC <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
 
ENDFORM.                    " FRM_BDC_CLOSE_GROUP
二、
     テーブルBDCTABにデータを書き込む
     トランザクションを呼び出す
方法1と同じように引数をBDCTABに受け渡して、ループを終わるまでに、トランザクションをコールする。
* LOOP AT TD_BDCGETU INTO TH_GETUJI.
 loop at td_getuji into th_getuji.
 
    REFRESH TD_BDC.
 
*   ① 内部指図登録 第一画面 プログラム :SAPMKAUF Dynpro:0100)
    PERFORM FRM_SET_BDC_DYNPRO USING 'SAPMKAUF' '0100'.
 
    PERFORM FRM_SET_BDC_FIELD USING: 'BDC_OKCODE' '=KOKR',
                                      'COAS-AUART' TH_GETUJI-AUART.
 
*   ② 管理領域設定 プログラム :SAPLSPO4 Dynpro:0300)
    PERFORM FRM_SET_BDC_DYNPRO USING 'SAPLSPO4' '0300'.
 
    PERFORM FRM_SET_BDC_FIELD USING: 'BDC_OKCODE'      '=FURT',
                                      'SVALD-VALUE(01)' TH_GETUJI-KOKRS.
 
*   ③内部指図登録:第一画面(プログラム:SAPMKAUF Dynpro:0100)
    PERFORM FRM_SET_BDC_DYNPRO USING 'SAPMKAUF' '0100'.
 
    PERFORM FRM_SET_BDC_FIELD USING 'BDC_OKCODE' '/00'.
 
*   ④内部指図登録:マスタデータ(プログラム:SAPMKAUF Dynpro:0600)
    PERFORM FRM_SET_BDC_DYNPRO USING 'SAPMKAUF' '0600'.
 
    PERFORM FRM_SET_BDC_FIELD USING: 'BDC_OKCODE' '=ABVO',
                                      'COAS-AUFNR' TH_GETUJI-AUFNR,
                                      'COAS-KTEXT' TH_GETUJI-KTEXT,
                                      'COAS-BUKRS' 'C001',
                                      'COAS-KOSTV' TH_GETUJI-KOSTL.
 
*   ⑤決済規則更新:概要(プログラム:SAPLKOBS Dynpro:0130)
    PERFORM FRM_SET_BDC_DYNPRO USING 'SAPLKOBS' '0130'.
 
    PERFORM FRM_SET_BDC_FIELD USING: 'BDC_OKCODE' '=BACK',
                                      'COBRB-KONTY(01)' 'G/L',
                                      'DKOBR-EMPGE(01)'
                                      TH_GETUJI-FURIWAKEKAMOKU,
                                      'COBRB-PERBZ(01)'
                                      TH_GETUJI-KESSAITYPE.
*   バッチインプット処理の実行
    CALL TRANSACTION    'KO01'  TCODE
               USING    TD_BDC   BDC用TABLE
               MODE     'A'      処理モード
               UPDATE   'S'.     更新モード
 
  ENDLOOP.
 
MODEに下記の四種類があります。
'A' 画面表示
'E' エラー発生時のみ表示
'N' 表示なし
'P' 表示なし ; デバッグ可
MODE オプションを省略すると、処理モードは 'A' になります。
処理モード 'E' BDC データの最後に到達したために画面が表 示されると、処理モード 'A' に自動的に切り替わります。
UPDATE f
機能
更新モード f は更新タイプを指定します。可能値は次のとおりで す。
'A' (非同期更新)
'S' (同期更新)
'L' (ローカル更新)
オプション UPDATE を省略すると、更新モードは 'A' になります。
まとめ:二つの方法の中で、方法2がよく使われています。両者の区別として、方法2で作成したBDCが直接に更新することができます。方法1で作成したのは関連部門の許可をもらわないと、更新できないです。
例2:以下はBDCDATAの編集の書き方です。とても簡単で、分かりやすいです。
*&---------------------------------------------------------------------*
*&       Form SET_BDCDATA
*&---------------------------------------------------------------------*
*        BDCDATAの編集
*----------------------------------------------------------------------*
*       -->I_DYNBEGIN    開始フラグ
*       -->I_FNAM        プログラムID or 項目名
*       -->I_FVAL        DYNPRO番号 or 項目値
*----------------------------------------------------------------------*
FORM SET_BDCDATA USING    I_DYNBEGIN TYPE ANY
                          I_FNAM     TYPE ANY
                          I_FVAL     TYPE ANY.
 
 CLEAR TH_BDCDATA.
* プログラム名,Dynpro番号を指定
 IF I_DYNBEGIN = ‘X’.
    TH_BDCDATA-PROGRAM = I_FNAM.
    TH_BDCDATA-DYNPRO   = I_FVAL.
    TH_BDCDATA-DYNBEGIN = 'X'.
 ELSE.
* 項目名,編集値を設定
    TH_BDCDATA-FNAM     = I_FNAM.
    TH_BDCDATA-FVAL     = I_FVAL.
 ENDIF.
* バッチインプット用内部テーブルへ追加
 APPEND TH_BDCDATA TO TD_BDCDATA.
ENDFORM.                     " SET_BDCDATA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值