Integrasi SAP dan Python atau cara mengambil data dari SAP lebih mudah

Selamat siang, Habr!

Saya ingin berbagi pengalaman tentang tugas menarik tentang cara mudah berinteraksi dengan sistem SAP menggunakan Python - terlepas dari modul atau versi platform mana.

Jika hanya solusi teknis yang menarik, lewati semua lirik dan lihat contoh penerapannya.

Lirik


Semua itu bermuara pada kenyataan bahwa salah satu pelanggan perlu mengunduh data dari sistem SAP ERP mereka, dengan memanipulasi laporan dan surat yang sudah dikirim kepada orang-orang yang tertarik melalui email, serta tindakan lainnya.

Sebenarnya, ketika membahas solusi dari masalah seperti itu, kami, sebagai kontraktor, mengusulkan berbagai opsi dan salah satu yang paling jelas adalah melakukan semuanya dengan bantuan fungsionalitas SAP internal, dengan cara yang sederhana di antara "penjilat" untuk Zed semua dengan ABAP.

Hal pertama yang kami temui adalah kriteria untuk memilih data yang tidak sepenuhnya transparan dari kata-kata pelanggan, yaitu, data tabel mana, mengapa, mengapa, tindakan apa yang harus dilakukan dengannya. Jika Anda memberikan contoh, maka pelanggan perlu membongkar kehadiran karyawan kantor, dengan data dalam konteks lembar waktu dan liburan. Itu juga perlu untuk membuat laporan tentang kinerja karyawan dengan analisis pada waktunya di tempat kerja, saya tidak akan merinci, tetapi saya akan mengatakan bahwa jumlah waktu yang dihabiskan mempengaruhi produktivitas, tetapi untuk mengetahuinya, Anda perlu menghitung jumlah waktu di tempat kerja dengan hasil kerja dan banyak lagi lain. Ini hanyalah salah satu contoh laporan, dan pelanggan menghasilkan banyak selama diskusi.

Setelah percakapan panjang, kami menyadari bahwa SAP Query atau BI \ BO dapat menjadi solusi seperti itu, tetapi pelanggan tidak terlalu senang dengan perkiraan biaya solusi dan bukan fleksibilitas yang paling nyaman.

Solusi python


Kemudian saya memikirkan kepala saya sendiri tentang sebuah artikel tentang sumber daya tentang perpustakaan pyrfc dan karena saya, karena tidak pernah menjadi programmer python, tetapi setelah membacanya sekali, saya memutuskan untuk mempelajarinya di rumah, dan yang mengejutkan saya, saya adalah seorang amatir yang tenang. dari bahasa pemrograman ini saya menemukan bahwa menghubungkan ke sistem SAP sangat sederhana, apalagi, dibutuhkan 20 menit.

Dua puluh menit CARL !!!

Bayangkan saja Anda dapat mengkonfigurasi antarmuka koneksi dengan sistem SAP ERP tanpa menggunakan bus data dan semua jenis PI \ XI di sana dalam waktu yang sangat singkat.

Implementasi


Setelah akhirnya memastikan bahwa ini adalah solusi yang berfungsi dan memuaskan pelanggan, saya mempelajari beberapa platform (saya mempelajarinya, saya membaca setiap 10 menit), saya memilih platform Odoo, antara lain, karena lebih mudah digunakan dan memiliki semua properti yang diperlukan, seperti: Bagus antarmuka, sistem hak akses, aplikasi seluler, server surat, antarmuka basis data yang baik (psql).

Selanjutnya, semuanya sangat sederhana.

Instal Odoo di mesin virtual pelanggan (saya mengambil versi 8) karena ini adalah yang paling sederhana saat ini, saya tahu bahwa versi 12 sudah, tetapi tugas itu tidak memerlukan semua produk baru yang keren.

Menginstal semua perpustakaan yang diperlukan, khususnya pyrfc - tautan ke artikel tentang instalasi dan koneksi .

Lebih jauh, itu hanya perlu untuk menulis modul kecil di platform Odoo itu sendiri, untuk konektivitas, dan itu punya banyak alat untuk memvisualisasikan data.

Terhubung ke sistem pelanggan:

from pyrfc import Connection user = 'user' passwd = 'secretuser' saprouter = '/H/192.168.0.140/S/3297' conn = Connection(user=user, passwd=password, mshost='CLient', msserv='192.168.0.140', sysid='01', group="SPACE", saprouter=saprouter, client='900') 

Panggil BAPI untuk informasi pengguna

 b_result = conn.call('BAPI_USER_GET_DETAIL', USERNAME = 'user', CACHE_RESULTS = ' ') 

Perubahan pengguna

 updated_address['CITY'] = u'Moscow' r = conn.call('BAPI_USER_CHANGE', USERNAME='user', ADDRESS=updated_address) 

Alat yang paling penting untuk mendapatkan data dari SAP, ketika datang ke tabel, adalah modul fungsional RFC_READ_TABLE, ada modul lain di platform SAP yang dapat dipanggil, harus ada pengaturan pada mereka yang mengatakan bahwa mereka dapat dipanggil menggunakan RFC.

Sebagai contoh:

 from pyrfc import Connection, ABAPApplicationError, ABAPRuntimeError, LogonError, CommunicationError from ConfigParser import ConfigParser from pprint import PrettyPrinter def main(): try: config = ConfigParser() config.read('sapnwrfc.cfg') - # ,        SAP ERP params_connection = config._sections['connection'] conn = Connection(**params_connection) #    options = [{ 'TEXT': "FCURR = 'USD'"}] pp = PrettyPrinter(indent=4) ROWS_AT_A_TIME = 10 rowskips = 0 while True: print u"----Begin of Batch---" result = conn.call('RFC_READ_TABLE', \ QUERY_TABLE = 'TCURR', \ OPTIONS = options, \ ROWSKIPS = rowskips, ROWCOUNT = ROWS_AT_A_TIME) pp.pprint(result['DATA']) rowskips += ROWS_AT_A_TIME if len(result['DATA']) < ROWS_AT_A_TIME: break except CommunicationError: print u"Could not connect to server." raise except LogonError: print u"Could not log in. Wrong credentials?" raise except (ABAPApplicationError, ABAPRuntimeError): print u"An error occurred." raise 

Hasil


Dalam gambar ini, daftar laporan yang diturunkan oleh metode ini, dan contoh salah satunya.



Ringkasan


Secara umum, metode ini membuka peluang besar untuk mengganti alat SAP yang sangat mahal dan yang lainnya dengan yang lebih fleksibel dan terbuka.

Contoh kode diambil dari sumber terbuka. Saya tidak memiliki hak untuk menggunakan kode pelanggan dalam artikel, dan saya bukan programmer Python, saya bisa saja membuat kesalahan di suatu tempat.

Saya ingin menambahkan bahwa kami sudah menggunakan alat ini dalam berbagai tugas yang sangat terkait dengan perhitungan KPI, mengeluarkan data ke sumber lain (situs web, pemasok, dan basis data pelanggan), mengirimkan informasi dari sistem berdasarkan data dari SAP, dan banyak lagi.
Secara umum, kesempatan seperti itu merupakan penemuan bagi saya, jika ada yang memiliki pengalaman serupa, saya akan senang mendengarkan.

PS Saya tidak membahas masalah lisensi, jadi saya tidak bisa mengatakan dengan pasti apa pun tentang masalah ini.
Terima kasih

Habr Link
Hormat kami, Konsultan SAP

Source: https://habr.com/ru/post/id422681/


All Articles