Application Development and Automation 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: 
Read only

Smartform to PDF Conversion

sreeramkumar_madisetty
Active Contributor
0 Likes
896

have a Smartform : XXXXXX

Driver Program : YYYYYY.

My requirement is : To convert the Smartform output to PDF Form.

Here I didn't want to create a new program and I wish to use the Existing standard program and want to add my functionality in that only.

I have sample code:

TABLES: tsp01.

TYPES: BEGIN OF t_spool,

rqident TYPE tsp01-rqident,

END OF t_spool.

DATA: i_spool TYPE STANDARD TABLE OF t_spool,

wa_spool TYPE t_spool.

*

SELECT rqident FROM tsp01

INTO TABLE i_spool

WHERE rqowner = sy-uname.

*

SORT i_spool DESCENDING BY rqident.

*

LOOP AT i_spool INTO wa_spool.

ENDLOOP.

*

TYPES: l_ty_tab_pdf TYPE tline OCCURS 0.

*

DATA: l_pdf TYPE l_ty_tab_pdf,

l_spool TYPE tsp01-rqident.

*

Type for binary attachment table.

TYPES: l_ty_tab_objbin TYPE solisti1 OCCURS 0.

*

DATA: l_objbin TYPE l_ty_tab_objbin.

l_spool = wa_spool-rqident.

*

CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = l_spool

no_dialog = ' '

TABLES

pdf = l_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.

WRITE: / 'error', sy-subrc.

ENDIF.

*

***/ Convert the PDF format to the table type required for the attachment.

*

CALL FUNCTION 'QCE1_CONVERT'

TABLES

t_source_tab = l_pdf

t_target_tab = l_objbin

EXCEPTIONS

convert_not_possible = 1

OTHERS = 2.

IF sy-subrc 0.

WRITE: / 'error', sy-subrc.

ENDIF.

My concern is : Where I have to write this code.

Can you please tell me the eact place in the program I have to write this code.

Regards,

Sree

have a Smartform : XXXXXX

Driver Program : YYYYYY.

My requirement is : To convert the Smartform output to PDF Form.

Here I didn't want to create a new program and I wish to use the Existing standard program and want to add my functionality in that only.

I have sample code:

TABLES: tsp01.

TYPES: BEGIN OF t_spool,

rqident TYPE tsp01-rqident,

END OF t_spool.

DATA: i_spool TYPE STANDARD TABLE OF t_spool,

wa_spool TYPE t_spool.

*

SELECT rqident FROM tsp01

INTO TABLE i_spool

WHERE rqowner = sy-uname.

*

SORT i_spool DESCENDING BY rqident.

*

LOOP AT i_spool INTO wa_spool.

ENDLOOP.

*

TYPES: l_ty_tab_pdf TYPE tline OCCURS 0.

*

DATA: l_pdf TYPE l_ty_tab_pdf,

l_spool TYPE tsp01-rqident.

*

Type for binary attachment table.

TYPES: l_ty_tab_objbin TYPE solisti1 OCCURS 0.

*

DATA: l_objbin TYPE l_ty_tab_objbin.

l_spool = wa_spool-rqident.

*

CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = l_spool

no_dialog = ' '

TABLES

pdf = l_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.

WRITE: / 'error', sy-subrc.

ENDIF.

*

***/ Convert the PDF format to the table type required for the attachment.

*

CALL FUNCTION 'QCE1_CONVERT'

TABLES

t_source_tab = l_pdf

t_target_tab = l_objbin

EXCEPTIONS

convert_not_possible = 1

OTHERS = 2.

IF sy-subrc 0.

WRITE: / 'error', sy-subrc.

ENDIF.

My concern is : Where I have to write this code.

Can you please tell me the eact place in the program I have to write this code.

Regards,

Sree

6 REPLIES 6
Read only

Former Member
0 Likes
844

Hi,

Following is the code to convert the smartform output and send it to mail as attachment.

This is to send the PDF attachment email.

REPORT ZCS_SF_TEST1.

  • Internal Table declarations

DATA: i_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,

i_tline TYPE TABLE OF tline WITH HEADER LINE,

i_receivers TYPE TABLE OF somlreci1 WITH HEADER LINE,

i_record LIKE solisti1 OCCURS 0 WITH HEADER LINE,

  • Objects to send mail.

i_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,

i_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

  • Work Area declarations

w_objhead TYPE soli_tab,

w_ctrlop TYPE ssfctrlop,

w_compop TYPE ssfcompop,

w_return TYPE ssfcrescl,

w_doc_chng typE sodocchgi1,

w_data TYPE sodocchgi1,

w_buffer TYPE string,"To convert from 132 to 255

  • Variables declarations

v_form_name TYPE rs38l_fnam,

v_len_in LIKE sood-objlen,

v_len_out LIKE sood-objlen,

v_len_outn TYPE i,

v_lines_txt TYPE i,

v_lines_bin TYPE i.

call function 'SSF_FUNCTION_MODULE_NAME'

exporting

formname = 'ZCS_FORM6'

importing

fm_name = v_form_name

exceptions

no_form = 1

no_function_module = 2

others = 3.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

w_ctrlop-getotf = 'X'.

w_ctrlop-no_dialog = 'X'.

w_compop-tdnoprev = 'X'.

CALL FUNCTION v_form_name

EXPORTING

control_parameters = w_ctrlop

output_options = w_compop

user_settings = 'X'

IMPORTING

job_output_info = w_return

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.

i_otf[] = w_return-otfdata[].

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

IMPORTING

bin_filesize = v_len_in

TABLES

otf = i_otf

lines = i_tline

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 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.

  • Convert PDF from 132 to 255.

LOOP AT i_tline.

  • Replacing space by ~

TRANSLATE i_tline USING '~'.

CONCATENATE w_buffer i_tline INTO w_buffer.

ENDLOOP.

  • Replacing ~ by space

TRANSLATE w_buffer USING '~'.

DO.

i_record = w_buffer.

  • Appending 255 characters as a record

APPEND i_record.

SHIFT w_buffer LEFT BY 255 PLACES.

