*&---------------------------------------------------------------------*
*& 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.
ABAP 打印smartform事件模板
于 2022-09-24 01:05:24 首次发布