Integración de SAP y Python o cómo tomar datos de SAP más fácilmente

Buenas tardes, Habr!

Quiero compartir la experiencia de una tarea interesante sobre cómo interactuar fácilmente con los sistemas SAP utilizando Python, no importa qué módulo o versión de la plataforma.

Si solo la solución técnica es interesante, omita todas las letras y vea un ejemplo de implementación.

Letras de canciones


Todo se redujo al hecho de que uno de los clientes necesitaba descargar datos de su sistema SAP ERP, manipulando ya creaba informes y enviaba correos electrónicos a las personas interesadas por correo electrónico, así como otras acciones.

En realidad, cuando discutimos la solución de tal problema, nosotros, como contratista, propusimos varias opciones y una de las más obvias es hacerlo todo con la ayuda de la funcionalidad interna de SAP, de una manera simple entre los "zapadores" para Zed, todos con ABAP.

Lo primero que encontramos fue el criterio para seleccionar datos que no son completamente transparentes de las palabras del cliente, a saber, los datos de qué tablas, por qué, por qué, qué acciones se deben realizar con ellos. Si da un ejemplo, entonces el cliente necesitaba descargar la asistencia de los empleados de la oficina, con datos en el contexto de las hojas de tiempo y las vacaciones. También fue necesario crear informes sobre el desempeño de los empleados con análisis de su tiempo en el lugar de trabajo, no entraré en detalles, pero diré que la cantidad de tiempo invertido afecta la productividad, pero para averiguarlo, debe calcular la cantidad de tiempo en el trabajo con el resultado del trabajo y mucho otro Este es solo un ejemplo de un informe, y el cliente generó mucho durante las discusiones.

Después de largas conversaciones, nos dimos cuenta de que SAP Query o BI \ BO podrían convertirse en una solución, pero el cliente no estaba muy satisfecho con el costo estimado de la solución y no con la flexibilidad más conveniente.

Solución Python


Entonces pensé en mi propia cabeza acerca de un artículo sobre un recurso sobre la biblioteca pyrfc y, como no había sido programador de Python, pero había leído sobre eso una vez, decidí estudiarlo en casa y, para mi sorpresa, era un aficionado a gusto. de este lenguaje de programación descubrí que conectarse a cualquier sistema SAP es increíblemente simple; además, lleva 20 minutos.

Veinte minutos CARL !!!

Imagine que puede configurar la interfaz de conexión con el sistema SAP ERP sin utilizar buses de datos y todo tipo de PI \ XI en tan poco tiempo.

Implementación


Finalmente, asegurándome de que esta es una solución que funciona y satisface al cliente, estudié varias plataformas (la estudié, leí cada 10 minutos), elegí la plataforma Odoo, entre otras cosas, ya que es más fácil de implementar y tiene todas las propiedades necesarias, como: Bueno interfaz, sistema de derechos de acceso, aplicación móvil, servidor de correo, buena interfaz de base de datos (psql).

Además, todo es muy simple.

Instale Odoo en la máquina virtual del cliente (tomé la versión 8) porque es el más simple en este momento, sé que la versión 12 ya es, pero la tarea no requiere todos los nuevos productos geniales.

Instaló todas las bibliotecas necesarias, en particular pyrfc, un enlace a un artículo sobre instalación y conexión .

Además, solo era necesario escribir un pequeño módulo en la propia plataforma Odoo, para conectividad, y tenía muchas herramientas para visualizar datos.

Conéctese al sistema del cliente:

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') 

Llame a BAPI para obtener información del usuario.

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

Cambio de usuario

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

La herramienta más importante para obtener datos de SAP, cuando se trata de tablas, es el módulo funcional RFC_READ_TABLE, hay otros módulos en la plataforma SAP que se pueden invocar, debe haber una configuración en ellos que diga que se pueden invocar usando RFC.

Por ejemplo:

 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 

Resultado


En esta imagen, una lista de informes que se descargan mediante este método y un ejemplo de uno de ellos.



Resumen


En general, este método abre grandes oportunidades para reemplazar herramientas SAP muy costosas y otras por otras más flexibles y abiertas.

Los ejemplos de código se toman de fuentes abiertas. No tengo derechos para usar el código del cliente en el artículo, y no soy un programador de Python, podría haber cometido un error en alguna parte.

Quiero agregar que ya utilizamos esta herramienta en una amplia gama de tareas relacionadas con el cálculo de KPI, enviando datos a otras fuentes (sitios web, bases de datos de proveedores y clientes), enviando información de sistemas basados ​​en datos de SAP y mucho más.
En general, esa oportunidad fue un descubrimiento para mí, si alguien tiene una experiencia similar, me encantaría escuchar.

PD: No abordé el problema de las licencias, por lo que no puedo decir con certeza nada sobre este tema.
Gracias

Enlace Habr
Sinceramente, Consultor SAP

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


All Articles