1. 程式人生 > 其它 >abap輸出假離線中的圖片(List/Smartforms)到本地pdf

abap輸出假離線中的圖片(List/Smartforms)到本地pdf

第一種:list-processing的列印輸出,很老舊的列印了,但是還是有些系統會用

  1   DATA:g_val        TYPE c,
  2        w_pripar     TYPE pri_params,
  3        w_arcpar     TYPE arc_params,
  4        input_length TYPE i.
  5   DATA:spool_no    LIKE sy-spono,
  6        src_spoolid LIKE tsp01-rqident.
  7   DATA:name      TYPE tbtcjob-jobname,
8 jobnumber TYPE tbtcjob-jobcount, 9 wa_tbtcp TYPE tbtcp. 10 11 CALL FUNCTION 'GET_PRINT_PARAMETERS' 12 EXPORTING 13 in_archive_parameters = w_arcpar 14 in_parameters = w_pripar 15 layout = 'X_65_132' 16 line_count = 65
17 line_size = 132 18 no_dialog = 'X' 19 IMPORTING 20 out_archive_parameters = w_arcpar 21 out_parameters = w_pripar 22 valid = g_val. 23 IF g_val NE space AND sy-subrc = 0. 24 w_pripar-prrel = space.
25 w_pripar-primm = space. 26 NEW-PAGE PRINT ON NEW-SECTION PARAMETERS w_pripar ARCHIVE PARAMETERS w_arcpar NO DIALOG. 27 28 "Output which is gone to spool 29 SUBMIT ztestc01 30 WITH p_bukrs = wa_data-bukrs 31 WITH p_hbkid = wa_data-hbkid 32 WITH p_hktid = wa_data-hktid 33 WITH p_hkont = wa_data-hkont 34 WITH p_zdzqj = wa_data-zdzqj 35 TO SAP-SPOOL SPOOL PARAMETERS w_pripar ARCHIVE PARAMETERS w_arcpar WITHOUT SPOOL DYNPRO 36 AND RETURN. 37 38 NEW-PAGE PRINT OFF. 39 CALL FUNCTION 'ABAP4_COMMIT_WORK'. "提交假離線請求,sp01檢視 40 ENDIF.
41 *獲取假離線,會得到之前成功資料 42 *-- Find out what the spool number is that was just created 43 * DATA:lc_rq2name LIKE tsp01-rq2name. 44 * CONCATENATE sy-repid+0(9) '_' sy-uname+0(3) INTO lc_rq2name. 45 * SELECT * FROM tsp01 WHERE rq2name = lc_rq2name ORDER BY rqcretime DESCENDING. 46 * spool_no = tsp01-rqident. 47 * EXIT. 48 * ENDSELECT.

