Jarosław K.

Jarosław K. Master Data
Coordinator,
Unilever Polska S.A.
- Zakład Pr...

Temat: SAP --> API - jak zacząć?

Mój pierwszy post, więc witam wszystkich!

Piszę dość sporo w VBA, z drugiej strony nie mam dostępu do zmian masowych w naszym SAPie, chciałbym więc do tej roboty zaprzęgnąć Excela, ale mam problem. Próbowałem wykorzystać makra przytaczane tu przez kolegów, np poniższe:


If Not IsObject(lrw) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set lrw = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = lrw.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 lrw, "on"
End If


Makro wysypuje się na linii:


Set session = Connection.Children(0)


dając komunikat:

Run-time error '614': The enumerator of the collection cannot find en element with the specified index.

Jak mogę sprawdzić, czy SAP API jest w ogóle włączone (wyczytałem, że to jest opcja, która musi być włączona)? A może ten błąd nie ma nic wspólnego z tym, czy SAP API jest aktywne?

Pozdrawiam

konto usunięte

Temat: SAP --> API - jak zacząć?

hmm mnie wywaliło ten komunikat, ponieważ okno SAp było tylko w SAP GUI, a nie w oknie programu - czy byleś zalogowany?
To makro dziala pod warunkiem zalogowania do SAP.

i odpowiednio ustaw SAP - połączenie szybkie - aby Ci się lepiej z makrami pracowało.

I Help daj jako "in modal dialog boz", to bedziesz mógł wyciągać zmienne z komunikatów (np z komunikatu błędów).

ja używam VB do zakładania materiałów, zmiany opisów (w 26 językach), zamykania i otwierania technicznego zleceń, generowania raportów itp.Bartłomiej C. edytował(a) ten post dnia 25.06.09 o godzinie 12:49
Jarosław K.

Jarosław K. Master Data
Coordinator,
Unilever Polska S.A.
- Zakład Pr...

Temat: SAP --> API - jak zacząć?

właśnie odkryłem dziwną rzecz: używamy kilku środowisk SAPa, i kiedy loguję się do naszego normalnego systemu produkcyjnego, makro działa bez problemów (przynajmniej udało mi się wywołać transakcję MB52), natomiast na innym systemie, na którym przechowujemy dane na poziomie klienta - wysypuje się właśnie tak
jak powyżej. Jakieś sugestie co może być tego przyczyną?

BTW, podziwiam zakres w jakim wykorzystujesz VB do obsługi SAPa, też do tego dążę, ale dopiero raczkuję. Liczę na wsparcie Grupy ;) Czy znajdę gdzieś w sieci jakiś dokument, który by pokazywał strukturę okien / buttonów itp. w SAPie i sposób wywoływania ich? Widzę, że w swoim programie odwołujesz się do metody findById, w której jako argumentu używasz ścieżki w formie "wnd[0]/tbar[0]/okcd" - pewnie w nawiasach kwadratowych podaje się indeks danego okna, toolbaru na nim itp, ale jak można sprawdzić jakie są te indeksy?

Wszelkie wskazówki mile widziane!

PozdrawiamJarosław Kaczmarek edytował(a) ten post dnia 25.06.09 o godzinie 13:45

konto usunięte

Temat: SAP --> API - jak zacząć?

masz w SAP ikonkę...taki kolorowy monitorek - ustawienia. Tam masz narzędzie programowania skryptu - wybierasz "Wykonanie testu Wystąpień w oknie" - i po najechaniu na obiekt masz opis pola, a opcja "kopiuj" pozwala na skopiowanie do excela części ścieżki.

Ale ja generalnie używam innej metody - nagrywam w SAP makro, a potem to co nagrałem mieszam z makrem excela. Mam wtedy pełne działanie makra na przycisku, polu itp - a z testu wystąpień mam tylko opis pola.

Opisy pola masz również po kliknięciu w pole, następnie klawisz F1 - a potem - informacja techniczna. Alr nie dla wszystkich pól masz możliwość uzyskać nazwę. Dla pól informacyjnych - np o ilości języków w materiale, błędów - jeżeli są to pola tekstowe - to nazwę można wyciągnąć właśnie z testu wystąpienia.
np:
ilosc = session.findById("wnd[0]/usr/subSUB2:SAPLMGD1:8001/txtKT_EINTRAEGE_C").Text

