Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

print issue

1190_5939_439
Active Participant
0 Likes
968

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.
1 ACCEPTED SOLUTION
Read only

abo
Active Contributor
905

Move the

CALL FUNCTION lf_fm_name

after the loop.

Addition: also the previous call to get the function name from the smartform, you only need it once.

2 REPLIES 2
Read only

abo
Active Contributor
906

Move the

CALL FUNCTION lf_fm_name

after the loop.

Addition: also the previous call to get the function name from the smartform, you only need it once.

Read only

0 Likes
905

good catch!