Текущее время: Чт, июл 31 2025, 17:36

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: ФИО пользователя через логин
СообщениеДобавлено: Ср, июн 03 2009, 17:14 
Ассистент
Ассистент

Зарегистрирован:
Ср, июн 03 2009, 17:01
Сообщения: 48
Доброе время суток!

Возникла такая задача: необходимо через имя пользователя в системе получить его ФИО и отдел (то что видно по SU01).
Каким образом это можно сделать?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ФИО пользователя через логин
СообщениеДобавлено: Ср, июн 03 2009, 17:35 
Ассистент
Ассистент

Зарегистрирован:
Пт, мар 14 2008, 17:42
Сообщения: 25
Вроде так:
Code:
SELECT SINGLE name_text INTO fio FROM usr21
      JOIN adrp
       ON usr21~persnumber = adrp~persnumber
         WHERE
           bname = username.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФИО пользователя через логин
СообщениеДобавлено: Ср, июн 03 2009, 21:30 
Ассистент
Ассистент

Зарегистрирован:
Вс, май 17 2009, 15:12
Сообщения: 29
NotTemp написал(а):
через имя пользователя в системе получить его ФИО и отдел (то что видно по SU01).


Через BAPI_USER_GET_DETAIL


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФИО пользователя через логин
СообщениеДобавлено: Чт, июн 04 2009, 08:49 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, окт 21 2008, 08:02
Сообщения: 71
Откуда: Moscow
Пол: Мужской
Есть еще ракурс в стандарте USER_ADDRP. Я предпочитаю его использовать.
Code:
translate lf_uname to upper case.
select single name_text from user_addrp into (full_name) where bname = lf_uname.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФИО пользователя через логин
СообщениеДобавлено: Чт, июн 04 2009, 08:58 
Ассистент
Ассистент

Зарегистрирован:
Вс, май 17 2009, 15:12
Сообщения: 29
ppeter написал:
Есть еще ракурс в стандарте USER_ADDRP. Я предпочитаю его использовать.
Code:
translate lf_uname to upper case.
select single name_text from user_addrp into (full_name) where bname = lf_uname.

Отдел через него не получится получить


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФИО пользователя через логин
СообщениеДобавлено: Чт, июн 04 2009, 20:42 
Ассистент
Ассистент

Зарегистрирован:
Ср, июн 03 2009, 17:01
Сообщения: 48
В результате ковыряния с ФМ BAPI_USER_GET_DETAIL получилось вот что
Code:
Далее VBA код. Я не сказал, что мне нужно отформатировать отчет в Bex Analyser (это BW), а он построен на MS Excell.


Вариант 1. Использование ФМ BAPI_USER_GET_DETAIL
Code:
Private Sub FM_ExtGetUserDetail()
On Error GoTo errTrap
Dim objBAPIControl As Object
Dim objUserDetail As Object
Dim address As Object
Dim sapConnection As Object
Dim oWS as WorkSheet

Set objBAPIControl = CreateObject("SAP.Functions")
Set sapConnection = objBAPIControl.Connection

sapConnection.client = "100"
sapConnection.User = login
sapConnection.Language = "RU"
sapC :evil: onnection.ApplicationServer = AS
sapConnection.Password = pass
sapConnection.systemnumber = "0"
sapConnection.System = "00"

If sapConnection.Logon(1, True) <> True Then
    MsgBox "No connection to R/3!"
    Exit Sub
End If
Set objUserDetail = objBAPIControl.Add("BAPI_USER_GET_DETAIL")

objUserDetail.exports("USERNAME") = sUSER_NAME

returnFunc = objUserDetail.Call

If returnFunc = True Then
    Set address = objUserDetail.imports("Address")
    Set oWS = ActiveSheet
    oWS.Cells(1, 1) = address.Value("DEPARTMENT")
    oWS.Cells(1, 2) = address.Value("TEL1_EXT")
    oWS.Cells(1, 3) = address.Value("LASTNAME")
    oWS.Cells(1, 4) = address.Value("FIRSTNAME")
Else
    MsgBox "Error call BAPI_USER_GET_DETAIL ! "
    Exit Sub
End If
objBAPIControl.Connection.Logoff

errTrap:
Set address = Nothing
Set objUserDetail = Nothing
Set objBAPIControl = Nothing
Set sapConnection = Nothing

End Sub


Q1 При таком способе не латинские символы выгружаться как символ "#"

