Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

How to Send Internal table to SAP Spool using Function Modules or Methods?

Former Member
0 Kudos

Hi Experts,

How to Send Internal table to SAP Spool using Function Modules or Methods?

Thanks ,

Kiran

1 ACCEPTED SOLUTION

Former Member
0 Kudos

I don't know a FM or class that will do that, but have you tried creating a report and submitting it from you program?

You could export your internal table to memory and then call a SUBMIT ... TO SAP-SPOOL ... AND RETURN on your new report. Inside it you do a IMPORT from memory to get your internal table and then you print the contents of it using WRITE.

Check function SLVC_TABLE_PS_TO_SPOOL to see if it works for you, or maybe the code inside it.

Regards,

Sergio

6 REPLIES 6

Former Member
0 Kudos

I don't know a FM or class that will do that, but have you tried creating a report and submitting it from you program?

You could export your internal table to memory and then call a SUBMIT ... TO SAP-SPOOL ... AND RETURN on your new report. Inside it you do a IMPORT from memory to get your internal table and then you print the contents of it using WRITE.

Check function SLVC_TABLE_PS_TO_SPOOL to see if it works for you, or maybe the code inside it.

Regards,

Sergio

former_member194669
Active Contributor
0 Kudos

Please function modules under function group SPOX

venkat_o
Active Contributor
0 Kudos

Hi Kiran, Try this way.

REPORT ztest_program.
DATA: BEGIN OF it_t001 OCCURS 0,
        bukrs TYPE t001-bukrs,
        butxt TYPE t001-butxt,
        ort01 TYPE t001-ort01,
        land1 TYPE t001-land1,
      END OF it_t001.
DATA: it_data TYPE TABLE OF lvc_s_1022,
      wa_data LIKE LINE OF it_data.
DATA:spoolid TYPE rspoid.
DATA:file_length TYPE  int4.

START-OF-SELECTION.
  SELECT * FROM t001 INTO CORRESPONDING FIELDS OF TABLE it_t001.
  LOOP AT it_t001.
    CONCATENATE it_t001-bukrs
                it_t001-butxt 
                it_t001-ort01
                it_t001-land1
              INTO wa_data SEPARATED BY space.
    APPEND wa_data TO it_data.
    CLEAR  wa_data.
  ENDLOOP.
  DESCRIBE TABLE it_data.
  file_length = sy-tfill * 1022.
  CALL FUNCTION 'SLVC_TABLE_PS_TO_SPOOL'
    EXPORTING
      i_file_length = file_length
    IMPORTING
      e_spoolid     = spoolid
    TABLES
      it_textdata   = it_data.
  IF sy-subrc EQ 0.
    WRITE spoolid.
  ENDIF.
Thanks Venkat.O

Former Member
0 Kudos

Hi Kiran,

have a look to this link,

may u got some idea.

regards,

Archana

0 Kudos

This is my code.

I still get the no ABAP list data for the spool, even tho I can see it sp01?

REPORT  Z_MAIL_PAYSLIP.
*----------------------------------------------------------------------*
* Declaration Part *
*----------------------------------------------------------------------*
tables: PERNR, PV000, T549Q, V_T514D, HRPY_RGDIR.

infotypes: 0000, 0001, 0105, 0655.

data: begin of ITAB occurs 0,
  MTEXT(25) type C,
  PERNR like PA0001-PERNR,
  ABKRS like PA0001-ABKRS,
  ENAME like PA0001-ENAME,
  USRID_LONG like PA0105-USRID_LONG,
end of ITAB.

data: W_BEGDA like HRPY_RGDIR-FPBEG,
      W_ENDDA like HRPY_RGDIR-FPEND.

data: RETURN like BAPIRETURN1 occurs 0 with header line.

data: P_INFO like PC407,
      P_FORM like PC408 occurs 0 with header line.


data: P_IDX type I,
      MY_MONTH type T549Q-PABRP,
      STR_MY_MONTH(2) type C,
      MY_YEAR type T549Q-PABRJ,
      STR_MY_YEAR(4) type C,
      CRLF(2) type x value '0D0A'.

