2013-07-23 2 views

ответ

2
Dim sapConn As Object 'Declare connection object 
Set sapConn = CreateObject("SAP.Functions") 'Create ActiveX object 

sapConn.Connection.user = "user"   'Specify user 
sapConn.Connection.Password = ""    'Then password 
sapConn.Connection.client = "001"    'Client 
sapConn.Connection.ApplicationServer = "server" 'Target server address 
sapConn.Connection.Language = "PT"    'Language code 

'Finally, try to logon to the specified system and check if the connection established 
If sapConn.Connection.Logon(0, True) <> True Then 
    MsgBox "Cannot Log on to SAP" 'Issue message if cannot logon 
Else 
    MsgBox "Logged on to SAP!" 
End If 


Dim rfcAcctDocCheck As Object 
Dim oAcctHeader As Object 
Dim otAcctAR, otAcctGL, otAcctAP, otAcctAMT, otReturn As Object 

Set rfcAcctDocCheck = sapConn.Add("BAPI_ACC_DOCUMENT_CHECK") 
Set oAcctHeader = rfcAcctDocCheck.Exports("DOCUMENTHEADER") 

Set otAcctGL = rfcAcctDocCheck.Tables("ACCOUNTGL") 
Set otAcctAR = rfcAcctDocCheck.Tables("ACCOUNTRECEIVABLE") 
Set otAcctAP = rfcAcctDocCheck.Tables("ACCOUNTPAYABLE") 
Set otAcctAMT = rfcAcctDocCheck.Tables("CURRENCYAMOUNT") 
Set otReturn = rfcAcctDocCheck.Tables("RETURN") 

Dim qtLegs As Integer 

Dim dt, comp, tpDoc, docRef, tpAcct, acct, customer, vendor, _ 
    curr, val, spLedger, ccenter, order As String 
Dim curLine As Integer 

For lin = 1 To UBound(reg) 
    id = Format(tbPost.Cells(reg(lin).lin_ini, K_COL_ID), "0000000000") 
    dt = getDate(tbPost.Cells(reg(lin).lin_ini, K_COL_DT)) 
    comp = getCompanyCode(tbPost.Cells(reg(lin).lin_ini, K_COL_EMPR)) 
    tpDoc = getDocumentType(tbPost.Cells(reg(lin).lin_ini, K_COL_TP_DOC)) 
    docRef = tbPost.Cells(reg(lin).lin_ini, K_COL_DOC_REF) 

    otAcctGL.freeTable 
    otAcctAR.freeTable 
    otAcctAP.freeTable 
    otAcctAMT.freeTable 

oAcctHeader("USERNAME") = sapConn.Connection.user 
oAcctHeader("HEADER_TXT") = "Lancado via Excel" 
oAcctHeader("COMP_CODE") = comp 
oAcctHeader("DOC_DATE") = dt 
oAcctHeader("PSTNG_DATE") = dt 
oAcctHeader("DOC_TYPE") = tpDoc 
oAcctHeader("REF_DOC_NO") = docRef 

otAcctAMT.Rows.Add 
otAcctAMT(otAcctAMT.Rows.Count, "ITEMNO_ACC") = Format(leg, "0000000000") 
otAcctAMT(otAcctAMT.Rows.Count, "CURRENCY") = curr 
otAcctAMT(otAcctAMT.Rows.Count, "AMT_BASE") = val 
Next 

If rfcAcctDocCheck.Call = False Then 
    MsgBox rfcAcctDocCheck.Exception 
End If 
+0

Большое спасибо за ваше решение. Я буду работать над этим. Я также хотел знать, есть ли какие-либо методы, с помощью которых я могу просто вызвать функции abap напрямую. Значит, есть некоторые функции ABAP, которые выполняют некоторые операции, мне нужно просто вызвать эту функцию abap из VBA. Не могли бы вы сообщить мне об этом. – Anup

Смежные вопросы