SAP Script: цикл по ссылке

В настоящее время я создаю сценарий SAP для автоматизации задачи. В основном эта задача связана с клирингом входящего / исходящего платежа.

Система SAP: Q4N (тестовая система для P4S) Транзакция: постобработка выписки по счету

У меня есть эти данные в другой книге:

Теперь мне нужно ввести эти данные в SAP в следующем порядке:

  1. Дата
  2. Итого
  3. Ссылка

После ввода деталей с пунктами 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

0 ответов

Другие вопросы по тегам