Автоматизация загрузки документов фактуры из транзакции VF03 в SAP - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь создать макрос для загрузки нескольких счетов из транзакции SAP. Тем не менее, он все еще не работает должным образом, и я получаю ошибки 614 и 814. Пожалуйста, посмотрите следующие шаги, как мы в настоящее время делаем это:

  1. Откройте SAP.
  2. Ищите VF03 транзакция.
  3. Открыть транзакцию VF03.
  4. Введите номер документа.
  5. Нажмите «Документ фактуры». (Появится раскрывающееся меню)
  6. Нажмите «Issue output to». (Из раскрывающегося меню)
  7. В новом отображаемом подокне выберите документ.
  8. Нажмите «Предварительный просмотр».
  9. Отобразится другое окно. Нажмите «Предварительный просмотр» в этом окне. (Откроется документ)
  10. Распечатайте его.
  11. Выберите папку, в которой вы хотите его сохранить.
  12. Назовите файл. (Стандартно называть его номером документа).

Я хочу использовать это как автоматизированный процесс, в котором происходит следующее:

  1. Введите список накладные в столбце A листа Excel.
  2. VBA соединяется с SAP и завершает процесс, который я объяснил ранее.
  3. накладные go в указанную папку c и сохраняются в ее номер документа.

У меня есть следующий код:


Sub Downloadinvoices()


Set SapGuiAuto = GetObject("SAPGUI") 'Get the SAP GUI Scripting object
Set SAPApp = SapGuiAuto.GetScriptingEngine 'Get the currently running SAP GUI
Set SAPCon = SAPApp.Children(0) 'Get the first system that is currently connected
Set Connection = SAPApp.Children(0) 'Get the first session (window) on that connection



Dim i As Byte
Dim lastcell As Byte



lastcell = WorksheetFunction.CountA(Range("A:A"))



On Error GoTo errorhandler
For i = 2 To lastcell



Dim docnr As String
docnr = Cells(i, 1)



'1. Open transaction VF03
session.findById("wnd0tbar0okcd").Text = "NVF03"
'2. Press Enter
session.findById("wnd0").sendVKey 0
'3. Type Document number
session.findById("wnd0usrtxtRF05L-BELNR").Text = docnr
'4. Type Company Code
session.findById("wnd0usrctxtRF05L-BUKRS").Text = Range("b2").Value
'5. Type Fiscal Year
session.findById("wnd0usrtxtRF05L-GJAHR").Text = Range("c2").Value
'6. Press Enter
'session.findById("wnd0usrtxtRF05L-GJAHR").caretPosition = 4
session.findById("wnd0tbar0btn0").press
'7. Open the Attachment window
session.findById("wnd0titlshellcontshell").pressContextButton "GOS_TOOLBOX"
session.findById("wnd0titlshellcontshell").selectContextMenuItem "GOS_VIEW_ATTA"



session.findById("wnd1usrcntlCONTAINER_0100shellcontshell").currentCellColumn = "BITM_DESCR"
'9. Select the first row in attachment list
session.findById("wnd1usrcntlCONTAINER_0100shellcontshell").selectedRows = "0"
'10. Double click in the row to open the attachment
session.findById("wnd1usrcntlCONTAINER_0100shellcontshell").doubleClickCurrentCell



application.Wait (Now() + TimeValue("00:00:04")) '11. Wait 4 seconds
application.SendKeys "left" '12. Move to left
application.Wait (Now() + TimeValue("00:00:01")) '13. Wait 1 second
application.SendKeys "ENTER" '14. Press enter
application.Wait (Now() + TimeValue("00:00:01")) '15. Wait 1 second



session.findById("wnd1usrsub:SAPLSPO4:0300ctxtSVALD-VALUE0,21").Text = "C:Usersisaac.chavarriaDesktop"
'16. Choose the route to save
application.SendKeys Range("f2").Value Range("b2").Value "_" docnr



application.Wait (Now() + TimeValue("00:00:01")) '17. Wait a second
application.SendKeys "ENTER" '18. Press Enter
application.Wait (Now() + TimeValue("00:00:01")) '19. Wait a second
application.SendKeys "ENTER" '20. Press enter
application.Wait (Now() + TimeValue("00:00:01")) '21. Wait a second
application.SendKeys "F12" '22. Press F12 (back)
application.Wait (Now() + TimeValue("00:00:01")) '23. Wait a second
application.SendKeys "ENTER" '24. Press Enter
application.Wait (Now() + TimeValue("00:00:01")) '25. Wait a second
application.SendKeys "F12" '26. Press F12
application.Wait (Now() + TimeValue("00:00:01")) '27. Wait a second
application.SendKeys "F12" '28. Press F12
application.Wait (Now() + TimeValue("00:00:01")) '29. Wait a second
application.SendKeys "F12" '30. Press F12



errorhandler:
If Err.Number 0 Then
Cells(i, 1).Interior.Color = RGB(255, 0, 0)
On Error GoTo -1
End If



Next



MsgBox "Invoices already downloaded! (except any cells in red)", , "Isaac Chavarria says:"



End Sub
...