Существует множество описаний параметров для BAPI, но они непонятны. Я публикую решение здесь, потому что у меня было много трудностей с достижением параметризованного вызова BAPI из EXCEL VBA.
Моей задачей было запросить SAP. Должна быть возможность (в Excel через форму) выбрать
- Диапазон дат
- Различные состояния (например, 10, 20, 60)
- Различные коды отделов (например, 10, 20, 60)
- Показывать проекты Z800 или нет
Чтобы получить доступ к BAPI, вы должны добиться следующего:
- Установите соединение с вашим экземпляром SAP (в сети есть много примеров для этой части, поэтому я не буду это объяснять, например, https://turbofuture.com/computers/Silent-Connection-with-SAPLOGON-with-RFCSDK-Example-RFC-Excel-VBA < / а>). В примерах кода у вас будет что-то похожее на
If Not (connection Is Nothing) Then
debug.print "connection is successful"
- Создайте экземпляр BAPI (в сети тоже есть много примеров для этой части, поэтому я пропущу и это, например, https://turbofuture.com/computers/Silent-Connection-with-SAPLOGON-with-RFCSDK-Example-RFC-Excel-VBA) В примерах кода у вас будет что-то похожее на
Set functions = sapFunctions(connection)
Set obSapBapi = functions.Add(BapiName)
Это назначение является успешным, если вы видите, что объект BAPI содержит имя BAPI в режиме отладки: Успешно Назначение BAPI Если назначение не выполнено, объект BAPI не содержит ничего.
- Вызов BAPI с параметрами. Везде вы можете прочитать «импорт» / «экспорт» …… и многое другое. Но все, что я хотел знать, это как передать выбор пользователя в SAP? Наиболее распространенный вариант использования - пользователь выбирает данные в таблице Excel, а затем запускает программу, которая извлекает данные из SAP на основе выбора пользователя, и это тоже было моим.
BAPI может иметь 2 различных типа параметров (каждый параметр относится к одному явному полю в представлении SAP):
- Передается только 1 значение: это .exporting (например, surname = Smith)
- Передается более 1 параметра: это через таблицу (например, фамилия = Смит, Майер или Питт, дата заказа ›01.04.2019 и‹ 15.04.2019) Ввод / вывод BAPI
Таблицы ввода и вывода однотипны. Ваш отдел SAP может назвать вам, какая из них является вашей таблицей данных. Чтобы получить все таблицы (и их поля) BAPI, вы можете запустить этот код (относится как к таблицам ввода, так и к таблицам вывода):
If obSapBapi.Call <> False Then
'Function Call is Successfull
Dim oTables As Object
Set oTables = obSapBapi.Tables 'Tables collection
Call GetColumnDetails(oTables)
Set oTables = Nothing
Debug.Print "Function Call is Successfull"
End If
Код субмарины:
Private Sub GetColumnDetails(ByVal obTables As Object)
on error resume next
Dim iLoop As Integer, iColIndx As Integer, iColValuePos As Integer
Dim iTblCnt As Integer, iColCnt As Integer
dim iRowCnt As Integer, iRowIndx As Integer
Dim oTable As Object, oColumn As Object, iValuePosn As Integer
iTblCnt = obTables.Count
iValuePosn = 1
For iLoop = 1 To iTblCnt
Set oTable = obTables.Item(iLoop)
iColCnt = oTable.ColumnCount
iRowCnt = oTable.RowCount
iColValuePos = 1
Sheet3.Cells(iValuePosn, 1) = oTable.Name
iValuePosn = iValuePosn + 1
For Each oColumn In oTable.Columns
Sheet3.Cells(iValuePosn, iColValuePos) = oColumn.Name
iColValuePos = iColValuePos + 1
Next oColumn
Set oTable = Nothing
Next
End Sub
Таблицы импорта / ввода Таблицы импорта обычно выглядят следующим образом: Таблица импорта / ввода SAP
Отдельные строки собираются как оператор SQL-WHERE, связанный с оператором OR. Описание входной таблицы:
Поле Zeile (en: row)
Вы должны указать номер строки (i ++, начиная с 1) !!!
Поле SIGN
(Только) возможные значения:
I: включая определенный диапазон
E: исключительный определенный диапазон
Возможные значения для поля OPTION (= оператор):
- EQ Equal (= низкий)
- NE Не равно (‹› Низкое)
- BT между минимумом и максимумом, включая оба (минимум ‹= x‹ = High)
- NB За пределами минимума и максимума (x ‹Low и x› High)
- CP Содержит шаблон
- NP Не содержит паттерна
- LT ниже (‹Low)
- LE Нижнее значение (‹= Низкое)
- GT Больше чем (›низкий)
- GE Больше равно (›= низкий)
Возможные значения для поля LOW
Зависит от типа данных поля ссылки. Примеры:
- [C (2)] = ›строка
- [D (8)] - это дата, ее следует передавать как строку в формате «ггггММдд»
- [N (2)] = ›целое число
Возможные значения для поля HIGH
- Пусто, кроме OPTION - BT или NB
Типы данных
SAP BAPI Data Type / Description / Passed from VBA as
C (<len>) / Character / string
D(8) / Date / Format$(mydate,”yyyyMMdd”)
F(<len>) / float / Double
I(<len>) / Integer / Integer
N(<len>) / Numeric / Integer / long
B / Boolean / String (length 1)
Пример: я описал свою задачу выше. Должна быть возможность выбрать
- Диапазон дат (= ›в SAP таблица с именем IT_WORKD_RANGE, LOW и HIGH типа date)
- Различные состояния (= ›в SAP таблица с именем IT_STATUS_RANGE, LOW и HIGH типа CHAR 2, например, 10, 20, 60)
- Различные отделы (= ›в SAP таблица с именем IT_ZZIDL_RANGE, LOW и HIGH типа NUMC 2, например, 10, 20, 60)
- Показывать ли проекты Z800 или нет (= ›в SAP логический тип с именем IF_AWART, параметр экспорта, X или пробел, где пробел по умолчанию и означает ЛОЖЬ)