Текущее время: Вт, апр 23 2024, 09:01

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Поиск элемента в древе (SAP Gui скрипт)
СообщениеДобавлено: Ср, мар 27 2019, 14:58 
Начинающий
Начинающий

Зарегистрирован:
Ср, мар 27 2019, 13:15
Сообщения: 5
Привет форумчане!
Столкнулся с проблемой при попытке автоматизировать стандартное действие в САП.
Требуется в окне "карточки абонента" найти строку с оборудованием и присвоить определённое значение полю.
Изображение
Присвоение действие элементарное с точки зрения программирования, а вот поиск...
Проблема в том, что с точки зрения скрипт-рекордера все элементы древа обрабатываются одинаково:
Code:
session.findById("wnd[0]/shellcont/shell/shellcont/shell").DoubleclickNode "000000001964"

Различаются только цифры в конце - это порядковый номер элемента и он не зависит от уровня вложения, только от номера строки начиная с верха древа.

Однако на самом деле элементы древа совершенно разные и реакция на их открытие тоже, открывается новое окно, иногда нет.
Я написал код с контролем ошибок, который перебором находит нужный пункт, однако из-за того что вложенных элементов в древе может быть больше тысячи (при том что единиц оборудования больше десяти тысяч) процесс поиска очень долгий.
Самый очевидный вариант - искать по наименованию элемента типа 853625 - СЭ ЦЭ6803В 220/380В 10-100А 1(011070087001242), где в скобках как раз идентификатор оборудования по которому ищется совпадение, но как его запросить?


Порывшись на форуме попытался написать код, но результат нулевой.
Code:
mycontrol = oSession.findByName("wnd[0]/shellcont/shell/shellcont/shell", "000000000005")
A = mycontrol.Text


Свой код с перебором выложил в отдельном сообщении ниже, может кому пригодится (это вряд ли)
Всех неравнодушных прошу помочь.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск элемента в древе (SAP Gui скрипт)
СообщениеДобавлено: Ср, мар 27 2019, 15:03 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
а транзакция какая (картинка не открывается ваша)?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск элемента в древе (SAP Gui скрипт)
СообщениеДобавлено: Ср, мар 27 2019, 15:09 
Начинающий
Начинающий

Зарегистрирован:
Ср, мар 27 2019, 13:15
Сообщения: 5
Код запускается из VBA Excel

Code:
Sub ÇàíåñåíèåÂÑÀÏ()
    Set myBook = ActiveWorkbook
    Set mySh = myBook.Sheets("Çàÿâêè")
       If Not IsObject(Application1) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set Application1 = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = Application1.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 Application1, "on"
End If
'ñ÷èòàåì êîëè÷åñòâî ñòðîê â òàáëèöå
    col = SearchLastRow1(mySh.Range("A:A"))
    'iRow = 1

    For iRow = 2 To col
    'ñ÷èòûâàåì äàííûå èç òàáëèöû Excel íà÷èíàÿ ñî 2 ñòðîêè
        No = mySh.Range("A" + CStr(iRow)).Text
        UST = mySh.Range("B" + CStr(iRow)).Text
        PrUstStar = mySh.Range("C" + CStr(iRow)).Text
        Nomer = mySh.Range("D" + CStr(iRow)).Text
        PrUstNov = mySh.Range("E" + CStr(iRow)).Text

If No <> "" Then
'âûáèðàåì îáðàçåö çàÿâêè
session.findById("wnd[0]").resizeWorkingPane 128, 39, False
session.findById("wnd[0]/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell").doubleClickNode "F00007"
session.findById("wnd[0]/usr/subPARAMS:/MRSKS/ZISU_FIND:0101/ctxtP_BUKRS").Text = "5500"
session.findById("wnd[0]/usr/subPARAMS:/MRSKS/ZISU_FIND:0101/ctxtP_BUKRS").caretPosition = 4
session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTAB_MAIN_FC3").Select
session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTAB_MAIN_FC3/ssubMAIN_SCA:/MRSKS/ZISU_FIND:0202/cmbLT_PARAM-PUNAL").Key = "1"
session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTAB_MAIN_FC3/ssubMAIN_SCA:/MRSKS/ZISU_FIND:0202/cmbLT_PARAM-PUNAL").SetFocus
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTAB_MAIN_FC3/ssubMAIN_SCA:/MRSKS/ZISU_FIND:0202/cmbLT_PARAM-STATE").Key = "1"
session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTAB_MAIN_FC3/ssubMAIN_SCA:/MRSKS/ZISU_FIND:0202/subSUB1:/MRSKS/ZISU_FIND:0400/txtS_CNUM-LOW").Text = Nomer
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/usr/cntlGO_ALV_CONT_OIG/shellcont/shell").currentCellColumn = "ANLAGE"
session.findById("wnd[0]/usr/cntlGO_ALV_CONT_OIG/shellcont/shell").clickCurrentCell
U = 2
UStx = 0
On Error Resume Next

