Warm tip: This article is reproduced from stackoverflow.com, please click
python-3.x sap saprfc pyrfc

Getting FAGLL03H report using pyrfc

发布于 2020-04-15 10:12:10

This is a mixed question between SAP and the usage of the pyrfc module. I need to use the FAGLL03H tcode to replicate a G/L report into a database on a daily basis. Now, the thing is that FAGLL03H is not a table per se, but a G/L Account Line Item Browser (G/L View), so I need to access that Tcode and pass a series of parameters in order to get the information we need.

  1. How can I use the RFC protocol to access that tcode and generate a report?
  2. is it possible to do (1) through pyrfc?

This is the code I use to consult tables:

import pyrfc
from pprint import PrettyPrinter


conn = pyrfc.Connection(ashost=...)

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
Questioner
Juan David
Viewed
94
Suncatcher 2020-02-06 23:04
  1. No way
  2. No

The main point you need to understand is the difference between SAP transaction (tcode) and SAP RFC. The difference is huge and makes it impossible to use them in the similar manner. You are trying to call FAGLL03H report like a table via RFC_READ_TABLE, but it is not a table, it is much more, it is a transaction.

SAP tcode is nothing than a shortcut in SAP that points to some program, usually GUI program, and can contain hundreds of modules, including RFC-enabled ones. And some of these modules are internal and have no RFC equivalent, so it is impossible to call them remotely, at least but not the last it is necessary to know how to call them (in what order) and which parameters to pass.

SAP RFC is like a container for ABAP code (but also a protocol for calling this code) which implements some functionality, either a small piece like converting characters' case or converting measure units, or huge one, for example posting financial documents and creating enterprise hierarchy objects like workcenters, cost centers, sales organizations, etc. RFC-modules can be likened to Python modules or Java methods and they are usually implemented for one single task, and are usually used not standalone but in combination with other methods.

The above-mentioned transaction is huge and is intended for output of G/L account lines and cannot be called via PyRFC. PyRFC features are limited to calling only RFC-modules from which FAGLL03H consists of.

The only thing you can do here is to find equivalent function modules which returns the same items as FAGLL03H. Possible candidates:

  • BAPI_GLX_GETDOCITEMS

  • FAGL_GET_OPEN_ITEMS_GL

  • FAGL_GET_OPEN_ITEMS_KU

  • FAGL_GET_OPEN_ITEMS_LI

  • FAGL_GET_OPEN_ITEMS

  • FKK_GL_LINE_ITEMS_SELECT

  • BAPI_AP_ACC_GETBALANCEDITEMS

  • BAPI_AR_ACC_GETBALANCEDITEMS

  • BAPI_AP_ACC_GETOPENITEMS

  • BAPI_AR_ACC_GETOPENITEMS

You should try each and compare the output with your tcode, if it is identical. Only after then you can use PyRFC to call them.