data: W_CMONTH(10) type C.

data: TAB_LINES type I,
      ATT_TYPE like SOODK-OBJTP.

data: begin of P_INDEX occurs 0,
        INDEX type I,
end of P_INDEX.

constants: begin of F__LTYPE, "type of line
   CMD like PC408-LTYPE value '/:',  "command
   TXT like PC408-LTYPE value 's',   "textline
end of F__LTYPE.

constants: begin of F__CMD, "commands
  NEWPAGE like PC408-LINDA value '',
end of F__CMD.

data: P_LIST like ABAPLIST occurs 1 with header line.

*data: OBJBIN like SOLISTI1 occurs 10 with header line,
data: OBJBIN like  LVC_S_1022 occurs 10 with header line,
      DOCDATA like SODOCCHGI1,
      OBJTXT like SOLISTI1 occurs 10 with header line,
      OBJPACK like SOPCKLSTI1 occurs 1 with header line,
      RECLIST like SOMLRECI1 occurs 1 with header line,
      OBJHEAD like SOLISTI1 occurs 1 with header line,
      it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,
      gd_buffer type string,
      l_no_of_bytes TYPE i,
      l_pdf_spoolid LIKE tsp01-rqident,
      l_jobname     LIKE tbtcjob-jobname.

data: file_length  type int4,
      spool_id     type rspoid,
      line_cnt     type i.

*-------------------------------------------------------------------* * INITIALIZATION *
OBJBIN = ' | '.
append OBJBIN.

OBJPACK-HEAD_START = 1.

data: S_ABKRS like PV000-ABKRS.
data: S_PABRP like T549Q-PABRP.
data: S_PABRJ like T549Q-PABRJ.
*-------------------------------------------------------------------*
* SELECTION SCREEN                                                  *
*-------------------------------------------------------------------*
selection-screen begin of block BL1.
parameters: PAY_VAR like BAPI7004-PAYSLIP_VARIANT default 'ESS_PAYSLIPS' obligatory.
selection-screen end of block BL1.


START-OF-SELECTION.

  s_ABKRS = PNPXABKR.
  S_PABRP = PNPPABRP.
  s_pabrj = PNPPABRJ.

  w_begda = PN-BEGDA.
  w_endda = PN-ENDDA.

get pernr.
*                                 "Check active employees
  rp-provide-from-last p0000 space pn-begda  pn-endda.

  CHECK P0000-STAT2 IN PNPSTAT2.
*                                 "Check Payslip Mail flag
  rp-provide-from-last p0655 space pn-begda  pn-endda.

  CHECK P0655-ESSONLY = 'X'.

  rp-provide-from-last p0001 space pn-begda  pn-endda.

*                                 "Find email address
  RP-PROVIDE-FROM-LAST P0105 '0030' PN-BEGDA PN-ENDDA.

  if p0105-usrid_LONG ne ''.

    ITAB-PERNR      = P0001-PERNR.
    ITAB-ABKRS      = P0001-ABKRS.
    ITAB-ENAME      = P0001-ENAME.
    ITAB-USRID_LONG = P0105-USRID_LONG.

    append itab.
    clear itab.

  endif.



  "SY-UCOMM ='ONLI'

END-OF-SELECTION.
*------------------------------------------------------------------* start-of-selection.
  write : / 'Payroll Area        : ', S_ABKRS.
  write : / 'Payroll Period/Year : ',STR_MY_MONTH,'-',STR_MY_YEAR. write : / 'System Date : ', SY-DATUM.
  write : / 'System Time         : ', SY-UZEIT.
  write : / 'User Name           : ', SY-UNAME.
  write : / SY-ULINE.

  sort ITAB by PERNR.

  loop at ITAB.
    clear : P_INFO, P_FORM, P_INDEX, P_LIST, OBJBIN, DOCDATA, OBJTXT, OBJPACK, RECLIST, TAB_LINES.

    refresh : P_FORM, P_INDEX, P_LIST, OBJBIN, OBJTXT, OBJPACK, RECLIST.

