konto usunięte

Temat: Wypełnianie pól w SAPie za pomocą danych z excela

witam, nie jestem programistą, jestem zwykła osobą która zna excela...

aby usprawnić pracę w firmie chciałem nagrać makro w sapie które polega na tym by tworzyć faktury na podstawie danych z wcześniej utworzonego pliku excel. Polega to po prostu na kopiowaniu kazżego pola z excela w odpowiednie miejsce w sapie.

Chciałem nagrać makro a później zmodyfikować je o pętle by wykonywało te czynności dopóki nie napotka pionowo pustej komórki, jednak po nagraniu okazalo sie że makro nie działa a po otworzneiu kodu źródłowego nie widać operacji robionych w excelu.
Jak można to zrobić by móc połączyć excela i SAPa do takich prostych czynności?

Dzięki

konto usunięte

Temat: Wypełnianie pól w SAPie za pomocą danych z excela

Spokojnie da się zrobić ;)
Oczywście nie da się w takim przypadku wszystkiego nagrać, zacznij od nagrania częci kodu w SAP (odpalenie transakcji, identyfikacja i wypełnienie pól, przechodzenie do nastepnych ekranów itd.)
Część Excelową musisz nagrać osobno, chociaż jezeli mówimy o pętli to raczej ciężko będzie to nagrać... Potem łączysz dwie części w całość i gotowe... Jeżeli znasz VBA zero problemu...Tomasz M. edytował(a) ten post dnia 15.10.12 o godzinie 20:22

konto usunięte

Temat: Wypełnianie pól w SAPie za pomocą danych z excela

czyli nagrywać równocześnie w SAP i excelu później połączyć to w całość w pliku nagranym przez SAP i odpalić przez SAP makro ?

konto usunięte

Temat: Wypełnianie pól w SAPie za pomocą danych z excela

Zdecydowanie nagrywać osobno... potem skoplilować w jedno zgodnie z logiką wybranej przez Ciebie pętli i raczej odpalaj z poziomu Excela.

konto usunięte

Temat: Wypełnianie pól w SAPie za pomocą danych z excela

masz tu na forum parę przykładów makra połączonego pomiędzy SAP a EXCEL - jest kilka warunków które musisz spełnić, włącznie z zaklinięciem w SAP pozwolenia na działanie skryptów.

Tradycyjnie makro SAPowe należy nagrać w SAPie, a następnie przekopiować kod do excela/VB. Wartości pól które nagra SAP nalży podstawić nazwami zmiennych wczytanych w Excelu.

W nagłówku makra SAP należy wymienić słowo "aplications" dowolnym innym.

odpalasz przez excela

Ja to piszę jako osobne programy - ten z excela woła jako podprogram część pracującą w SAP. Po wykonaniu wraca do Excela i tak na okrągło

Sub MM02_Zmiana() 'ta część programu pracuje w SAPie



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

Rem /app/con[0]/ses[0]/wnd[0]/usr/subSUB2:SAPLMGD1:8001/txtKT_EINTRAEGE_C

'session.findById("wnd[0]").resizeWorkingPane 158, 25, False
'session.findById("wnd[0]/tbar[0]/okcd").Text = "/nmm02"
'session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").Text = material
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").caretPosition = 14
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP04/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2158/ctxtMVKE-DWERK").Text = "plsp"
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP04/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2158/ctxtMVKE-DWERK").SetFocus
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP04/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2158/ctxtMVKE-DWERK").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
Bartłomiej C. edytował(a) ten post dnia 16.10.12 o godzinie 20:15

konto usunięte

Temat: Wypełnianie pól w SAPie za pomocą danych z excela

Mam problem z połączeniem makr excelowskich i sapa :/ nie działa ;/

Czy ma ktoś jakiekolwiek pełne makro excelowskie z połączonym excelem i sapem ? chciałbym zobaczyć jak to mniej więcej wygląda

Wielkie dzięki

konto usunięte

Temat: Wypełnianie pól w SAPie za pomocą danych z excela

albo lecisz w jednym SUM tekstem ciągłym, albo przywołujesz podprogram z makra EXCELA
np:
call co02_zlecenie

trzeba SAPa skonfigurować - jeżeli nie masz uprawnień do obsługi skryptow, to nie będzie działać.

