SAP GUI Script - создание заголовков договоров - PullRequest
0 голосов
/ 23 апреля 2020

Я использую скрипт для создания заголовков контракта в т-коде ME31K. До некоторого времени go он работал нормально, но теперь скрипт перестает работать, когда он почти завершен с созданием контракта.

Как только он вводит фиктивный номер продукта, Targ.Qty, Net Price и Price Unit, он получает стопку на Price. есть сообщение системы (см. второе изображение):

Эффективная цена составляет 1,42 шведских крон, цена материала составляет 0,99 шведских крон

Я при условии, что это сообщение раньше не появлялось, и поэтому сценарий останавливается здесь. Если я продолжу вручную с этого шага, мне нужно только нажать Enter и затем Сохранить. Заголовок контракта создан. Так что в основном на последних шагах возникает эта проблема.

enter image description here

enter image description here

При попытке отладки функция выделяется желтым цветом ниже шага allowednumbers.popupdebugdialog .

Public Sub AssertMessageNumbers(statusbar As SAPFEWSELib.GuiStatusbar, Optional allowednumbers As Variant)
    Dim i As Long
    'Appearantly .MessageNumber is not cleared as other fields, so only check if messagetype is set
    'now we cannot disallow empty message... but for now we don't want to anyway
    If statusbar.MessageType = "" Then Exit Sub
    If Not IsMissing(allowednumbers) Then
        For i = LBound(allowednumbers) To UBound(allowednumbers)
            If statusbar.MessageNumber = allowednumbers(i) Then
                Exit Sub
            End If
        Next i
    End If
    MsgBox "Unexpected message, number (" & statusbar.MessageNumber & "), text (" & statusbar.Text & "), halting!"
    allowednumbers.popupdebugdialog
 End Sub

    Dim row As Long, lastrow As Long, lastcol As Integer
    Dim updated As Integer
    Dim statusbar As SAPFEWSELib.GuiStatusbar
    Dim session As SAPFEWSELib.GuiSession

    ' ValidateUserOrDie

    Set session = GetSession()
    Set statusbar = session.FindById("wnd[0]/sbar")

    lastcol = Sheet2.Cells(1, 256).End(xlToLeft).Column
    lastrow = Sheet2.Cells(65536, 1).End(xlUp).row

    updated = 0
    For row = STARTROW To lastrow
        If Sheet2.Cells(row, 1).Interior.ColorIndex = xlColorIndexNone And Trim(Sheet2.Cells(row, 1).Value) <> "" Then
            Init session

            FillInitialScreen session, row
            SleepTick
            session.FindById("wnd[0]").sendVKey 0 ' <Enter>
            AssertMessageNumbers statusbar, Array("055")

            FillHeader session, row
            SleepTick
            session.FindById("wnd[0]").sendVKey 0 ' <Enter>
            AssertMessageNumbers statusbar

            FillDummyItem session, row
            SleepTick
            session.FindById("wnd[0]").sendVKey 0 ' <Enter>
            If statusbar.MessageType = "W" And statusbar.MessageNumber = "324" Then '
                session.FindById("wnd[0]").sendVKey 0 ' <Enter>, Skip past new Material Warning...
            End If
            AssertMessageNumbers statusbar

            ' fixprices h?nger scriptet...
            'FixPrices session

            SleepTick
            AssertMessageNumbers statusbar, Array("207")
            session.FindById("wnd[0]").sendVKey 0 ' <Enter>



            FixPartnerFunctions session, row
            SleepTick

            SaveNOutput session, row
            SleepTick
            AssertMessageNumbers statusbar, Array("017") ' Success message, create

            DeleteDummyItem session, row
            AssertMessageNumbers statusbar, Array("023") ' Success message, save

            Sheet2.Cells(row, 1).Resize(1, lastcol).Interior.ColorIndex = 35 ' Mark ID
            updated = updated + 1
            If updated >= MAXUPDATED Then
                Exit For
            End If
        End If
    Next row
End Sub
...