Monday, October 25, 2010

Download Smartform Output in PDF


REPORT zsmart_form2.

DATA w_fm_name TYPE rs38l_fnam.
DATA itab TYPE TABLE OF ztest1.
DATA w_itab LIKE LINE OF itab.
DATA w_rad TYPE char3.
DATA: tab_otf_data TYPE ssfcrescl.
DATA: tab_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE.
DATA: bin_filesize TYPE i,
      file_size TYPE i.
DATA: pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.

DATA l_v_date LIKE sy-datum.

DATA: cparam TYPE ssfctrlop,
outop TYPE ssfcompop.


PARAMETERS p_workct LIKE crhd-arbpl.
SELECT-OPTIONS: so_date FOR sy-datum.

PARAMETERS: rad1 RADIOBUTTON GROUP radi,
            rad2 RADIOBUTTON GROUP radi,
            rad3 RADIOBUTTON GROUP radi.

REFRESH itab.

w_itab-name = 'name1'.
w_itab-age = '20'.
w_itab-mark1 = '123'.
w_itab-mark2 = '124'.
w_itab-mark3 = '125'.
APPEND w_itab TO itab.

w_itab-name = 'name2'.
w_itab-age = '21'.
w_itab-mark1 = '223'.
w_itab-mark2 = '224'.
w_itab-mark3 = '225'.
APPEND w_itab TO itab.

w_itab-name = 'name3'.
w_itab-age = '22'.
w_itab-mark1 = '323'.
w_itab-mark2 = '324'.
w_itab-mark3 = '325'.
APPEND w_itab TO itab.

**** to supress the dialog box for printer
outop-tddest = 'LP01'.
cparam-no_dialog = 'X'.
cparam-preview = space.
cparam-getotf = 'X'.


CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZFORM_SAMPLE1'
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
fm_name = w_fm_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.

CALL FUNCTION w_fm_name
EXPORTING
control_parameters = cparam
output_options = outop
user_settings = space

IMPORTING
* DOCUMENT_OUTPUT_INFO =
job_output_info = tab_otf_data
* JOB_OUTPUT_OPTIONS =
TABLES
itab1 = itab[]
 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.


*appending the otf data into the final table ****
tab_otf_final[] = tab_otf_data-otfdata[].


*converting OTF data into pdf data************
CALL FUNCTION 'CONVERT_OTF'
  EXPORTING
    format                = 'PDF'
    max_linewidth         = 132
  IMPORTING
    bin_filesize          = bin_filesize
  TABLES
    otf                   = tab_otf_final
    lines                 = 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.

*downloading the converted PDF data to your local PC*
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = bin_filesize
filename = 'D:\TEST.PDF'
filetype = 'BIN'
IMPORTING
filelength = file_size
TABLES
data_tab = 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.
.

Dialog Box Container Program

PROGRAM zdialog_box_cont.

CLASS lcl_event_receiver DEFINITION DEFERRED.

DATA: ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm,
g_max TYPE i VALUE 100,
gt_sflight TYPE TABLE OF sflight,
gt_sbook TYPE TABLE OF sbook,
g_repid LIKE sy-repid,
gs_layout TYPE lvc_s_layo,
cont_for_flights TYPE scrfname VALUE 'BCALV_GRID_02_100',
grid1 TYPE REF TO cl_gui_alv_grid,
custom_container TYPE REF TO cl_gui_custom_container,
grid2 TYPE REF TO cl_gui_alv_grid,
dialogbox_container TYPE REF TO cl_gui_dialogbox_container,
event_receiver TYPE REF TO lcl_event_receiver.

* Set initial dynpro
SET SCREEN 100.
* class definition
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
* method to close dialog box
METHODS handle_close
FOR EVENT close OF cl_gui_dialogbox_container
IMPORTING sender.
ENDCLASS. "lcl_event_receiver DEFINITION
* class implementation
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_close.
CALL METHOD sender->set_visible
EXPORTING
visible = space.
ENDMETHOD. "handle_close
ENDCLASS. "lcl_event_receiver IMPLEMENTATION

*&---------------------------------------------------------------------*
*& Module PBO_100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pbo_100 OUTPUT.
SET PF-STATUS 'MAIN100'.
SET TITLEBAR 'MAIN100'.
g_repid = sy-repid.
ENDMODULE. " PBO_100 OUTPUT
*&---------------------------------------------------------------------*
*& Module PAI_100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pai_100 INPUT.
DATA: dialogbox_status TYPE c. "'X': does exist, SPACE: does not ex.
save_ok = ok_code.
CASE save_ok.
WHEN 'EXIT'.
PERFORM exit_program.
WHEN 'DIALOG'.
IF dialogbox_status IS INITIAL.
dialogbox_status = 'X'.
PERFORM create_detail_list.
ELSE.
CALL METHOD dialogbox_container->set_visible
EXPORTING
visible = 'X'.
CALL METHOD grid2->refresh_table_display.
ENDIF.
ENDCASE.
CLEAR save_ok.
ENDMODULE. " PAI_100 INPUT

