1、在smartforms表单中控制:在主要区域的loop循环中加命令进行控制(转到新页打勾,设置换页条件)。
2、在程序中实现:
首先,循环抬头数据,给smartforms的函数参数control_parameters/output_options赋值,其中,抬头数据的第一条~倒数第二条 control_parameters-no_colse='X',最后一条 control_parameters-no_colse='';output_options-tdimmed='X', output_options-tddelete='X'。
然后,查找每一条抬头数据下的主数据。
最后,调用smartforms对应的函数实现表单打印。
LOOP AT lt_header.
AT FIRST.
ls_parameters-no_close = c_str.
ENDAT.
AT LAST.
ls_parameters-no_close = space.
ENDAT.
"---打印处理
WRITE sy-datum TO lt_header-prdat.
PERFORM frm_smartform_output TABLES pt_alv
lt_zsdt_ctnuprt
USING p_fmname
CHANGING p_flg_err
ls_parameters
lt_header.
IF p_flg_err = c_str.
EXIT.
ENDIF.
ENDLOOP.
CHECK p_flg_err EQ '1'.
CHECK rb_tbpr EQ c_str.
MODIFY zsdt_ctnuprt FROM TABLE lt_zsdt_ctnuprt.
IF sy-subrc EQ 0.
MESSAGE '打印成功!' TYPE 'S'.
ELSE.
MESSAGE '打印失败!' TYPE 'S' DISPLAY LIKE 'E'.
ROLLBACK WORK.
ENDIF.
FORM frm_smartform_output TABLES pt_alv STRUCTURE gt_alv
pt_zsdt_ctnuprt STRUCTURE zsdt_ctnuprt
USING p_fmname TYPE rs38l_fnam
CHANGING p_flg_err TYPE char01
ps_parameters TYPE ssfctrlop
ps_header TYPE zsds5002.
DATA: ls_options TYPE ssfcompop,
ls_output_info TYPE ssfcrescl,
lt_items TYPE TABLE OF zsds5002 WITH HEADER LINE,
ls_items TYPE zsds5002,
l_tabix TYPE sy-tabix.
* ps_parameters-no_dialog = c_str.
ls_options-tdimmed = c_str.
ls_options-tddelete = c_str.
CLEAR: p_flg_err,ps_header-kwmeng.
REFRESH pt_zsdt_ctnuprt.
LOOP AT pt_alv WHERE vbeln EQ ps_header-vbeln.
MOVE-CORRESPONDING pt_alv TO lt_items.
l_tabix = l_tabix + 1.
lt_items-posnr = l_tabix.
"---订单数量
ps_header-kwmeng = ps_header-kwmeng + pt_alv-kwmeng.
APPEND lt_items.
CLEAR lt_items.
ENDLOOP.
CALL FUNCTION p_fmname
EXPORTING
control_parameters = ps_parameters
output_options = ls_options
user_settings = space
p_rec_data = ps_header
IMPORTING
job_output_info = ls_output_info
TABLES
p_tab_prt = lt_items
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CASE sy-subrc.
WHEN 0.
LOOP AT lt_items.
CLEAR pt_zsdt_ctnuprt.
pt_zsdt_ctnuprt-vbeln = lt_items-vbeln.
pt_zsdt_ctnuprt-posnr = lt_items-posnr.
APPEND pt_zsdt_ctnuprt.
ENDLOOP.
ps_parameters-no_open = c_str.
IF ls_output_info-outputdone = c_str.
p_flg_err = '1'.
MESSAGE '打印成功!' TYPE 'S'.
ENDIF.
WHEN '4'.
LEAVE SCREEN.
WHEN OTHERS.
MESSAGE '打印失败!' TYPE 'S' DISPLAY LIKE 'E'.
p_flg_err = c_str.
ROLLBACK WORK.
ENDCASE.
ENDFORM. " FRM_SMARTFORM_OUTPUT