SAP Script: цикл по ссылке
В настоящее время я создаю сценарий SAP для автоматизации задачи. В основном эта задача связана с клирингом входящего / исходящего платежа.
Система SAP: Q4N (тестовая система для P4S) Транзакция: постобработка выписки по счету
У меня есть эти данные в другой книге:
Теперь мне нужно ввести эти данные в SAP в следующем порядке:
- Дата
- Итого
- Ссылка
После ввода деталей с пунктами 1 и 2 у меня возникают проблемы с "ссылкой", так как мне нужно ввести один за другим в первое текстовое поле, чтобы перехватить ошибку, если нет подходящей позиции.
После ввода / обработки всей ссылки, она переходит к другому банку. Поскольку существует вероятность, что для обработки будет дополнительный банк. Примером может быть:
У меня есть рабочий код ниже. Но моя проблема в том, что он просто зацикливается на "столбце ссылок" на первом скриншоте и не останавливается.
Dim i As Long, x As Long, RefLastRow As Long
Dim stmtDate$, TotalAmount$, CurrencyFormat$, SAPCurrency$, TempCurrency$, sText
Dim RefCount As Long
Dim Ret
Dim FilePath As String
FilePath = wMain.Range("Path")
Dim fso As New FileSystemObject
Dim fileName As String
Dim w As Workbook
fileName = fso.GetFileName(FilePath)
Ret = IsWorkBookOpen(FilePath)
If Ret = False Then
MsgBox "Please prepare the template file first", vbCritical, "Warning!"
Else
Set w = Workbooks(fileName)
With session
RefLastRow = w.Worksheets(1).Cells(Worksheets(1).Rows.Count, "H").End(xlUp).Row
For i = 2 To RefLastRow
stmtDate = w.Worksheets(1).Cells(i, 2).Value
TotalAmount = w.Worksheets(1).Cells(i, 3).Value
TempCurrency = w.Worksheets(1).Cells(i, 9).Value
.findById("wnd[0]").Maximize
.findById("wnd[0]/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell").DoubleClickNode "F00002" 'Double click Nachbehand in favorites
.findById("wnd[0]/usr/ctxtFEBEBA-BUKRS").Text = "0156" 'company code default
.findById("wnd[0]/usr/ctxt/BAY0/AB_EBS_GRA-AZDATL").Text = stmtDate 'insert date
.findById("wnd[0]/usr/txt/BAY0/AB_EBS_GRA-KWBTRL").Text = TotalAmount 'insert amount
.findById("wnd[0]/usr/txt/BAY0/AB_EBS_GRA-KWBTRL").SetFocus 'Show list
.findById("wnd[0]/usr/txt/BAY0/AB_EBS_GRA-KWBTRL").caretPosition = 10 'show list
.findById("wnd[0]/tbar[1]/btn[8]").press 'Showlist
.findById("wnd[0]/usr/lbl[9,2]").SetFocus 'choose bank
.findById("wnd[0]/usr/lbl[9,2]").caretPosition = 6 'bank position
.findById("wnd[0]").sendVKey 2 'click bank
.findById("wnd[0]/usr/lbl[8,5]").SetFocus 'result of bank
.findById("wnd[0]/usr/lbl[8,5]").caretPosition = 8 'result of bank position
.findById("wnd[0]").sendVKey 2 'doubleclick bank
.findById("wnd[0]/tbar[1]/btn[13]").press 'posting mode
.findById("wnd[1]/usr/lbl[3,3]").SetFocus 'Display All screens
.findById("wnd[1]/usr/lbl[3,3]").caretPosition = 11 'Display all screens position
.findById("wnd[1]").sendVKey 2 'double click display all screens position
.findById("wnd[0]/tbar[1]/btn[6]").press 'Press post SA button
'Currency check if same currency in the file, then value is default.
'If value is different, then copy the currency in the template and paste in this field
SAPCurrency = .findById("wnd[0]/usr/ctxtBKPF-WAERS").Text
If SAPCurrency <> TempCurrency Then
.findById("wnd[0]/usr/ctxtBKPF-WAERS").Text = TempCurrency
End If
.findById("wnd[0]/usr/txtRF05A-AUGTX").SetFocus
.findById("wnd[0]/usr/txtRF05A-AUGTX").caretPosition = 4
.findById("wnd[0]/tbar[1]/btn[6]").press
sText = .findById("wnd[0]/sbar").Text
If sText = "Posting takes place in previous fiscal year" Then
.findById("wnd[0]").sendVKey 0
End If
.findById("wnd[0]/tbar[0]/okcd").Text = "/06"
.findById("wnd[0]").sendVKey 0
.findById("wnd[0]/tbar[0]/okcd").Text = "/00"
.findById("wnd[1]").sendVKey 0
.findById("wnd[0]/usr/sub:SAPMF05A:0710/radRF05A-XPOS1[5,0]").Select
.findById("wnd[0]/tbar[0]/okcd").Text = "/11"
.findById("wnd[0]/usr/sub:SAPMF05A:0710/radRF05A-XPOS1[5,0]").SetFocus
.findById("wnd[0]").sendVKey 0
'****This is where I'm starting to have a trouble******
RefCount = 2
Do While w.Worksheets(1).Cells(i, 1).Value <> vbNullString
RefCount = RefCount + 1
'start entering reference number from the template to this field
.findById("wnd[0]/usr/sub:SAPMF05A:0731/txtRF05A-SEL01[0,0]").Text = w.Worksheets(1).Cells(RefCount, 8).Value 'First field in reference
.findById("wnd[0]/usr/sub:SAPMF05A:0731/txtRF05A-SEL01[0,0]").caretPosition = 10 'Position 'position of reference in selection
.findById("wnd[0]").sendVKey 0 'double click selected reference
'Check Status Bar of SAP if there is an error for each reference number entered
sText = .findById("wnd[0]/sbar").Text
If sText = "No appropriate line item is contained in this document" Then
MsgBox "Please check line" & " " & w.Worksheets(1).Cells(RefCount, 8).Row & " " & "in column 'Reference'" _
& vbNewLine & vbNewLine & "Reason: " & sText, vbCritical, "Performance Assistant"
End
End If
Loop
Next i
MsgBox "Process Completed!", vbOKOnly
End With
'End of sap script code
End If