*                                                  Retrieve Payroll results sequence number for this run
    select single * from HRPY_RGDIR where PERNR eq ITAB-PERNR
                                    and FPBEG ge W_BEGDA
                                    and FPEND le W_ENDDA
                                    and SRTZA eq 'A'.
*                                                  Produce payslip for those payroll results
    if SY-SUBRC = 0.
      call function 'GET_PAYSLIP'
        EXPORTING
          EMPLOYEE_NUMBER = ITAB-PERNR
          SEQUENCE_NUMBER = HRPY_RGDIR-SEQNR
          PAYSLIP_VARIANT = PAY_VAR
        IMPORTING
          RETURN          = RETURN
          P_INFO          = P_INFO
        TABLES
          P_FORM          = P_FORM.

      check RETURN is initial.

*                                                 remove linetype from generated payslip
      loop at p_form.
        objbin = p_form-linda.
        append objbin.
        line_cnt = line_cnt + 1.
      endloop.

      file_length = line_cnt * 1022.

*                                                 create spool file of paylsip
      CALL FUNCTION 'SLVC_TABLE_PS_TO_SPOOL'
        EXPORTING
          i_file_length = file_length
        IMPORTING
          e_spoolid     = spool_id
        TABLES
          it_textdata   = objbin.

      IF sy-subrc EQ 0.
        WRITE spool_id.
      ENDIF.

      DESCRIBE table objbin.

      DATA PDF LIKE TLINE OCCURS 100 WITH HEADER LINE.

      CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
        EXPORTING
          SRC_SPOOLID                    = spool_id
          NO_DIALOG                      = ' '
          DST_DEVICE                     = 'MAIL'
*      PDF_DESTINATION                =
*    IMPORTING
*      PDF_BYTECOUNT                  = l_no_of_bytes
*      PDF_SPOOLID                    = l_pdf_spoolid
*      LIST_PAGECOUNT                 =
*      BTC_JOBNAME                    =
*      BTC_JOBCOUNT                   =
        TABLES
          PDF                            = pdf
        EXCEPTIONS
          ERR_NO_ABAP_SPOOLJOB           = 1
          ERR_NO_SPOOLJOB                = 2
          ERR_NO_PERMISSION              = 3
          ERR_CONV_NOT_POSSIBLE          = 4
          ERR_BAD_DESTDEVICE             = 5
          USER_CANCELLED                 = 6
          ERR_SPOOLERROR                 = 7
          ERR_TEMSEERROR                 = 8
          ERR_BTCJOB_OPEN_FAILED         = 9
          ERR_BTCJOB_SUBMIT_FAILED       = 10
          ERR_BTCJOB_CLOSE_FAILED        = 11
          OTHERS                         = 12
             .
      IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.

*Download PDF file C Drive
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename = 'C:\itab_to_pdf.pdf'
      filetype = 'BIN'
    TABLES
      data_tab = pdf.
* Transfer the 132-long strings to 255-long strings
*  LOOP AT pdf.
*    TRANSLATE pdf USING ' ~'.
*    CONCATENATE gd_buffer pdf INTO gd_buffer.
*  ENDLOOP.
*
*  TRANSLATE gd_buffer USING '~ '.
*
*  DO.
*    it_mess_att = gd_buffer.
*    APPEND it_mess_att.
*    SHIFT gd_buffer LEFT BY 255 PLACES.
*    IF gd_buffer IS INITIAL.
*      EXIT.
*    ENDIF.
*  ENDDO.

      OBJHEAD = 'Objhead'.
      append OBJHEAD.

* preparing email subject
      concatenate W_ENDDA(6)
                ' Payslip-'
                ITAB-ENAME+0(28)
                '('
                ITAB-PERNR+4(4) ')'
             into DOCDATA-OBJ_DESCR.

      DOCDATA-OBJ_NAME = 'Pay Slip'.
      DOCDATA-OBJ_LANGU = SY-LANGU.
      OBJTXT = 'Pay Slip.'.
      append OBJTXT.

