将第三方应用程序(MS Excel)与SAP R/3连接
我正在为MS Excel(VBA宏)与SAP的通信制定一个解决方案。有时很难联系到您所在公司的SAP支持人员,因此最好找到自己的解决方案 关于这个原因,我从基本的“用SAP R/3连接我自己的用户配置文件”开始。通过谷歌的研究,我发现了一个很好的连接方式,下面是代码的关键部分:将第三方应用程序(MS Excel)与SAP R/3连接,excel,vba,saprfc,sap-basis,Excel,Vba,Saprfc,Sap Basis,我正在为MS Excel(VBA宏)与SAP的通信制定一个解决方案。有时很难联系到您所在公司的SAP支持人员,因此最好找到自己的解决方案 关于这个原因,我从基本的“用SAP R/3连接我自己的用户配置文件”开始。通过谷歌的研究,我发现了一个很好的连接方式,下面是代码的关键部分: Dim objBAPIControl As Object 'Function Control (Collective object) Dim sapConnection As Object 'Connection obj
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"
(和更多用户配置文件值……)
稍后,我执行了第二步,即读取一些表(在本例中,是Users表)
与SAP的连接是相同的,但一旦登录:
If objBAPIControl.Connection.Logon(0, False) <> True Then
Exit Sub
End If
Set RfcCallTransaction = objBAPIControl.Add("RFC_CALL_TRANSACTION_USING")
在这一部分之前,我确信有三件事:
1) 它确实连接到SAP R/3
2) 它运行“SE16”事务
3) 它可以从BdcTable接收批输入
缺少的部分是,如何“格式化”BdcTable(我认为它必须是ABAP语言)以上载我希望在SE16上运行的确切数据(表)
编辑:
我找到了一个我正在寻找的“格式化”表的示例:
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宏的一部分。但我不知道这些填充意味着什么
完成此任务后,第二个挑战是将数据自动保存到MS Excel工作表中
(你能告诉我所有的编辑工作是否正常,还是我应该粘贴新代码并删除历史记录?)
编辑:
我问了与SCN平台中的摘要相同的问题。你可以复习一下
编辑:
我在本次挑战中的目标是通过VBA宏运行事务(我要查找的TCODE是LM02,仓库的仓位到仓位事务),上载从MS Excel文件提取的一些数据并执行事务
--
上次编辑:
如果没有SAP It支持,这项任务似乎无法完成。
12年9月19日|仍在研究这一主题。25/09/12 |
2012年10月2日-->我将尝试进行日志记录,运行基本Tcode并显示报告。我会在仔细检查后对结果进行评论。我很抱歉,我的朋友,但你不会得到比这更进一步的结果 您在代码中所做的是调用BAPI(基本上是一个RFC启用函数)。换句话说,SAP提供了标准的函数,可以从不同的系统调用这些函数。你可以认为这是一个老式的API。也可以创建自定义BAPI,但实际上几乎没有人这样做 好消息是,通常,我说过,BAPI通常会带来与标准事务相同的功能。所以从理论上讲,通过事务代码可以做的事情,可以通过BAPI调用来做 BAPI与交易代码的关系不是一对一。例如,您可以使用单个事务来插入、搜索、删除和编辑特定类型的文档,但要使用BAPI调用实现这一点,您将需要许多事务(一个用于创建文档,一个用于删除,一个用于检索等)
有一个名为“BAPI”的事务(可能是唯一一个名称合适的tx代码),其中包含系统中的所有BAPI、其参数和(一些糟糕的)文档。注意:这是@fabiopagoti答案的另一个建议,完全不同的方法
如果——正如你在另一篇评论中所建议的那样——你想将数据导入到R/3应用程序中,你最好不要试图绕过该公司。相反,您可以尝试与他们交谈并访问(LSMW)。这是一个功能强大的工具包,允许您录制对话步骤(在特定条件下),导入一些数据(例如,从CSV文件),然后将录制和数据结合起来,以不同的数据“重播”相同的步骤-所有这些都使用标准功能,而无需绕过任何安全检查 好吧,让我引用我得到的最佳答案。我把它贴在这里是因为我想其他人会有和我一样的问题 第一步是了解您的客户是否有RFC或BAPI 事务,但您没有ABAP事务的权限, 所以我不知道你怎么知道 理论上,您可以尝试在WEB或SAP中查找它 文档,但是(如果存在)您需要检查接口 其中定义了导入/导出参数…因此您应该 拥有SE37的授权 下一步取决于能否找到RFC函数 对于LM02: 如果有函数,您需要了解如何运行它 如果没有函数。你需要明白,如果你是个骗子或骗子 可以开发一个定制的 马克斯
感谢您的研究工作。谢谢您的建议。另外,在没有SAP it支持和ABAP编码的帮助下,是否可以将一些数据从Excel“加载”到SAP?这是真的@vwegert。我忘了那个。@fabiopagoti Set RfcCallTransaction=Functions.Add(“RFC_CALL_TRANSACTION”)仍在工作或现在已过时?@fabiopagoti“新”功能模块现在是我稍后将用此代码更新编辑我的问题。@BrOSs据我所知(我在SAP出版社的官方C_TAW12_70书上读过此内容)所有的BAPI:1)都是RFC 2)以“BAPI”开始3)有一个“BAPIRETURN”返回参数4)在不检查BAPI txcode的情况下处理业务对象我假设RFC#U调用#U事务#U使用的不是BAPI,因为它违反了#2和#4(可能是#3)。它们很难达到(可能是因为在我们的制造公司,IT SAP支持实际位于另一个国家/地区),但谢谢你的建议。你是对的,我正在寻找从Excel自动导入一些信息到R/3应用程序。@fabiopagoti你没有建设性-你总是把运行ERP软件的内部组织的失败归咎于软件本身吗?@vwegert我将删除我的评论。不过我是在开玩笑。正如常见问题解答说,“带上你的幽默感”——我试过这么做。如果我失败了,很抱歉。信用:
If objBAPIControl.Connection.Logon(0, False) <> True Then
Exit Sub
End If
Set RfcCallTransaction = objBAPIControl.Add("RFC_CALL_TRANSACTION_USING")
RfcCallTransaction.exports("tcode") = "SE16"
RfcCallTransaction.exports("mode") = "N"
Set BdcTable = RfcCallTransaction.Tables("bt_data")
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"