IF w_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

Refresh: i_reclist,

i_objtxt,

i_objbin,

i_objpack.

clear w_objhead.

  • Object with PDF.

i_objbin[] = i_record[].

DESCRIBE TABLE i_objbin LINES v_lines_bin.

  • Object with main text of the mail.

i_objtxt = 'Find attached the output of the smart form.'.

APPEND i_objtxt.

i_objtxt = 'Regards,'.

APPEND i_objtxt.

i_objtxt = 'Chandu Valluri'.

APPEND i_objtxt.

DESCRIBE TABLE i_objtxt LINES v_lines_txt.

  • Document information.

w_doc_chng-obj_name = 'Smartform'.

w_doc_chng-expiry_dat = sy-datum + 10.

w_doc_chng-obj_descr = 'Smart form output'.

w_doc_chng-sensitivty = 'F'. "Functional object

w_doc_chng-doc_size = v_lines_txt * 255.

  • Pack to main body as RAW.

  • Obj. to be transported not in binary form

CLEAR i_objpack-transf_bin.

  • Start line of object header in transport packet

i_objpack-head_start = 1.

  • Number of lines of an object header in object packet

i_objpack-head_num = 0.

  • Start line of object contents in an object packet

i_objpack-body_start = 1.

  • Number of lines of the object contents in an object packet

i_objpack-body_num = v_lines_txt.

  • Code for document class

i_objpack-doc_type = 'RAW'.

APPEND i_objpack.

  • Packing as PDF.

i_objpack-transf_bin = 'X'.

i_objpack-head_start = 1.

i_objpack-head_num = 1.

i_objpack-body_start = 1.

i_objpack-body_num = v_lines_bin.

i_objpack-doc_type = 'PDF'.

i_objpack-obj_name = 'Smartform'.

CONCATENATE 'Smartform_output' '.pdf'

INTO i_objpack-obj_descr.

i_objpack-doc_size = v_lines_bin * 255.

APPEND i_objpack.

  • Document information.

CLEAR i_reclist.

  • e-mail receivers.

i_reclist-receiver = sy-uname.

i_reclist-express = 'X'.

i_reclist-rec_type = 'B'. "SAP User

APPEND i_reclist.

  • Sending mail.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = w_doc_chng

put_in_outbox = 'X'

TABLES

packing_list = i_objpack

object_header = w_objhead

contents_bin = i_objbin

contents_txt = i_objtxt

receivers = i_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 = 0.

write:/ 'This is successful'.

*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

If u want to pnly the PDF,then use DOWNLOAD/WS_DOWNLOAD/GUI_DOWNLOAD function

modules instead of 'SO_NEW_DOCUMENT_ATT_SEND_API1'

Reward points,if it is useful.

Thanks,

chandu.

Read only

Former Member
0 Likes
844

Hi,

How to convert smartform output into pdf?

There is a way to download smartform in PDF format.

Please do the following:

1. Print the smartform to the spool.

2. Note the spool number.

3. Download a PDF file (Acrobat Reader) version of the spool by running Program RSTXPDFT4 and entering the

noted spool number.

or use this program:

&----


*& Report ZPDF_DNLD_TEST2 *

*& *

&----


*& DEVK904540 *

*& *

&----


REPORT ZPDF_DNLD_TEST2 .

data: i_otf LIKE itcoo OCCURS 100 WITH HEADER LINE,

i_pdf LIKE tline OCCURS 100 WITH HEADER LINE.

data: op_option type SSFCTRLOP,

job_output type SSFCRESCL.

op_option-getotf = 'X'.

CALL FUNCTION '/1BCDWB/SF00000005'

EXPORTING

ARCHIVE_INDEX =

ARCHIVE_INDEX_TAB =

ARCHIVE_PARAMETERS =

CONTROL_PARAMETERS = op_option

MAIL_APPL_OBJ =

MAIL_RECIPIENT =

MAIL_SENDER =

OUTPUT_OPTIONS =

USER_SETTINGS = 'X'

itab1 = itab1

IMPORTING

DOCUMENT_OUTPUT_INFO =

JOB_OUTPUT_INFO = job_output

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 'CONVERT_OTF'

EXPORTING

FORMAT = 'PDF'

MAX_LINEWIDTH = 132

ARCHIVE_INDEX = ' '

COPYNUMBER = 0

ASCII_BIDI_VIS2LOG = ' '

PDF_DELETE_OTFTAB = ' '

IMPORTING

BIN_FILESIZE =

BIN_FILE =

TABLES

otf = job_output-otfdata

lines = i_pdf

EXCEPTIONS

ERR_MAX_LINEWIDTH = 1

ERR_FORMAT = 2

ERR_CONV_NOT_POSSIBLE = 3

ERR_BAD_OTF = 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 'GUI_DOWNLOAD'

EXPORTING

BIN_FILESIZE =

filename = 'c:\test_pdf_sf.pdf'

FILETYPE = 'BIN'

tables

data_tab = i_pdf

FIELDNAMES =

EXCEPTIONS

FILE_WRITE_ERROR = 1

NO_BATCH = 2

GUI_REFUSE_FILETRANSFER = 3

INVALID_TYPE = 4

NO_AUTHORITY = 5

UNKNOWN_ERROR = 6

HEADER_NOT_ALLOWED = 7

SEPARATOR_NOT_ALLOWED = 8

FILESIZE_NOT_ALLOWED = 9

HEADER_TOO_LONG = 10

DP_ERROR_CREATE = 11

DP_ERROR_SEND = 12

DP_ERROR_WRITE = 13

UNKNOWN_DP_ERROR = 14

ACCESS_DENIED = 15

DP_OUT_OF_MEMORY = 16

DISK_FULL = 17

DP_TIMEOUT = 18

FILE_NOT_FOUND = 19

DATAPROVIDER_EXCEPTION = 20

CONTROL_FLUSH_ERROR = 21

OTHERS = 22

.

IF sy-subrc 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

Regards,

Priya.

Read only

Former Member
0 Likes
844

Sree ram,

