Excel SAP bağlantısı

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,633
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba,

Excel üzerinden SAP'e bağlanmak için internette çok araştırma yaptım ama eksik birşeyler var sanki, başarılı olamadım.
64 bit windows ve 64 bit office 2013 pro kullanıyorum. Bu işi çözmüş biri varsa, yol gösterirse çok memnun olurum.
Forum'da da konu ile ilgili doküman olmuş olur.(Benim tahminim bilgisayarımda eksik DLL var.)

SAP versiyon = 7400.3.11.1129
740 Final Release
 

EmrExcel16

Destek Ekibi
Destek Ekibi
Katılım
1 Kasım 2012
Mesajlar
1,524
Excel Vers. ve Dili
Office 365 Türkçe
Merhaba ,

Bende çok araştirmistim zamaninda ama bir türlü excel ile SAP'e bağlanip proğrami açamadim , lakin açik olan proğramin ana sayfasindan istediğim islemleri bağlanip yaptirabiliyorum,bilmiyorum isinize yararmi.
 

metehan8001

Yasaklı
Katılım
8 Nisan 2010
Mesajlar
125
Excel Vers. ve Dili
Office 2007 -2016 TR
Aktif SAP kullanıcısıyım ve tüm makrolar da kullandığım SAP bağlantı kodu aşağıdaki gibidir.

C#:
Sub SAP_ExcelDestek()
'Feyzullah // Metehan8001 // Www.***************'
10
On Error Resume Next
Set SapGui = GetObject("SAPGUI")
If Err.Number <> 0 Then
Err.Clear
Set WshShell = CreateObject("WScript.Shell")
Set proc = WshShell.Exec("C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe")
Application.Wait Now + TimeValue("0:00:01")
GoTo 10:
End If
On Error GoTo 0

