smartform实现分页

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.
  DATAls_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.

  CLEARp_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


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值