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

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




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Передача значений из Bex
СообщениеДобавлено: Вт, мар 02 2010, 11:48 
Специалист
Специалист

Зарегистрирован:
Вт, авг 21 2007, 18:36
Сообщения: 133
Добрый день, коллеги!!
Есть задачка: необходимо из Bex (7ка) передать значения в SAP. Если подробнее то нужно передать комментарии (текстовая информация), чтобы потом их сохранить в ODS. Может кто сталкивался с этим.
Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Вт, мар 02 2010, 11:58 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, авг 16 2006, 03:22
Сообщения: 464
Пол: Мужской
Excel или Web?
Можно вызвать фм удаленно в SAP, ему как параметр передать текст. Но в 7-ке не получается воспользоваться тем же коннектом, приходится вводить пароль заново (или это только у меня так?)
Можно воспользоваться стандартной системой ввода Документов либо к ОД либо к ПД либо к метаданным. В экселе это по правой кнопке Перейти к...-> Документы. Ввод в окне в вебе, не всем нравится такой уровень удобства.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Вт, мар 02 2010, 12:35 
Специалист
Специалист

Зарегистрирован:
Вт, авг 21 2007, 18:36
Сообщения: 133
Да, такая же проблема, с вводом пароля. Документы, не подойдут.
Хотел спросить, на счет такого варианта: Когда в формате планирования вводишь данные то Bex их передает SAP, если я допустим при этом на каком нибудь признаке напишу свой комментарий, то передаст ли сап он range полность(с этим комментарием), или же он передает только значения???? Если бы он передавал range, то можно было бы это отследить, и записать в одс, и дело решено.
Абапер говорит что когда пишешь значения в запрос и сохраняешь результаты то Bex просто обновляет запрос без передачи параметров, но не понятно как тогда он передает цифры, ведь ключи то он тоже должен передать для записи цифр в куб.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Вт, мар 02 2010, 13:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, авг 16 2006, 03:22
Сообщения: 464
Пол: Мужской
Вы же сказали документы не подойдут, что значит "на каком нибудь признаке напишу свой комментарий"? Документ создадите?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Вт, мар 02 2010, 16:48 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Lench написал:
Но в 7-ке не получается воспользоваться тем же коннектом, приходится вводить пароль заново (или это только у меня так?)

У меня получилось "взять" коннект аналайзера.
Code:
Sub Connect()
Dim sapConnection As Variant

Set sapConnection = Run("BEXAnalyzer.XLA!sapBEXgetConnection")
If sapConnection.IsConnected <> 1 Then
MsgBox "Нет соединения!"
Exit Sub
End If

End Sub


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Вт, мар 02 2010, 17:06 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, авг 16 2006, 03:22
Сообщения: 464
Пол: Мужской
)) Рано радуетесь.
попробуйте запустить фм.
когда это в конце концов удастся, то попробуйте обновить данные в отчете или изменить развертку


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Вт, мар 02 2010, 20:47 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Lench написал:
)) Рано радуетесь.
попробуйте запустить фм.
когда это в конце концов удастся, то попробуйте обновить данные в отчете или изменить развертку


"Повесил" на кнопку выполнение следующего кода:
Code:
Sub Connect()
Dim sapConnection As Variant

Set sapConnection = Run("BEXAnalyzer.XLA!sapBEXgetConnection")
If sapConnection.IsConnected <> 1 Then
MsgBox "Нет соединения!"
Exit Sub
End If
Set objBAPIControl = CreateObject("SAP.Functions")
objBAPIControl.Connection.ApplicationServer = sapConnection.ApplicationServer
objBAPIControl.Connection.Password = sapConnection.Password
objBAPIControl.Connection.client = sapConnection.client
objBAPIControl.Connection.user = sapConnection.user
objBAPIControl.Connection.Language = sapConnection.Language
objBAPIControl.Connection.hostname = sapConnection.hostname
objBAPIControl.Connection.SystemNumber = sapConnection.SystemNumber
objBAPIControl.Connection.System = sapConnection.System
objBAPIControl.Connection.Destination = sapConnection.Destination
If objBAPIControl.Connection.logon(1, True) = True Then
Set objUserList = objBAPIControl.Add("BAPI_USER_GETLIST")
objUserList.exports("MAX_ROWS") = "99999"
objUserList.exports("WITH_USERNAME") = ""
returnFunc = objUserList.Call
End If
If returnFunc = True Then
Dim objTable As Object
Set objTable = objUserList.Tables("USERLIST")
ActiveSheet.Cells(4, 1) = "User count :" & objTable.RowCount
End If
End Sub


