这是SAP和pyrfc模块使用之间的混合问题。我需要每天使用FAGLL03H
事务代码(tcode)将G/L报告复制到数据库中。现在,问题是FAGLL03H
本身不是一个表,而是一个G/L Account Line Item Browser(G/L View),所以我需要访问该Tcode并传递一系列参数,以便获得我们需要的信息。
- 如何使用RFC协议访问tcode并生成报告
- 通过pyrfc可以做到(1)吗
这是我用来查阅表格的代码:
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
- 没门
- 否
您需要了解的要点是SAP事务(tcode)和SAP RFC之间的区别。差异是巨大的,因此不可能以类似的方式使用它们。您正试图通过RFC_READ_TABLE
像调用表一样调用FAGLL03H报表,但它不是表,它更多,它是一个事务。
SAP tcode不过是SAP中的一个快捷方式,它指向某些程序,通常是GUI程序,并且可以包含数百个模块,包括支持RFC的模块。其中一些模块是内部的,没有等效的RFC,所以不可能远程调用它们,至少但不是最后一个。它需要知道如何调用它们(按什么顺序)以及传递哪些参数。
SAP RFC就像ABAP代码的容器(也是调用该代码的协议),它实现了一些功能,要么是转换字符大小写或转换度量单位之类的小部分,要么是巨大的部分,例如发布财务文档和创建企业层次结构对象,如工作中心、成本中心、销售组织等。RFC模块可以比作Python模块或Java方法,它们通常是为一个任务实现的,通常不是独立使用,而是与其他方法组合使用。
上述交易规模巨大,旨在输出G/L账户行,无法通过PyRFC调用。PyRFC功能仅限于调用由FAGLL03H
组成的RFC模块。
这里唯一能做的就是找到等价的函数模块,它返回与FAGLL03H
相同的项。可能的候选人:
-
BAPI_GLX_GETDOCITEMS
-
FAGL_GET_OPEN_ITEMS_GL-
-
FAGL_GET_OPEN_ITEMS_KU
-
FAGL_GET_OPEN_ITEMS_li
-
FAGL_GET_OPEN_ITEMS
-
fk_GL_LINE_ITEMS_SELECT
-
BAPI_AP_ACC_getbalanced-items
-
BAPI_AR_ACC_get平衡项
-
BAPI_AP_ACC_GETOPENITEMS
-
BAPI_AR_ACC_GETOPENITEMS
如果输出与tcode相同,则应分别尝试并将其与tcode进行比较。只有在那之后,您才能使用PyRFC来调用它们。
检查此项以获得所有特定的表:
https://www.recercat.cat/bitstream/handle/2072/5419/PFCLopezRuizAnnex3.pdf?sequence=4
然后,您可以从那里构建,也可以创建一个Report(事务SQ01)并通过RSAQ_REMOTE_QUERY_CALL执行。您的业务需求应该决定您的代码,而不是相反。