Smart Form不弹出假脱机设置界面直接打印预览

时间:2024-04-07 10:53:45
Smart Form主要通过SSFCTRLOP和SSFCOMPOP两个参数来配置打印控制的。
Smart Form不弹出假脱机设置界面直接打印预览 

下面是一段实施代码:
  1. DATA: ctrl_param TYPE ssfctrlop,
  2.       out_option TYPE ssfcompop,
  3.       fm_name    TYPE rs38l_fnam.

  4. *控制默认打印机隐藏预览功能
  5. out_option-tddest = 'LP01'.        "指定默认打印机名,一般为四位字符
  6. out_option-tdnoprev = 'X'.        "隐藏报表预览功能,默认为空
  7. out_option-tdimmed = 'X'.                "是否勾选快速打印项
  8. out_option-tdarmod = 1.                "确认本地设置是否有效,必选项
  9. *不显示对话框直接预览
  10. ctrl_param-preview = 'X'.
  11. ctrl_param-no_Dialog = 'X'.
  12. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  13.   EXPORTING
  14.     formname           = 'Z_TESTJSW' "Smart Form名称
  15.   IMPORTING
  16.     fm_name            = fm_name
  17.   EXCEPTIONS
  18.     no_form            = 1
  19.     no_function_module = 2
  20.     OTHERS             = 3.
  21. IF sy-subrc <> 0.
  22.   MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  23.   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  24. ENDIF.
  25. CALL FUNCTION fm_name
  26.   EXPORTING
  27.     control_parameters = ctrl_param
  28.     output_options     = out_option
  29.     user_settings      = space
  30. *  TABLES
  31. *   itab               = itab[]
  32.   EXCEPTIONS
  33.     OTHERS             = 1.
复制代码


一次性输出多张报表:
有些时候可能需要一次性打印多张内容不同的报表,直接调用SmartForms时,可能每次调用后都会执行一次打印操作,会在循环中反复出现打印对话框,影响程序执行效率。SAP打印控制了假脱机功能,允许将多张表先缓存,最后一次性提交打印请求。
实现假脱机控制控制主要通过SmartForms函数的CONTROL_PARAMETERS接口的NO_OPEN、NO_CLOSE两个参数来控制。

如果我们在项目实战中需要打印多个请求,则直接用下面的perform

  1. FORM SHOWFORM.

  2.   DATA: W_SFNAME TYPE RS38L_FNAM.
  3.   DATA: LS_CONTROL_PARAM TYPE SSFCTRLOP .
  4.   DATA: LS_COMPOSER_PARAM TYPE SSFCOMPOP .
  5.   DATA: OUTOPT TYPE SSFCRESOP.
  6.   DATA: I_JOB_OUTPUT_INFO TYPE SSFCRESCL.

  7.   LS_CONTROL_PARAM-LANGU = '1'.  "1:CHINESE
  8.   LS_CONTROL_PARAM-NO_OPEN = 'X'.
  9.   LS_CONTROL_PARAM-NO_CLOSE = 'X'.

  10.   CALL FUNCTION 'SSF_OPEN' “调用SSF_OPEN函数设置打印机,打开输出请求
  11.     EXPORTING
  12.       CONTROL_PARAMETERS = LS_CONTROL_PARAM
  13.       OUTPUT_OPTIONS     = LS_COMPOSER_PARAM
  14.     IMPORTING
  15.       JOB_OUTPUT_OPTIONS = OUTOPT
  16.     EXCEPTIONS
  17.       FORMATTING_ERROR   = 1
  18.       INTERNAL_ERROR     = 2
  19.       SEND_ERROR         = 3
  20.       USER_CANCELED      = 4
  21.       OTHERS             = 5.

  22.   IF SY-SUBRC <> 0.
  23.     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  24.     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  25.     EXIT.
  26.   ENDIF.

  27.   IF SY-SUBRC <> 0.
  28. * Implement suitable error handling here
  29.   ENDIF.

  30.   CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  31.     EXPORTING
  32.       FORMNAME           = 'ZMMF0009'
  33.     IMPORTING
  34.       FM_NAME            = W_SFNAME
  35.     EXCEPTIONS
  36.       NO_FORM            = 1
  37.       NO_FUNCTION_MODULE = 2
  38.       OTHERS             = 3.

  39.   LOOP AT GT_DATA INTO GS_DATA.
  40.     CALL FUNCTION W_SFNAME    " '/1BCDWB/SF00000322'
  41.       EXPORTING
  42.               CONTROL_PARAMETERS = LS_CONTROL_PARAM
  43.         OUTPUT_OPTIONS     = LS_COMPOSER_PARAM
  44.         WA_HEADER              = GS_DATA-HEADER
  45.       TABLES
  46.         IT_ITEM                    = GS_DATA-ITEMS
  47.       EXCEPTIONS
  48.         FORMATTING_ERROR           = 1
  49.         INTERNAL_ERROR             = 2
  50.         SEND_ERROR                 = 3
  51.         USER_CANCELED              = 4
  52.         OTHERS                     = 5.
  53.     IF SY-SUBRC <> 0.
  54.       LEAVE TO LIST-PROCESSING.
  55.     ENDIF.
  56.   ENDLOOP.

  57.   CALL FUNCTION 'SSF_CLOSE' “关闭打印机
  58.     IMPORTING
  59.       JOB_OUTPUT_INFO  = I_JOB_OUTPUT_INFO
  60.     EXCEPTIONS
  61.       FORMATTING_ERROR = 1
  62.       INTERNAL_ERROR   = 2
  63.       SEND_ERROR       = 3
  64.       OTHERS           = 4.
  65.   IF SY-SUBRC <> 0.
  66.     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  67.     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  68.   ENDIF.

  69. ENDFORM.                    " SHOWFORM
复制代码