2021 Mar 31 10:11 AM
Hi Experts
I only need print 1 page. But it is same with 5 page. Can you help me ?
Thanks in advance

The code is following.
FORM frm_print USING p_formname.
DATA: lf_fm_name TYPE rs38l_fnam.
DATA: ls_control_param TYPE ssfctrlop.
DATA: ls_composer_param TYPE ssfcompop.
DATA: lf_formname TYPE tdsfname.
DATA: jobinfo TYPE ssfcrescl.
DATA job_output_info TYPE ssfcrescl.
DATA job_output_options TYPE ssfcresop.
READ TABLE item WITH KEY mark = 'X'.
IF sy-subrc ne 0.
MESSAGE '请选择需要打印的数据' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
TYPES:BEGIN OF ty_item.
INCLUDE TYPE zrpp014_item.
TYPES:END OF ty_item.
DATA:wa_header TYPE zrpp014_header,
wa_item TYPE ty_item,
it_item TYPE TABLE OF ty_item.
**打印参数定义
ls_control_param-langu = sy-langu. "调用smartforms
ls_control_param-no_open = 'X'.
ls_control_param-no_close = 'X'.
ls_composer_param-tdimmed = 'X'.
ls_composer_param-tddelete = 'X'.
lf_formname = 'ZYST007'.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
control_parameters = ls_control_param
output_options = ls_composer_param
user_settings = ' '
IMPORTING
job_output_options = job_output_options
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.
EXIT.
ENDIF.
LOOP AT item WHERE mark = 'X'.
CLEAR: wa_header,wa_item,it_item,lt_zrpp014.
"表头
IF r1 = 'X'.
SELECT SINGLE aufnr INTO wa_header-aufnr FROM zrpp007 WHERE sernr = item-sernr.
DATA: numc TYPE string.
CALL FUNCTION 'ZNUMC4_GET_NEXT'
EXPORTING
datum = sy-datum
subobject = '02'
IMPORTING
number = numc.
wa_header-zdj = 'SM' && sy-datum+2(6) && numc.
ELSE.
wa_header-aufnr = item-aufnr.
wa_header-zdj = item-djhms.
ENDIF.
wa_header-lgobe = item-lgobe.
wa_header-lgobb = item-lgobb.
wa_header-werks = item-werks.
"打印数据
* LOOP AT item WHERE mark = 'X'.
IF r1 = 'X'.
* LOOP AT item WHERE mark = 'X'.
lt_zrpp014-sernr = item-sernr. " modify it by jingguilin 20210329
lt_zrpp014-djhms = wa_header-zdj.
lt_zrpp014-matnr = item-matnr.
lt_zrpp014-werks = item-werks.
lt_zrpp014-lgfsb = item-lager.
lt_zrpp014-lgort = item-lgort.
lt_zrpp014-aufnr = item-aufnr.
lt_zrpp014-syusr = sy-uname.
lt_zrpp014-sydat = sy-datum.
lt_zrpp014-sytim = sy-uzeit.
lt_zrpp014-zbsat = 'S'.
APPEND lt_zrpp014.
ELSE.
lt_zrpp014-syusr = sy-uname.
lt_zrpp014-sydat = sy-datum.
lt_zrpp014-sytim = sy-uzeit.
APPEND lt_zrpp014.
ENDIF.
* ENDLOOP.
"表体
LOOP AT item WHERE mark = 'X'. " moidfy it by jingguilin 20210329
wa_item-sernr = item-sernr.
wa_item-matnr = item-matnr.
wa_item-maktx = item-maktx.
wa_item-meins = 'EA'.
wa_item-bdmng = 1.
APPEND wa_item TO it_item.
ENDLOOP.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lf_formname
IMPORTING
fm_name = lf_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
CALL FUNCTION lf_fm_name
EXPORTING
control_parameters = ls_control_param
output_options = ls_composer_param
user_settings = 'X'
wa_header = wa_header
TABLES
it_item = it_item
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.
ENDIF.
ENDLOOP.
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
job_output_info = jobinfo
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.
EXIT.
ENDIF.
*记录打印日志
IF jobinfo-outputdone = 'X'.
DELETE item WHERE mark = 'X'.
MODIFY zrpp014 FROM TABLE lt_zrpp014.
ENDIF.
ENDFORM.
2021 Mar 31 10:20 AM
Move the
CALL FUNCTION lf_fm_nameafter the loop.
Addition: also the previous call to get the function name from the smartform, you only need it once.
2021 Mar 31 10:20 AM
Move the
CALL FUNCTION lf_fm_nameafter the loop.
Addition: also the previous call to get the function name from the smartform, you only need it once.
2021 Apr 01 5:09 AM