我需要调用哪些功能模块才能从 ABAP 程序打印文件?

What Function Modules do I need to call to print a file from an APAB program?

我目前正在学习使用 ABAP 进行编程,并且在遇到困难时进行了练习。我或多或少可以使用它,但我很确定还有另一种更好的方法。

练习要求为:

到目前为止我得到的,或多或少有用的是:

*&---------------------------------------------------------------------*
*& 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。最后,我关闭了假脱机请求。

这允许文件按预期打印,但没有所有控制字符,并且它记得放入空行,因为它们在实际文本文件中。