*&---------------------------------------------------------------------*
*& Form SELECT_TABLE_SBOOK
*&---------------------------------------------------------------------*
FORM select_table_sbook.
SELECT * FROM sbook INTO TABLE gt_sbook UP TO 10 ROWS.
ENDFORM. " SELECT_TABLE_SBOOK

*&---------------------------------------------------------------------*
*& Form create_detail_list
*&---------------------------------------------------------------------*
FORM create_detail_list.

PERFORM select_table_sbook.

* Object Creation for dialog box
CREATE OBJECT dialogbox_container
EXPORTING
top = 150
left = 150
lifetime = cntl_lifetime_dynpro
caption = 'Bookings'(200)
width = 800
height = 200.

* Object for ALV Grid
CREATE OBJECT grid2
EXPORTING
i_parent = dialogbox_container.

* Object For Event Handler
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_close FOR dialogbox_container.

* display data
gs_layout-grid_title = space.

CALL METHOD grid2->set_table_for_first_display
EXPORTING
i_structure_name = 'SBOOK'
is_layout = gs_layout
CHANGING
it_outtab = gt_sbook.

CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = grid2.

ENDFORM. " create_detail_list

Reference:
Standard Program : BCALV_GRID_02

Thursday, October 7, 2010

Dynamic Internal Table

REPORT zdynamic_table.
* To create Dynamic Internal Table
TYPE-POOLS: slis.
TABLES zctp_ch_spare.

DATA: BEGIN OF itab OCCURS 0,
      t_mctype LIKE zctp_ch_spare-t_mctype,
      END OF itab.

FIELD-SYMBOLS: <t_dyntable> TYPE STANDARD TABLE,
               <fs_dyntable>,
               <fs_fldval> TYPE ANY.

DATA:   t_newtable TYPE REF TO data,
        t_newline  TYPE REF TO data,
        t_fldcat   TYPE lvc_t_fcat,
        wa_it_fldcat TYPE lvc_s_fcat,
        wa_colno(2) TYPE n,
        wa_flname(12) TYPE c.

DATA:   wa_fieldcat TYPE slis_fieldcat_alv        ,
        it_fieldcat TYPE slis_t_fieldcat_alv      .

DATA: fieldname(20) TYPE c.
DATA: fieldvalue(10) TYPE c.
DATA: index(3) TYPE c.

START-OF-SELECTION.

  SELECT t_mctype FROM zctp_ch_spare INTO TABLE itab.

* Prepare fieldcatalog to create Dynamic table.
  LOOP AT itab.
    CLEAR wa_it_fldcat.
    wa_flname = itab-t_mctype.
    wa_it_fldcat-fieldname = wa_flname.
    wa_it_fldcat-datatype = 'CHAR'.
    wa_it_fldcat-intlen = 10.
    APPEND wa_it_fldcat TO t_fldcat.
  ENDLOOP.

  CLEAR wa_it_fldcat.
  wa_flname = 'ERFUSER'.
  wa_it_fldcat-fieldname = wa_flname.
  wa_it_fldcat-datatype = 'CHAR'.
  wa_it_fldcat-intlen = 20.
  APPEND wa_it_fldcat TO t_fldcat.

  CLEAR wa_it_fldcat.
  wa_flname = 'ERFDATE'.
  wa_it_fldcat-fieldname = wa_flname.
  wa_it_fldcat-datatype = 'DATS'.
  wa_it_fldcat-intlen = 10.
  APPEND wa_it_fldcat TO t_fldcat.

* Create dynamic internal table and assign to FS
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = t_fldcat
    IMPORTING
      ep_table        = t_newtable.

  ASSIGN t_newtable->* TO <t_dyntable>.

* Create dynamic work area and assign to FS
  CREATE DATA t_newline LIKE LINE OF <t_dyntable>.
  ASSIGN t_newline->* TO <fs_dyntable>.
* Append values for dynamically created fields
  LOOP AT itab.
    wa_flname = itab-t_mctype.
    fieldvalue = 'value'.

    ASSIGN COMPONENT  wa_flname
        OF STRUCTURE <fs_dyntable> TO <fs_fldval>.

    <fs_fldval> =  fieldvalue.
  ENDLOOP.

  wa_flname = 'ERFUSER'.
  fieldvalue = sy-uname.

  ASSIGN COMPONENT  wa_flname
      OF STRUCTURE <fs_dyntable> TO <fs_fldval>.

  <fs_fldval> =  fieldvalue.

  wa_flname = 'ERFDATE'.
  fieldvalue = sy-datum.

  ASSIGN COMPONENT  wa_flname
      OF STRUCTURE <fs_dyntable> TO <fs_fldval>.

  <fs_fldval> =  fieldvalue.
