Я использую скрипт для создания заголовков контракта в т-коде ME31K. До некоторого времени go он работал нормально, но теперь скрипт перестает работать, когда он почти завершен с созданием контракта.
Как только он вводит фиктивный номер продукта, Targ.Qty, Net Price и Price Unit, он получает стопку на Price. есть сообщение системы (см. второе изображение):
Эффективная цена составляет 1,42 шведских крон, цена материала составляет 0,99 шведских крон
Я при условии, что это сообщение раньше не появлялось, и поэтому сценарий останавливается здесь. Если я продолжу вручную с этого шага, мне нужно только нажать Enter и затем Сохранить. Заголовок контракта создан. Так что в основном на последних шагах возникает эта проблема.
При попытке отладки функция выделяется желтым цветом ниже шага 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