日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

VB连接SAP实例

發(fā)布時間:2025/3/20 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VB连接SAP实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近做個項目有用到vb連接SAP,現(xiàn)在項目完成,做個技術(shù)總結(jié)。順便整理了下VB連接SAP取回/傳送數(shù)據(jù)

的方法。

1.連接SAP.

Public Function GetSAPConnection() As Object
??? Dim strStatus As String
??? Dim oFunction As Object
??? Dim oConnection As Object
??? Dim result As Boolean
??? Set oFunction = CreateObject("SAP.LogonControl.1")
??? Set oConnection = oFunction.NewConnection
???
??? oConnection.client = "700"
??? oConnection.language = "zh"
???
??? oConnection.ApplicationServer = "172.16.0.23"??
??? oConnection.user = "WMS001"???????????????????
??? oConnection.Password = "WMS001"???????????????
??? oConnection.SystemNumber = "03"??????????????
??? oConnection.codepage = "8400"
???
??? result = oConnection.Logon(0, True)
??? If result <> True Then
??????? Set oFunction = Nothing
??????? Set oConnection = Nothing
??????? Set GetSAPConnection = Nothing
??????? MsgBox "連接失敗!"
??? Else
'??????? MsgBox "連接成功!"
??????? Set GetSAPConnection = oConnection
??? End If
End Function


2.取得SAP數(shù)據(jù)Example

'先聲明全局變量
Dim sapCon As Object
Dim func As Object
Dim retSapData As Object? '返回的數(shù)據(jù)

-----------------------------
' 通過RFC接口遠程運行SAP內(nèi)部函數(shù)
Public Function GetSAPData() As Boolean

??? 'On Error GoTo LblErr

??? Dim RFCName As String
??? Dim RetTblName As String
??? Dim RetTblName2 As String
??? Dim ofun As Object
??? Dim i As Integer

??? Set sapCon = GetSAPConnection()
??? Set ofun = CreateObject("SAP.FUNCTIONS")
??? Set ofun.Connection = sapCon

?

??? RFCName = "ZWMS_POST_DATA"

??? ' 通過RFC接口遠程運行SAP內(nèi)部函數(shù)
??? Set func = ofun.Add(RFCName)?????????? ' 賦要調(diào)用的SAP內(nèi)建函數(shù)名

?

a.傳入RFC的參數(shù)為 值

??? '設(shè)置參數(shù)
??? Dim params(5, 1) As String
??? '參數(shù)名
??? params(0, 0) = "I_TCODE"
??? params(1, 0) = "I_WERKS"
??? params(2, 0) = "I_ORDNO"
??? params(3, 0) = "I_CHECK_NOPOST"
??? params(4, 0) = "I_CHECK_CANCEL"
??? '參數(shù)值
??? params(0, 1) = "ZMMJ06"
??? params(1, 1) = "WX01"
??? params(2, 1) = "K000025013"
??? params(3, 1) = "X"
??? params(4, 1) = "X"


????? If Not IsEmpty(params) Then
??????? For i = 0 To 5
??????????? func.Exports(CStr(params(i, 0))) = CStr(params(i, 1))
??????? Next
??? ?End If

??? RetTblName = "ET_MSEG"
??? RetTblName2 = "ET_BATCH"

??? If func.Call Then?? '執(zhí)行RFC函數(shù)
??????? Set retSapData = func.tables.Item(RetTblName)???? '輸出參數(shù) 為表
??????? MsgBox retSapData.rowcount????????? '返回的表記錄數(shù)
?MsgBox retSapData(1, "MATNR_REAL")? '返回的表的第一條記錄"MATNR_REAL"字段的值

??????? GetSAPData = True
??? Else
??????? MsgBox func.Exception
??????? GetSAPData = False
??? End If
??? Exit Function
LblErr:
??? MsgBox Err.Description, vbCritical
End Function

?

b.傳入RFC的參數(shù)為 結(jié)構(gòu) (結(jié)構(gòu)名 IS_DOC)

