ABAP 打印smartform事件模板

*&---------------------------------------------------------------------*
*&      Form  frm_print
*&---------------------------------------------------------------------*
* 打印事件
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
FORM frm_print.
  DATA: ls_control_parameters TYPE ssfctrlop,
        ls_output_options     TYPE ssfcompop,
        ls_outopt             TYPE ssfcresop,
        ls_output_info        TYPE ssfcrescl,
        lv_name               TYPE rs38l_fnam.

  DATA: lv_tabix     TYPE i,
        lv_seqno     TYPE i,
        lv_djbh      TYPE char11,
        ls_head      TYPE zpps002,
        ls_item      TYPE zpps002a,
        ls_key       TYPE ty_output,
        lt_item      TYPE STANDARD TABLE OF zpps002a,
        lt_key       TYPE STANDARD TABLE OF ty_output,
        lt_sel       TYPE STANDARD TABLE OF ty_output.

  DATA: ls_zppt002  LIKE zppt002,
        lt_zppt002  LIKE TABLE OF ls_zppt002.

  LOOP AT gt_output INTO gs_output WHERE box = 'X'.
    APPEND gs_output TO lt_key.
  ENDLOOP.
  DELETE ADJACENT DUPLICATES FROM lt_key COMPARING aufnr.
  IF lt_key[] IS INITIAL.
    MESSAGE s002(zpp001) DISPLAY LIKE 'E'."至少选择一条数据
    EXIT.
  ENDIF.
  SORT lt_key BY aufnr.
  SORT gt_output BY aufnr.

*&---获取form的函数名
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = gc_form
    IMPORTING
      fm_name            = lv_name
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

*&---开启打印流
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      control_parameters = ls_control_parameters
      output_options     = ls_output_options
    IMPORTING
      job_output_options = ls_outopt
    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.
    RETURN.
  ENDIF.

  ls_control_parameters-no_open = 'X'.
  ls_control_parameters-no_close = 'X'.

  LOOP AT lt_key INTO ls_key.
    CLEAR: ls_head,lt_item,lv_seqno,ls_zppt002.
    READ TABLE gt_output INTO gs_output WITH KEY aufnr = ls_key-aufnr.
    IF sy-subrc = 0.
      lv_tabix = sy-tabix.

    IF ls_outopt-tdpreview <> 'X'.  "打印预览不生成流水号
*&---生成流水号

    ENDIF.


*&---构建form表头
      ls_head-aufnr   = gs_output-aufnr.  "生产订单号
      
	  " 从主键位置循环
      LOOP AT gt_output INTO gs_output FROM lv_tabix.
        IF ls_key-aufnr <> gs_output-aufnr.
          EXIT.
        ENDIF.

*&---构建form行项目
        lv_seqno = lv_seqno + 1.
        ls_item-seqno = lv_seqno.
        ls_item-matnr = gs_output-matnr_r.  "物料名称

        APPEND ls_item TO lt_item.

      ENDLOOP.

*&---打印form
      CALL FUNCTION lv_name
        EXPORTING
          control_parameters = ls_control_parameters
          output_options     = ls_output_options
          gs_head            = ls_head
        IMPORTING
          job_output_info    = ls_output_info
        TABLES
          gt_item            = lt_item
        EXCEPTIONS
          formatting_error   = 1
          internal_error     = 2
          send_error         = 3
          user_canceled      = 4
          OTHERS             = 5.

    ENDIF.

    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.
      IF ls_outopt-tdpreview <> 'X'.  "打印预览不记录日志
      
      ENDIF.
    ENDIF.

  ENDLOOP.

*&---关闭打印流
  CALL FUNCTION 'SSF_CLOSE'
    IMPORTING
      job_output_info  = ls_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.

  SORT gt_output BY seqno.
ENDFORM.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值