2

MS Excel (VBA マクロ) を SAP と通信するためのソリューションを考えています。あなたが働いている会社の SAP サポート担当者に連絡するのが難しすぎる場合があるため、独自のソリューションを見つけ出すことをお勧めします。

その理由について、私は「自分のユーザー プロファイルを SAP R/3 に接続する」という基本的なことから始めました。Google の調査を行ったところ、接続性に関する優れた論文が見つかりました。コードの重要な部分は次のとおりです。

Dim objBAPIControl As Object 'Function Control (Collective object)
Dim sapConnection As Object 'Connection object
Set objBAPIControl = CreateObject("SAP.Functions")
Set sapConnection = objBAPIControl.Connection

sapConnection.client = "32"
sapConnection.user = "myUser"
sapConnection.Language = "EN"
sapConnection.hostname = "qwerty.example.com"
sapConnection.Password = "myPass"

(およびその他のユーザー プロファイル値......)

その後、いくつかのテーブル (この場合はユーザー テーブル) を読み取る 2 番目のステップを実行しました。

If sapConnection.logon(1, True) <> True Then
MsgBox "No connection to R/3!"
Exit Sub 'End program
End If
Set objUserList = objBAPIControl.Add("BAPI_USER_GETLIST")
Set objUserDetail = objBAPIControl.Add("BAPI_USER_GET_DETAIL")

returnFunc = objUserList.Call
If returnFunc = True Then
Dim objTable As Object
Set objTable = objUserList.Tables("USERLIST")
ActiveSheet.Cells(1, 1) = "User count :" & objTable.RowCount

しかし、ここで私の質問があります: VBA から起動されたトランザクション (LM02、LS26、LX03 など) を実行するにはどうすればよいですか?

君たちありがとう!

PS。MS Office 2007 と Windows 7 を使用しています。

-- 編集:

ちょっと、チャレンジの攻撃方法を変更します(他の人を助けるために上記のOPを許可します)

これは最初に追加する必要があります

Dim RfcCallTransaction As Object
Dim Messages As Object
Dim BdcTable As Object

SAP への接続は同じですが、ログインすると次のようになります。

If objBAPIControl.Connection.Logon(0, False) <> True Then
    Exit Sub
End If

Set RfcCallTransaction = objBAPIControl.Add("RFC_CALL_TRANSACTION_USING") 

ここRFC_CALL_TRANSACTIONで、古い関数の「新しい」引数を見つけることができます。

    RfcCallTransaction.exports("tcode") = "SE16"
    RfcCallTransaction.exports("mode") = "N"
Set BdcTable = RfcCallTransaction.Tables("bt_data")

この部分まで、私は次の 3 つのことを確信しています。

1) SAP R/3 に接続します

2) 「SE16」トランザクションを実行します

3) BdcTable からバッチ入力を受け取ることができます

欠けている部分は、SE16で実行したい正確なデータ(テーブル)をアップロードするために、BdcTable(ABAP言語である必要があると思います)を「フォーマット」する方法です。

EDITED:探している「フォーマット」テーブルの例を見つけました:

add_bdcdata BdcTable, "SAPLSETB", "230", "X", "", ""
add_bdcdata BdcTable, "", "", "", "BDC_CURSOR", "DATABROWSE-TABLENAME"
add_bdcdata BdcTable, "", "", "", "BDC_OKCODE", "=ANZE"
add_bdcdata BdcTable, "", "", "", "DATABROWSE-TABLENAME", "KNA1"
add_bdcdata BdcTable, "/1BCDWB/DBKNA1", "1000", "X", "", ""
add_bdcdata BdcTable, "", "", "", "BDC_CURSOR", "MAX_SEL"
add_bdcdata BdcTable, "", "", "", "BDC_OKCODE", "=ONLI"
add_bdcdata BdcTable, "", "", "", "LIST_BRE", "250"
add_bdcdata BdcTable, "", "", "", "MAX_SEL", "5"
add_bdcdata BdcTable, "SAPMSSY0", "120", "X", "", ""
add_bdcdata BdcTable, "", "", "", "BDC_CURSOR", "01/02/2012"
add_bdcdata BdcTable, "", "", "", "BDC_OKCODE", "=%EX"
add_bdcdata BdcTable, "/1BCDWB/DBKNA1", "1000", "X", "", ""
add_bdcdata BdcTable, "", "", "", "BDC_OKCODE", "/EE"
add_bdcdata BdcTable, "", "", "", "BDC_CURSOR", "I1-LOW"
add_bdcdata BdcTable, "SAPLSETB", "230", "X", "", ""
add_bdcdata BdcTable, "", "", "", "BDC_OKCODE", "/EBACK"
add_bdcdata BdcTable, "", "", "", "BDC_CURSOR", "DATABROWSE-TABLENAME"

