1,包含程序:一种单纯的代码复用,相当于把代码段插入到引用该包含程序的位置,且不能与调用它的程序进行显示数据传递。包含程序必须被其他程序调用,并且不能调用自身。
* 对于大型程序,包含程序将主程序分割成独立的部分进行维护。它们是独立的,如果只需修改其中一个,则不需要改动整个程序。
* 若在多个程序使用相同的语句代码段,则可以将公用的代码部分编写到包含程序中,以确保同类型程序间的一致性。修改的时候,只需修改包含程序,所有引用该包含程序的报表都会自动更新。
调用包含程序,使用INCLUDE语句:(INCLUDE语句必须独占一行)
INCLUDE incl.
简单调用实例:
REPORT z_include_demo.
INCLUDE z_include_pgm.
SKIP.
WRITE: / 'Report Output' .
2,宏:另一种单纯的代码复用,不存在参数传递机制,往往只是为了增强程序的可读性。可以从宏中调用另一个宏,但是宏不能调用自身。
定义宏,使用DEFINE语句:宏的定义不属于数据定义和声明部分,所以宏的定义一定要出现在引用它的程序之前。
DEFINE macro.
<statements>
END-OF-DEFINITION.
该语句定义名为macro的宏。必须在DEFINE和END-OF-DEFINITION之间指定完整的语句。这些语句中可以包含最多九个占位符(&1,&2, ... ,&9)。占位符的意义在于暂时不指定代码,调用的时候进行代码替换。
完成定义之后,可以对其进行引用。
macro [p1 p2 ... p9].
简单使用宏实例:
REPORT z_macro_demo.
DATA: result TYPE i,
int1 TYPE i VALUE 1,
int2 TYPE i VALUE 2.
DEFINE operation.
result = &1 &2 &3.
output &1 &2 &3 result.
END-OF-DEFINITION.
DEFINE output.
WRITE: / ' The result of &1 &2 &3 is ' , &4.
END-OF-DEFINITION.
operation 1 + 2.
operation int2 - int1.