smartforms打印横向纵向只要调用两个表单即可,一个横向的,一个纵向的
FORM frm_print USING p_ucomm TYPE sy-ucomm.
DATA:lv_formname TYPE rs38l_fnam,
lv_formname1 TYPE char30.
DATA:Lv_formname2 TYPE rs38l_fnam,
lv_formname3 TYPE char30.
DATA: ls_head TYPE ztmm025. "打印参数
DATA:gt_item TYPE TABLE OF ztmm025_item, "打印合同附件参数
gs_item TYPE ztmm025_item.
DATA : ls_control_param TYPE ssfctrlop,
ls_composer_param TYPE ssfcompop,
jobinfo TYPE ssfcrescl.
DATA: output_options TYPE ssfcompop.
DATA: control_parameters TYPE ssfctrlop.
DATA: job_output_options TYPE ssfcresop.
DATA:ls_outinfo TYPE ssfcrescl.
DATA:job_output_info TYPE ssfcrescl.
DATA lv_flag TYPE c.
DATA:ls_alv LIKE gs_alv,
lt_alv LIKE STANDARD TABLE OF gs_alv WITH HEADER LINE.
DATA:answer TYPE c .
output_options-tdimmed = 'X'.
output_options-tdnewid = 'X'.
output_options-tddelete = 'X'.
output_options-tdfinal = 'X'.
output_options-tdiexit = 'X'. "Exit after printing in print preview
output_options-tddest = 'PRT01'.
control_parameters-preview = 'X'.
control_parameters-no_open = 'X'.
control_parameters-no_close = 'X'.
* control_parameters-no_dialog = 'X'."直接预览 如果个人数据没有维护打印机及预览数据的话 仍旧会弹出窗口
control_parameters-device = 'PRINTER'.
CLEAR:lv_formname,lv_formname1,Lv_formname2,lv_formname3,ls_head,gt_item[],gs_item.
LOOP AT gt_alv INTO gs_alv WHERE box = 'X'.
MOVE-CORRESPONDING gs_alv TO ls_alv.
APPEND ls_alv TO lt_alv.
CLEAR:ls_alv,gs_alv.
ENDLOOP.
IF lt_alv[] IS NOT INITIAL .
IF p_ucomm = 'PRINT1'. "
lv_formname1 = 'ZMMR025A'.
ELSEIF p_ucomm = 'PRINT2'."
lv_formname1 = 'ZMMR025B'.
lv_formname3 = 'ZMMR025B1'.
ELSEIF p_ucomm = 'PRINT3'."
lv_formname1 = 'ZMMR025C'.
lv_formname3 = 'ZMMR025C1'.
ELSEIF p_ucomm = 'PRINT4'."上
lv_formname1 = 'ZMMR025D'.
lv_formname3 = 'ZMMR025D1'.
ENDIF.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
* user_settings = 'X'
output_options = output_options
control_parameters = control_parameters
IMPORTING
job_output_options = job_output_options
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.
ENDIF.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lv_formname1
IMPORTING
fm_name = lv_formname.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF lv_formname3 <> ''.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lv_formname3
IMPORTING
fm_name = lv_formname2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
SORT lt_alv BY ebeln.
DELETE ADJACENT DUPLICATES FROM lt_alv COMPARING ebeln.
LOOP AT lt_alv INTO ls_alv.
LOOP AT gt_alv INTO gs_alv WHERE ebeln = ls_alv-ebeln.
MOVE-CORRESPONDING gs_alv TO gs_item.
CONDENSE gs_item-menge NO-GAPS.
CONDENSE gs_item-netwr NO-GAPS.
CONDENSE gs_item-brtwr NO-GAPS.
APPEND gs_item TO gt_item.
CLEAR:gs_item.
ENDLOOP.
MOVE-CORRESPONDING ls_alv TO ls_head.
ls_head-zjexx = ls_alv-brtwr."金额小写
CONDENSE ls_head-menge NO-GAPS.
CONDENSE ls_head-netwr NO-GAPS.
CONDENSE ls_head-brtwr NO-GAPS.
"金额转换成大写
CALL FUNCTION 'ZJ_FI_BIGAMOUNT'
EXPORTING
i_amount = ls_head-zjexx
IMPORTING
e_bigamount = ls_head-zjedx.
CLEAR:ls_alv.
"------------------------------------------------->调用打印模板
IF p_ucomm = 'PRINT1'.
CALL FUNCTION lv_formname
EXPORTING
control_parameters = control_parameters
output_options = output_options
user_settings = space
gs_head = ls_head
TABLES
gt_item = gt_item
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.
ENDIF.
ELSE.
CALL FUNCTION lv_formname
EXPORTING
control_parameters = control_parameters
output_options = output_options
user_settings = space
gs_head = ls_head
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.
ENDIF.
CALL FUNCTION lv_formname2
EXPORTING
control_parameters = control_parameters
output_options = output_options
user_settings = space
gs_head = ls_head
TABLES
gt_item = gt_item
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.
ENDIF.
ENDIF.
CLEAR:ls_alv,gt_item[],ls_head.
ENDLOOP.
"<----------------------------------------------
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
job_output_info = ls_outinfo
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.
IF ls_outinfo-outputdone = 'X'."已打印
MESSAGE '已打印' TYPE 'S'.
ENDIF.
ELSE.
MESSAGE '请选中需要打印的数据' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ENDFORM.