Do
U = U + 1
Err.Clear
session.findById("wnd[0]/shellcont/shell/shellcont/shell").doubleClickNode Dlina(U) & U
If Err.Number <> 0 Then session.findById("wnd[0]/tbar[0]/btn[3]").press
Err.Clear
UStx = session.findById("wnd[0]/usr/subCUST_SCREEN:/MRSKS/SAPLISU_ARM:1002/txtGS_ANLAGE-ANLAGE").Text
    If Err.Number = 0 Then
        If UST = UStx Then
            Do
            U = U + 1
            Err.Clear
            session.findById("wnd[0]/shellcont/shell/shellcont/shell").doubleClickNode Dlina(U) & U
                 If Err.Number <> 0 Then
                    session.findById("wnd[0]/tbar[0]/btn[3]").press
                    Else
                        Err.Clear
                        NumerX = session.findById("wnd[0]/usr/subCUST_SCREEN:/MRSKS/ISU_ARM_LOGIKNR:1003/txtGS_LOGIKNR-CUST_FIELD-COUNTERNUMBER").Text
                              If Err.Number = 0 Then
                                If Nomer = session.findById("wnd[0]/usr/subCUST_SCREEN:/MRSKS/ISU_ARM_LOGIKNR:1003/txtGS_LOGIKNR-CUST_FIELD-COUNTERNUMBER").Text Then
                                            session.findById("wnd[0]/usr/subCUST_SCREEN:/MRSKS/ISU_ARM_LOGIKNR:1003/ctxtGS_LOGIKNR-CUST_FIELD-INSTALLPROG").Text = PrUstNov
                                            session.findById("wnd[0]/tbar[0]/btn[11]").press
                                            session.findById("wnd[1]/tbar[0]/btn[0]").press
                                            session.findById("wnd[1]/tbar[0]/btn[0]").press
                                            session.findById("wnd[0]/tbar[0]/btn[3]").press
                                            session.findById("wnd[0]/tbar[0]/btn[3]").press
                                End If
                            End If
                    End If
            Loop While Nomer <> NumerX
         End If
       End If
Loop While UStx <> UST
On Error GoTo 0
    End If
    Next
MsgBox ("Ãîòîâî!")
End Sub
Function SearchLastRow1(rang As Range)
    SearchLastRow1 = rang.Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
End Function
Function FullFileName(PartName As String) As String
FullFileName = ""
For Each wb In Workbooks
If InStr(1, LCase(wb.Name), LCase(PartName)) > 0 Then
FullFileName = wb.Name
End If
Next
End Function
Function Dlina(X) As String
If X > 9999 Then
Dlina = "0000000"
Else
    If X > 999 Then
    Dlina = "00000000"
    Else
        If X > 99 Then
        Dlina = "000000000"
        Else
                If X > 9 Then
                Dlina = "0000000000"
                Else
                Dlina = "00000000000"
                End If
        End If
    End If
End If
End Function


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск элемента в древе (SAP Gui скрипт)
СообщениеДобавлено: Ср, мар 27 2019, 15:11 
Начинающий
Начинающий

Зарегистрирован:
Ср, мар 27 2019, 13:15
Сообщения: 5
pberezin написал:
а транзакция какая (картинка не открывается ваша)?


Название транзакции в статусе - "/ISU_CARD"

Я так понимаю форма нестандартная...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск элемента в древе (SAP Gui скрипт)
СообщениеДобавлено: Чт, мар 28 2019, 08:11 
Начинающий
Начинающий

Зарегистрирован:
Ср, мар 27 2019, 13:15
Сообщения: 5
Попробую спросить более конкретно, благо после штудирования различных форумов появилось понимание. Какой метод или свойство запрашивает подпись элемента в графическом интерфейсе из приведённых в таблице?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск элемента в древе (SAP Gui скрипт)
СообщениеДобавлено: Чт, мар 28 2019, 10:28 
Начинающий
Начинающий

Зарегистрирован:
Ср, мар 27 2019, 13:15
Сообщения: 5
Штудирование справки и перебор методов из GuiTree привел меня к такой вещи:
text1 = session.findById("wnd[0]/shellcont/shell/shellcont/shell").GetNodeTextByKey("00000000123")

где GetNodeTextByKey() - запрос подписи элемента дерева по его Key

Теперь тот же перебор, но не с заходом в каждую позицию, а с чтением имени позиции и сверкой, что меня полностью устраивает.
Всем спасибо за внимание, вопрос закрыт


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

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


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

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


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

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