49 CLEAR spool_no. 50 IMPORT spool_no = spool_no FROM MEMORY ID 'ZFIE9170'. 51 FREE MEMORY ID 'ZFIE9170'. 52 IF spool_no IS INITIAL. 53 MESSAGE '假離線錯誤' TYPE 'E'. 54 ENDIF. 55 56 57 * 後臺job start-of-selection後程序拋後臺,message不報錯 58 * name = |{ sy-repid }{ sy-datum }{ sy-uzeit }|. 59 * CALL FUNCTION 'JOB_OPEN' 60 * EXPORTING 61 * jobname = name 62 * IMPORTING 63 * jobcount = jobnumber 64 * EXCEPTIONS 65 * cant_create_job = 1 66 * invalid_job_data = 2 67 * jobname_missing = 3 68 * OTHERS = 4. 69 * IF sy-subrc = 0. 70 * SUBMIT ztestc01 71 * WITH p_bukrs = wa_data-bukrs 72 * WITH p_hbkid = wa_data-hbkid 73 * WITH p_hktid = wa_data-hktid 74 * WITH p_hkont = wa_data-hkont 75 * WITH p_zdzqj = wa_data-zdzqj 76 * TO SAP-SPOOL SPOOL PARAMETERS w_pripar ARCHIVE PARAMETERS w_arcpar WITHOUT SPOOL DYNPRO 77 * VIA JOB name NUMBER jobnumber AND RETURN. 78 * 79 * CALL FUNCTION 'JOB_CLOSE' 80 * EXPORTING 81 * jobcount = jobnumber 82 * jobname = name 83 * strtimmed = 'X' 84 * EXCEPTIONS 85 * cant_start_immediate = 1 86 * invalid_startdate = 2 87 * jobname_missing = 3 88 * job_close_failed = 4 89 * job_nosteps = 5 90 * job_notex = 6 91 * lock_failed = 7 92 * OTHERS = 8. 93 * 94 * IF sy-subrc = 0. 95 * CLEAR wa_tbtcp. 96 * SELECT SINGLE * 97 * FROM tbtcp 98 * INTO wa_tbtcp 99 * WHERE jobcount = jobnumber. 100 * IF wa_tbtcp-listident IS NOT INITIAL. 101 * spool_no = wa_tbtcp-listident. 102 * ELSE. 103 * MESSAGE '假離線失敗' TYPE 'E'. 104 * ENDIF. 105 * ENDIF. 106 * ENDIF.

其中遇見問題:

1.如果我不用submit,而是直接在當前程式中write,程式中ztestc01的頁碼會缺失。

因為頁碼往往是列印完了後,最後替換上去的。比如

DATA:lv_page TYPE char10.
WRITE lv_page.
........
"程式執行完
lv_page = ’第一頁/共三頁' . MODIFY LINE ’1‘ OF PAGE ’1‘ FIELD VALUE lv_page FROM lv_page.

然而sumbit就很好的解決了這種問題,假離線中的內容是完整的。

2.submit ztestc01,sy-spono傳遞問題

ztestc01中,write輸出中,會生成假離線號存在sy-spono,而跳出submit後,怎麼取出spool number是個問題。

(1)可以從dbtab:tsp01中取,但是會有問題,不能準確取到當前spono.

(2)後臺job可以解決

(3)傳遞abap memory,最實用哈哈

第二種:smartforms輸出PDF

DATA:g_name         TYPErs38l_fnam.
control_parametersTYPEssfctrlop,
output_optionsTYPEssfcompop,
job_output_infoTYPEssfcrescl.
DATA:content_xTYPExstring,
it_pdfTYPETABLEOFtlineWITHHEADERLINE,
wa_pdfLIKELINEOFit_pdf,
file_tabTYPESTANDARDTABLEOFsolisti1,
bytecountTYPEi.


CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = 'ZTESTC01' IMPORTING fm_name = g_name EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. IF sy-subrc <> 0. * error handling MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. EXIT. ENDIF. *----------------------------------------------------------------------* control_parameters-no_dialog = 'X'. control_parameters-getotf = 'X'. control_parameters-langu = '1' . CALL FUNCTION g_name EXPORTING control_parameters = control_parameters output_options = output_options user_settings = '' is_head = ls_head * TABLES * it_itab = it_itab1 IMPORTING job_output_info = job_output_info EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 OTHERS = 5. IF sy-subrc <> 0. * error handling MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. REFRESH it_pdf . CALL FUNCTION 'CONVERT_OTF' EXPORTING format = 'PDF' IMPORTING * bin_file = lv_xstring "pdf xstring bin_filesize = bytecount TABLES otf = job_output_info-otfdata lines = it_pdf EXCEPTIONS err_max_linewidth = 1 err_format = 2 err_conv_not_possible = 3 OTHERS = 4. CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE' EXPORTING line_width_src = 134 line_width_dst = 255 TABLES content_in = it_pdf content_out = file_tab. "Save the file CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING bin_filesize = bytecount filename = file_path filetype = 'BIN' TABLES data_tab = file_tab.