1. To change the standard program you need first 'access key'.

2. If you have After you colect all the data into final internal table

use your code.

Read only

dhruv_shah3
Active Contributor
0 Likes
844

Hi,,



REPORT  YMSL_ORDER_ACCEPTANCE.

*********Variable Declarations *****************************
DATA: GV_FORM_NAME TYPE RS38L_FNAM, " Used to store the function module generated by Smartform
      GV_BIN_FILESIZE TYPE I, " Store the file size
      GV_POS TYPE I,
      GV_LEN TYPE I,
      GV_TAB_LINES TYPE I,
      gv_desc_lines type i.

********Constants *******************************************
DATA : GC_TEXT(11) TYPE C VALUE 'Form Output',
       GC_TST(3) TYPE C VALUE 'TST',
       GC_TESTING(20) TYPE C VALUE 'Order Acceptance'.
*********Work Area Declarations *****************************
DATA: GS_DOCDATA TYPE SODOCCHGI1, " Data of an object which can be changed
      GS_CTRLOP TYPE SSFCTRLOP, " Smart Forms: Control structure
      GS_OUTOPT TYPE SSFCOMPOP, " SAP Smart Forms: Smart Composer (transfer) options
      GS_OTFDATA TYPE SSFCRESCL, " Smart Forms: Return value at end of form printing
      GS_RECLIST TYPE SOMLRECI1, " SAPoffice: Structure of the API Recipient List
      GS_PDF_TAB TYPE TLINE, " Workarea for SAP Script Text Lines
      GS_OBJBIN TYPE SOLISTI1, " SAPoffice: Single List with Column Length 255
      GS_OBJPACK TYPE SOPCKLSTI1. " SAPoffice: Description of Imported Object Components
DATA : w_doc_chng typE sodocchgi1.
*********Internal tables Declarations *****************************
DATA : I_OBJTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
DATA: GT_RECLIST TYPE TABLE OF SOMLRECI1, " SAPoffice: Structure of the API Recipient List
      GT_PDF_TAB TYPE TABLE OF TLINE, " SAPscript: Text Lines
      GT_OTF TYPE TABLE OF ITCOO, " OTF Structure
      GT_OBJBIN TYPE TABLE OF SOLISTI1, " SAPoffice: Single List with Column Length 255
      GT_OBJPACK TYPE TABLE OF SOPCKLSTI1. " SAPoffice: Description of Imported Object Components


******
DATA : BEGIN OF IT_ADR6 OCCURS 0,
          SMTP_ADDR TYPE ADR6-SMTP_ADDR,
        END OF IT_ADR6.
DATA : W_FILE_NAME TYPE STRING,
      W_FILE_PATH TYPE STRING,
      W_FULL_PATH TYPE STRING.



CLEAR : GV_FORM_NAME,
        GS_CTRLOP,
        GS_OUTOPT,
        GS_OTFDATA,
        GV_BIN_FILESIZE,
        GV_POS,
        GV_LEN,
        GV_TAB_LINES.

SELECTION-SCREEN:  BEGIN OF SCREEN 1001 AS WINDOW  TITLE scr_ttl .

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TXT_B1 NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(15) TX_VBELN.
PARAMETER : P_VBELN TYPE VBAK-VBELN .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.

*SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TXT_B2 .
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: R_OUT RADIOBUTTON GROUP R1 DEFAULT 'X' USER-COMMAND RAD11 .
SELECTION-SCREEN COMMENT 5(20) TXT_OUT.  "  roles by t-code
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETER R_PDF RADIOBUTTON GROUP R1 .
SELECTION-SCREEN COMMENT 5(20) TXT_PDF.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETER R_MAIL RADIOBUTTON GROUP R1 .
SELECTION-SCREEN COMMENT 5(15) TXT_MAIL.
*SELECTION-SCREEN END OF LINE.
*SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 20(7) TXT_MAL1.
PARAMETER : P_MAIL TYPE ADR6-SMTP_ADDR MODIF ID M1.
SELECTION-SCREEN END OF LINE.

*SELECTION-SCREEN END OF BLOCK B2.

SELECTION-SCREEN: END OF SCREEN 1001 .

CALL SELECTION-SCREEN 1001 STARTING AT 20 5 ENDING AT 105 10.

*SET PF-STATUS 'STATUS'.

INITIALIZATION.

  TX_VBELN = 'Order'.
  TXT_B1 = 'Selection Criteria '.
*  TXT_B2 = 'Output Criteria '.
  scr_ttl = 'Order Acceptance'.
  TXT_OUT = 'Print Output'.
  TXT_PDF = 'Save To PDF'.
  TXT_MAIL = 'Mail the Output'.
  TXT_MAL1 = 'E-mail'.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF R_MAIL <> 'X'.
      IF SCREEN-GROUP1 = 'M1'.
*        SCREEN-INVISIBLE =  1.
        SCREEN-INPUT = 0. " Disable for input.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
  ENDLOOP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MAIL.
  PERFORM TABLE_HELP.

START-OF-SELECTION..

  IF P_VBELN IS NOT INITIAL.
    PERFORM GET_SF.
    IF R_PDF = 'X' .
      PERFORM CONVERT_OTF.
      PERFORM SAVE_DIALOG.
      PERFORM DOWNLOAD.
    ELSEIF R_MAIL = 'X'.
      IF P_MAIL IS NOT INITIAL.
       PERFORM CONVERT_OTF.
       PERFORM SEND_MAIL.
      ELSE.
        MESSAGE 'Please Enter Email Address' TYPE 'S'.
*         CALL TRANSACTION 'YMSL20'.
*         LEAVE LIST-PROCESSING.
      ENDIF.
    ENDIF.
  ELSE.
    MESSAGE 'Please Enter Order No' TYPE 'S'.
*      CALL TRANSACTION 'YMSL20'.
*      LEAVE LIST-PROCESSING.

