2

我正在制定与 SAP 通信 MS Excel(VBA 宏)的解决方案。有时很难联系到您工作的任何公司的 SAP 支持人员,因此最好找出自己的解决方案。

出于这个原因,我从基本的开始:“将我自己的用户配置文件与 SAP R/3 连接”。做一些谷歌研究,我发现了一篇关于连接性的好论文,这里是代码的关键部分:

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"

(以及更多用户配置文件值............)

稍后,我做了第二步,即读取一些表(在本例中为用户表)

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")

在这部分之前,我确信三件事:

1) 它确实连接到 SAP R/3

2)它运行“SE16”事务

3) 它可以接收来自 BdcTable 的 Batch 输入

缺少的部分是,如何“格式化” 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,仓库的 bin 到 bin 交易),上传从 MS Excel 文件中提取的一些日期并执行交易。

-- 最后一次编辑:如果没有 SAP IT 支持的帮助,这项任务似乎无法完成。2012 年 9 月 19 日 | 还在研究这个话题。25/09/12 | 02/OCT/12 --> 我将尝试使用 AutoIT进行日志记录,运行基本 Tcode 并显示报告。在我仔细检查后,我会评论我的结果。

4

3 回答 3

2

注意:这是@fabiopagoti 答案的替代建议,一种完全不同的方法。

如果 - 正如您在另一条评论中所建议的 - 您想将数据导入 R/3 应用程序,您最好不要试图绕过公司 IT。相反,您可以尝试与他们交谈并访问Legacy System Migration Workbench (LSMW)。这是一个强大的工具包,允许您记录对话步骤(在某些条件下),导入一些数据(例如从 CSV 文件),然后将记录和数据结合起来,用不同的数据“重播”相同的步骤 - 所有这些都使用标准功能,并且不绕过任何安全检查。

于 2012-09-11T18:10:10.423 回答
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 与事务代码的关系不是一对一的。例如,您可以使用单个事务来插入、搜索、删除和编辑特定类型的文档,但要使用 BAPI 调用来实现这一点,您将需要其中的许多(一个用于创建文档,一个用于删除,一个用于检索等)。

有一个名为“BAPI”的交易(可能是唯一一个名称不错的 tx 代码),它包含系统中的所有 BAPI、它的参数和(一些糟糕的)文档。

于 2012-09-11T17:16:45.060 回答