SAPシステムからのデータ取得(1)

SAPシステムから目的のデータを抜き取って、EXCELに読み込み、設計資料の参考にしたり、内容を分析したりすることは難しいことではありません。

  1. SAPにログオンします
  2. T-cd:SE11を実行して、目的のテーブル名を入力し、照会ボタンを押下します。この後"内容"というボタン(Ctrl+Shift+F10)を押下するとデータブラウザテーブルという画面に切り替わってテーブルのデータを選択するための入力ができるようになります。条件を入力後、実行ボタン(F8)を押下するとデータが一覧されます。
  3. 編集メニューからダウンロードを選択すると、テーブルの内容を変換なし、スプレッドシート、RTF形式、HTML形式、クリップボードの中から選択してダウンロードすることができます。
  4. Excelにインポートして成形します。

ただ、これらの工程を定常的に行うとなると結構な手間となります。SAPにはRFCライブラリというものが用意されており、これを使用することでプログラムからSAPシステムに接続してデータを取得することが可能になります。RFCライブラリが対応している主な言語としては、JavaC言語VBAVisualBasicなどがあります。ただし、RFCライブラリは無償提供という訳ではなく、SAPの正規ユーザや開発ライセンスを購入しているユーザ様が使用できるものなので、そこらへんはご注意ください。まあ通常SAPのプロジェクトで開発を行っている場合はここら辺で問題となるケースはないと思いますが。
データの取得にはRFC_READ_TABLEという汎用モジュールを使用します。これはSAPの標準モジュールでテーブル名を引数に渡して実行するとデータを返却してくれるものなのですが、元々の目的はサンプルです。(と、SAP NOTEに書いてあります)つまり業務で使用されることを想定してないそうです。何が問題かというと、列項目の長さの合計が大きい場合に対応していません。具体的にいうと列の項目長の合計が512バイトを超えるようなデータを取得しようとすると期待通りのデータが取得できません。業務に使用する場合は注意しましょう。
さて、今回はEXCELと相性が良いということでExcel VBAでデータを取得します。プログラムの基本的な流れとしては、

  1. SAPにログオンする処理
  2. RFC_READ_TABLEを呼び出す処理
  3. 呼び出した値をEXCELに出力する処理
  4. SAPからログオフする処理

SAPにログオン・ログオフは以下のようになります。

Public R3 As Object
Private Sub R3_LOGON()
    Set R3 = CreateObject("SAP.Functions")
    'R3.Connection.System = "denmark"
    'R3.Connection.client = "100"
    'R3.Connection.User = "SAP*"
    'R3.Connection.Password = ""
    'R3.Connection.Language = "EN"    
    '自動ログインする場合は、Connection.Logon(0,True)にして、
    '上のパラメータを設定すればOK.
    If R3.Connection.Logon(0, False) <> True Then
        MsgBox "ログインしてください"
        Exit Sub
    End If
End Sub

Private Sub R3_LOGOFF()
    R3.Connection.LOGOFF
End Sub

SAP GUIがPCにインストールされている環境では、CreateObject("SAP.Functions")によりSAPにログインするためのオブジェクトが取得できます。別途Excel VBAで参照設定などを行わなくても問題ありません。汎用モジュールをコールするためには、SAPシステムにログオンしている状態が必要なため、RFC_READ_TABLEを呼び出す前にログオン処理を行う必要があります。