*prepare email lines
      OBJTXT = DOCDATA-OBJ_DESCR.
      append OBJTXT.

      OBJTXT = 'Please find enclosed your current payslip.'.
      append OBJTXT.

* Write Attachment(Main)
* 3 has been fixed because OBJTXT has fix three lines
      read table OBJTXT index 3.
*    DOCDATA-DOC_SIZE = ( 3 - 1 ) * 255 + strlen( OBJTXT ).
      clear OBJPACK-TRANSF_BIN.
      OBJPACK-HEAD_START = 1.
      OBJPACK-HEAD_NUM = 0.
      OBJPACK-BODY_START = 1.
      OBJPACK-BODY_NUM = 3.
      OBJPACK-DOC_TYPE = 'RAW'.
      append OBJPACK.

* Create Message Attachment
      ATT_TYPE = 'PDF'.
      describe table OBJBIN lines TAB_LINES.
      read table OBJBIN index TAB_LINES.
*    OBJPACK-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + strlen( OBJBIN ).
      OBJPACK-TRANSF_BIN = 'X'.
      OBJPACK-HEAD_START = 1.
      OBJPACK-HEAD_NUM = 0.
      OBJPACK-BODY_START = 1.
      OBJPACK-BODY_NUM = TAB_LINES.
      OBJPACK-DOC_TYPE = ATT_TYPE.
      OBJPACK-OBJ_NAME = 'ATTACHMENT'.
      OBJPACK-OBJ_DESCR = 'Payslip'.
      append OBJPACK.

* Create receiver list refresh RECLIST.
      clear RECLIST.
      RECLIST-RECEIVER = itab-USRID_long.
      translate RECLIST-RECEIVER to lower case.
      RECLIST-REC_TYPE = 'U'.
      append RECLIST.

* Send the document
*SO_NEW_DOCUMENT_ATT_SEND_API1
      call function 'SO_DOCUMENT_SEND_API1'
        exporting
          DOCUMENT_DATA = DOCDATA
          PUT_IN_OUTBOX = 'X'
          COMMIT_WORK = 'X'
* IMPORTING
*   SENT_TO_ALL =
*   NEW_OBJECT_ID =
        tables
          PACKING_LIST  = OBJPACK
          OBJECT_HEADER = OBJHEAD
          CONTENTS_BIN  = pdf
          CONTENTS_TXT  = OBJTXT
*   CONTENTS_HEX =
*   OBJECT_PARA =
*   OBJECT_PARB =
          RECEIVERS = RECLIST
        exceptions
          TOO_MANY_RECEIVERS = 1
          DOCUMENT_NOT_SENT = 2
          DOCUMENT_TYPE_NOT_EXIST = 3
          OPERATION_NO_AUTHORIZATION = 4
          PARAMETER_ERROR = 5
          X_ERROR = 6
          ENQUEUE_ERROR = 7
          others = 8.

      if SY-SUBRC NE 0.
        ITAB-MTEXT = 'Message Not Sent to : '.
      else.
        ITAB-MTEXT = 'Message Sent to : '.
      endif.
*    else.
*
*      ITAB-MTEXT = 'Message Not Sent to : '.
*    endif.
    else.
      "SY-SUBRC Not = 0
      ITAB-MTEXT = 'Payroll data not found : '.
    endif.
    "end of SY-SUBRC = 0.

    modify ITAB.
  endloop. "end loop at ITAB

  sort ITAB by MTEXT PERNR.
  loop at ITAB.
    at new MTEXT.
      uline.
      write : / ITAB-MTEXT color 4 intensified on.
      write : / 'Emp. Code' color 2 intensified on,
             12 'Emp. Name' color 2 intensified on,
             54 'Email ID' color 2 intensified on.
    endat.
    write : / ITAB-PERNR, 12 ITAB-ENAME, 54 ITAB-USRID_LONG.
  endloop.

0 Kudos

Please Please Stop Posting more than 2500 Char

Check this =>

Faisal