Set Appl = SapGui.GetScriptingEngine
Set Connection = Appl.OpenConnection("ERP") 'SAP BAGLANTI ADINI DÜZELTİN
Set session = Connection.Children(0)
'''''''''
session.findById("wnd[0]").iconify ' SIMGE DURUMUNA ALMA
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "Feyzullah" 'Kullanıcı Adı
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "000000000" 'Parola
session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "TR"
session.findById("wnd[0]").sendVKey 0
On Error Resume Next
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").Select
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
On Error GoTo 0
'''''
''<<<<<<<<KODLARINIZ>>>>>>>>>''
'''''
'KAPATMA
session.findById("wnd[0]").Close
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
End Sub
 

EmrExcel16

Destek Ekibi
Destek Ekibi
Katılım
1 Kasım 2012
Mesajlar
1,524
Excel Vers. ve Dili
Office 365 Türkçe
Merhaba sayın,@metehan8001 açık olan programa bağlanıp makrolar ile işlem yaptırabiliyordum, ama programı baştan açamıyordum ,vermiş olduğun kod ile SAP programı kapalıyken açılabiliyor daha önce bunu bulamamıştım teşekkür ederim.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,633
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
@metehan bey aşağıdaki satırda hata aldım. Bağlantı adını düzeltme olarak ne yazmam lazım.
Çalışan bilgisayarlarda aktif görünen DLL'ler hangisi. Set ettiği SAP nesneleri benim bilgisayarda galiba yok.
Bizim şirkette güvenlik biraz sıkı.

Kod:
Set Connection = Appl.OpenConnection("ERP") 'SAP BAGLANTI ADINI DÜZELTİN
 
Son düzenleme:

metehan8001

Yasaklı
Katılım
8 Nisan 2010
Mesajlar
125
Excel Vers. ve Dili
Office 2007 -2016 TR
@metehan bey aşağıdaki satırda hata aldım. Bağlantı adını düzeltme olarak ne yazmam lazım.
Çalışan bilgisayarlarda aktif görünen DLL'ler hangisi. Set ettiği SAP nesneleri benim bilgisayarda galiba yok.
Bizim şirkette güvenlik biraz sıkı.

Kod:
Set Connection = Appl.OpenConnection("ERP") 'SAP BAGLANTI ADINI DÜZELTİN
DLL uğraşmanıza gerek yok. İstemez.
Hata aldığınız kısma gelince SAP ilk açtığınızda bağlantı tanımı var onun adını değiştirin. ERP yazan yeri değiştirin. Bazen CANLI oluyor, ERP 2018 vs isimleri oluyor.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,633
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Metehan bey,

Aşağıdaki satırda hata verdi.

Kod:
Set session = Connection.Children(0)

1569330080073.png

1569330017885.png
 

metehan8001

Yasaklı
Katılım
8 Nisan 2010
Mesajlar
125
Excel Vers. ve Dili
Office 2007 -2016 TR
Metehan bey aşağıdaki gibi bir çalışma buldum.
Bu çalışma direkt olarak SAP tablolarına bağlanıyor.
Aslında istediğim böyle birşey ama DLL hatalarına takılıyorum.

https://www.linkedin.com/pulse/sapden-real-time-data-çekme-muhammet-mustafa-aslan?trk=portfolio_article-card_title
Yıllar önce kullanmış olduğum kod bu ama şuan paylaştığım kodu kullanıyorum, tesislerdeki tüm sistemlerde bu bağlantı kodunu kullanıyoruz. DLL References işlemine hiç gerek kalmıyor bu kodda.
Sap kurulu olduğu dosya yolunu ve bağlandığınız oturumun adını düzeltmeniz yeterli.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,633
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
9 nolu mesajda aldigim hatayi gosterdim.Bunun sebebini biliyor musunuz. Sizin gonderdiğiniz kodda tablolara nasil baglaniyoruz.Ekrana komut gondermeye yarayan bir kod.Sap programini acmaktan baska islevlerde vardir sanirim.Mumkunse onlarida paylasirmisiniz.
 

metehan8001

Yasaklı
Katılım
8 Nisan 2010
Mesajlar
125
Excel Vers. ve Dili
Office 2007 -2016 TR
9 nolu mesajda aldigim hatayi gosterdim.Bunun sebebini biliyor musunuz. Sizin gonderdiğiniz kodda tablolara nasil baglaniyoruz.Ekrana komut gondermeye yarayan bir kod.Sap programini acmaktan baska islevlerde vardir sanirim.Mumkunse onlarida paylasirmisiniz.
Erdem Bey; Gold üye olmadığım için 9.nolu mesajdaki resimleri net göremiyorum. Set session = Connection.Children(0) bu hata satırında pek almadım ama daha önce başka bir pc de olmuştu nasıl bir çözüme ulaştığımı hatırlayamadım.

Diğer sorularınıza gelince. Ben bu paylaştığım kodlarda baglantıyı yaptıktan sonra geri kalanların kodları SAP kendi makro kaydet programını kullanarak yapıyorum.

SAP tan yapacağınız işlemi, veri çekilecek veya tam tersi veri girilecek alanların teknik Script kodlarını bilmeniz gerek. Bunu en basit öğrenmenin yolu SAP kendi makro kaydet yöntemini kullanmak. Bu oluşan kodları çalıştırdığınızda göreceksiniz ki aynı excel makrosu gibi çalışacaktır. Sonrası oluşan kodları excelle ile birleştirip excelle beraber kullanmak

Aşağıdaki resim görüntüsü eski versiyona ait ve netten alınmış bir görüntü ama menüler ayıdır. Makro kaydet menüsünü gösteriyor. Resmin altındaki örnek kodlar da vardır.

https://www.***************/attachments/scrip01_514852-jpg.1278/

Baglantı gerçekleştirdikten sonra herhangi bir tablayu açmak için aşağıdaki kodu kullanıyorum. Teknik Terim kodunu yazıyorum.
C#:
session.findById("wnd[0]/tbar[0]/okcd").Text = "CSM_RAPOR1" ' Teknik kodunu yazın
session.findById("wnd[0]/tbar[0]/btn[0]").press
Herhangi bir tabloyu açıldıktan sonra belli bir alandan(sütün başlığı) ve satırdan veri çekmek için aşağıdaki kodu kullanıyorum
C#:
Set adres = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell")
adres.setCurrentCell -1, ""
Row = adres.currentCellRow
sat = Cells(Rows.Count, 5).End(xlUp).Row + 1
Cells(3, 4) = Format(adres.getcellvalue(Row + 4, "ALANADI"), "0")
Cells(5, 4) = Format(adres.getcellvalue(Row + 5, "Alandı"), "0")
SAP da baglantından sonra > Açılan tabloda uzun listeler var diyelim, buradaki verileri döngü ile excele almak istediğimde aşağıdaki kodu kullanıyorum.
C#:
Set adres = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
With Sayfa2
    For a = 0 To adres.RowCount - 2
        adres.setCurrentCell a, ""
        son = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        .Cells(son, 1) = adres.getcellvalue(adres.currentCellRow, "alandı")
        .Cells(son, 2) = adres.getcellvalue(adres.currentCellRow, "Alandı")
        .Cells(son, 3) = CLng(adres.getcellvalue(adres.currentCellRow, "asutun"))
        .Cells(son, 4) = adres.getcellvalue(adres.currentCellRow, "bsutun")
        .Cells(son, 5) = CLng(adres.getcellvalue(adres.currentCellRow, "GENIS"))
        .Cells(son, 6) = CLng(adres.getcellvalue(adres.currentCellRow, "LVBOY"))
        .Cells(son, 7) = CLng(adres.getcellvalue(adres.currentCellRow, "LABST"))
    Next
End With

Bütün günümüz SAP ile geçtiğinden işin tembeliğine kaçmak için bu kodlarını kullanıyorum, takibi bu kadarda sınırlı değil. Çeşitli veriler, tablolar ve raporlarla iş yapıyoruz.

İyi çalışmalar.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,633
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
@metehan bey desteğiniz için teşekkür ederim.
İlgili satırdaki hatayı geçemedim.Kullanmak nasip olmadı.
 

EmrExcel16

Destek Ekibi
Destek Ekibi
Katılım
1 Kasım 2012
Mesajlar
1,524
Excel Vers. ve Dili
Office 365 Türkçe
Merhaba sayın , @Erdem_34 o satıra gelene kadar olan kod satırlarında SAP programı açılıyor mu peki , çünkü bizde o satıra gelene kadar programa bağlanmış oluyor o yüzden soruyorum.
 

metehan8001

Yasaklı
Katılım
8 Nisan 2010
Mesajlar
125
Excel Vers. ve Dili
Office 2007 -2016 TR
@metehan bey desteğiniz için teşekkür ederim.
İlgili satırdaki hatayı geçemedim.Kullanmak nasip olmadı.
Erdem Bey 13.mesajda bir resim paylaştım işaretli olan menü sizde aktif mi yoksa pasif mi? Eğer pasif ise makro kullana bilmeniz için yardım masası veya İT Bilgi işlem söylemeniz gerekiyor.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,633
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba ,

Bende çok araştirmistim zamaninda ama bir türlü excel ile SAP'e bağlanip proğrami açamadim , lakin açik olan proğramin ana sayfasindan istediğim islemleri bağlanip yaptirabiliyorum,bilmiyorum isinize yararmi.
Emre bey merhaba,

Kodları paylaşabilir misiniz.
Açık SAP'den almakta işimi görür.
 

EmrExcel16

Destek Ekibi
Destek Ekibi
Katılım
1 Kasım 2012
Mesajlar
1,524
Excel Vers. ve Dili
Office 365 Türkçe
Emre bey merhaba,

Kodları paylaşabilir misiniz.
Açık SAP'den almakta işimi görür.
Merhaba Erdem Üstadım tabi ki paylaşabilirim ne demek. Ama isterseniz Sap ile bu kodları oluşturmayı da konuşabiliriz.

Kod:
Sub Sap()

    Dim SapGuiAuto, Application, Connection, session
    
    If Not IsObject(Application) Then
        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
    session.findById("wnd[0]/tbar[0]/okcd").Text = "vl02n"
    session.findById("wnd[0]").sendVKey 0

End Sub
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,633
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Emre bey,

Kod benim bilgisayarımda çalıştığından connection nesnesine bağlı children'de item oluşmuyor.
Sap ile bu kodları nasıl oluşturabiliriz. Hangi ekrandan yapılıyor.

212374
 

EmrExcel16

Destek Ekibi
Destek Ekibi
Katılım
1 Kasım 2012
Mesajlar
1,524
Excel Vers. ve Dili
Office 365 Türkçe
Erdem bey , hala aynı versiyon mu kullanılıyor "740 Final Release"
 
Son düzenleme:
Üst