ENDIF.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  TABLE_HELP
*&---------------------------------------------------------------------*
FORM TABLE_HELP .
  IF R_MAIL = 'X'.
    SELECT SMTP_ADDR FROM ADR6 INTO TABLE IT_ADR6.

    SORT IT_ADR6.
    DELETE ADJACENT DUPLICATES FROM IT_ADR6 COMPARING ALL FIELDS.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
*     DDIC_STRUCTURE         = ' '
        RETFIELD               = 'IT_ADR6-SMTP_ADDR'
*     PVALKEY                = ' '
       DYNPPROG               = SY-REPID
       DYNPNR                 = SY-DYNNR
       DYNPROFIELD            = 'EMAIL'
*     STEPL                  = 0
       WINDOW_TITLE           = 'SELECT MAIL ADDRESS'
*     VALUE                  = ' '
       VALUE_ORG              = 'S'
*     MULTIPLE_CHOICE        = ' '
*     DISPLAY                = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM          = ' '
*     MARK_TAB               =
*   IMPORTING
*     USER_RESET             =
      TABLES
        VALUE_TAB              = IT_ADR6
*     FIELD_TAB              =
*     RETURN_TAB             =
*     DYNPFLD_MAPPING        =
*   EXCEPTIONS
*     PARAMETER_ERROR        = 1
*     NO_VALUES_FOUND        = 2
*     OTHERS                 = 3
              .
    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.
ENDFORM.                    " TABLE_HELP
*&---------------------------------------------------------------------*
*&      Form  GET_SF
*&---------------------------------------------------------------------*
FORM GET_SF .
*• Generate Function Module name
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = 'YMSL_ORD_ACCEPT'
    IMPORTING
      FM_NAME            = GV_FORM_NAME
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.
  IF SY-SUBRC  <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*• Assigning values to Form Control Structure and Form Composer
  IF R_OUT <> 'X'.
    GS_CTRLOP-GETOTF = 'X'.
    GS_CTRLOP-NO_DIALOG = 'X'.
    GS_OUTOPT-TDNOPREV = 'X'.
  ENDIF.

  CALL FUNCTION GV_FORM_NAME
    EXPORTING
*   ARCHIVE_INDEX              =
*   ARCHIVE_INDEX_TAB          =
*   ARCHIVE_PARAMETERS         =
      CONTROL_PARAMETERS         = GS_CTRLOP
*   MAIL_APPL_OBJ              =
*   MAIL_RECIPIENT             =
*   MAIL_SENDER                =
      OUTPUT_OPTIONS             = GS_OUTOPT
      USER_SETTINGS              = 'X'
      TEMP_VBELN                 =  P_VBELN
   IMPORTING
*   DOCUMENT_OUTPUT_INFO       =
      JOB_OUTPUT_INFO            = GS_OTFDATA
*   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.

ENDFORM.                    " GET_SF
*&---------------------------------------------------------------------*
*&      Form  CONVERT_OTF
*&---------------------------------------------------------------------*
FORM CONVERT_OTF .
*• Assigning the OTFDATA to OTF Structure table
  CLEAR GT_OTF.
  GT_OTF[] = GS_OTFDATA-OTFDATA[].
*• Convert the OTF DATA to SAP Script Text lines
  CLEAR GT_PDF_TAB.

  CALL FUNCTION 'CONVERT_OTF'
   EXPORTING
     FORMAT                      = 'PDF'
     MAX_LINEWIDTH               = 132
*   ARCHIVE_INDEX               = ' '
*   COPYNUMBER                  = 0
*   ASCII_BIDI_VIS2LOG          = ' '
*   PDF_DELETE_OTFTAB           = ' '
   IMPORTING
     BIN_FILESIZE                = GV_BIN_FILESIZE
*   BIN_FILE                    =
    TABLES
      OTF                         = GT_OTF
      LINES                       = GT_PDF_TAB
   EXCEPTIONS
     ERR_MAX_LINEWIDTH           = 1
     ERR_FORMAT                  = 2
     ERR_CONV_NOT_POSSIBLE       = 3
     ERR_BAD_OTF                 = 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.
*
*t_otf[] = t_otf_from_fm-otfdata[].
*
** Function Module CONVERT_OTF is used to convert the OTF format to PDF
*
*CALL FUNCTION 'CONVERT_OTF'
*EXPORTING
*FORMAT = 'PDF'
*MAX_LINEWIDTH = 132
** ARCHIVE_INDEX = ' '
** COPYNUMBER = 0
** ASCII_BIDI_VIS2LOG = ' '
** PDF_DELETE_OTFTAB = ' '
*IMPORTING
*BIN_FILESIZE = W_bin_filesize
** BIN_FILE =
*TABLES
*otf = T_OTF
*lines = T_pdf_tab
*EXCEPTIONS
*ERR_MAX_LINEWIDTH = 1
*ERR_FORMAT = 2
*ERR_CONV_NOT_POSSIBLE = 3
*ERR_BAD_OTF = 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.


ENDFORM.                    " CONVERT_OTF
*&---------------------------------------------------------------------*
*&      Form  SAVE_DIALOG
*&---------------------------------------------------------------------*
FORM SAVE_DIALOG .
* To display File SAVE dialog window
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
   EXPORTING
   WINDOW_TITLE = 'Download to PDF '
* DEFAULT_EXTENSION = '(*.PDF)'
   DEFAULT_FILE_NAME = 'file.pdf'
   FILE_FILTER = 'PDF Format(*.PDF)'
   INITIAL_DIRECTORY = 'C:Documents and SettingsAdministratorDesktop'
* WITH_ENCODING =
   PROMPT_ON_OVERWRITE = 'X'
  CHANGING
  FILENAME = W_FILE_NAME
  PATH = W_FILE_PATH
  FULLPATH = W_FULL_PATH
* USER_ACTION =
* FILE_ENCODING =
  EXCEPTIONS
  CNTL_ERROR = 1
  ERROR_NO_GUI = 2
  NOT_SUPPORTED_BY_GUI = 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.


