写程序的时候,有些逻辑可能需要调用其他程序的子例程,数据,那其实方法很多,这篇文章主要说一下在不改动被调用程序的情况下,怎么调用其他程序逻辑。
首先,如果是只需要调用某个程序的子例程,(IF FOUND 是确保没找到此例程不会报错):
PERFORM 子例程名 IN PROGRAM 被调用程序名 IF FOUND.
如果要调用某个值(要是全局变量才行),首先要在被调用程序中取到这个值,所以要执行被调用程序相关子例程,保证被调用程序的执行结果能够保存在缓冲池中,然后去缓冲池中取值(实际上使用SUBMIT直接调用整个程序是不行的):
假设 Y001程序
DATA: gv_data TYPE char3.
DATA: BEGIN OF gt_tab OCCURS 0,
werks LIKE marc-werks,
matnr LIKE mara-matnr,
END OF gt_tab.
FORM frm_test20.
gv_data = '233'.
CLEAR: gt_tab.
gt_tab-werks = '9999'.
gt_tab-matnr = 'ABCD'.
APPEND gt_tab.
ENDFORM.
然后Y002程序
DATA: gv_data1 TYPE char3.
FIELD-SYMBOLS: <fs> TYPE any.
PERFORM frm_test20 IN PROGRAM Y001 IF FOUND. "这句很关键,执行frm_test20把gv_data数值放到缓冲池
ASSIGN ('(Y001)GV_DATA') TO <fs>.
gv_data1 = <fs>.
如果是直接需要使用程序的输出内表:
FIELD-SYMBOLS: <tab> TYPE ANY TABLE.
PERFORM frm_test20 IN PROGRAM Y001 IF FOUND.
ASSIGN: ('(Y001)GT_TAB[]') TO <tab>.
APPEND LINES OF GT_TAB[] TO GT_TAB1.