Решил попробовать
Вариант 2. Использование BAPI
Code:

Private Sub ExtGetUserDetail_BAPI()
On Error GoTo errTrap
Dim objBAPIControl As Object
Dim sapConnection As Object
Dim oUser As Object
Dim oAddress As Object

Set objBAPIControl = CreateObject("sap.bapi.1")
Set sapConnection = objBAPIControl.Connection

sapConnection.client = "100"
sapConnection.User = login
sapConnection.Language = "RU"
sapC :evil: onnection.ApplicationServer = AS
sapConnection.Password = pass
sapConnection.systemnumber = "0"
sapConnection.System = "00"

If sapConnection.Logon(1, True) <> True Then
    MsgBox "No connection to R/3!"
    Exit Sub
End If

Set oUser = objBAPIControl.GetSAPObject("USER", sUSER_NAME)
Set oAddress = objBAPIControl.DimAs(oUser, "GetDetail", "Address")

    Set oWS = ActiveSheet
    oWS.Cells(1, 1) = address.Value("DEPARTMENT")
    oWS.Cells(1, 2) = address.Value("TEL1_EXT")
    oWS.Cells(1, 3) = address.Value("LASTNAME")
    oWS.Cells(1, 4) = address.Value("FIRSTNAME")

objBAPIControl.Connection.Logoff

errTrap:
Set oUser = Nothing
Set oAddress = Nothing
Set objBAPIControl = Nothing
Set sapConnection = Nothing

End Sub


Q2 А при таком способе, хоть о отрабатываться без ошибок, тем не менее все ячейки пустые.

Кто-нибудь сталкивался с такими вопросами? Каким образом решали?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ФИО пользователя через логин
СообщениеДобавлено: Пт, июн 05 2009, 07:00 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
NotTemp написал(а):
В результате ковыряния с ФМ BAPI_USER_GET_DETAIL получилось вот что
Code:
Далее VBA код. Я не сказал, что мне нужно отформатировать отчет в Bex Analyser (это BW), а он построен на MS Excell.

Q1 При таком способе не латинские символы выгружаться как символ "#"
Кто-нибудь сталкивался с такими вопросами? Каким образом решали?


Может попробовать указать Codepage ?
Code:
sapConnection.CodePage = "1504"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФИО пользователя через логин
СообщениеДобавлено: Пт, июн 05 2009, 08:16 
Ассистент
Ассистент

Зарегистрирован:
Ср, июн 03 2009, 17:01
Сообщения: 48
Rokhay, спасибо! Помогло!

Может быть, у кого то есть варианты как решить вторую проблему (Q2)?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ФИО пользователя через логин
СообщениеДобавлено: Пт, июн 05 2009, 09:38 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
NotTemp написал(а):
Может быть, у кого то есть варианты как решить вторую проблему (Q2)?


Code:
Set oUser = objBAPIControl.GetSAPObject("USER", sUSER_NAME)
Set oAddress = objBAPIControl.DimAs(oUser, "GetDetail", "Address")


Параметры передали, а метод кто будет вызывать? :wink:
Code:
Set oUser = objBAPIControl.GetSAPObject("USER", sUSER_NAME)
Set oAddress = objBAPIControl.dimas(oUser, "GetDetail", "Address")
oUser.GetDetail return:=oReturn, address:=oAddress

У меня, правда, сам метод возвращает сообщение об ошибке в параметре Return...

примеры и документация: BAPI ActiveX Control


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФИО пользователя через логин
СообщениеДобавлено: Ср, июн 10 2009, 09:53 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Вт, июн 09 2009, 15:25
Сообщения: 24
Откуда: Москва
Пол: Мужской
Code:
  DATA: l_adrp_name_last  TYPE ad_namelas,
        l_adrp_name_first TYPE ad_namefir.

      SELECT SINGLE                                         "#EC *
          adrp~name_last
          adrp~name_first
        FROM
          usr02 INNER JOIN usr21 ON
            usr02~bname = usr21~bname
          INNER JOIN adrp ON
            usr21~persnumber = adrp~persnumber
              INTO
           (l_adrp_name_last,
            l_adrp_name_first)
        WHERE
          usr02~bname = sy-uname.

      IF sy-subrc IS INITIAL.
        CONCATENATE
          l_adrp_name_last
          l_adrp_name_first
        INTO
          nameuser
        SEPARATED BY
          space.
      ELSE.
        nameuser = sy-usname.
      ENDIF.


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

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


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

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


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

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