среда, 15 июля 2015 г.

Доступ к системе SAP из MS Excel и вызов RFC ФМ с помощью VBA

Предполагается, что в системе SAP уже существует RFC ФМ, посредством которого необходимо получить определенные данные в MS Excel.
Ниже приведен VBA код, с помощью которого будет выполнено подключение к системе и вывод полученных данных. Для простоты понимания я не стал усложнять код дополнительными проверками и различными удобствами.

Dim fsap_obj As Object
Dim gr_func  As Object
Dim gp_impr  As Object
Dim gp_expr  As Object
Dim gp_tabl  As Object

Sub run_rfc_fm()

'создаем объект для подключения к системе
Set fsap_obj = CreateObject("SAP.Functions")    
      fsap_obj.Connection.Password = ""
      fsap_obj.Connection.system = ""
      fsap_obj.Connection.user = ""

'возвращает True при подключении к системе и False если подключение не удалось
Connect = fsap_obj.Connection.logon(0, False)    

'имя RFC ФМ
Set gr_func = fsap_obj.Add("ZWEB_SERVICE_TEST")   

'параметр импорта в ФМ       
Set gp_expr = gr_func.exports("I_VBELN") 

'параметр экспорта в ФМ                         
Set gp_impr = gr_func.imports("E_COMMENT")

'возвращаемая таблица данных из ФМ                 
Set gp_tabl = gr_func.tables("T_VBAP")                                

'передаем значение в I_VBELN
gp_expr.Value = "0000004969"                                               

'вызов ФМ
Call gr_func.Call     
  
'отключение от системы                                                                    
fsap_obj.Connection.logoff                                                      

'вывод полученных данных
Call write_tab                                                                             

End Sub

Public Function write_tab()
For Row = 1 To gp_tabl.RowCount

 num_p = 0
 Do While num_p < gp_tabl.columnCount
   num_p = num_p + 1
   Лист1.Cells(Row, num_p).Value = gp_tabl.cell(Row, num_p)
 Loop
 Next
Лист1.Cells(Row + 1, 1).Value = gp_impr
End Function