???? func.Exports("IS_DOC").Value("ORDER") = "5000002"?? '?結(jié)構(gòu)中的元素ORDER
???? func.Exports("IS_DOC").Value("MATNR") = "51000001"?? '結(jié)構(gòu)中的元素MATNR
???? If func.Call Then
??????? Set retSapData = func.tables.Item(RetTblName)???? '輸出參數(shù) 為表
??????? sMatnr2 = CStr(retSapData(1, "MATNR_REAL"))?????? '從輸出表中取得需要值

???? End If

c.傳入RFC的參數(shù)為 表 (表名:T_MAT)

? '--------------------------------------
?1. 可以只傳入一條表數(shù)據(jù)
? func.tables("T_MAT").Rows.Add
? func.tables("T_MAT").Value(1, "PROD_ORDER") = "5000002"
? func.tables("T_MAT").Value(1, "MATNR_IDEAL") = "51000000"
? func.tables("T_MAT").Value(1, "SWB002") = "82"
? func.tables("T_MAT").Value(1, "MATNR_REAL") = ""
? func.tables("T_MAT").Value(1, "MAKTX") = ""

? If func.Call Then
???? Set retSapData = func.tables.Item(RetTblName)???? '輸出參數(shù) 為表
???? sMatnr2 = CStr(retSapData(1, "MATNR_REAL"))?????? '從輸出表中取得需要值
? End If
? '------------------------------------------------

? 2. 整張表傳入
??? Do While Not objRs.EOF
??????? iRow = iRow + 1
??????? func.tables("T_MAT").Rows.Add
??????? func.tables("T_MAT").Value(iRow, "PROD_ORDER") = objRs.Fields(0).Value
??????? func.tables("T_MAT").Value(iRow, "MATNR_IDEAL") = objRs.Fields(1).Value
??????? func.tables("T_MAT").Value(iRow, "SWB002") = objRs.Fields(2).Value
??????? func.tables("T_MAT").Value(iRow, "MATNR_REAL") = ""
??????? func.tables("T_MAT").Value(iRow, "MAKTX") = ""
??????? objRs.MoveNext
??? Loop

? If func.Call Then
???? Set retSapData = func.tables.Item(RetTblName)???? '輸出參數(shù) 為表
???? sMatnr2 = CStr(retSapData(1, "MATNR_REAL"))?????? '從輸出表中取得需要值
? End If?

?

'?? RFC的方法:
'?? func.Exports("參數(shù)名")? 輸入?yún)?shù)
'?? func.Imports("參數(shù)名")? SAP返回值

?

?

?

SAP提供的接口函數(shù)說明??

?

function name:ZMESSH_REAL_MATERIAL

?

FUNCTION ZMESSH_REAL_MATERIAL .

*"---------------------------------------------------------

*"*"本地接口 :

*"?EXPORTING

*"????VALUE(E_SUBRC) TYPE? SY-SUBRC

*"????VALUE(E_MSG) TYPE? BAPI_MSG

*"?TABLES

*"?????T_MAT STRUCTURE? ZMES_MAT

*"?????ET_RETURN STRUCTURE? BAPIRET2 OPTIONAL

*"----------------------------------------------------------

?

1.輸入?yún)?shù)

?

?

2.返回參數(shù)

l???????? E_SUBRC 狀態(tài) 0: 成功 其它失敗

l???????? E_MSG??錯誤信息

3.輸入表

l???????? T_MAT?物料特性表 ( 有一部份欄位也輸出)

1

ZMES_MAT

?

?

?

Mes物料

?

NO

Field name

Data type

Length

Decimal

Memo

Memo

1

PROD_ORDER

CHAR

12

0

生產(chǎn)訂單號

必輸

2

MATNR_IDEAL

CHAR

18

0

計劃物料號

必輸

3

SWB002

DEC

13

3

組件功率

必輸

4

MATNR_REAL

CHAR

18

0

產(chǎn)出物料號

計算完輸出

5

MAKTX

CHAR

40

0

物料描述

計算完輸出

總結(jié)

以上是生活随笔為你收集整理的VB连接SAP实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。