ENDFORM.                    " SAVE_DIALOG
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD
*&---------------------------------------------------------------------*
FORM DOWNLOAD .
* Use the FM GUI_DOWNLOAD to download the generated PDF file onto the
* presentation server

  CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
  BIN_FILESIZE = GV_BIN_FILESIZE
  FILENAME = W_FULL_PATH
  FILETYPE = 'BIN'
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* IMPORTING
* FILELENGTH =
  TABLES
  DATA_TAB = GT_PDF_TAB
* FIELDNAMES =
* EXCEPTIONS
* FILE_WRITE_ERROR = 1
* NO_BATCH = 2
* GUI_REFUSE_FILETRANSFER = 3
* INVALID_TYPE = 4
* NO_AUTHORITY = 5
* UNKNOWN_ERROR = 6
* HEADER_NOT_ALLOWED = 7
* SEPARATOR_NOT_ALLOWED = 8
* FILESIZE_NOT_ALLOWED = 9
* HEADER_TOO_LONG = 10
* DP_ERROR_CREATE = 11
* DP_ERROR_SEND = 12
* DP_ERROR_WRITE = 13
* UNKNOWN_DP_ERROR = 14
* ACCESS_DENIED = 15
* DP_OUT_OF_MEMORY = 16
* DISK_FULL = 17
* DP_TIMEOUT = 18
* FILE_NOT_FOUND = 19
* DATAPROVIDER_EXCEPTION = 20
* CONTROL_FLUSH_ERROR = 21
* OTHERS = 22
  .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " DOWNLOAD
*&---------------------------------------------------------------------*
*&      Form  SEND_MAIL
*&---------------------------------------------------------------------*

FORM SEND_MAIL .
***changes by rajan
DATA : v_first TYPE USER_ADDR-NAME_FIRST,
      V_LAST   TYPE USER_ADDR-NAME_LAST.
DATA : detail TYPE STRING.
SELECT SINGLE NAME_FIRST NAME_LAST FROM
  USER_ADDR INTO (V_FIRST,V_LAST)
  WHERE BNAME = syst-UNAME.

  CONCATENATE v_first V_LAST INTO detail SEPARATED BY space.
**• Assigning the Description of the object sent in the mail
*  CLEAR GS_DOCDATA.
*  GS_DOCDATA-OBJ_NAME = GC_TST.
*  GS_DOCDATA-OBJ_DESCR = GC_TESTING.

*• Assigning the email id to Structure of the API Recipient List table
  CLEAR : GT_RECLIST, GS_RECLIST.
  GS_RECLIST-RECEIVER =  P_MAIL.       " 
  GS_RECLIST-REC_TYPE = 'U'.
  APPEND GS_RECLIST TO GT_RECLIST.

  I_OBJTXT = 'Find attached output of the Order Acceptance.'.
  APPEND I_OBJTXT.
  I_OBJTXT = 'Regards,'.
  APPEND I_OBJTXT.
  I_OBJTXT = detail.
  APPEND I_OBJTXT.
  DESCRIBE TABLE i_objtxt LINES gv_desc_lines.
*DESCRIBE TABLE i_objtxt LINES v_lines_txt.
  CLEAR I_OBJTXT.
  READ TABLE I_OBJTXT INDEX gv_desc_lines.
  if sy-subrc = 0.
* Document information.

GS_DOCDATA-obj_name = 'ord_accept'.
GS_DOCDATA-expiry_dat = sy-datum + 10.
GS_DOCDATA-obj_descr = 'Order Acceptance'.
GS_DOCDATA-sensitivty = 'F'. "Functional object
GS_DOCDATA-doc_size = gv_desc_lines * 255.
CLEAR Gs_OBJPACK-transf_bin.
* Start line of object header in transport packet

*    GS_OBJPACK-TRANSF_BIN = 'X'.
    GS_OBJPACK-doc_size = gv_desc_lines * 255.
    GS_OBJPACK-HEAD_START = 1.
    GS_OBJPACK-HEAD_NUM = 0.
    GS_OBJPACK-BODY_START = 1.
    GS_OBJPACK-BODY_NUM = gv_desc_lines.
    GS_OBJPACK-DOC_TYPE = 'RAW'.
*    GS_OBJPACK-OBJ_NAME = 'ORDER_ACCEPTANCE'.
*    GS_OBJPACK-OBJ_DESCR = 'ORDER_ACCEPTANCE.PDF'.
    APPEND GS_OBJPACK TO GT_OBJPACK.

*  GS_OBJPACK-HEAD_START = 1.
*    GS_OBJPACK-HEAD_NUM = 0.
*    GS_OBJPACK-BODY_START = 1.
*  GS_OBJPACK-doc_type = 'RAW'.
*APPEND GS_OBJPACK TO GT_OBJPACK.

  ENDIF.
*• Passing the SAP Script text lines to SAPoffice: Single List with Column Length 255 table
  CLEAR : GS_OBJBIN, GS_PDF_TAB.

  LOOP AT GT_PDF_TAB INTO GS_PDF_TAB.
    GV_POS = 255 - GV_LEN.
    IF GV_POS > 134. "length of pdf_table
      GV_POS = 134.
    ENDIF.
    GS_OBJBIN+GV_LEN = GS_PDF_TAB(GV_POS).
    GV_LEN = GV_LEN + GV_POS.
    IF GV_LEN = 255. "length of out (contents_bin)
      APPEND GS_OBJBIN TO GT_OBJBIN.
      CLEAR: GS_OBJBIN, GV_LEN.
      IF GV_POS < 134.
        GS_OBJBIN = GS_PDF_TAB+GV_POS.
        GV_LEN = 134 - GV_POS.
      ENDIF.
    ENDIF.
  ENDLOOP.
  IF GV_LEN > 0.
    APPEND GS_OBJBIN TO GT_OBJBIN.
  ENDIF.
