Текущее время: Пт, июн 20 2025, 20:28

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Вызов ФМ из BEx Analyzer
СообщениеДобавлено: Ср, апр 16 2008, 15:31 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июл 04 2007, 22:04
Сообщения: 138
Пол: Мужской
Всем привет!

Казалось бы не очень сложная задача вызвать ФМ из BEx Analyzer...
Сделал все по учебнику:
Set connect = Run("BExAnalyzer.xla!sapBEXgetConnection")
Set funcControl = CreateObject("SAP.Functions")
funcControl.Connection = connect
..........

но выдает ошибку, что нет соединения с системой.
Можно сделать connect.Logon(0, False), тогда проблема с соединением исчезает, но появляется другая. Окно для ввода пароля показывается дважды: 1-й раз когда открываем рабочую книгу, а второй, когда вызываем ФМ.

Хочу сделать все "по тихому", и пишу connect.Logon(0, True), но увы возвращает код 4 (недостает параметров).

Внимание вопрос: где мне взять параметры для соединения с системой?
Можно, конечно, жестко их прописать в коде макроса, но это "некрасиво" :roll:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 24 2008, 20:59 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Думаю догадаешься как под себя подкрутить:
Code:
Function Logon() As Boolean
    Dim l_Cursor As Variant
    Dim ConnObject As Object
   
    On Error GoTo Error
        l_Cursor = Application.Cursor
        If Application.Cursor <> xlWait Then
          Application.Cursor = xlWait
        End If
       
        Set gFunctions = CreateObject("SAP.Functions")
        Set gLogonCtrl = CreateObject("SAP.LogonControl.1")
    On Error GoTo 0
   
    On Error Resume Next
        Set ConnObject = Application.Run("sapbex.xla!sapbexGetConnection")
    On Error GoTo 0
   
    On Error GoTo Error
        If Not (ConnObject Is Nothing) Then
          gFunctions.Connection = ConnObject
        End If
       
        If gFunctions.Connection.IsConnected = 1 Then
            Logon = True
            Application.Visible = True
   
        Else
            gFunctions.Connection = gLogonCtrl.NewConnection
            gFunctions.Connection.user = ""
            gFunctions.Connection.Client = ""
            gFunctions.Connection.Language = ""
            gFunctions.Connection.Password = ""
            gFunctions.Connection.RfcWithDialog = 2
           
             
            With gFunctions.Connection
                .Client = "100"
                .Language = "RU"
                .systemnumber = "00"
                .System = "<mysystem>"
                .saprouter = ""
                .ApplicationServer = "<ip>"
             End With
             
            Logon = gFunctions.Connection.Logon(0, gFunctions.Connection.user <> "")
           
            Application.Visible = True
            Application.StatusBar = "Установка связи с сервером..."
            Application.Cursor = xlWait
             
            If Not Logon Then
               Set gFunctions = Nothing
               Application.StatusBar = ""
               Application.Cursor = xlDefault
               Application.ScreenUpdating = False
               Exit Function
            End If
       
        End If
       
        Application.StatusBar = "Связь с сервером установлена."
       
        Application.Cursor = l_Cursor
       
        Exit Function
Error:
     Logon = False
     Application.ScreenUpdating = True
     Application.Cursor = xlDefault
     Application.StatusBar = ""
     MsgBox Err.Number & ": " & Err.Description, vbCritical
End Function

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 25 2008, 08:38 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июл 04 2007, 22:04
Сообщения: 138
Пол: Мужской
Спасибо за столь подробный и качественный код!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 13 2008, 09:55 
Ассистент
Ассистент

Зарегистрирован:
Вт, дек 05 2006, 10:31
Сообщения: 27
А можно спросить откуда брался пример ?
из хавту или хелпа ?
конкретный линк на страницу ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 13 2008, 12:06 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Пример брался из рабочей книги, используемой на проекте.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, май 15 2008, 10:33 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 08 2006, 22:57
Сообщения: 81
Пол: Мужской
@Lear:
не могли бы Вы описать пример зачем вообще такое может понадобиться ...
используете Вы это в Query или просто создаете Application - VBA


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, май 15 2008, 14:14 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июл 04 2007, 22:04
Сообщения: 138
Пол: Мужской
Jouri написал:
@Lear:
не могли бы Вы описать пример зачем вообще такое может понадобиться ...
используете Вы это в Query или просто создаете Application - VBA

Конечно могу :)

Я хотел добавить в рабочую книгу кнопку, которая бы утверждала текущую версию, а именно расширяла бы срез данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ из BEx Analyzer
СообщениеДобавлено: Пн, ноя 14 2011, 14:34 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 14 2008, 17:05
Сообщения: 67
Пол: Женский
Добрый день!
Подскажите, пожалуйста, возможно ли вызвать ФМ из BeX отчёта без дополнительного подключения к системе.
Если использовать код G, а потом вызывать свой ФМ, то придётся подключаться дважды.
Dim r As Range

