Текущее время: Вс, июн 22 2025, 12:35

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Ср, мар 17 2010, 16:12 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, фев 29 2008, 12:42
Сообщения: 490
Пол: Мужской
С обновлением SAP GUI с 6.4 Патч 23 до 7.01 Патч 15 перестал работать макрос загрузки данных из Excel в Z-таблицу SAP.
Переделываем макрос.

Обнаружили, что коннект к БД НЕ проходит для такого макроса
Code:
Dim R3 As Object
Set R3 = CreateObject("SAP.Functions")
' MsgBox R3.Connection.Logon
If R3.Connection.Logon(0, True) <> True Then
   Exit Function
End If


Если раскомментарить MsgBox, то пройдет:
Code:
Dim R3 As Object
Set R3 = CreateObject("SAP.Functions")
MsgBox R3.Connection.Logon
If R3.Connection.Logon(0, True) <> True Then
   Exit Function
End If


В чем может быть проблема?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Ср, мар 17 2010, 16:33 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, фев 29 2008, 12:42
Сообщения: 490
Пол: Мужской
Вот так заработало
Code:
Dim R3 As Object
Set R3 = CreateObject("SAP.Functions")
If R3.Connection.Logon <> True Then
   Exit Function
End If

Команда R3.Connection.Logon(0, True), с которой не работал коннект, взята с одной из тем форума. Есть какая-нибудь информация по ней?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Ср, мар 17 2010, 16:36 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
а где Вы заполняете
R3.Connection.User = "user"
R3.Connection.Password = "1234"
R3.Connection.client = "000"
R3.Connection.ApplicationServer = "10.0.0.0"
R3.Connection.Language = "RU"

?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Ср, мар 17 2010, 17:15 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, фев 29 2008, 12:42
Сообщения: 490
Пол: Мужской
Besa написал:
а где Вы заполняете
R3.Connection.User = "user"
R3.Connection.Password = "1234"
R3.Connection.client = "000"
R3.Connection.ApplicationServer = "10.0.0.0"
R3.Connection.Language = "RU"

?

Нигде. Насколько это важно? В окошке логона все поля (кроме пароля) почему-то сами по себе заполнены нужными значениями.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Чт, мар 18 2010, 07:40 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
в object browser'е в VBA-редаакторе посмотрите проперти к этому объекту - там интуитивно понятный интерфейс ;-)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Чт, мар 18 2010, 09:29 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, фев 29 2008, 12:42
Сообщения: 490
Пол: Мужской
pberezin написал:
в object browser'е в VBA-редаакторе посмотрите проперти к этому объекту - там интуитивно понятный интерфейс ;-)

pberezin, можно чуть подробнее? Если это обычный Object browser, вызываемый в VBA-редакторе по клавише "F2", то в нем ничего про объект "SAP.Functions" нету. Тем более, про объект "R3".


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Чт, мар 18 2010, 10:15 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
его не видно, потому что вы применяете позднее (динамическое) связывание через createobject.

С саплогоном ставится ActiveX компонент SAP Remote function call control (файло wdtfuncs.ocx). Подключаете его в VBA через Tools\References, и вам станет доступен контрол SAPFunctions. Кидаете его на VBA-шную форму (очень удобно - в пропертях контрола Custom можно один раз настроить имена вызываемых из сапа RFC-ФМ, чтобы динамически через VBA их не присваивать). И в object browser'е будет всё видно.

Единственное, с отладкой RFC-вызовов чудеса какието - если ставишь AbapDebug=true, он почемуто в отладку вываливается не прямо в вызываемом ФМ, а в какомто rfc_get_function_interface (видимо диспетчер какойто, х.з.)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Чт, мар 18 2010, 11:03 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, фев 29 2008, 12:42
Сообщения: 490
Пол: Мужской
pberezin написал:
С саплогоном ставится ActiveX компонент SAP Remote function call control (файло wdtfuncs.ocx). Подключаете его в VBA через Tools\References, и вам станет доступен контрол SAPFunctions.

Спасибо, получилось! :D
pberezin написал:
Кидаете его на VBA-шную форму (очень удобно - в пропертях контрола Custom можно один раз настроить имена вызываемых из сапа RFC-ФМ, чтобы динамически через VBA их не присваивать). И в object browser'е будет всё видно.