*• Filling the details in SAPoffice: Description of Imported Object Components table
  DESCRIBE TABLE GT_OBJBIN LINES GV_TAB_LINES.

  CLEAR GS_OBJBIN.
  READ TABLE GT_OBJBIN INTO GS_OBJBIN INDEX GV_TAB_LINES.
    IF SY-SUBRC = 0.
    GS_OBJPACK-DOC_SIZE = ( GV_TAB_LINES - 1 ) * 255 + STRLEN( GS_OBJBIN ).
    GS_OBJPACK-TRANSF_BIN = 'X'.
    GS_OBJPACK-HEAD_START = 1.
    GS_OBJPACK-HEAD_NUM = 0.
    GS_OBJPACK-BODY_START = 1.
    GS_OBJPACK-BODY_NUM = GV_TAB_LINES.
    GS_OBJPACK-DOC_TYPE = 'PDF'.
    GS_OBJPACK-OBJ_NAME = 'ORDER_ACCEPTANCE'.
    GS_OBJPACK-OBJ_DESCR = 'Order Acceptance'.
    APPEND GS_OBJPACK TO GT_OBJPACK.
  ENDIF.
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      DOCUMENT_DATA                    = GS_DOCDATA
     PUT_IN_OUTBOX                    = 'X'
     COMMIT_WORK                      = 'X'
* IMPORTING
*   SENT_TO_ALL                      =
*   NEW_OBJECT_ID                    =
    TABLES
      PACKING_LIST                     = GT_OBJPACK
*   OBJECT_HEADER                    =  I_OBJTXT
     CONTENTS_BIN                     = GT_OBJBIN
     CONTENTS_TXT                     = I_OBJTXT
*   CONTENTS_HEX                     =
*   OBJECT_PARA                      =
*   OBJECT_PARB                      =
      RECEIVERS                        = GT_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 <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
*    WRITE 'Sent Successfully'.
    MESSAGE 'Sent Successfully' TYPE 'I'.
*      CALL TRANSACTION 'YMSL20'.
*      LEAVE LIST-PROCESSING.

  ENDIF.

  SUBMIT RSCONN01
  WITH MODE EQ 'INT'
  AND RETURN.
ENDFORM.                    " SEND_MAIL


*Messages
*----------------------------------------------------------
*
* Message class: Hard coded
*   Please Enter Email Address


--------------------------------------------------------------------------------

HTH

Regards,

Dhruv Shah

Read only

mahaboob_pathan
Contributor
0 Likes
844

hi,

check this code.

This is the program to convert smartform output into pdf . Inputs to the prog are Purchase order number.It is for a specific requirement. Convert it to suit ur requirement.

&----


*& Report : ZPDF_FORMAT

*& Description : Conversion of Purchase Order into PDF format

*& used in the workflow (Do Not Change or Delete).

&----


REPORT zpdf .

&----


*& Tables used

&----


TABLES: nast, tsp01, t024, spop, lfa1, tnapr.

&----


*& Data declaration

&----


DATA: spoolno LIKE tsp01-rqident.

DATA: rcode LIKE sy-subrc.

*data: doc_auth like zoutput-ztag.

DATA: cancel.

DATA: pdf LIKE tline OCCURS 0 WITH HEADER LINE.

DATA: numbytes TYPE i,

pdfspoolid LIKE tsp01-rqident,

jobname LIKE tbtcjob-jobname,

jobcount LIKE tbtcjob-jobcount,

is_otf.

DATA: client LIKE tst01-dclient,

name LIKE tst01-dname,

objtype LIKE rststype-type,

type LIKE rststype-type.

DATA: dir_loc(3).

DATA: t_docno LIKE vbak-vbeln..

DATA: spoolreq1 LIKE tsp01sys.

DATA: spoolreq LIKE rsporq OCCURS 0 WITH HEADER LINE.

DATA: t_frgke LIKE ekko-frgke.

DATA: okcode(10),

flag,

t_ekgrp LIKE ekko-ekgrp,

t_lifnr LIKE ekko-lifnr,

s_mail.

Data Declartion for mailing system - Start.

DATA: objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE.

DATA: objhead LIKE solisti1 OCCURS 0 WITH HEADER LINE.

DATA: objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE.

DATA: objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE.

DATA: reclist1 LIKE somlreci1 OCCURS 500 WITH HEADER LINE.

DATA: reclist LIKE somlreci1 OCCURS 500 WITH HEADER LINE.

DATA: itab LIKE somlreci1 OCCURS 50 WITH HEADER LINE."RKU 220802

DATA: doc_chng LIKE sodocchgi1.

DATA: BEGIN OF bdcdata OCCURS 0.

INCLUDE STRUCTURE bdcdata.

DATA: END OF bdcdata.

DATA: tab_lines LIKE sy-tabix.

DATA: verkf LIKE ekko-verkf.

DATA: bemail(250), vemail(250).

&----


Data acceptance

&----


SELECTION-SCREEN BEGIN OF BLOCK blk0_input WITH FRAME .

PARAMETERS: docno LIKE ekko-ebeln OBLIGATORY LOWER CASE.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN END OF BLOCK blk0_input.

&----


Initialisation

&----


*initialization.

&----


Screen Parameters Validation

&----


*at selection-screen.

AT SELECTION-SCREEN.

SELECT SINGLE frgke INTO t_frgke FROM ekko

WHERE ebeln = docno

AND frgke = 'R'.

IF sy-subrc 0.

MESSAGE 'DOCUMENT NOT RELEASED' TYPE 'E'.

ENDIF.

&----


Execution Part

&----


START-OF-SELECTION.

For PO related operation

Dislay Buyer Group, Name and Email id

SELECT SINGLE

ekgrp

lifnr

verkf

INTO (t_ekgrp, t_lifnr, verkf)

FROM ekko

WHERE ekko~mandt = sy-mandt

AND ebeln = docno.

IF sy-subrc = 0.

SELECT SINGLE * FROM lfa1

WHERE lfa1~mandt = sy-mandt

AND lifnr = t_lifnr.

ENDIF.

Get message status from NAST or assign msg status NAST stru

Pass the message status and get spool data

PERFORM check_output_create_spool.

IF rcode NE 0.

IF rcode = 9.

message s185 with text-e04.

ELSE.

message s185 with text-e01.

ENDIF.

EXIT.

ENDIF.

find the spool

PERFORM find_spool_request_id.

IF sy-subrc 0.

message s185 with text-003.

EXIT.

ENDIF.

READ TABLE spoolreq

WITH KEY rq0name = nast-dsnam

rq1name = 'LP01'

rqclient = '800'

rq2name = sy-uname

rqowner = sy-uname.

IF sy-subrc 0.

CASE sy-subrc.

WHEN 1.

message s185 with text-e03.

WHEN OTHERS.

message s185 with text-e02.

ENDCASE.

EXIT.

ENDIF.

spoolno = spoolreq-rqident.

Convert SPOOL job to PDF

PERFORM convert_spool_to_pdf.

Send through mail

PERFORM assign_data_4_mail.

PERFORM send_mail_with_attachment.

Delete created spool request

spoolreq1-rqident = spoolno.

PERFORM delete_spool_job.

&----


*& Form check_output_create_spool

&----


text

-


--> p1 text

<-- p2 text

-


FORM check_output_create_spool.

SELECT SINGLE * FROM nast WHERE objky = docno

AND kappl = 'EF'

AND kschl = 'NEU'

AND aktiv = space

AND nacha = '1'.

IF sy-subrc EQ 0.

COUNT = COUNT + 1.

PERFORM mssage_status_field_value.

nast-vsztp = '4'.

PERFORM einzelnachricht_dialog(rsnast00) USING rcode.

ELSE.

CLEAR nast-uhrvr.

CLEAR nast-cmfpnr.

CLEAR nast-datvr.

PERFORM mssage_status_field_value.

nast-vsztp = '4'.

PERFORM einzelnachricht_dialog(rsnast00) USING rcode.

else.

rcode = 9.

ENDIF.

ENDFORM. " check_output_create_spool

&----


*& Form mssage_status_field_value

&----


text

-


--> p1 text

<-- p2 text

-


FORM mssage_status_field_value .

nast-mandt = '800'.

nast-kappl = 'EF'.

nast-kschl = 'NEU'.

nast-objky = docno.

nast-ldest = 'LP01'.

nast-anzal = 1.

nast-dimme = 'X'.

nast-delet = 'X'.

nast-nacha = '1'.

nast-vsztp = '2'.

nast-spras = 'E'.

nast-vstat = '0'.

nast-manue = 'X'.

nast-erdat = sy-datum.

nast-eruhr = sy-uzeit.

nast-usnam = sy-uname.

nast-tdreceiver = sy-uname.

concatenate sy-uzeit+2(4) 'PDF' into nast-dsnam.

ENDFORM. " mssage_status_field_value

&----


*& Form find_spool_request_id

&----


text

-


--> p1 text

<-- p2 text

-


FORM find_spool_request_id.

CALL FUNCTION 'RSPO_FIND_SPOOL_REQUESTS'

EXPORTING

allclients = '800'

authority = ' '

datatype = '*'

has_output_requests = '*'

rq0name = nast-dsnam "'*'

rq1name = '*'

rq2name = '*'

rqdest = 'LP01'

rqident = 0

rqowner = sy-uname

TABLES

spoolrequests = spoolreq

EXCEPTIONS

no_permission = 1

OTHERS = 2.

ENDFORM. " find_spool_request_id

&----


*& Form convert_spool_to_pdf

&----


text

-


--> p1 text

<-- p2 text

-


FORM convert_spool_to_pdf.

SELECT SINGLE * FROM tsp01 WHERE rqident = spoolno.

IF sy-subrc <> 0.

WRITE: / 'Spool order does not exist'

COLOR COL_NEGATIVE.

EXIT.

ENDIF.

client = tsp01-rqclient.

name = tsp01-rqo1name.

CALL FUNCTION 'RSTS_GET_ATTRIBUTES'

EXPORTING

authority = 'SP01'

client = client

name = name

part = 1

IMPORTING

type = type

objtype = objtype

EXCEPTIONS

fb_error = 1

fb_rsts_other = 2

no_object = 3

no_permission = 4.

IF objtype(3) = 'OTF'.

is_otf = 'X'.

ELSE.

is_otf = space.

ENDIF.

IF is_otf = 'X'.

CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = spoolno

no_dialog = ' '

IMPORTING

pdf_bytecount = numbytes

pdf_spoolid = pdfspoolid

btc_jobname = jobname

btc_jobcount = jobcount

TABLES

pdf = pdf

EXCEPTIONS

err_no_otf_spooljob = 1

err_no_spooljob = 2

err_no_permission = 3

err_conv_not_possible = 4

err_bad_dstdevice = 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.

if sy-subrc 0.

case sy-subrc.

when 1.

write: / text-001 color col_positive.

when 2.

write: / text-002 color col_negative.

exit.

when 3.

write: / text-003 color col_negative.

exit.

when 4.

write: / text-004 color col_negative.

exit.

when others.

write: / text-005 color col_negative.

exit.

endcase.

endif.

ELSE.

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = spoolno

no_dialog = ' '

DST_DEVICE =

PDF_DESTINATION =

IMPORTING

pdf_bytecount = numbytes

pdf_spoolid = pdfspoolid

LIST_PAGECOUNT =

btc_jobname = jobname

btc_jobcount = 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.

case sy-subrc.

when 0.

*write: / 'Funktion CONVERT_ABAPSPOOLJOB_2_PDF erfolgreich

*(successful)'.

color col_positive.

when 1.

write: / text-001 color col_positive.

when 2.

write: / text-002 color col_negative.

exit.

when 3.

write: / text-003 color col_negative.

exit.

when 4.

write: / text-004 color col_negative.

exit.

when others.

write: / text-005 color col_negative.

exit.

endcase.

ENDIF.

ENDFORM. " convert_spool_to_pdf

&----


*& Form delete_spool_job

&----


text

-


--> p1 text

<-- p2 text

-


FORM delete_spool_job .

CALL FUNCTION 'RSPO_IDELETE_SPOOLREQ'

EXPORTING

spoolreq = spoolreq1

IMPORTING

RC =

STATUS =

EXCEPTIONS

error = 1

OTHERS = 2

.

IF sy-subrc 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " delete_spool_job