Изменение развертки работало. Возможно есть еще какие-то "грабли", но пока их не заметил.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Ср, мар 03 2010, 09:52 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, авг 16 2006, 03:22
Сообщения: 464
Пол: Мужской
Ну надо же, и у меня заработало :). Спасибо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Пт, мар 12 2010, 09:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, июл 03 2007, 10:26
Сообщения: 486
Откуда: Kazakhstan, Astana
Пол: Мужской
По поводу соединения SAP Bex из VBA, может кому пригодится еще =
BEx Analyzer: Connection to the BW Server in a VBA macro
SAP Note Number: 492561

Symptom

Customer has written VBA macros which automate functions in the BEx Analyzer via the Analyzer's VBA-API. The customer wants to automate the logon as well, i.e. the user should not be forced to process the BEx Analyzer's dialog screen manually.

Так сказать официальная интерпретация решения от Air_demon.

_________________
"Great minds discuss ideas. Average minds discuss events. Small minds discuss people-Eleanor Roosevelt--Knowledge is to share, Keep it free, Keep sharing"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Пт, мар 12 2010, 09:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, авг 16 2006, 03:22
Сообщения: 464
Пол: Мужской
BORLAND написал:
BEx Analyzer: Connection to the BW Server in a VBA macro
SAP Note Number: 492561
Эта инфа устарела, так как раз и не работает (если заменить Run("SAPBEX.XLA!SAPBEXgetConnection") на Run("BEXAnalyzer.XLA!sapBEXgetConnection") )


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Пт, мар 12 2010, 11:05 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, июл 03 2007, 10:26
Сообщения: 486
Откуда: Kazakhstan, Astana
Пол: Мужской
Lench написал:
BORLAND написал:
BEx Analyzer: Connection to the BW Server in a VBA macro
SAP Note Number: 492561
Эта инфа устарела, так как раз и не работает (если заменить Run("SAPBEX.XLA!SAPBEXgetConnection") на Run("BEXAnalyzer.XLA!sapBEXgetConnection") )

Спасибо! Открыв SAPBEx.xla я увидел, что там производится при проверке соединения, например, если addin уже загружен, то сессия соединения анализирует зависимость от имени AddInn =
Code:
Call isAddinLoaded(loadIfNotLoaded:=True)
 
  'Get AddinName
  Dim lAddinName As String
  lAddinName = addinName(pSession)

  'Set server object
  trace False, "Set server object"
  With pServerObj
    With .configuration
      Set .ParentApplication = Application
      .Caller = "RUN"
      .eventconnected = ThisWorkbook.Name & "!SAPBEX0serverEvent"
    End With
   
    .ProgId = sessionID
    trace False, "pServerObj.ProgId: " & .ProgId
   
    .gwService = gwService
    trace False, "pServerObj.gwService: " & .gwService
   
    .gwHost = gwHost
    trace False, "pServerObj.gwHost: " & .gwHost
 
    'Get SessionID dependant on AddinName
    If (lAddinName = "BExAnalyzer.xla") Then
      sessionID = "_" & sessionID
    End If
    pSession = sessionID
    trace False, "Session: " & pSession

    'run sapBEXgetConnection makro of addin and retrieve connection
    trace False, "Run(" & lAddinName & "!sapBEXgetConnection)"
    Set pConnObj = Run(lAddinName & "!sapBEXgetConnection")
    If pConnObj Is Nothing Then
      trace False, "Connection Object is nothing"
      GoTo unexpectedError
    End If
    Set .connection = pConnObj
   
    Dim lRegResult As Boolean
    lRegResult = .register
    If lRegResult Then
      trace False, "registered"
    Else
      trace False, "Error in server registration: " & Err.Description
      GoTo unexpectedError
    End If
  End With
   
  pWorkbookID = workbookID
  pQueryID = queryID
  pJumpType = jumpType
  pJumpTarget = jumpTarget
   
  'the return value should be cReturnOK, however backend does not respond to such an answer
  SAPBEX0serverLaunch = cReturnNoConn
 
  GoTo functionEnd
 
unexpectedError:
  GoTo functionEnd
 
