ABAP smartforms打印可用库存

T-CODE:smartforms 可以去设计自己需要的报表打印样式。

步骤如下:

1.创建Style,先设置好自己在form里要用到的段落与字体格式,比如标题/内容/页脚 段落等等

2.如有指定格式字体的固定性文字,比如采购协议等,可以创建好Text Module, 再在form里直接使用

3.Form设计,FORM属性可设置打印纸张尺寸,FORM接口设置传入参数与内标数据,通常页和窗口可以新增,一般常见三大部分,标题/表头数据与循环内表数据/页尾,具体要看需求,窗口布局要把控好,不能超出比如设定为A4大小的尺寸限制。

如下创建了一个名为:ZSTOCK的form,代码调用如下:

首先是打印机直接列印的代码:

*&---------------------------------------------------------------------*
*& Report zsmartformsdd
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsmartformsdd.

DATA: lt_stock LIKE STANDARD TABLE OF zstock WITH HEADER LINE.
DATA: funname TYPE rs38l_fnam.
DATA: ls_outset TYPE ssfcompop.
DATA: ls_control TYPE ssfctrlop.
DATA: ls_output_info TYPE ssfcrescl.
DATA: ls_output_options TYPE ssfcresop.
DATA: l_devtype TYPE rspoptype.
DATA: l_bin_filesize TYPE i.
DATA: lt_docs TYPE STANDARD TABLE OF  docs.
DATA: lt_lines TYPE STANDARD TABLE OF tline.
DATA: l_pdf_name TYPE string.
DATA: l_guiobj TYPE REF TO cl_gui_frontend_services.
DATA: l_filepath TYPE string.
DATA: l_fullpath TYPE string.
DATA: l_filename TYPE string.
DATA: l_uact TYPE i.

PARAMETERS: p_werks LIKE mard-werks DEFAULT '6310' .

START-OF-SELECTION.

* 获取Plant库存
  SELECT a~werks, b~name1, a~lgort, a~matnr, c~maktx, a~labst
   INTO TABLE @lt_stock  UP TO 100 ROWS
       FROM mard AS a
       INNER JOIN t001w AS b ON a~werks = b~werks
       LEFT JOIN makt AS c ON a~matnr = c~matnr
    WHERE a~werks = @p_werks.

* 通过form的名称获取函数名
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname = 'ZSTOCK'
    IMPORTING
      fm_name  = funname.

* smartforms 打印参数设置
  CLEAR: ls_outset, ls_control.
  ls_outset-tddest = 'LP01'.     " 默认打印机
  ls_outset-tdimmed = 'X'.      " 快速打印
  ls_outset-tdarmod = 1.         " 本地设置生效

  ls_control-no_dialog = 'X' .    " 不显示打印窗口
  ls_control-preview = 'X'.        " 直接预览
*  ls_control-getotf = 'X'.           " 取得OTF DATA

* 启动smartforms
  CALL FUNCTION funname
    EXPORTING
      output_options     = ls_outset      " 打印参数选项
      control_parameters = ls_control    " 打印控制
    IMPORTING
      job_output_info    = ls_output_info    " 打印结果返回
    TABLES
      lt_stock           = lt_stock.     " 内表数据

  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

如果只是导出列印的PDF版本,需要启用参数getotf,再将otf data转成pdf data, 代码如下:

*&---------------------------------------------------------------------*
*& Report zsmartformsdd
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsmartformsdd.

DATA: lt_stock LIKE STANDARD TABLE OF zstock WITH HEADER LINE.
DATA: funname TYPE rs38l_fnam.
DATA: ls_outset TYPE ssfcompop.
DATA: ls_control TYPE ssfctrlop.
DATA: ls_output_info TYPE ssfcrescl.
DATA: ls_output_options TYPE ssfcresop.
DATA: l_devtype TYPE rspoptype.
DATA: l_bin_filesize TYPE i.
DATA: lt_docs TYPE STANDARD TABLE OF  docs.
DATA: lt_lines TYPE STANDARD TABLE OF tline.
DATA: l_pdf_name TYPE string.
DATA: l_guiobj TYPE REF TO cl_gui_frontend_services.
DATA: l_filepath TYPE string.
DATA: l_fullpath TYPE string.
DATA: l_filename TYPE string.
DATA: l_uact TYPE i.

PARAMETERS: p_werks LIKE mard-werks DEFAULT '6310' .

START-OF-SELECTION.

* 获取Plant库存
  SELECT a~werks, b~name1, a~lgort, a~matnr, c~maktx, a~labst
   INTO TABLE @lt_stock  UP TO 100 ROWS
       FROM mard AS a
       INNER JOIN t001w AS b ON a~werks = b~werks
       LEFT JOIN makt AS c ON a~matnr = c~matnr
    WHERE a~werks = @p_werks.

* 通过form的名称获取函数名
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname = 'ZSTOCK'
    IMPORTING
      fm_name  = funname.

* smartforms 打印参数设置
  CLEAR: ls_outset, ls_control.
  ls_outset-tddest = 'LP01'.     " 默认打印机
  ls_outset-tdimmed = 'X'.      " 快速打印
  ls_outset-tdarmod = 1.         " 本地设置生效

  ls_control-no_dialog = 'X' .    " 不显示打印窗口
  ls_control-preview = 'X'.        " 直接预览
  ls_control-getotf = 'X'.           " 取得OTF DATA

* 启动smartforms
  CALL FUNCTION funname
    EXPORTING
      output_options     = ls_outset      " 打印参数选项
      control_parameters = ls_control    " 打印控制
    IMPORTING
      job_output_info    = ls_output_info    " 打印结果返回
    TABLES
      lt_stock           = lt_stock.     " 内表数据

  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

*  IF  ls_output_info-outputdone = 'X' .          " 打印完成,结果返回
*
*  ENDIF.

* OTF DATA转为PDF
  CALL FUNCTION 'CONVERT_OTF_2_PDF'
    IMPORTING
      bin_filesize           = l_bin_filesize
    TABLES
      otf                    = ls_output_info-otfdata
      doctab_archive         = lt_docs
      lines                  = lt_lines
    EXCEPTIONS
      err_conv_not_possible  = 1
      err_otf_mc_noendmarker = 2
      OTHERS                 = 3.

  l_pdf_name = 'stock.pdf'.
  CREATE OBJECT l_guiobj.

* 文件保存选择
  CALL METHOD l_guiobj->file_save_dialog
    EXPORTING
*     window_title      =
      default_extension = 'pdf'
      default_file_name = l_pdf_name
    CHANGING
      filename          = l_pdf_name
      path              = l_filepath
      fullpath          = l_fullpath
      user_action       = l_uact.

* 下载文件
  l_filename =  l_fullpath.
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize            = l_bin_filesize
      filename                = l_filename
      filetype                = 'BIN'
    TABLES
      data_tab                = lt_lines
    EXCEPTIONS
      file_write_error        = 1
      no_batch                = 2
      gui_refuse_filetransfer = 3
      invalid_type            = 4
      no_authority            = 5
      unknown_error           = 6
      header_not_allowed      = 7
      separator_not_allowed   = 8
      filesize_not_allowed    = 9
      header_too_long         = 10
      dp_error_create         = 11
      dp_error_send           = 12
      dp_error_write          = 13
      unknown_dp_error        = 14
      access_denied           = 15
      dp_out_of_memory        = 16
      disk_full               = 17
      dp_timeout              = 18
      file_not_found          = 19
      dataprovider_exception  = 20
      control_flush_error     = 21
      OTHERS                  = 22.

最终结果如下:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值