smartform实现分页

本文详细介绍了如何在SmartForms表单中通过循环控制来实现页面跳转和条件换页,包括设置循环抬头数据、主数据查找及表单打印的流程,并通过代码实例展示了具体的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.

  MODIFY zsdt_ctnuprt FROM TABLE lt_zsdt_ctnuprt.

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.
        MESSAGE '打印成功!' TYPE 'S'.
      ENDIF.
    WHEN '4'.
      LEAVE SCREEN.
    WHEN OTHERS.
      MESSAGE '打印失败!' TYPE 'S' DISPLAY LIKE 'E'.
      p_flg_err = c_str.
  ENDCASE.
ENDFORM.                    " FRM_SMARTFORM_OUTPUT


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值