ja malo znam VB, więc piszę makra w "sztubacki " sposób...ale działają. Przyspieszyłem wykonywanie wielu czynności "powtarzalnych"...nawet kilkudziesięciokrotnie (np. otwieranie zamykanie techniczne" przewodników - używam przygotowania danych w VB, VB otwiera mi przetwarzanie masowe - i tam ładuje dane, a następnie uruchamia proces.

w sieci niewiele jest na temat programowania VB w SAP.

Mój sposób tworzenia makr - z metodą findById jest "bezpieczny" - bo zawsze stały, niezależny od wielkości okna, wersji SApa itp...

problemem jest tylko ilość otwartych okienek...system wykonuje na tym oknie SAP., które było otwarte jako pierwsze (wnd0), więc bezpiecznie jest zaczynać makro poprzez ekran startowy, i tylko jedną sesję.Bartłomiej C. edytował(a) ten post dnia 25.06.09 o godzinie 14:27
Jarosław K.

Jarosław K. Master Data
Coordinator,
Unilever Polska S.A.
- Zakład Pr...

Temat: SAP --> API - jak zacząć?

no tego mi brakowało! "Wykonanie testu wystąpień w oknie" - super! Myślę, że zamiast szukać dokumentacji po sieci, spróbuję moją ulubioną metodą, czyli prób i błędów ;)

Szkoda tylko, że nie mogę rozkminić, dlaczego na systemie produkcyjnym mi działa, a na tym 'klienckim' się wysypuje. Ale może jakoś do tego dojdę. I tak najważniejsze, że na produkcyjnym będę mógł szybko poprawić to i owo.

Pozdrawiam
Jarosław K.

Jarosław K. Master Data
Coordinator,
Unilever Polska S.A.
- Zakład Pr...

Temat: SAP --> API - jak zacząć?

Wyjaśniło się, dlaczego na tu działa, a tam nie - jak wybieram "Scripting Development Tools / Troubleshoot SAP GUI Scripting", dostaję informację, że "Scripting is disabled
on the server"... Niestety...

Pozdrawiam
Jarosław K.

Jarosław K. Master Data
Coordinator,
Unilever Polska S.A.
- Zakład Pr...

Temat: SAP --> API - jak zacząć?

Tak właściwie cały czas rozmawiamy o SAP GUI Scripting, a czy ktoś z Was próbował komunikować się z SAPem za pomocą API? Jak pisałem, okazało się, że na jednym z serwerów SAPa, których używamy, skrypty są wyłączone - jak można to obejść, żeby jednak trochę zautomatyzować sobie pracę?

Używając funkcji API na tyle, na ile udało mi się je rozgryźć, zbudowałem sobie jakiś kodzik, którym potrafię nawet uruchomić wybraną transakcję i czasem wykonać w niej jakieś operacje. Niestety, API wymaga odwołań do konkretnych okien, a ja nie potrafię znaleźć metody jak przez API odwołać się do konkretnych przycisków, toolbarów itp.

np. poniższy kod uruchamia QuickViewera:


lSAPhWnd = FindWindow("SAP_FRONTEND_SESSION", vbNullString)
editfield = FindWindowEx(lSAPhWnd, 0, vbNullString, vbNullString)
lTcodehWnd = FindWindowEx(editfield, 0, "ComboBox", vbNullString)

transakcja = "/NSQVI"
For i = 1 To 6
znak = Mid(transakcja, i, 1)
If znak = "" Then znak = " "
key_ = SendMessage(lTcodehWnd, WM_CHAR, Asc(znak), ByVal 1)
Next

sap_to_foreground:
SetForegroundWindow (lSAPhWnd)
If GetForegroundWindow <> lSAPhWnd Then GoTo sap_to_foreground
Sleep (200)
Call keybd_event(13, 0, 0, 0)
Call keybd_event(13, 0, KEYEVENTF_KEYUP, 0)


Może nie jest to efektowne rozwiązanie, ale działa :))

Czy wiecie może jak dotrzeć przez API do innych okien w SAP? Jak np. zmienić wagę netto materiału: ok, transakcję MM02 wywołam powyższym fragmentem kodu, napisałem nawet coś, co za pomocą SendMessage <TAB> przejdzie w końcu do właściwego pola na zakładce Basic Data 1, ale nie potrafię np. zapisać wykonanej zmiany :(

Pozdrawiam
Łukasz Panek

Łukasz Panek Specjalista logistyk

Temat: SAP --> API - jak zacząć?

Tak jak Jarosław K. preferuję (niestety z musu) metodę prób i błędów. Na samym początku wpadło mi w ręce makro do tworzenia inforekordów zakupowych (me11) i dalej już poszło. Utknąłem jednak w martwym punkcie, bo do tej pory nie moge rozgryźć sposobu na wypełnianie list i dodawanie nowych pozycji na listach (przykład przeksiegowania mb1b)
Mimo wszystko nie prosze o pomoc w temacie j/w, a o pomoc w zdobyciu materiałów pomocnych w tym temacie (poradniki, e-booki, książki, cokolwiek). Zależy mi żeby pojąć jak to wszystko działa może parę przykładów - a resztę sobie zrobię sam (mam nadzieję:) Starsznie ciężko znaleźć coś konkretnego w sieci.
Z góry dzięki za pomocŁukasz Panek edytował(a) ten post dnia 05.11.10 o godzinie 12:57



Wyślij zaproszenie do