*

&----


*& Form ASSIGN_DATA_4_MAIL

&----


text

-


--> p1 text

<-- p2 text

-


FORM assign_data_4_mail .

Text content of the mail

move 'Purchase order: ' to objtxt.

append objtxt.

move verkf to objtxt.

append objtxt.

move lfa1-name1 to objtxt.

append objtxt.

concatenate lfa1-ort01 lfa1-pstlz

into objtxt separated by space.

append objtxt.

clear: objtxt.

append objtxt.

append objtxt.

*

CLEAR objtxt.

CONCATENATE 'Purchase Order - ' docno

' has been released.'

INTO objtxt SEPARATED BY space.

APPEND objtxt.

clear: objtxt.

append objtxt.

append objtxt.

*

MOVE ' ' TO objtxt.

APPEND objtxt.

clear: objtxt.

append objtxt.

append objtxt.

concatenate 'Note:- This is an automatic mail sender.'

' Please do not reply to this mail ID.'

into objtxt.

append objtxt.

concatenate

' Any query, please send the mail to the respective buyer'''

's mail id.' into objtxt.

append objtxt.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

input = docno

IMPORTING

output = docno.

TLINE format will be coverted as 255 char foramt

CALL FUNCTION 'QCE1_CONVERT'

TABLES

t_source_tab = pdf

t_target_tab = objbin

EXCEPTIONS

convert_not_possible = 1

OTHERS = 2.

DESCRIBE TABLE objtxt LINES tab_lines.

creation of the entry for the compressed document

CLEAR objpack.

objpack-transf_bin = ''.

objpack-head_start = 1.

objpack-head_num = 0.

objpack-body_start = 1.

objpack-body_num = tab_lines.

objpack-doc_type = 'RAW'.

objpack-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).

APPEND objpack.

creation of the entry for the Attachemnt

DESCRIBE TABLE objbin LINES tab_lines.

objpack-transf_bin = 'X'.

objpack-head_start = 1.

objpack-head_num = 1.

objpack-body_start = 1.

objpack-body_num = tab_lines.

objpack-doc_type = 'PDF'.

CONCATENATE docno '.PDF' INTO objpack-obj_name.

objpack-obj_descr = objpack-obj_name.

objpack-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objbin ).

APPEND objpack.

For Object Header

CONCATENATE docno '.PDF' INTO objhead.

APPEND objhead.

doc_chng-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objbin ).

CONCATENATE 'Purchase Order - ' docno ' has been released'

INTO doc_chng-obj_descr.

doc_chng-obj_prio = 1.

recipient Details

CLEAR reclist1.

CLEAR reclist.

REFRESH reclist1.

REFRESH reclist.

SELECT SINGLE * FROM t024

WHERE t024~mandt = sy-mandt

AND ekgrp = t_ekgrp.

reclist1-receiver = t024-smtp_addr.

reclist1-rec_type = 'U'.

reclist1-com_type = 'INT'.

reclist1-receiver = '[email protected]'.

modify table reclist transporting rec_type receiver COM_TYPE .

where rec_type is initial.

APPEND reclist1 TO reclist.

ENDFORM. " ASSIGN_DATA_4_MAIL

&----


*& Form send_mail_with_attachment

&----


text

-


--> p1 text

<-- p2 text

-


FORM send_mail_with_attachment.

sending the document

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = doc_chng

put_in_outbox = 'X'

commit_work = 'X'

TABLES

packing_list = objpack

object_header = objhead

contents_bin = objbin

contents_txt = objtxt

receivers = reclist

EXCEPTIONS

too_many_receivers = 1

document_not_sent = 2

operation_no_authorization = 4

OTHERS = 99.

CASE sy-subrc.

WHEN 0.

PERFORM flush_mail.

message 'Mail sent successfully' type 'I'.

when 1.

message 'No authorization for sending to the specified number'

*type 'E'.

when 2.

message 'Document could not be sent to any recipient' type 'E'.

when 4.

message 'No send authorization' type 'E'.

when others.

message 'Error occurred while sending' type 'E'.

ENDCASE.

ENDFORM. " send_mail_with_attachment

-


Start new screen *

-


FORM bdc_dynpro USING program dynpro.

CLEAR bdcdata.

bdcdata-program = program.

bdcdata-dynpro = dynpro.

bdcdata-dynbegin = 'X'.

APPEND bdcdata.

ENDFORM. "bdc_dynpro

-


Insert field *

-


FORM bdc_field USING fnam fval.

CLEAR bdcdata.

bdcdata-fnam = fnam.

bdcdata-fval = fval.

APPEND bdcdata.

ENDFORM. "bdc_field

&----


*& Form AUTOMATE

&----


text

-


--> p1 text

<-- p2 text

-


FORM flush_mail .

PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=PDIA'.

PERFORM bdc_dynpro USING 'SAPLSPO4' '0300'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=FURT'.

PERFORM bdc_field USING 'BDC_CURSOR'

'SVALD-VALUE(01)'.

PERFORM bdc_field USING 'SVALD-VALUE(01)'

'int'.

PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=BACK'.

PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=BACK'.

CALL TRANSACTION 'SCOT' USING bdcdata

MODE 'N'

UPDATE 'S'.

ENDFORM. " AUTOMATE

Read only

Former Member
0 Likes
844

Hi,

Here is a function module which can be used to convert a smartform to pdf and send it as an attachment through e-mail or fax.

CALL FUNCTION WFMC_PREPARE_SMART_FORM

EXPORTING

pi_nast = nast

pi_addr_key = IS_ADDR_KEY

IMPORTING

pe_returncode = cf_retcode

pe_itcpo = LS_ITCPO

pe_device = LS_DEVICE

pe_recipient = CS_RECIPIENT

pe_sender = CS_SENDER

Here the address is obtained from KNA1 table, for the selected customer in warranty transaction.

For the address number passed, this function module will return the recipient and sender details which can be passed to the MAIL_RECIPIENT and MAIL_SENDER of the smart form function module.

Here the corresponding parameters has to be set for the corresponding fields.