Mogę napisać...U mnie działa...ale jak nie podasz komunikatów błędów, to trudno podać diagnozę.
poniżej frabment obszerny kodu do tworzenia routingu kosztowego na bazie produkcyjnego:

Sub tworz() 'tworzenie routingu

Dim Ans
Ans = MsgBox("Na pewno chcesz utworzyć routingi kosztowe??", vbOKCancel, "Wybór")
If Ans = vbCancel Then
End
End If
If Ans = vbOK Then
End If

Call sap
Call pobierz

Windows("routing.xls").Activate
ActiveWorkbook.Close (0)

End Sub

Sub pobierz()
'Dim kod As String 'trzeba odczytać kod z routing.xls

Windows("routing.xls").Activate
nrow = Range("A65536").End(xlUp).Row
i = 2
For i = 2 To nrow
kod = Cells(i, "A")
Call kopiowanie
Next i

End Sub

Sub sap()
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
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nca01"
session.findById("wnd[0]").sendVKey 0

End Sub


Sub kopiowanie()


'4. wchodzi do SAP do otwartej transakcji CA01
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
session.findById("wnd[0]/usr/ctxtRC27M-MATNR").Text = kod 'kod materiału
session.findById("wnd[0]/tbar[1]/btn[5]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/ctxtRC27M-MATNR").Text = kod 'kod materiału
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/subGENERALVW:SAPLCPDA:1211/ctxtPLKOD-STATU").Text = "60"
session.findById("wnd[0]/usr/subGENERALVW:SAPLCPDA:1211/txtT412T-TXT").SetFocus
session.findById("wnd[0]/usr/subGENERALVW:SAPLCPDA:1211/txtT412T-TXT").caretPosition = 0
session.findById("wnd[0]").sendVKey 0

'i tu pętla przechodzi przez kolejne pola przewodnika
Call petla






End Sub

Sub petla()

Dim i
'Dim pole As String

For i = 0 To 160 'było 80
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
'pole = session.findById("wnd[0]/usr/tblSAPLCPDITCTRL_1400/ctxtPLPOD-ARBPL[2," & i & "]").Text

stanowisko = session.findById("wnd[0]/usr/tblSAPLCPDITCTRL_1400/ctxtPLPOD-ARBPL[2," & i & "]").Text

If stanowisko <> "" Then
Call konta
If kosztowe = "C510KO" And stanowisko = "KO" Then

session.findById("wnd[0]/usr/tblSAPLCPDITCTRL_1400/ctxtPLPOD-ARBPL[2," & i & "]").Text = "C510KO"
session.findById("wnd[0]/usr/tblSAPLCPDITCTRL_1400/ctxtPLPOD-ARBPL[2," & i & "]").SetFocus
session.findById("wnd[0]/usr/tblSAPLCPDITCTRL_1400/ctxtPLPOD-ARBPL[2," & i & "]").caretPosition = 6
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
'session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/subDEFAULTVAL:SAPLCPDO:1211/txtPLPOD-VGW04").Text = "10"
session.findById("wnd[0]/usr/subDEFAULTVAL:SAPLCPDO:1211/ctxtPLPOD-VGE04").Text = "H"
session.findById("wnd[0]/usr/subDEFAULTVAL:SAPLCPDO:1211/ctxtPLPOD-LAR04").Text = "POOL"
session.findById("wnd[0]/usr/subDEFAULTVAL:SAPLCPDO:1211/ctxtPLPOD-LAR04").SetFocus
session.findById("wnd[0]/usr/subDEFAULTVAL:SAPLCPDO:1211/ctxtPLPOD-LAR04").caretPosition = 4
session.findById("wnd[0]").sendVKey 0

If kosztowe = "C510KO" And stanowisko = "INFO" Then
session.findById("wnd[0]/usr/tblSAPLCPDITCTRL_1400/ctxtPLPOD-ARBPL[2," & i & "]").Text = "INFO"
End If

'poprawa danych
Else
session.findById("wnd[0]/usr/tblSAPLCPDITCTRL_1400/ctxtPLPOD-ARBPL[2," & i & "]").Text = kosztowe
End If
Else
i = 160 'było 80
End If
Next i




'zakonczenie i zapis
session.findById("wnd[0]/usr/tblSAPLCPDITCTRL_1400/ctxtPLPOD-ARBPL[2,1]").caretPosition = 6
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[11]").press

End Sub



Wyślij zaproszenie do