Поговорим о выгрузке данных из SAP ERP или S/4 HANA с использованием механизма SAP RFC.  Такая выгрузка может служить для наполнения аналитического хранилища данных или для интеграции с другой системой. Интерфейс SAP RFC (remote function call) позволяет вызывать различные функции SAP из стороннего приложения. Преимущества этого интерфейса: прямое и быстрое подключение с SAP. возможность менять параметры запроса, запрашивая данные частями. отсутствие промежуточных звеньев в обмене данными и, как следствие, высокая надежность. Для работы через RFC вам потребуется установить следующее: Библиотека PyRFC https://github.com/SAP/PyRFC  pip install pynwrfc Библиотека SAP NW RFC для вашей платформы, скачанный с https://support.sap.com (нужен акаунт SAP). Установить переменную окружения, указав каталог с библиотекой SAP NW RFC:  SAPNWRFC_HOME=C:\NWRFC\nwrfcsdk\ В системе SAP можно поискать уже готовые функциональные модули. Сделать это можно следующим образом: Запустить транзакцию SE16 (просмотр таблиц).  Указать имя таблицы TFDIR.  Задать фильтры для поиска: FUNCNAME=*MATERIAL* (задать маску поиска) FMODE=R (возможность вызова функции через механизм RFC) RFC_READ_TABLE позволяет выгружать данные из таблицы SAP, ограничивая выборку фильтрами. Несмотря на то, что SAP позиционирует эту функцию как тестовую и не предназначенную для использования в продуктивной среде, она вполне работоспособна. Следует сказать, что RFC_READ_TABLE часто неудобна, т.к. она позволяет читать только одну таблицу (не поддерживает JOIN). В этой статье я не буду подробно описывать работу с этой функцией, т.к. в интернете существует множество примеров ее использования. Вместо этого приведу пример вызова функции стандартной функции BAPI_MATERIAL_GETLIST, выдающий список материалов по заданным критериям поиска.  Входные и выходные параметры функции можно просмотреть с использованием транзакции SE37. Параметры вызова функции присутствуют на следующих вкладках: Importing - входные параметры простого типа (не табличные) Exporting - выходные параметры простого типа Tables - как входные, так и выходные параметры в виде таблиц Рассмотрим использование SE37 на примере BAPI_MATERIAL_GETLIST. Для того, чтобы посмотреть состав полей таблиц нужно дважды кликнуть на поле с типом данных. Эта функция выдает не слишком много полезных данных: Номер материала и описание. Другие таблицы нужны для передачи  на вход параметров выборки. Например поиск по коду материала (MATNRSELECTION): Подключение к SAP с использованием библиотеки pyrfc делается не сложно. (Настройки подключения можно посмотреть в SAP GUI.) Код на Python: import pandas as pd import os import pyrfc conn = pyrfc.Connection(user='', passwd='',      mshost='111.111.11.11', msserv='3600', sysid='010',      group='NN', saprouter='', lang='EN',client='')    Рассмотрим вызов функции на примере BAPI_MATERIAL_GETLIST. Сначала зададим входные параметры. В данном случае для каждого параметра в таблице будет по одной строке.  Строка таблицы задается как python dictionary, а вся таблица задается как list, состоящий из строк. В нашем примере укажем фильтр на код материала: '' (т.е. все значения), а также укажем значение для Plant. Для выборки используем SIGN="I" (Includes),  Варианты для OPTION: EQ Equal BT Between (требует задать значение для для LOW и HIGH) LE Less Equal GE Greater Equal CP Contains Pattern matnrselection = [{'SIGN':'I', 'OPTION':'CP', 'MATNR_LOW':''}] plantselection = [{'SIGN':'I', 'OPTION':'EQ', 'PLANT_LOW':'NNNN'}] Далее вызываем функцию с этими параметрами. result = conn.call('BAPI_MATERIAL_GETLIST',      MATNRSELECTION = matnrselection,   PLANTSELECTION = plantselection) DataFrame можно получить в одну строку: df = pd.DataFrame(result['MATNRLIST']) Где MATNRLIST, это имя результирующей таблицы, указанное в разделе Tables. Итак, с помощью буквально нескольких строк кода, мы получили данные из SAP в DataFrame и можем дальше работать с этими данным используя все возможности языка Python.