Set R3 = CreateObject("SAP.Functions.unicode")
Set myFunc = R3.Add("Z_RUN_FUN")


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ из BEx Analyzer
СообщениеДобавлено: Пн, ноя 14 2011, 15:12 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Amity написала:
Добрый день!
Подскажите, пожалуйста, возможно ли вызвать ФМ из BeX отчёта без дополнительного подключения к системе.
Если использовать код G, а потом вызывать свой ФМ, то придётся подключаться дважды.


Из исходника неочевидно, должно быть в модуле объявление глобальных переменных:
Code:
Public gLogonCtrl As Object
Public gFunctions As Object

Ну и до кучи:
Code:
Public Sub Logoff()
    ' Завершение сеанса связи с сервером, если соединение не Bex
    On Error GoTo Error
        If gFunctions Is Nothing Then
          Exit Sub
        End If
       
        gFunctions.RemoveAll
       
        If Not gFunctions.Connection Is Application.Run("sapbex.xla!sapbexGetConnection") Then
            gFunctions.Connection.Logoff
        End If
    On Error GoTo 0
   
    Exit Sub
Error:
     Application.ScreenUpdating = True
     Application.Cursor = xlDefault
     Exit Sub
   
End Sub


Скажу сразу, что код этот не идеален, но худо-бедно работает для BW 3.X.
BW 3.X у меня сейчас нет под рукой, потому, могу обеспечить только копипасты из кода. Отлаживать не на чем :(.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ из BEx Analyzer
СообщениеДобавлено: Пн, ноя 14 2011, 20:09 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 14 2008, 17:05
Сообщения: 67
Пол: Женский
G написал:
Amity написала:
Добрый день!
Подскажите, пожалуйста, возможно ли вызвать ФМ из BeX отчёта без дополнительного подключения к системе.
Если использовать код G, а потом вызывать свой ФМ, то придётся подключаться дважды.


Из исходника неочевидно, должно быть в модуле объявление глобальных переменных:
Code:
Public gLogonCtrl As Object
Public gFunctions As Object

Ну и до кучи:
Code:
Public Sub Logoff()
    ' Завершение сеанса связи с сервером, если соединение не Bex
    On Error GoTo Error
        If gFunctions Is Nothing Then
          Exit Sub
        End If
       
        gFunctions.RemoveAll
       
        If Not gFunctions.Connection Is Application.Run("sapbex.xla!sapbexGetConnection") Then
            gFunctions.Connection.Logoff
        End If
    On Error GoTo 0
   
    Exit Sub
Error:
     Application.ScreenUpdating = True
     Application.Cursor = xlDefault
     Exit Sub
   
End Sub


Скажу сразу, что код этот не идеален, но худо-бедно работает для BW 3.X.
BW 3.X у меня сейчас нет под рукой, потому, могу обеспечить только копипасты из кода. Отлаживать не на чем :(.

Спасибо, G, Ваш старый код рабочий, с объявлением переменных я разобралась. Добилась только однократного вызова экрана для логона с заполненными параметрами системы. А хотелось вообще не логиниться, тк пользователь уже вошёл в систему. И не хотелось бы напрямую в макросе прописывать имя пользователя и пароль. Возможно ли такое?
И ещё у нас не BW 3.X, а 2004s BI.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ из BEx Analyzer
СообщениеДобавлено: Пн, ноя 14 2011, 22:36 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Amity написала:
А хотелось вообще не логиниться, тк пользователь уже вошёл в систему. И не хотелось бы напрямую в макросе прописывать имя пользователя и пароль. Возможно ли такое?
И ещё у нас не BW 3.X, а 2004s BI.

Попробуйте использовать Connection из bex объекта. См.тему http://sapboard.ru/forum/viewtopic.php?f=12&t=58581&hilit=connection


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ из BEx Analyzer
СообщениеДобавлено: Вт, ноя 15 2011, 07:23 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 14 2008, 17:05
Сообщения: 67
Пол: Женский
Air_demon написал(а):
Amity написала:
А хотелось вообще не логиниться, тк пользователь уже вошёл в систему. И не хотелось бы напрямую в макросе прописывать имя пользователя и пароль. Возможно ли такое?
И ещё у нас не BW 3.X, а 2004s BI.

Попробуйте использовать Connection из bex объекта. См.тему http://sapboard.ru/forum/viewtopic.php?f=12&t=58581&hilit=connection

Спасибо, Air_demon!
Благодаря Вашему коду с вызовом BAPI у меня получилось вызвать свой ФМ :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

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


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

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


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

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