2019.12.24 【ABAP随笔】smartforms 打印及PDF转化
冬至已过,又临平安夜和圣诞,又是一年的末尾,闲暇时间需要静下心来温故而知新。
许久未碰打印,知识于脑子又有几分糊涂,遂整理些许知识,记录。
数据随便取于物料表
report Z_smartforms TABLES:mara. TYPES:BEGIN OF ty_data,
checkbox TYPE c,
matnr TYPE mara-matnr,
mtart TYPE mara-mtart,
matkl TYPE mara-matkl,
maktx TYPE makt-maktx,
END OF ty_data.
DATA gt_data TYPE TABLE OF ty_data. *INCLUDE zalv_oo_cls.
INCLUDE z_smartforms_cls.
DATA ok_code TYPE sy-ucomm. DATA: gt_fieldcat TYPE lvc_t_fcat. "字段操作表
DATA: gs_layout TYPE lvc_s_layo. SELECT-OPTIONS:
matnr FOR mara-matnr,
mtart FOR mara-mtart,
matkl FOR mara-matkl. START-OF-SELECTION. SELECT
a~matnr ,
a~mtart ,
a~matkl ,
b~maktx
INTO CORRESPONDING FIELDS OF TABLE @gt_data
FROM mara AS a
INNER JOIN makt AS b ON a~matnr = b~matnr
UP TO ROWS. END-OF-SELECTION.
CHECK gt_data[] IS NOT INITIAL. CREATE OBJECT gr_alv. PERFORM frm_set_fieldcat. CALL METHOD gr_alv->standard_oo_alv
EXPORTING
iv_screen = ''
iv_default_ex = 'X'
is_layout = gs_layout
iv_self_ucomm = 'X'
iv_container_name = 'TC'
CHANGING
* CR_DOCK = GR_DOCK
* CR_GRID = GR_GRID
ct_fieldcat = gt_fieldcat
ct_data = gt_data
EXCEPTIONS
create_alv_failed = . CALL SCREEN . FORM frm_set_fieldcat. gs_layout-sel_mode = 'D' . "模式
gs_layout-zebra = 'X'. "ALV表格按斑马线条纹显示
gs_layout-cwidth_opt = 'X'. "将ALV字段宽度设置为最优化
gs_layout-no_merging = ''.
gs_layout-box_fname = 'CHECKBOX'. DATA lv_pos TYPE i.
DATA ls_fieldcat LIKE LINE OF gt_fieldcat.
DEFINE %%append_fieldcat.
lv_pos = lv_pos + .
ls_fieldcat-col_pos = lv_pos.
ls_fieldcat-fieldname = &."字段名
ls_fieldcat-coltext = &."文本
* ls_fieldcat-no_zero = &3."去掉前导零
ls_fieldcat-ref_table = &.
ls_fieldcat-ref_field = &.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
END-OF-DEFINITION. %%append_fieldcat:
'CHECKBOX' '选择' '' '',
'MATNR' '' 'MARA' 'MATNR',
'MTART' '' 'MARA' 'MTART',
'MATKL' '' 'MARA' 'MATKL',
'MAKTX' '' 'MAKT' 'MAKTX'.
ENDFORM. *&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'STATUS'.
SET TITLEBAR 'TITLE'.
ENDMODULE. *&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT. ok_code = sy-ucomm. CASE ok_code.
WHEN 'BACK' OR 'EXIT'.
LEAVE TO SCREEN .
WHEN 'CANC'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE. ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_print_data . TYPES: lty_spopli TYPE TABLE OF spopli WITH EMPTY KEY. DATA(lt_spopli) = VALUE lty_spopli(
( selflag = 'X' varoption = '打印')
( varoption = '仅预览')
( varoption = '输出PDF')
). DATA: antwort TYPE c. "选择打印功能
CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
EXPORTING
cursorline =
mark_flag = 'X'
mark_max =
* START_COL = 0
* START_ROW = 0
textline1 = '请选择输出功能'
* TEXTLINE2 = ' '
* TEXTLINE3 = ' '
titel = '功能选择'
* DISPLAY_ONLY = ' '
IMPORTING
answer = antwort
TABLES
t_spopli = lt_spopli
EXCEPTIONS
not_enough_answers =
too_much_answers =
too_much_marks =
OTHERS = .
IF sy-subrc NE .
MESSAGE '请选择一个功能' TYPE 'I'.
RETURN.
ENDIF. CHECK antwort IS NOT INITIAL. DATA: fname() VALUE 'ZTEST_SMARTFORMS_01'.
DATA: fm_name TYPE rs38l_fnam. DATA: ls_control_param TYPE ssfctrlop ."控制结构
DATA: ls_composer_param TYPE ssfcompop ."处理输出
DATA: outopt TYPE ssfcresop.
DATA: i_job_output_info TYPE ssfcrescl. CASE antwort.
WHEN ''.
ls_control_param-langu = ''.
ls_control_param-no_open = 'X'."控制smartforms的调用
ls_control_param-no_close = 'X'."控制假脱机系统
ls_control_param-device = 'PRINTER'."
"最后一张票据需要关闭假脱机 ls_control_param-no_close = space PERFORM frm_print_smf USING
ls_control_param
ls_composer_param
fname
CHANGING
i_job_output_info.
WHEN ''."直接预览
ls_composer_param-tdnoprint = 'X'."预览界面无打印按钮
ls_control_param-langu = ''.
ls_control_param-no_open = 'X'."控制smartforms的调用
ls_control_param-no_close = 'X'."控制假脱机系统
"最后一张票据需要关闭假脱机 ls_control_param-no_close = space
ls_control_param-no_dialog = 'X'."
ls_control_param-device = 'PRINTER'."
ls_control_param-preview = 'X'."预览 PERFORM frm_print_smf USING
ls_control_param
ls_composer_param
fname
CHANGING
i_job_output_info.
WHEN ''. DATA: lv_fullpath TYPE string.
DATA: l_filename TYPE string.
DATA: l_bin_filesize TYPE i.
DATA :l_bin_file TYPE xstring.
DATA: lt_lines TYPE STANDARD TABLE OF tline. CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = '选择目录'
* INITIAL_FOLDER =
CHANGING
selected_folder = lv_fullpath. * 根据SmartForm 名称获得Form的 Function Name
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = fname
IMPORTING
fm_name = fm_name
EXCEPTIONS
no_form =
no_function_module =
OTHERS = .
IF sy-subrc <> .
MESSAGE 'Call SSF_FUNCTION_MODULE_NAME Error' TYPE 'E'.
ENDIF. ls_control_param-langu = ''.
ls_control_param-no_dialog = 'X'."
ls_control_param-getotf = 'X'."
ls_composer_param-tddest = 'LP01'."打印机 * smartforms
CALL FUNCTION fm_name
EXPORTING
control_parameters = ls_control_param
output_options = ls_composer_param
IMPORTING
job_output_info = i_job_output_info
EXCEPTIONS
formatting_error =
internal_error =
send_error =
user_canceled =
OTHERS = .
IF sy-subrc <> .
MESSAGE 'Call SmartForms Error' TYPE 'E'.
ENDIF. * Convert content to PDF
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = l_bin_filesize
* BIN_FILE = L_BIN_FILE
TABLES
otf = i_job_output_info-otfdata[]
lines = lt_lines
EXCEPTIONS
err_max_linewidth =
err_format =
err_conv_not_possible =
OTHERS = . CONCATENATE lv_fullpath '\' sy-datum sy-uzeit
'.PDF' INTO l_filename. * download pdf
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.
WHEN OTHERS.
ENDCASE. ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT_SMF
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_CONTROL_PARAM
*& --> LS_COMPOSER_PARAM
*& --> FNAME
*& <-- I_JOB_OUTPUT_INFO
*&---------------------------------------------------------------------*
FORM frm_print_smf USING ls_control_param TYPE ssfctrlop
ls_composer_param TYPE ssfcompop
fname TYPE char30
CHANGING i_job_output_info TYPE ssfcrescl.
DATA: outopt TYPE ssfcresop,
fm_name TYPE rs38l_fnam. CALL FUNCTION 'SSF_OPEN'
EXPORTING
control_parameters = ls_control_param
output_options = ls_composer_param
IMPORTING
job_output_options = outopt
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. * 根据SmartForm 名称获得Form的 Function Name
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = fname
IMPORTING
fm_name = fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE 'Call SSF_FUNCTION_MODULE_NAME Error' TYPE 'E'.
ENDIF. CALL FUNCTION fm_name
EXPORTING
control_parameters = ls_control_param
output_options = ls_composer_param
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5. CALL FUNCTION 'SSF_CLOSE'
IMPORTING
job_output_info = i_job_output_info
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.
ENDIF.
ENDFORM.
此程序使用OOALV :GR_ALV是自己创建的OO ALV的类,打印的按钮代码如下
CLASS lcl_alv DEFINITION .
PUBLIC SECTION.
······ "自定义工具栏
METHODS handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object
e_interactive.
" 响应用户命令
METHODS handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm. ······
ENDCLASS .
"实施
CLASS lcl_alv IMPLEMENTATION.
METHOD handle_toolbar.
DATA:
ls_toolbar TYPE stb_button.
CLEAR ls_toolbar.
MOVE 'PRINT' TO ls_toolbar-function.
MOVE TEXT-t01 TO ls_toolbar-text.
MOVE icon_print TO ls_toolbar-icon.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD. METHOD handle_user_command.
······
CASE e_ucomm.
WHEN 'PRINT'.
PERFORM frm_print_data. "调用打印
WHEN OTHERS.
ENDCASE. DATA ls_stbl TYPE lvc_s_stbl.
ls_stbl-row = 'X'.
ls_stbl-col = 'X'. CALL METHOD cr_grid->refresh_table_display
EXPORTING
is_stable = ls_stbl.
ENDCLASS. DATA gr_alv TYPE REF TO lcl_alv.
效果如下:
1.打印,带控制台
2.仅预览,不允许打印,禁用打印按钮
3.输出PDF
-文至此,以展示打印,预览 和 PDF输出三种格式输出
-TAB 热爱技术 享受生活
"
2019.12.24 【ABAP随笔】smartforms 打印及PDF转化的更多相关文章
- 2015.12.21~2015.12.24真题回顾!-- HTML5学堂
2015.12.21~2015.12.24真题回顾!-- HTML5学堂 山不在高,有仙则名!水不在深,有龙则灵!千里冰封,非一日之寒!IT之路,须厚积薄发!一日一小练,功成不是梦!小小技巧,尽在HT ...
- @无痕客 https://www.cnblogs.com/wuhenke/archive/2012/12/24/2830530.html 通篇引用
无痕客 https://www.cnblogs.com/wuhenke/archive/2012/12/24/2830530.html 关于Async与Await的FAQ 关于Async与Await的 ...
- Alpha冲刺(1/10)——2019.4.24
所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(1/10)--2019.4.24 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...
- SimpleDateFormat转换时间,12,24时间格式[转]
SimpleDateFormat转换时间,12,24时间格式 来自:http://blog.csdn.net/dongguang1082/article/details/4387165 在使用Simp ...
- 12.24笔记(关于//UIDynamic演练//多对象的附加行为//UIDynamic简单演练//UIDynamic//(CoreText框架)NSAttributedString)
12.24笔记1.UIDynamic注意点:演示代码:上面中设置视图旋转的时候,需要注意设置M_PI_4时,视图两边保持平衡状态,达不到仿真效果.需要偏移下角度.2.吸附行为3.推动行为初 ...
- NOI2019退役记 upd:2019.12.1
(我把原来写的东西全部删掉了) AFO. 我退役了,\(\mbox{yyb}\)退役了. 至少,在接下来的日子里,我得投身到文化课,度过快乐的高三生活了. 这两年的\(OI\)生涯给了我很多,让我学会 ...
- Beta冲刺(3/7)——2019.5.24
所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(3/7)--2019.5.24 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...
- IDEA下将dubbo简单项目跑Demo(2019.12版)
项目架构(聚合项目,父子模块) src没用,所以删去 选择maven项目,不用勾选模板骨架,直接main方法,因为不用到服务器 顺序是按照:添加pom依赖-接口实现类-配置文件 项目环境 IDE:In ...
- 第十八次CSP认证游记 | 2019.12.15
CSP认证的考试是Haogod介绍的,取得一定成绩之后能有机会参加CCSP的分赛区和全国决赛.这次来参加认证要感谢老师的奔走为我们申请学校的报销,虽然最终因为这不是比赛所以报名费和差旅费下不来,但是老 ...
随机推荐
- PAT1005 继续(3n+1)猜想
卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 进行验证的时 ...
- Python:pip 安装第三方库,速度很慢的解决办法
场景 想安装 Django 库 在 cmd 敲入命令 pip install Django 但是发现下载安装文件非常慢 原因:实质访问的下载网站是 https://pypi.Python.org/si ...
- Httpd总结 :HTTPD的基本概念
这是一篇为初学者准备的文章,所以作者会尽量从基础出发,尽量细致的描述每一个细节,以求让初学者不会一头雾水,有一定基础的同学就不用看了,以免浪费你的时间. 假设博主今天春心荡漾,想要访问一些不可描述 ...
- SQLite3的安装与使用
下载地址:https://www.sqlite.org/download.html (下载相对应自已电脑的配置的数据库)(这里 我的电脑是 windows 64位操作系统) 下载完后 解压出来 sql ...
- php类知识---命名空间
<?php #命名空间namespace用来解决类的命名冲突,和引用问题 namespace trainingplan1; class mycoach { public function tra ...
- 一例tornado框架下处理上传图片并生成缩略图的例子
class coachpic(RequestHandler): @gen.coroutine def post(self): picurl = self.request.files[] print(& ...
- MySQL(MariaDB)默认密码和修改方法
由于笔者只测试过Ubuntu 16.04.4.Ubuntu 19.04和Debian 9,此方法不确定在其他版本下适用. 本文章介绍的方法同样适用于这样的错误信息. ➜ ~ mysql -u root ...
- js 实现深拷贝
在ECMAScript变量中包含两种不同类型的值:基本类型值和引用类型值. 基本类型值:Undefined.Null.Boolean.Number.String 引用类型值:Object.Array. ...
- 【C#-程序时间计数器】如何计算某些步骤/过程耗时多少?
使用Stopwatch对象,TimeSpan对象 Stopwatch sw = new Stopwatch();//跑表,该类可以进行时间的统计 命名空间using System.Diagnostic ...
- npoi 导出
npoi 导出 public void Output(DataTable table, string SheetName, string reportName) { string result = s ...