点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
分析打印内容 分析需要打印的内容. 示例中打印销售订单. 创建结构 创建结构用于传递销售订单的行项目打印内容(最好把数量,金额的单位也放到结构中,避免报错) 创建SMARTFORM 创建SMARTFORM: ZBC_SUBTOTAL (TCODE: SMARTFORMS ). 定义传入结构及内表 定义变量 定义SMARTFORM中需要使用的变量. 其中 LV_TOTAL LV_SUBTOTAL 分别用来统计数量的合计与小计 定义页面 定义两个页面. 第一个页面有抬头信息及MAIN窗口(用来打印行项目部分),及页码窗口 第二个页面只有MAIN窗口和页码窗口 抬头内容 通过模版打印抬头字段 明细内容 通过表格打印明细信息 内表循环 表格中添加循环信息,使用界面传递的IT_VBAP 及定义的局部变量 lw_vbap 添加总计 表格计算中添加两个总计功能, 分别为字段LV_TOTAL LV_SUBTOTAL汇总数量. 输出明细内容 在表头部分写字段描述信息 在主要区域写单据明细内容 在脚标部分写小计/总计内容, 需要注意的是,对小计内容需要补充一段代码. 用于呈现小计后清空变量. 以便后续重新统计. 程序调用 激活SMARTFORM后, 编写程序ZTS_CALL_SMARTFORMS调用打印函数 约定 如果你对这篇文章感兴趣,请帮忙点赞,在看,分享. (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.) 公众号 : syjf1976_abap ABAP开发技巧 微信号 : 392077 公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群*&---------------------------------------------------------------------*
Report ZTS_CALL_SMARTFORMS
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zts_call_smartforms.
DATA: ls_vbak TYPE vbak.
DATA: lt_vbap LIKE TABLE OF zsts_smartforms.
START-OF-SELECTION.
PERFORM frm_get_data.
PERFORM frm_call_smartforms.
*&---------------------------------------------------------------------*
Form FRM_GET_DATA
*&---------------------------------------------------------------------*
text
*&---------------------------------------------------------------------*
--> p1 text
<-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
DATA: lw_vbap TYPE zsts_smartforms.
DATA: lv_index TYPE i.
'1001'. =
*循环构造数据.
DO 70 TIMES.
sy-index * 10. =
'M001'. =
'测试物料'. =
10. =
APPEND lw_vbap TO lt_vbap.
ENDDO.
ENDFORM.
*&---------------------------------------------------------------------*
Form FRM_CALL_SMARTFORMS
*&---------------------------------------------------------------------*
text
*&---------------------------------------------------------------------*
--> p1 text
<-- p2 text
*&---------------------------------------------------------------------*
FORM frm_call_smartforms .
DATA l_line TYPE i.
DATA l_times TYPE i.
DATA l_mod TYPE i.
DATA str TYPE string.
DATA:l_usnam LIKE bkpf-usnam. "过账人
DATA: l_date LIKE bkpf-budat.
DATA: outopt TYPE ssfcresop.
DATA: lf_formname TYPE tdsfname.
DATA: lf_fm_name TYPE rs38l_fnam.
DATA: i_job_output_info TYPE ssfcrescl.
DATA: ls_outopt TYPE ssfcompop.
DATA: ls_control TYPE ssfctrlop.
data: ls_opt type SSFCRESOP.
*打印控制参数
'X'. =
'X'. =
'1'. =
output-tdimmed = 'X'.
output-tddelete = 'X'.
*开始打印输出
CALL FUNCTION 'SSF_OPEN'
EXPORTING
control_parameters = ls_control
output_options = ls_outopt
IMPORTING
job_output_options = ls_opt
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 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.
EXIT.
ENDIF.
*获取SMARTFORM的打印函数.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZBC_SUBTOTAL'
IMPORTING
fm_name = lf_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE 'Call SSF_FUNCTION_MODULE_NAME Error' TYPE 'E'.
ENDIF.
*调用打印函数
CALL FUNCTION lf_fm_name
EXPORTING
control_parameters = ls_control
output_options = ls_outopt
user_settings = ' '
is_vbak = ls_vbak
TABLES
it_vbap = lt_vbap
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE 'Call SmartForms Error!' TYPE 'E'.
ENDIF.
*关闭打印输出
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
job_output_info = i_job_output_info
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
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.