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

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


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

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


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

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