我需要调用哪些功能模块才能从 ABAP 程序打印文件?
What Function Modules do I need to call to print a file from an APAB program?
我目前正在学习使用 ABAP 进行编程,并且在遇到困难时进行了练习。我或多或少可以使用它,但我很确定还有另一种更好的方法。
练习要求为:
- 从 selection 屏幕允许用户上传文件。
- 从 selection 屏幕允许用户 select 打印机。
- 当报告为运行时,上传文件的内容应发送到指定的打印机进行打印。
到目前为止我得到的,或多或少有用的是:
*&---------------------------------------------------------------------*
*& Report Z_SELECT_PRINT_JR *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT z_select_print_jr NO STANDARD PAGE HEADING .
DATA: filedata TYPE STANDARD TABLE OF char255,
fileline TYPE char255.
DATA: valid,
params TYPE pri_params.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_file TYPE char255.
PARAMETERS: p_prnt TYPE char30.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM display_file_selection.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prnt.
PERFORM display_printer_selection.
START-OF-SELECTION.
PERFORM load_file_data.
PERFORM send_to_printer.
*&--------------------------------------------------------------------*
*& Form display_file_selection
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM display_file_selection.
DATA: lv_return TYPE i,
lt_filetable TYPE STANDARD TABLE OF file_table,
ls_filetable TYPE file_table.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'SELECT FILE TO PRINT:'
default_extension = 'txt'
file_filter = 'Text Files (.txt)|*.txt|XML Files (.xml)|*.xml'
initial_directory = 'C:\demo'
multiselection = space
CHANGING
file_table = lt_filetable
rc = lv_return
EXCEPTIONS
OTHERS = 1.
IF lv_return NE 0.
READ TABLE lt_filetable INTO ls_filetable INDEX 1.
p_file = ls_filetable-filename.
ENDIF.
ENDFORM. "display_file_selection
*&--------------------------------------------------------------------*
*& Form display_printer_selection
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM display_printer_selection.
CALL FUNCTION 'GET_PRINT_PARAMETERS'
IMPORTING
out_parameters = params
valid = valid
EXCEPTIONS
archive_info_not_found = 1
invalid_print_params = 2
invalid_archive_params = 3
OTHERS = 4.
IF sy-subrc EQ 0.
p_prnt = params-pdest.
ENDIF.
ENDFORM. "display_printer_selection
*&--------------------------------------------------------------------*
*& Form load_file_data
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM load_file_data.
DATA: filename TYPE string,
fileleng TYPE i.
MOVE p_file TO filename.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = filename
IMPORTING
filelength = fileleng
CHANGING
data_tab = filedata.
ENDFORM. "load_file_data
*&--------------------------------------------------------------------*
*& Form send_to_printer
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM send_to_printer.
DATA: lv_line TYPE char255,
ndx TYPE i.
ndx = 1.
NEW-PAGE PRINT ON
PARAMETERS params
NO DIALOG.
DO.
READ TABLE filedata INTO lv_line INDEX ndx.
IF sy-subrc NE 0.
EXIT.
ENDIF.
WRITE: / lv_line.
ndx = ndx + 1.
ENDDO.
NEW-PAGE PRINT OFF.
ENDFORM. "send_to_printer
当我说这或多或少有效时,基本上我正在向打印机输出一个输出,但如果有空行分隔文本,那么这些在打印过程中不会被保留。我很确定有某种可用的功能模块,但是很难找到与 SAP 和 ABAP 相关的任何文档。有没有人有更好的方法来执行此操作?
与同事交谈后,他建议我使用以下功能模块:
RSPO_SR_OPEN
RSPO_SR_TABLE_WRITE
RSPO_SR_CLOSE
在这种情况下,我使用 SAP 的假脱机服务器打开假脱机请求,然后编写由 GUI_UPLOAD
函数填充的 table。最后,我关闭了假脱机请求。
这允许文件按预期打印,但没有所有控制字符,并且它记得放入空行,因为它们在实际文本文件中。
我目前正在学习使用 ABAP 进行编程,并且在遇到困难时进行了练习。我或多或少可以使用它,但我很确定还有另一种更好的方法。
练习要求为:
- 从 selection 屏幕允许用户上传文件。
- 从 selection 屏幕允许用户 select 打印机。
- 当报告为运行时,上传文件的内容应发送到指定的打印机进行打印。
到目前为止我得到的,或多或少有用的是:
*&---------------------------------------------------------------------*
*& Report Z_SELECT_PRINT_JR *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT z_select_print_jr NO STANDARD PAGE HEADING .
DATA: filedata TYPE STANDARD TABLE OF char255,
fileline TYPE char255.
DATA: valid,
params TYPE pri_params.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_file TYPE char255.
PARAMETERS: p_prnt TYPE char30.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM display_file_selection.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prnt.
PERFORM display_printer_selection.
START-OF-SELECTION.
PERFORM load_file_data.
PERFORM send_to_printer.
*&--------------------------------------------------------------------*
*& Form display_file_selection
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM display_file_selection.
DATA: lv_return TYPE i,
lt_filetable TYPE STANDARD TABLE OF file_table,
ls_filetable TYPE file_table.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'SELECT FILE TO PRINT:'
default_extension = 'txt'
file_filter = 'Text Files (.txt)|*.txt|XML Files (.xml)|*.xml'
initial_directory = 'C:\demo'
multiselection = space
CHANGING
file_table = lt_filetable
rc = lv_return
EXCEPTIONS
OTHERS = 1.
IF lv_return NE 0.
READ TABLE lt_filetable INTO ls_filetable INDEX 1.
p_file = ls_filetable-filename.
ENDIF.
ENDFORM. "display_file_selection
*&--------------------------------------------------------------------*
*& Form display_printer_selection
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM display_printer_selection.
CALL FUNCTION 'GET_PRINT_PARAMETERS'
IMPORTING
out_parameters = params
valid = valid
EXCEPTIONS
archive_info_not_found = 1
invalid_print_params = 2
invalid_archive_params = 3
OTHERS = 4.
IF sy-subrc EQ 0.
p_prnt = params-pdest.
ENDIF.
ENDFORM. "display_printer_selection
*&--------------------------------------------------------------------*
*& Form load_file_data
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM load_file_data.
DATA: filename TYPE string,
fileleng TYPE i.
MOVE p_file TO filename.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = filename
IMPORTING
filelength = fileleng
CHANGING
data_tab = filedata.
ENDFORM. "load_file_data
*&--------------------------------------------------------------------*
*& Form send_to_printer
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM send_to_printer.
DATA: lv_line TYPE char255,
ndx TYPE i.
ndx = 1.
NEW-PAGE PRINT ON
PARAMETERS params
NO DIALOG.
DO.
READ TABLE filedata INTO lv_line INDEX ndx.
IF sy-subrc NE 0.
EXIT.
ENDIF.
WRITE: / lv_line.
ndx = ndx + 1.
ENDDO.
NEW-PAGE PRINT OFF.
ENDFORM. "send_to_printer
当我说这或多或少有效时,基本上我正在向打印机输出一个输出,但如果有空行分隔文本,那么这些在打印过程中不会被保留。我很确定有某种可用的功能模块,但是很难找到与 SAP 和 ABAP 相关的任何文档。有没有人有更好的方法来执行此操作?
与同事交谈后,他建议我使用以下功能模块:
RSPO_SR_OPEN
RSPO_SR_TABLE_WRITE
RSPO_SR_CLOSE
在这种情况下,我使用 SAP 的假脱机服务器打开假脱机请求,然后编写由 GUI_UPLOAD
函数填充的 table。最后,我关闭了假脱机请求。
这允许文件按预期打印,但没有所有控制字符,并且它记得放入空行,因为它们在实际文本文件中。