Integração SAP e Python ou como facilitar os dados do SAP

Boa tarde, Habr!

Quero compartilhar a experiência de uma tarefa interessante sobre como interagir facilmente com sistemas SAP usando Python - não importa qual módulo ou versão da plataforma.

Se apenas a solução técnica for interessante, pule todas as letras e veja um exemplo de implementação.

Letra


Tudo se resumia ao fato de que um dos clientes precisava fazer o download de dados do sistema SAP ERP, manipulando já criar relatórios e enviando para as pessoas interessadas por email, além de outras ações.

Na verdade, ao discutir a solução de um problema desse tipo, nós, como contratados, propusemos várias opções e uma das mais óbvias é fazer tudo com a ajuda da funcionalidade interna do SAP, de maneira simples entre os “sapadores” para o Zed, todos com a ABAP.

A primeira coisa que encontramos foi o critério para selecionar dados que não são completamente transparentes a partir das palavras do cliente, ou seja, os dados de quais tabelas, por que, por que, quais ações devem ser executadas com eles. Se você der um exemplo, o cliente precisará descarregar a presença de funcionários do escritório, com dados no contexto de folhas de ponto e férias. Também foi necessário criar relatórios sobre o desempenho dos funcionários com análises sobre o tempo que ele passou no local de trabalho, não vou entrar em detalhes, mas direi que a quantidade de tempo gasto afeta a produtividade, mas, para descobrir, é necessário calcular a quantidade de tempo de trabalho com o resultado do trabalho e muito mais. outro. Este é apenas um exemplo de relatório, e o cliente gerou muito durante as discussões.

Após longas conversas, percebemos que o SAP Query ou BI \ BO poderia se tornar uma solução, mas o cliente não estava muito satisfeito com o custo estimado da solução e com a flexibilidade mais conveniente.

Solução Python


Então pensei na minha cabeça sobre um artigo sobre um recurso sobre a biblioteca pyrfc e, como eu, não sendo um programador de python, mas tendo lido sobre isso uma vez, decidi estudá-lo em casa e, para minha surpresa, fui um amador à vontade dessa linguagem de programação, descobri que a conexão com qualquer sistema SAP é incrivelmente simples; além disso, leva 20 minutos.

Vinte minutos CARL !!!

Imagine que você pode configurar a interface de conexão com o sistema SAP ERP sem usar barramentos de dados e todos os tipos de PI \ XI em um período tão pequeno.

Implementação


Tendo finalmente me certificado de que esta é uma solução funcional e satisfaz o cliente, estudei várias plataformas (estudei, li a cada 10 minutos), escolhi a plataforma Odoo, entre outras coisas, pois é mais fácil de implantar e possui todas as propriedades necessárias, como: Bom interface, sistema de direitos de acesso, aplicativo móvel, servidor de email, boa interface de banco de dados (psql).

Além disso, tudo é muito simples.

Instale o Odoo na máquina virtual do cliente (peguei a versão 8) porque é o mais simples no momento, eu sei que a versão 12 já está, mas a tarefa não exige todos os novos produtos interessantes.

Instalou todas as bibliotecas necessárias, em particular pyrfc - um link para um artigo sobre instalação e conexão .

Além disso, era necessário escrever um pequeno módulo na própria plataforma Odoo, para conectividade, e havia muitas ferramentas para visualizar dados.

Conecte-se ao sistema do 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') 

Ligue para a BAPI para obter informações do usuário

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

Mudança de usuário

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

A ferramenta mais importante para obter dados do SAP, quando se trata de tabelas, é o módulo funcional RFC_READ_TABLE, existem outros módulos na plataforma SAP que podem ser chamados, deve haver uma configuração neles que diz que podem ser chamados usando o RFC.

Por exemplo:

 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


Nesta figura, uma lista de relatórios descarregados por esse método e um exemplo de um deles.



Sumário


De um modo geral, esse método abre grandes oportunidades para a substituição de ferramentas SAP muito caras e outras por outras mais flexíveis e abertas.

Exemplos de código são obtidos de fontes abertas. Não tenho direitos para usar o código do cliente no artigo e não sou um programador Python, poderia ter cometido um erro em algum lugar.

Quero acrescentar que já usamos essa ferramenta em uma ampla gama de tarefas relacionadas ao cálculo de KPI, enviando dados para outras fontes (sites, bancos de dados de fornecedores e clientes), enviando informações de sistemas baseados em dados da SAP e muito mais.
Em geral, essa oportunidade foi uma descoberta para mim, se alguém tiver uma experiência semelhante, eu adoraria ouvir.

PS: não resolvi a questão do licenciamento, por isso não posso afirmar com certeza nada sobre essa questão.
Obrigada

Habr Link
Atenciosamente, Consultor SAP

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


All Articles