* Append to the dynamic internal table
  APPEND <fs_dyntable> TO <t_dyntable>.
*To display the Dynamic internal table Data in ALV
  LOOP AT itab.
    CLEAR wa_fieldcat.
    wa_flname = itab-t_mctype.
    wa_fieldcat-fieldname = wa_flname.
    wa_fieldcat-seltext_s = wa_flname.
    wa_fieldcat-outputlen = '10'.
    APPEND wa_fieldcat TO it_fieldcat.
  ENDLOOP.

  CLEAR wa_fieldcat.
  wa_flname = 'ERFUSER'.
  wa_fieldcat-fieldname = wa_flname.
  wa_fieldcat-seltext_s = 'CREATED BY'.
  wa_fieldcat-outputlen = '15'.
  APPEND wa_fieldcat TO it_fieldcat.

  CLEAR wa_fieldcat.
  wa_flname = 'ERFDATE'.
  wa_fieldcat-fieldname = wa_flname.
  wa_fieldcat-seltext_s = 'CREATED DATE'.
  wa_fieldcat-outputlen = '15'.
  APPEND wa_fieldcat TO it_fieldcat.
 
* Call ABAP List Viewer (ALV)
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_fieldcat = it_fieldcat
    TABLES
      t_outtab    = <t_dyntable>.

To create DYNAMIC ALV REPORT for Given Transparent table :
Dynamically create internal table for given transparent table.

REPORT  ZDYNAMIC_INTERNAL_TABLE                 .

TYPE-POOLS : abap.

field-symbols: <t_dyntable> type standard table,
               <fs_dyntable>,
               <fs_fldval> type any.

DATA: it_table TYPE REF TO data,
it_line TYPE REF TO data,
xfc TYPE lvc_s_fcat,
ifc TYPE lvc_t_fcat.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_table(30) TYPE c DEFAULT 'T001'.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

PERFORM get_structure.
PERFORM create_dynamic_itab.
PERFORM get_data.
PERFORM write_out.
*&---------------------------------------------------------------------*
*& Form get_structure
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_structure.

DATA : idetails TYPE abap_compdescr_tab,
xdetails TYPE abap_compdescr.

DATA : ref_table_des TYPE REF TO cl_abap_structdescr.
* Get the structure of the table.
ref_table_des ?= cl_abap_typedescr=>describe_by_name( p_table ).
idetails[] = ref_table_des->components[].

LOOP AT idetails INTO xdetails.
CLEAR xfc.
xfc-fieldname = xdetails-name .
xfc-datatype = xdetails-type_kind.
xfc-inttype = xdetails-type_kind.
xfc-intlen = xdetails-length.
xfc-decimals = xdetails-decimals.
APPEND xfc TO ifc.
ENDLOOP.
ENDFORM. "get_structure
*&---------------------------------------------------------------------*
*& Form create_dynamic_itab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM create_dynamic_itab.
* Create dynamic internal table and assign to FS
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = ifc
IMPORTING
ep_table = it_table.

ASSIGN it_table->* TO <t_dyntable>.
* Create dynamic work area and assign to FS
CREATE DATA it_line LIKE LINE OF <t_dyntable>.
ASSIGN it_line->* TO <fs_dyntable>.
ENDFORM. "create_dynamic_itab
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data.
* Select Data from table.
SELECT * INTO TABLE <t_dyntable> FROM (p_table).
ENDFORM. "get_data

*&---------------------------------------------------------------------*
*& Form write_out
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM write_out.
* Print data from table.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
 EXPORTING
    I_CALLBACK_PROGRAM                = sy-repid
    I_STRUCTURE_NAME                  = p_table
    I_DEFAULT                         = 'X'
    I_SAVE                            = 'A'
  TABLES
    t_outtab                          = <t_dyntable>
* EXCEPTIONS
*   PROGRAM_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. "write_out

Create Fieldcatalog Dynamically

Using SLIS:

type-pools: slis.

data: begin of itab,
        vbeln like vbak-vbeln,
        erdat like vbak-erdat,
        vkorg like vbak-vkorg,
        end of itab.

data gt_fieldcat type slis_t_fieldcat_alv.
data wa_fieldcat type slis_fieldcat_alv.
* to create Fieldcatalog for dynamically for table SFLIGHT

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
 EXPORTING
 I_PROGRAM_NAME              = sy-repid
 I_STRUCTURE_NAME          = 'SFLIGHT'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER       =
* I_BUFFER_ACTIVE              =