上記のコードはまだ VBA マクロの一部です。しかし、これらすべての塗りつぶしが何を意味するのかわかりません。

このタスクが完了した後の 2 番目の課題は、データを自動的に MS Excel シートに保存することです。

(すべての編集が機能しているかどうか、または新しいコードを貼り付けて履歴を消去する必要があるかどうか教えていただけますか?)

編集済み: SCN プラットフォームの概要と同じ質問をしました。ここで確認できます。

編集: この課題の私の目的は、VBA マクロを介してトランザクション (私が探している TCODE は LM02、倉庫のビンからビンへのトランザクション) を実行し、MS Excel ファイルから抽出された日付をアップロードし、トランザクションを実行することです。

-- 最終編集: このタスクは、SAP IT サポートの助けなしでは実行できないようです。19/9/12 | このトピックについてはまだ調査中です。25/09/12 | 02/OCT/12 -->ロギング用にAutoITを試し、基本的な Tcode を実行してレポートを表示します。再確認した後、結果にコメントします。

4

3 に答える 3

2

注:これは、@ fabiopagotiの回答に代わる提案であり、まったく異なるアプローチです。

別のコメントで示唆したように、データをR / 3アプリケーションにインポートしたい場合は、会社のITをバイパスしようとしない方がよいでしょう。代わりに、彼らと話をして、レガシーシステム移行ワークベンチ(LSMW)にアクセスすることができます。これは、ダイアログステップを(特定の条件下で)記録し、一部のデータ(たとえば、CSVファイルから)をインポートし、記録とデータを組み合わせて、同じステップを異なるデータで「再生」できる強力なツールキットです。すべて標準を使用します。機能し、セキュリティチェックをバイパスしません。

于 2012-09-11T18:10:10.423 に答える
1

さて、私が得た最良の答えを引用しましょう。他の誰かが私と同じ質問をするだろうと思うので、ここに貼り付けます。

ステップ 1 は、トランザクションに RFC または BAPI があるかどうかを理解することですが、ABAP トランザクションの権限がないため、それを見つける方法がわかりません。

理論的には、WEB または SAP ドキュメントで検索することができますが、(存在する場合) インポート/エクスポート パラメータが定義されているインターフェイスを確認する必要があります。そのため、SE37 の権限が必要です。 .

次のステップは、LM02 の RFC 関数を見つけることができるかどうかによって異なります。

関数がある場合は、その実行方法を理解する必要があります

機能がなければ。あなたまたは abaper がカスタムのものを開発できるかどうかを理解する必要があります。

マックス

調査にご尽力いただきありがとうございます。

于 2012-09-13T15:08:04.157 に答える
0

友達に申し訳ありませんが、これ以上のことはできません。

コードで行っているのは、BAPI(基本的にはRFCイネーブル関数)を呼び出すことです。つまり、SAPは、さまざまなシステムから呼び出される標準関数を提供します。これは昔ながらのAPIと考えることができます。カスタムBAPIを作成することも可能ですが、実際にはほとんど誰もこれを行いません。

幸いなことに、通常、BAPIは標準のトランザクションと同じ機能を提供します。したがって、理論的には、トランザクションコードを介して実行できることは、BAPI呼び出しを介して実行できます。

トランザクションコードとのBAPIの関係は1対1ではありません。たとえば、特定の種類のドキュメントの挿入、検索、削除、編集を可能にする単一のトランザクションを使用できますが、BAPI呼び出しを使用してこれを実現するには、それらの多くが必要になります(1つはドキュメントの作成、1つは削除、もう1つは取得など)。

「BAPI」(まともな名前を持つ唯一のtxコード)と呼ばれるトランザクションがあります。これには、システム内のすべてのBAPI、そのパラメーター、および(一部の貧弱な)ドキュメントが含まれています。

于 2012-09-11T17:16:45.060 に答える