SMARTFORM不同模板一起打印
一、背景
由于客户提出发货单要加上条形码打印,条形码单独一个模板,加在后面打印,输出PDF并发送邮件。
二、效果展示
不同模板一起打印效果如下,建立smartforms的表单时,也使用了两个不同的模板
三、smartforms建立表单
(一)条形码
事务码:SE73
设置条形码长宽高
SMARTFORMS设置条形码格式
(二)表单
主窗口采用table的方式,可以实现自动换行,会比使用模板更好。但是使用table我遇到一个未解决的问题。在条件那里加上比较值的判断未生效,比如加上header的语言判断,使用不同文本,就未生效,如果是判断这个字段是否为空是生效的,很奇怪,希望大佬们指点一下。
在smartforms 里面填写内容的时候,将字段的格式选择为设置的格式就可以了,系统会自动的将字段的内容转换成条形码的格式
四、代码
(一)示例
打印,发送邮件会单独放一期来写,这里只到输出PDF字符
DATA:gcos_sfname TYPE tdsfname, gcos_sfname_2 TYPE tdsfname. DATA: l_fnam TYPE rs38l_fnam, " Function name l_fnam_2 TYPE rs38l_fnam, l_ctrlparm TYPE ssfctrlop, " Control parameters for smartforms l_output_info TYPE ssfcrescl. " job output infomation for smartforms DATA: t_control_parameters TYPE ssfctrlop, t_output_options TYPE ssfcompop. DATA: git_lines TYPE STANDARD TABLE OF tline, git_lines_2 TYPE STANDARD TABLE OF tline. DATA: gs_lines TYPE solix_tab . DATA:gs_lines_2 TYPE solix_tab. DATA:lv_xstring TYPE xstring, lv_xstring_2 TYPE xstring. IF wa_header-country = 'CN'. gcos_sfname = 'ZSDF003_SF_V1'. gcos_sfname_2 = 'ZSDF003_SF_CODE'. ELSE. gcos_sfname = 'ZSDF003_SF_EN'. gcos_sfname_2 = 'ZSDF003_SF_CODE_EN'. ENDIF. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = gcos_sfname "SMARTFORMS 名称 * VARIANT = ' ' * DIRECT_CALL = ' ' IMPORTING fm_name = l_fnam "转换后的函数名 EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. t_output_options-tdiexit = 'X'. "这个参数,最后一次打印一定要是X,前面的几次都是空,才会连续打印 * t_control_parameters-no_close = 'X'. t_control_parameters-no_dialog = 'X'. "设置了不弹出对话框 t_control_parameters-getotf = 'X'. "要导出PDF,这个参数一定要设:OTF 表的返回 IF p_code = 'X'. "选择了条码打印 t_control_parameters-no_close = 'X'. ELSE. t_control_parameters-no_close = ''. ENDIF. CALL FUNCTION l_fnam EXPORTING control_parameters = t_control_parameters "连续预览 output_options = t_output_options "默认打印选项设置传输 wa_header = wa_header IMPORTING job_output_info = t_otf_from_fm TABLES it_item = it_tab it_item2 = it_tab2 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. ELSE. t_control_parameters-no_open = 'X'. "未知 ENDIF. "执行打印功能后,进行的操作,如数据库之类的 CALL FUNCTION 'CONVERT_OTF' EXPORTING format = 'PDF' IMPORTING bin_file = lv_xstring TABLES otf = t_otf_from_fm-otfdata[] lines = git_lines EXCEPTIONS err_max_linewidth = 1 err_format = 2 err_conv_not_possible = 3 OTHERS = 4. "转换二进制 CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_xstring TABLES binary_tab = gs_lines. IF p_code = 'X'. t_control_parameters-no_close = space. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = gcos_sfname_2 "SMARTFORMS 名称 * VARIANT = ' ' * DIRECT_CALL = ' ' IMPORTING fm_name = l_fnam_2 "转换后的函数名 EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL FUNCTION l_fnam_2 EXPORTING control_parameters = t_control_parameters "连续预览 output_options = t_output_options "默认打印选项设置传输 * wa_header = wa_header IMPORTING job_output_info = t_otf_from_fm_2 TABLES it_item = it_tab_code * it_item2 = it_tab2 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. ELSE. t_control_parameters-no_open = 'X'. "未知 ENDIF. ENDIF. CALL FUNCTION 'CONVERT_OTF' EXPORTING format = 'PDF' IMPORTING bin_file = lv_xstring_2 TABLES otf = t_otf_from_fm_2-otfdata[] "PDF字符最终会存储到这里,前面的会是空 lines = git_lines_2 EXCEPTIONS err_max_linewidth = 1 err_format = 2 err_conv_not_possible = 3 OTHERS = 4. "转换二进制 CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_xstring_2 TABLES binary_tab = gs_lines_2. APPEND LINES OF gs_lines_2 TO gs_lines.(二)补充
如果不需要发送PDF邮件,则不需要输出下面这一段,在打印完结束即可
"执行打印功能后,进行的操作,如数据库之类的 CALL FUNCTION 'CONVERT_OTF' EXPORTING format = 'PDF' IMPORTING bin_file = lv_xstring TABLES otf = t_otf_from_fm-otfdata[] lines = git_lines EXCEPTIONS err_max_linewidth = 1 err_format = 2 err_conv_not_possible = 3 OTHERS = 4. "转换二进制 CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_xstring TABLES binary_tab = gs_lines.