Подключите стороннее приложение (MS Excel) к SAP R/3

Я разрабатываю решение для связи 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"

(и другие значения профиля пользователя........)

Позже я сделал второй шаг, который читал какую-то таблицу (в данном случае таблицу пользователей)

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

Но теперь, вот мой вопрос: как запустить транзакцию (LM02, LS26, LX03 или т. Д.), Запущенную из VBA?

Спасибо вам, ребята!

PS. Я использую MS Office 2007 и Windows 7.

- ИЗДАНО:

Эй, я изменил способ, которым я атаковал вызов (я позволю ОП выше для помощи другому парню)

Это надо добавить к первому

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

Недостающая часть состоит в том, как "отформатировать" 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. Вы можете просмотреть это здесь.

РЕДАКТИРОВАНИЕ: Моя цель в этой задаче состоит в том, чтобы запустить транзакцию (TCODE, которую я ищу, это LM02, транзакция для корзины для хранилища) через макрос VBA, загрузить некоторую дату, извлеченную из файла MS Excel, и выполнить транзакцию.

- последнее редактирование: кажется, что эта задача не может быть выполнена без помощи ИТ-поддержки SAP. 19 сентября /12 | все еще исследую эту тему. 25.09.12 | 02/OCT/12 -> Я попытаюсь AutoIT для регистрации, запустите основной Tcode и отобразить отчет. Я прокомментирую свои результаты после того, как я дважды проверил это.

3 ответа

Примечание. Это альтернативное предложение к ответу @ fabiopagoti, совершенно иной подход.

Если - как вы предложили в другом комментарии - вы хотите импортировать данные в приложения R/3, вам лучше не пытаться обойти ИТ компании. Вместо этого вы можете попытаться поговорить с ними и получить доступ к Legacy System Migration Workbench (LSMW). Это мощный инструментарий, который позволяет записывать шаги диалога (при определенных условиях), импортировать некоторые данные (например, из файлов CSV), а затем объединять записи и данные, чтобы "воспроизвести" одни и те же шаги с разными данными - все с использованием стандартных функционирует и не обходя никаких проверок безопасности.

Хорошо, позвольте мне процитировать лучший ответ, который я получил. Я вставляю это сюда, потому что думаю, что у кого-то еще будет тот же вопрос, что и у меня.

Шаг первый - понять, есть ли RFC или BAPI для вашей транзакции, но у вас нет разрешения для транзакций ABAP, поэтому я не знаю, как вы можете это выяснить.

Теоретически вы можете попытаться найти его в WEB или в документации SAP, но затем (если он существует) вам нужно проверить интерфейс, в котором определены параметры импорта / экспорта..... поэтому у вас должна быть авторизация для SE37,

Следующий шаг зависит от того, можете ли вы найти функцию RFC для LM02 или нет:

если есть функция, вам нужно понять, как ее запустить

если нет функции. Вы должны понимать, можете ли вы или abaper разработать собственный.

Максимум

Спасибо за ваши исследования.

Прости, друг мой, но ты не продвинешься намного дальше этого.

То, что вы делаете в своем коде, - это вызов BAPI (в основном, функция разрешения RFC). Другими словами, SAP предоставляет стандартные функции, которые вызываются из разных систем. Вы можете думать об этом как о старомодном API. Также возможно создание пользовательских BAPI, но на практике это практически никто не делает.

Хорошая новость заключается в том, что, как я уже сказал, обычно BAPI обеспечивают одинаковую функциональность стандартных транзакций. Теоретически, то, что вы можете сделать с помощью кода транзакции, вы можете сделать с помощью вызова BAPI.

Связь BAPI с кодами транзакций не один в один. Например, вы можете использовать одну транзакцию, которая позволяет вставлять, искать, удалять и редактировать определенный тип документа, но для достижения этого с помощью вызовов BAPI вам понадобится много из них (одна для создания документа, одна для удаления, одна для получить и т. д.).

Существует транзакция под названием "BAPI" (может быть, единственный tx-код с достойным именем), который содержит все BAPI в системе, ее параметры и (некоторые плохие) документы.

Другие вопросы по тегам