В object browser'е информация о составе SAPFunctions появилась, но до его подобъекта Connection. Что дальше - посмотреть не могу. Т.е. свойства SAPFunctions.Connection не вижу. Контекстное меню "Properties" светло-серое и невозможно для выбора. Как ни крутил. Кстати, контекстное меню "Properties" (щелк правой кнопкой мыши) и для SAPFunctions тоже недоступно для нажатия.

Не подскажете, как посмотреть там подробнее об объекте SAPFunctions.Connection.Logon? Нужны ли вообще и какие именно нужны параметры при его вызове?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Чт, мар 18 2010, 12:45 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
У вас наверное настойки уровня безопасности макросов запрещают загрузку внешних activex. Потавьте в экселе самый низкий уровень безопасности.
Там даже на низком уровне, при открытии формы с таким контролом вываливается какоето предупреждение "application is about to init unsafe activex". Видимо, с т.з. экселя этот контрол не совсем канонический :)

А по поводу именно объекта Connection - да он почемуто не типизирован, надо объявлять as Object и присваивать проперти динамически. Там можно в режиме VBA-отладчика глянуть все его проперти.

Ну вот так например (здесь форма, с контролом SAPRfc и кнопкой btnGo)

Private Sub btnGo_Click()
Dim OR3connection As Object
Dim fm As Object
Dim expo As SAPFunctionsOCX.Exports
Dim impo As SAPFunctionsOCX.Imports
Dim par1 As SAPFunctionsOCX.Parameter
Dim par2 As SAPFunctionsOCX.Parameter 'Object
Dim v As Variant
Dim rc As Long
Dim brc As Boolean

With Me.SAPrfc
Set OR3connection = .Connection
OR3connection.User = Me.boxLogin.Text 'логин берём из поля формы
OR3connection.Password = Me.boxPass.Text 'пароль тоже
'r3dev
OR3connection.ApplicationServer = "10.46.не.дождётесь" 'IP сервера r/3
OR3connection.SystemNumber = "00" 'номер системы
OR3connection.client = "151"
OR3connection.Language = "RU"

OR3connection.RfcWithDialog = 1 'помоему без этого флажка gui будет не виден, соответственно abap-отладка тоже
OR3connection.ABAPDebug = Me.chkDebug.Value 'чекбокс на форме разрешает отладку
.RetrieveDescription = True 'забыл для чего нужна

brc = OR3connection.Logon(0, True)
If (brc = True) Then
Set fm = .Add("Z_RFCALL_FROM_MSSQL_TEST") 'вызываемый ФМ
Set expo = fm.Exports
'expo.RemoveAll
Set par1 = expo.Insert(1, 1) 'у ФМа один IMPORTING параметр типа INT4
fm.Call
rc = fm.ReturnCode 'результат sy-subrc
Me.boxRC.Text = rc 'вываливаем в поле формы

.AboutBox
End If
Call OR3connection.Logoff


End With
End Sub


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Пт, мар 19 2010, 07:18 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
Ещё вариант:
Code:
'
' Пример вызова RFC модуля
'
' использует:
'   SAP Remote Function Call Controll (wdtfuncs.ocx)
'   SAP Logon Control (wdtlogU.ocx)
'   SAP Table Factory (wdtaocx.ocx)
'
Sub rfc_call_sample()

    Dim SAPFunctions As New SAPFunctionsOCX.SAPFunctions
    Dim SAPFunction As SAPFunctionsOCX.Function
    Dim SAPConnection As SAPLogonCtrl.Connection
    Dim PersonalData As SAPTableFactoryCtrl.Table
   
    Set SAPConnection = SAPFunctions.Connection
   
'   Параметры соединения по умолчанию:
    SAPConnection.Client = "200"
    SAPConnection.User = "USERNAME"
   
'   Подключаемся к SAP:
    If SAPConnection.Logon(0, False) <> True Then
        MsgBox "Ошибка входа в систему"
        Exit Sub
    End If
   
'   Вызываем ФМ 'BAPI_EMPLOYEE_GETDATA'
    Set SAPFunction = SAPFunctions.Add("BAPI_EMPLOYEE_GETDATA")
   
'   Заполняем параметры
    SAPFunction.Exports("LASTNAME_M") = "Пупкин"
   
'   Собственно вызов:
    If SAPFunction.Call <> True Then
        MsgBox "Ошибка вызова ФМ"
        Exit Sub
    End If
   
