Текущее время: Сб, июн 21 2025, 19:58

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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