这是SAP和pyrfc模块使用之间的混合问题。我需要每天使用FAGLL03H tcode将总帐报告复制到数据库中。现在,问题是FAGLL03H本身不是一个表,而是一个总账科目项目浏览器(总账视图),因此我需要访问该Tcode并传递一系列参数才能获取我们的信息。需要。
这是我用来查询表的代码:
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之间的区别。两者之间的差异很大,因此无法以类似的方式使用它们。您正在尝试通过像表一样调用FAGLL03H报告RFC_READ_TABLE
,但这不是表,而是更多,这是一个事务。
SAP tcode就是SAP中指向某些程序(通常是GUI程序)的快捷方式,它可以包含数百个模块,包括启用RFC的模块。而且其中一些模块是内部模块,没有RFC等效项,因此不可能远程调用它们,至少但不是最后一次调用,则必须知道如何调用它们(以什么顺序)以及传递哪些参数。
SAP RFC就像是ABAP代码的容器(也是调用此代码的协议),该容器实现了某些功能,或者是一小块,例如转换字符的大小写或转换度量单位,或者是一个巨大的功能,例如过帐财务文档和创建企业RFC模块可以比喻为Python模块或Java方法,它们通常是为一项任务实现的,通常不是独立使用,而是与其他方法结合使用。
上述交易量巨大,旨在用于总账科目行的输出,不能通过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
FKK_GL_LINE_ITEMS_SELECT
BAPI_AP_ACC_GETBALANCEDITEMS
BAPI_AR_ACC_GETBALANCEDITEMS
BAPI_AP_ACC_GETOPENITEMS
BAPI_AR_ACC_GETOPENITEMS
您应该尝试每种方法,并将输出与您的tcode(如果相同)进行比较。只有在此之后,您才能使用PyRFC调用它们。
很好的答案!非常感谢您的详细解释,很有意义。