标准的SAPScript由于程序已经写死且只有通过复制出Form然后定制,这样就会有很多限制,如果用户想要输出的行项目并不是标准程序中循环的TABLE,或者每一行还有明细,系统标准只输出行而用户需要的是明细(如AR INVOICE中F.61输出的是客户行项目,而用户需要的G/L行项目),该怎么办?一般情况是通过ACCESSKEY修改标准程序多加一个LOOP, 这样就得要分析源程序。
还有一种比较特殊的方式就 是通过 SAPScript TextModule.
- 原理:
看下Text Module结构(T-CODE: RECATM )
其实就是动态创建一个与SAPScript Form中同样的文本,然后再动态的导入,并且可以通过定制格式来定位
- 实现方法:
- 在FORM中调用程序
- 程序中动态创建需要的文本,并分配相应的段落格式
FORM entry_neu TABLES in_tab STRUCTURE itcsy
out_tab STRUCTURE itcsy.
DATA: it_bseg TYPE TABLE OF bseg WITH HEADER LINE.
DATA: wa_header TYPE thead," header for standard text
it_line TYPE TABLE OF tline WITH HEADER LINE.
CONSTANTS: c_format TYPE c LENGTH 2 VALUE 'TI', "在FORM中定义好的段落格式
c_tab TYPE c LENGTH 2 VALUE ',,'.
select * from bseg
into corresponding fields of table it_bseg
where bukrs = '0001'
and belnr = '0100000570'.
"--collect the data into text table
LOOP AT it_bseg.
CONCATENATE c_tab it_bseg-belnr
c_tab it_bseg-buzei
INTO it_line-tdline.
it_line-tdformat = c_format . " text format ”可以根据需求不同行设置不同的格式
APPEND it_line .
ENDLOOP.
CLEAR wa_header.
wa_header-tdobject = 'TEXT'. "SAPScript Form Standard Text
wa_header-tdname = 'ZMAIN'. "Text Module Name, Named as you like begin with 'Z'
wa_header-tdid = 'ST'. "Standard Text
wa_header-tdspras = 'E'. "Language
* Call function 'SAVE TEXT' to save the value of internal table
* in a standard text.
PERFORM save_text TABLES it_line
USING wa_header.
ENDFORM. "ENTRY_NEU
*&---------------------------------------------------------------------*
*& Form save_text
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_LINE text
* -->P_WA_HEADER text
*----------------------------------------------------------------------*
FORM save_text TABLES pt_line STRUCTURE tline
USING ps_header TYPE thead.
* To Save the value of internal table in a standard text
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
* CLIENT = SY-MANDT
header = ps_header
* INSERT = ' '
savemode_direct = 'X'
TABLES
lines = pt_line
EXCEPTIONS
id = 1
language = 2
name = 3
object = 4
OTHERS = 5
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " save_text
- Form 中添加该Text Module
- 查看运行结果
查看Text Module
更改段落格式TABS,控制间隔