'   Обрабатываем результат:
    Set PersonalData = SAPFunction.Tables("PERSONAL_DATA")
   
    Dim i As Long
    For i = 1 To PersonalData.RowCount
        Debug.Print PersonalData(i, 1)
    Next i

End Sub

_________________
/nex


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Пт, мар 19 2010, 09:57 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
Thanx. Про остальные два контрола я и не знал.

Кстати, там ещё есть контрол SAP Bapi - тоже как вариант для rfc вызовов


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Пт, мар 19 2010, 13:31 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, фев 29 2008, 12:42
Сообщения: 490
Пол: Мужской
Хочу поблагодарить за помощь. Подключив все три файла
wdtfuncs.ocx
wdtlogU.ocx
wdtaocx.ocx
и заглянув в браузер, разобрался, почему не выходил Каменный Цветок.
Оказывается, при вызове Logon, второй параметр (boolean) указывает на то, как будет происходит идентификация: видимо или невидимо. Видимо - False, а мы писали True, но при этом не заполняли никаких значений (типа системы, манданта и др.).
Но что означает первый параметр (названный в Object Browser именем hWnd) не понял.

Что интересно. С самого начала на это внимание обратил, но "забил".
После обновления SAP GUI с 6.4 (патч 23) на 7.01 (патч 15) объект SAP Logon Control (в виде кнопки на форме) исчез с формы. Тогда мы не поверили своим глазам. :shock: Переслал файл на компы с GUI 6.4 и еще на один с GUI 7.01 - элемент виден только с GUI 6.4. Специально тогда вытащил кнопочку добавления объекта SAP Logon Control на панель. Пытаюсь добавить - пишет "Нет доверия ...". Это проблема 7.01 такая? Не сталкивались? Уровень безопасности (защита от макросов) - везде "Низкий". Обе галочки "доверять VBA-проектам" и еще какая-то рядом - взведены.
На компе с GUI 6.4, как и писал pberezin, действительно пишет "application is about to init unsafe activex", но элемент виден, не исчезает.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Чт, сен 02 2010, 16:14 
Начинающий
Начинающий

Зарегистрирован:
Вт, авг 18 2009, 22:40
Сообщения: 16
Откуда: НЧ-КМ
Пол: Мужской
Добрый день!
пробую по второму примеру вызвать ФМ
соединение устанавливается, но на шаге:
Цитата:
' Собственно вызов:
If SAPFunction.Call <> True Then
MsgBox "Ошибка вызова ФМ"
Exit Sub
End If

ошибка.

пробовал с разными ФМ (с параметрами и без) - ошибка при SAPFunction.Call...
куда копать, не подскажете??


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Пт, сен 03 2010, 08:48 
Начинающий
Начинающий

Зарегистрирован:
Вт, авг 18 2009, 22:40
Сообщения: 16
Откуда: НЧ-КМ
Пол: Мужской
всё вопрос снят.
"вид выполнения" у ФМ должен быть "Дистанционный модуль" )


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: доступ к SAP из VBA (Excel)
СообщениеДобавлено: Пн, сен 13 2010, 10:34 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
Цитата:
Что интересно. С самого начала на это внимание обратил, но "забил".
После обновления SAP GUI с 6.4 (патч 23) на 7.01 (патч 15) объект SAP Logon Control (в виде кнопки на форме) исчез с формы. Тогда мы не поверили своим глазам. Переслал файл на компы с GUI 6.4 и еще на один с GUI 7.01 - элемент виден только с GUI 6.4. Специально тогда вытащил кнопочку добавления объекта SAP Logon Control на панель. Пытаюсь добавить - пишет "Нет доверия ...". Это проблема 7.01 такая? Не сталкивались? Уровень безопасности (защита от макросов) - везде "Низкий". Обе галочки "доверять VBA-проектам" и еще какая-то рядом - взведены.
На компе с GUI 6.4, как и писал pberezin, действительно пишет "application is about to init unsafe activex", но элемент виден, не исчезает.


Подозреваю, что лучше все-таки переписать программу на "позднее" связывание. Ранее связывание, конечно, удобно, но при изменении версии ActiveX компонента (видимо вызванном изменением версии SapGUI) действительно могут происходить такие эффекты, VBA теряет связь с контролом, тк привязывается к конкретной версии.
Рекомендую переделать на позднее связывание.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB