日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VB连接SAP实例

發(fā)布時間:2025/3/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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接口遠(yuǎn)程運行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接口遠(yuǎn)程運行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)容還不錯,歡迎將生活随笔推薦給好友。