我不会完全回答你的问题,但我希望无论如何都能提供有用的信息。我目前致力于将会计数据从 QuickBooks 迁移到 SAP。我使用 Ruby 和 Ruby on Rails 编写脚本和 Web 界面。
由于您对脚本编写感到满意,因此我建议您尝试以下方法:
安装 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 读取数据并与不同的数据库集成,这很方便。这对我有用。
干杯,
阿列克谢