Я создал ниже скрипт SAP GUI для создания ПО.
Скрипт работает нормально в большинстве случаев. Однако я хотел бы улучшить его немного больше.
Первый вопрос:
Например, если сценарий останавливается в середине процесса, если у вас есть список ( Входной лист Excel) из 50 материалов, для которых необходимо создать одинаковое количество заказов на поставку. Если сценарий останавливается, например, на материале № 30, я не могу просто запустить сценарий снова, потому что он начнется снова с самого начала, но PO для этих материалов уже созданы.
Теперь, как вы можете видеть в коде, скрипт помещает комментарий «Завершено» в столбец 6 в каждой строке после создания заказа: objSheet.Cells(i, 6) = "Finished"
Он также выбирает созданный номер заказа из SAP и помещает его в столбец рядом с ним (столбец 7): objSheet.Cells(i, 7).Value = Mid(session.findById("wnd[0]/sbar").Text, 38)
Я хотел бы добавить «если код», говорящий, что если есть номер PO в столбце 7, который пропускает эти строки из входной лист Excel и вместо него go до следующей строки, для которой ячейка в столбце 7 пуста.
Второй вопрос:
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[11]").press
Выше Enter записан 3 раза с последующим сохранением. Я хотел бы добавить к сценарию, если это сохранение не удастся, что нажимает сохранить еще раз. Иногда сценарий просто останавливается на этом шаге. Однако, если сохранить еще раз вручную, PO сохраняется и создается. Я понятия не имею, почему сценарий иногда останавливается на этом шаге, но для определенных материалов это происходит. Снова все заполняется сценарием, и все, что осталось, это нажать «сохранить», что я и делаю, если возникает эта проблема. Поэтому я сохраняю заказ вручную и помещаю номер заказа в лист ввода Excel, и, поскольку мы решили первую проблему, я могу просто перезапустить сценарий, и он продолжится снова с первой пустой ячейки в столбце 7 (если isEmpty (objSheet.cells (i, 7). )) затем).
Поэтому я бы хотел, чтобы скрипт нажимал Сохранить, только когда первое сохранение не удалось. Если я добавлю session.findById("wnd[0]/tbar[0]/btn[11]").press
два раза друг за другом, сценарий будет остановлен, если первое сохранение прошло успешно. Затем для второго сохранения SAP скажет, что сохранять нечего, поэтому скрипт перестанет работать из-за этого непредвиденного события / сообщения. Поэтому, если возможно, я бы хотел, чтобы скрипт нажимал кнопку «Сохранить» еще раз, если первое сохранение не удалось. В основном это код, в котором говорится: iferror после первого сохранения, а затем повторите его снова.
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.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 application, "on"
End If
session.findById("wnd[0]").maximize
REM ADDED BY EXCEL *************************************
Dim objExcel
Dim objSheet, intRow, i
Set objExcel = GetObject(,"Excel.Application")
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet
For i = 2 to objSheet.UsedRange.Rows.Count
COL2 = Trim(CStr(objSheet.Cells(i, 2).Value)) 'Column2 Agreement number
COL3 = Trim(CStr(objSheet.Cells(i, 3).Value)) 'Column3 Agreement Line Item
COL4 = Trim(CStr(objSheet.Cells(i, 4).Value)) 'Column4 PO Quantity
COL5 = Trim(CStr(objSheet.Cells(i, 5).Value)) 'Column5 Delivery date
REM ADDED BY EXCEL *************************************
session.findById("wnd[0]/tbar[0]/okcd").text = "/nme21n"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/ctxtMEPO1211-KONNR[29,0]").text = COL2
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/txtMEPO1211-KTPNR[30,0]").text = COL3
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/txtMEPO1211-KTPNR[30,0]").setFocus
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/txtMEPO1211-KTPNR[30,0]").caretPosition = 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0020/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/txtMEPO1211-MENGE[6,0]").text = COL4
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0020/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/ctxtMEPO1211-EEIND[9,0]").text = COL5
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0020/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/ctxtMEPO1211-EEIND[9,0]").setFocus
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0020/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/ctxtMEPO1211-EEIND[9,0]").caretPosition = 0
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0020/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/txtMEPO1211-MENGE[6,0]").text = COL4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[11]").press
objSheet.Cells(i, 6) = "Finished"
objSheet.Cells(i, 7).Value = Mid(session.findById("wnd[0]/sbar").Text, 38)
REM FINALIZATION CONTROL CHECK ************************
aux=col2 & " " & col3 & " " & col4 & " " & col5
CreateObject("WScript.Shell").run("cmd /c @echo %date% %time% " & aux & " >>
C:\SCRIPT\PlOrCreationLog.txt")
next
msgbox "Process Completed Forza Juve! :)"
REM FINALIZATION CONTROL CHECK ************************