SAP FS10N, как выбрать макет по имени со скриптом в Excel VBA? - PullRequest
1 голос
/ 20 марта 2020

Я пишу код в Excel VBA для автоматической загрузки данных из отчета SAP FS10N. Единственная проблема, которая у меня есть сейчас, заключается в том, что я не могу найти никакого решения, чтобы выбрать макет, который я не хочу использовать по имени макета. Это строка кода, которую я нашел решением, но она не работает для меня:

Session.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shellcont/shell")

Есть идеи, как двигаться дальше?

Редактировать: Это часть моего код, где я не могу получить доступ к всплывающему окну, которое показывает доступные макеты. И поэтому я не могу выбрать макет по имени, только способ, которым рекордер скриптов сохранил способ, которым я это сделал вручную:

session.findById("wnd[0]/tbar[1]/btn[33]").press
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]/usr/lbl[1,12]").setFocus
session.findById("wnd[1]/usr/lbl[1,12]").caretPosition = 3
session.findById("wnd[1]").sendVKey 2

Повторяющиеся строки 2-5 показывают, где я прокручивал список .

Edit2: Вот как выглядит мой сценарий при записи:

If Not IsObject(application) Then
   Set SapGuiAuto  = GetObject("SAPGUI")
   Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
   Set connection = application.Children(0)
End If
If Not IsObject(session) Then
   Set session    = connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session,     "on"
   WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "fs10n"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtSO_SAKNR-LOW").text = "884050"
session.findById("wnd[0]/usr/txtGP_GJAHR").text = "2020"
session.findById("wnd[0]/usr/txtGP_GJAHR").setFocus
session.findById("wnd[0]/usr/txtGP_GJAHR").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/usr/cntlFDBL_BALANCE_CONTAINER/shellcont/shell").setCurrentCell 1,"BALANCE"
session.findById("wnd[0]/usr/cntlFDBL_BALANCE_CONTAINER/shellcont/shell").selectedRows = "1"
session.findById("wnd[0]/usr/cntlFDBL_BALANCE_CONTAINER/shellcont/shell").doubleClickCurrentCell
session.findById("wnd[0]/tbar[1]/btn[33]").press

'My problem starts here

session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]/usr/lbl[1,12]").setFocus
session.findById("wnd[1]/usr/lbl[1,12]").caretPosition = 2
session.findById("wnd[1]").sendVKey 2

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

Edit3: строка над моим комментарием: session.findById ("wnd [0] / tbar 1 / btn [33]"). Нажмите Opens диалоговое окно выбора макета: FS10N G/L Account Line Item Display

После нажатия кнопки открывается это диалоговое окно: ALV layout selection screen as ABAP List rendering

Последние 7 строк кода - это мои ручные шаги, прокручиваемые вверх 4 раза, и выбрав нужный макет. Рекордер не помогает мне определить диалоговое окно.

Я не могу более подробно рассказать о своей проблеме, надеюсь, этого будет достаточно, чтобы кто-то мне помог.

* отдельная благодарность Сандре !

1 Ответ

0 голосов
/ 23 марта 2020

На экране выбора макета ALV, если вам известно имя макета, который вы хотите выбрать, выполните следующую последовательность действий:

  1. При наличии начального списка макетов щелкните кнопка Найти:

    ALV Layout Selection Screen - List

  2. Введите название макета, снимите флажок «Начиная с текущей строки», чтобы найти все строки и нажмите Enter:

    ALV Layout Selection Screen - Find input

  3. Результат должен отображать макет всегда в первой строке, щелкните по нему:

    ALV Layout Selection Screen - Find results

  4. Список всех макетов должен быть прокручен в правой строке, а курсор находится в правильном положении, нажмите клавишу F2:

    ALV Layout Selection Screen - List with cursor on result

Все вышеперечисленные действия соответствуют следующему коду (возвращаемому регистратором сценариев):

session.findById("wnd[0]").resizeWorkingPane 158,25,false
session.findById("wnd[0]/tbar[1]/btn[33]").press
session.findById("wnd[1]/tbar[0]/btn[71]").press
session.findById("wnd[2]/usr/chkSCAN_STRING-START").selected = false
session.findById("wnd[2]/usr/txtRSYSF-STRING").text = "/SAP-GLVIEW"
session.findById("wnd[2]/usr/chkSCAN_STRING-START").setFocus
session.findById("wnd[2]/tbar[0]/btn[0]").press
session.findById("wnd[3]/usr/lbl[1,2]").setFocus
session.findById("wnd[3]/usr/lbl[1,2]").caretPosition = 0
session.findById("wnd[3]").sendVKey 2
session.findById("wnd[1]").sendVKey 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...