functionEnd:
  Select Case SAPBEX0serverLaunch
    Case cReturnOK
      trace False, "SAPBEX0serverLaunch: connected, Returncode:" & SAPBEX0serverLaunch
    Case cReturnNoConn
      trace False, "SAPBEX0serverLaunch: connected, Returncode:" & SAPBEX0serverLaunch
    Case cReturnWrongConn
      trace False, "SAPBEX0serverLaunch: wrong connection, Returncode:" & SAPBEX0serverLaunch
    Case cReturnError
      trace False, "SAPBEX0serverLaunch: error, Returncode:" & SAPBEX0serverLaunch
    Case Else
      SAPBEX0serverLaunch = cReturnError
      trace False, "SAPBEX0serverLaunch: unexpected error, Returncode:" & SAPBEX0serverLaunch
  End Select
 
  trace False, "<<< SAPBEX0serverLaunch():" & SAPBEX0serverLaunch
 
  Exit Function
End Function

'Get SessionID dependant on AddinName
If (lAddinName = "BExAnalyzer.xla") Then
sessionID = "_" & sessionID
End If
pSession = sessionID



Private Function addinName(iSession As String) As String
trace False, ">>> addinName(iSession=" & iSession & ")"

If InStr(iSession, "_") = 0 Then
addinName = "SAPBEX.xla"
ElseIf isLegacyOpen() Then
addinName = "SAPBEX.xla"
Else
addinName = "BExAnalyzer.xla"
End If

trace False, "<<< addinName():" & addinName
End Function

_________________
"Great minds discuss ideas. Average minds discuss events. Small minds discuss people-Eleanor Roosevelt--Knowledge is to share, Keep it free, Keep sharing"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Пт, июн 18 2010, 10:58 
Специалист
Специалист

Зарегистрирован:
Вт, авг 21 2007, 18:36
Сообщения: 133
Пытаюсь принять значения типа char - приходят каракули.
Латинские буквы передаются нормально.
sap_codepage = 1504
в соединении с исходной системой стоит юникод.
Что можно сделать чтобы русские буквы приходили в человеческом виде?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Чт, июн 24 2010, 14:30 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, июн 06 2006, 09:49
Сообщения: 55
А если так указать ...

Set R3 = CreateObject("SAP.Functions.unicode")


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Чт, июн 24 2010, 15:15 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
bream написал(а):
Пытаюсь принять значения типа char - приходят каракули.
Латинские буквы передаются нормально.
sap_codepage = 1504
в соединении с исходной системой стоит юникод.
Что можно сделать чтобы русские буквы приходили в человеческом виде?


А при коннекте к SAP задаете явно codepage?
У меня при этом все заработало, пример ниже:
Code:
Function ConnectToSap()
    Dim Logon
   
    Set gFuncControl = CreateObject("SAP.Functions")
    Set gLogonCtrl = CreateObject("SAP.LogonControl.1")

    gFuncControl.Connection = gLogonCtrl.NewConnection
    gFuncControl.Connection.user          = g_Conf.Login_sap_login
    gFuncControl.Connection.Password      = g_Conf.Login_sap_password
    gFuncControl.Connection.RfcWithDialog = 2
    gFuncControl.Connection.CodePage      = "1504"
   
    gFuncControl.Connection.Client            = g_Conf.Login_sap_mandt
    gFuncControl.Connection.Language          = "RU"
    gFuncControl.Connection.systemnumber      = g_Conf.Login_sap_no
    gFuncControl.Connection.System            = g_Conf.Login_sap_id
    gFuncControl.Connection.saprouter         = ""
    gFuncControl.Connection.ApplicationServer = g_Conf.Login_sap_server
             
    Logon = gFuncControl.Connection.Logon(0, True)
   
    ConnectToSap = Logon
End Function


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Передача значений из Bex
СообщениеДобавлено: Пн, мар 21 2011, 12:51 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
Тоже столкнулся с данной задачей, в BexAnalyzer получить коннект и вызвать RFC, получить данные, в том числе русский текст. Как выяснилось, указание в Connection CodePage="1504" и Language="RU" не помогло, что меня удивило, ведь я делал все как на прошлом проекте и тогда все было ОК.

После долгих исследований выяснил, что это не работает именно в BexAnalyzer. Если открывать просто Excel и сделать тестовый пример, забив туда правильные данные для логина, все работало, буквы приходили русскими. При открытии BexAnalyzer с последующим открытием работавшего примера с удивлением обнаружил, что пример переставал работать, начинали приходить крокозяблы (открывал в BexAnalyzer обычную книгу с компа, это можно сделать).

В итоге помог совет от evan:
evan написал(а):
А если так указать ...

Set R3 = CreateObject("SAP.Functions.unicode")


За что ему большое спасибо!!


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

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


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

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


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

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