CHANGING
ct_fieldcat                              = gt_fieldcat[].
* to create fieldcatalog for fields declared in INTERNAL TABLE
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
 EXPORTING
 I_PROGRAM_NAME              = sy-repid     " Program Name
  I_INTERNAL_TABNAME     = 'ITAB'        " Internal Table Name
  I_INCLNAME                        = sy-repid     " Include Name Where the Int. Table is Declared
CHANGING
   ct_fieldcat                              = gt_fieldcat[].
Note:
When Creating Fieldcatalog Using Internal Table
  -> Maximum Line length in Report should not exceed 72.
 ->  In Internal Table the fieldnames referring DB Table fields Should be Declared Using LIKE.

Using OOABAP:

data: it_fieldcat type lvc_t_fcat,
       w_fieldcat type lvc_s_fcat.

* to create field catalog dynamically for table SFLIGHT
call function 'LVC_FIELDCATALOG_MERGE'
exporting
i_structure_name = 'SFLIGHT'
changing
ct_fieldcat = it_fieldcat[].

Sap Script Formatting options

Output Length
&symbol(length)&
Omitting the Leading Sign
&symbol(S)&
Leading Sign to the Left
&symbol(<)&
Leading Sign to the Right
&symbol(>)&
Omitting Leading Zeros
&symbol(Z)&
Space Compression
&symbol(C)&
Number of Decimal Places
&symbol(.N)&
Omitting the Separator for ‘Thousands’
&symbol(T)&
Specifying an Exponent for Floating Point Numbers
&symbol(EN)&

Right-Justified Output
&symbol(R)&
Fill Characters&symbol(Ff)&f = fill character
Example: &KNA1-UMSAT(F*)& -> **700.00

Suppressing Output of Initial Values
&symbol(I)&
Ignoring Conversion Routines
&symbol(K)&
Date Mask/: SET DATE MASK = 'date_mask'
Example: /: SET DATE MASK = 'MMMM DD, YYYY'
        &DATE& -> March 01, 1997



Time Mask/: SET TIME MASK = 'time_mask'
Example: /: SET TIME MASK = 'HH:MM'
       &TIME& -> 10:08



Reference:
http://help.sap.com/saphelp_47x200/helpdata/en/d1/803411454211d189710000e8322d00/content.htm

Friday, October 1, 2010

Footer in ALV Grid Display

To display Footer in ALV Grid you have to use HTML_End_of_List Parameter in ALV Grid Function Module.

i.e.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_CALLBACK_PROGRAM                    = sy-repid
     I_CALLBACK_TOP_OF_PAGE           = 'TOP_OF_PAGE'
     I_BACKGROUND_ID                              = 'ALV_BACKGROUND'
     i_callback_html_end_of_list                   = 'END_OF_LIST_HTML'
     IS_LAYOUT                                              = wa_layout
     IT_FIELDCAT                                           = it_fieldcat
     I_DEFAULT                                              = 'X'
     I_SAVE                                                     = 'A'
     IT_EVENTS                                              = it_event[]
     IS_PRINT                                                  = wa_print
   TABLES
      t_outtab                                                    = it_result
   EXCEPTIONS
     PROGRAM_ERROR                               = 1
     OTHERS                                                   = 2.



Write your Footer content in Subroutine using OOABAP.


FORM end_of_list_html USING end TYPE REF TO cl_dd_document.
  DATA: ls_text TYPE sdydo_text_element,
        l_grid     TYPE REF TO cl_gui_alv_grid,
        f(14) TYPE c VALUE 'SET_ROW_HEIGHT'.
   ls_text = 'Footer title'.
 * adds and icon (red triangle)
  CALL METHOD end->add_icon
    EXPORTING
      sap_icon = 'ICON_MESSAGE_ERROR_SMALL'.
 * adds test (via variable)
  CALL METHOD end->add_text
    EXPORTING
      text         = ls_text
      sap_emphasis = 'strong'.
 * adds new line (start new line)
  CALL METHOD end->new_line.
 * display text(bold)
  CALL METHOD end->add_text
    EXPORTING
      text         = 'Bold text'
      sap_emphasis = 'strong'.
 * adds new line (start new line)
  CALL METHOD end->new_line.
 * display text(normal)
  CALL METHOD end->add_text
    EXPORTING
      text         = 'Normal text'.
 * adds new line (start new line)
  CALL METHOD end->new_line.
 * display text(bold)
  CALL METHOD end->add_text
    EXPORTING
      text         = 'Yellow triangle'
      sap_emphasis = 'strong'.
 * adds and icon (yellow triangle)
  CALL METHOD end->add_icon
    EXPORTING
      sap_icon = 'ICON_LED_YELLOW'.
 * display text(normal)
  CALL METHOD end->add_text
    EXPORTING
      text         = 'More text'.
 *set height of this section
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = l_grid.
   CALL METHOD l_grid->parent->parent->(f)
    EXPORTING
      id     = 3
      height = 14.
 ENDFORM. "end_of_list_html.