Skip to content

SMARTFORMS相关

示例代码
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
*&---------------------------------------------------------------------*
*& Form frm_pinrt
*&---------------------------------------------------------------------*
*& 打印
*&---------------------------------------------------------------------*
FORM frm_pinrt .

  DATA l_formname TYPE tdsfname VALUE 'ZNAME'.
  DATA l_fm_name TYPE rs38l_fnam.

  " 获取打印函数
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = l_formname
    IMPORTING
      fm_name            = l_fm_name
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    RETURN.
  ENDIF.

  " 设置控制参数
  DATA ls_control_parameters TYPE ssfctrlop.
  DATA ls_output_options TYPE ssfcompop.

  CLEAR ls_control_parameters.
  CLEAR ls_output_options.

  ls_control_parameters-no_open = abap_true.
  ls_control_parameters-no_close = abap_true.

  " 准备打印
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      output_options     = ls_output_options
      control_parameters = ls_control_parameters
    EXCEPTIONS
      formatting_error   = 1
      internal_error     = 2
      send_error         = 3
      user_canceled      = 4
      OTHERS             = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    RETURN.
  ENDIF.

  " 分组打印
  LOOP AT gt_data INTO DATA(ls_data) WHERE zsel = abap_true
    GROUP BY (
      zkey = ls_data-zkey
    ) INTO DATA(ls_data_grp).

    DATA ls_print TYPE zprint.
    CLEAR ls_print.

    " 补空行
    DATA l_line_per_page TYPE i VALUE 10.
    WHILE ( lines( ls_print-t_item ) MOD l_line_per_page ) <> 0.
      INSERT INITIAL LINE INTO TABLE ls_print-t_item.
    ENDWHILE.

    " 打印
    CALL FUNCTION l_fm_name
      EXPORTING
        control_parameters = ls_control_parameters
        output_options     = ls_output_options
        i_data             = ls_print
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      RETURN.
    ENDIF.

  ENDLOOP.

  " 关闭打印
  CALL FUNCTION 'SSF_CLOSE'
    EXCEPTIONS
      formatting_error = 1
      internal_error   = 2
      send_error       = 3
      OTHERS           = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    RETURN.
  ENDIF.

ENDFORM.

取消激活WORD编辑器

WORD编辑器没办法拖拽字段,需要换回文本编辑器。

  1. SE38运行程序RSCPSETEDITOR,取消勾选并激活。

  2. CL_COS_UTILITIES=>IS_S4H增强加入下面代码

    示例代码

    1
    2
    3
    IF sy-tcode = 'SMARTFORMS'.
      rv_is_s4h = abap_false.
    ENDIF.
    

打印PDF

和普通打印没太大区别,多设置几个参数即可

示例代码
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
" ...

" 获取OTF内容
ls_control_parameters-getotf = abap_true.
" 设置打印机
ls_output_options-tddest = 'LP01'.

" ...

" 调用打印的函数,通过JOB_OUTPUT_INFO获取OTF内容
DATA ls_job_output_info TYPE ssfcrescl.
CALL FUNCTION l_fm_name
  EXPORTING
    control_parameters = ls_control_parameters
    output_options     = ls_output_options
  IMPORTING
    job_output_options = ls_job_options
    job_output_info    = ls_job_output_info
  EXCEPTIONS
    formatting_error   = 1
    internal_error     = 2
    send_error         = 3
    user_canceled      = 4
    OTHERS             = 5.

" PDF的形式保存打印单
DATA l_len TYPE i.
DATA l_xstr TYPE xstring.
DATA lt_lines TYPE STANDARD TABLE OF tline.
CALL FUNCTION 'CONVERT_OTF'
  EXPORTING
    format                = 'PDF'
  IMPORTING
    bin_filesize          = l_len
    bin_file              = l_xstr
  TABLES
    otf                   = ls_job_output_info-otfdata[]
    lines                 = lt_lines
  EXCEPTIONS
    err_max_linewidth     = 1
    err_format            = 2
    err_conv_not_possible = 3
    err_bad_otf           = 4
    OTHERS                = 5.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  RETURN.
ENDIF.

cl_openxml_helper=>store_local_file( im_file_name = 'C:\Export.pdf'
                                     im_data = l_xstr ).

" ...