1

Excel マクロ、VBA から SAP 関数を呼び出そうとしています。接続はできますが、関数を呼び出す行にコードが到達するたびに、エラー メッセージが表示されます。

実行時エラー '61704': 内部アプリケーション エラーです。

私のコードは次のとおりです。

Dim functionCtrl As Object
Dim sapConnection As Object
Dim theFunc As Object
Dim PoNumber

Set functionCtrl = CreateObject("SAP.Functions")
Set sapConnection = functionCtrl.Connection
sapConnection.System = ""
sapConnection.Client = ""
sapConnection.user = ""
sapConnection.Password = ""
sapConnection.Language = ""

If sapConnection.logon(0, False) <> True Then
MsgBox "No connection to R/3 System"
Exit Sub                                           'End program
End If
Set theFunc = functionCtrl.Add("BAPI_REQUISITION_CREATE")

最後の行が実行されたときにエラーが発生します。参照に librfc32.dll を追加しました。GUI スクリプトを実行できます (SAP から記録)。

許可などと関係がありますか?

ありがとう

4

2 に答える 2

1

私はあなたの質問に正確に答えるつもりはありませんが、とにかく有益な情報を提供したいと思っています. 私は現在、QuickBooks から SAP への会計データの移行に取り組んでいます。スクリプトと Web インターフェイスには Ruby と Ruby on Rails を使用しました。

スクリプト作成に慣れているので、次のことを試してみることをお勧めします。

Ruby とライブラリのインストールは非常に簡単です。

構成ファイルを作成する必要がある場合があります。

# c:\tmp\sapdev.yml
# adjust parameters to yours
ashost: your.sap.server.ip
sysnr: "00"
client: "100"
user: yoursaplogin
passwd: yoursappwd
lang: EN
trace: "1"    

次に、次のようなことを試してください。

# c:\tmp\sap-test.rb
require 'rubygems'
require 'sapnwrfc'

SAPNW::Base.config_location = "c:\\tmp\\sapdev.yml"
SAPNW::Base.load_config
conn = SAPNW::Base.rfc_connect
attrib = conn.connection_attributes
# here you will find if you can connect to SAP programmatically
puts "\n>>> Connection Attributes: #{attrib.inspect}\n"

# discover the BAPI function
call = conn.discover("BAPI_ACC_DOCUMENT_CHECK").new_function_call

# set up parameters. in this case DOCUMENTHEADER, ACCOUNTGL and CURRENCYAMOUNT
call.DOCUMENTHEADER = { 
  "HEADER_TXT" => "EXCEL POST", 
  "COMP_CODE" => "2080", 
  "DOC_DATE" => "20090123", 
  "PSTNG_DATE" => "20090123", 
  "USERNAME" => "YOURSAPLOGIN", 
  "BUS_ACT" => "RFBU", 
  "DOC_TYPE" => "SA" # CUSTOMER INVOICE 
}
puts "\n>>> DOCUMENTHEADER:"
p call.DOCUMENTHEADER

call.ACCOUNTGL = [
  {"ITEMNO_ACC" => "0000000001", "GL_ACCOUNT" =>"0000500000" },
  {"ITEMNO_ACC" => "0000000002", "GL_ACCOUNT" =>"0000799900", "ORDERID" => "CS_USD4110" }
]
puts "\n>>> ACCOUNTGL:"
p call.ACCOUNTGL

call.CURRENCYAMOUNT = [
   {"ITEMNO_ACC" => "0000000001", "CURR_TYPE" => "00", "CURRENCY" => "USD", "AMT_DOCCUR" => "-0.70" }, 
   {"ITEMNO_ACC" => "0000000002", "CURR_TYPE" => "00", "CURRENCY" => "USD", "AMT_DOCCUR" => "0.70" }
]
puts "\n>>> CURRENCYAMOUNT:"
p call.CURRENCYAMOUNT

call.invoke
puts "\n>>> call.RETURN:" 
message = []
call.RETURN.each do |r|
    message << r["MESSAGE"].strip
end
message.uniq!
puts message.join("\n")

GLアカウントなどに関するエラーが表示される場合がありますが、これは私の実際の例です。ここで重要なのは、RFC 接続を確立することです。BAPI_REQUISITION_CREATE次に、呼び出しの準備、入力call.REQUISITION_ITEMS、呼び出し、確認に進むことができますcall.RETURN

また、Ruby と Ruby on Rails が Excel からデータを読み取って、さまざまなデータベースと統合できることも便利です。これは私のために働いています。

乾杯、

アレクセイ

于 2012-07-31T07:47:28.753 に答える
0

SAP にアクセスするには、最低限 s_RFC が必要です。これについては、SAP 管理セクションを取得し、必要な (または必要でない) 他の権限オブジェクトを判断する必要があります。

于 2012-07-06T16:23:36.287 に答える