I recently created my own BDC upload template that enables user to choose the processing mode, the update mode and options for Default Size, Continue After Commit, and Not a Batch Input Session easily.
Another good thing with this program is a functionality to generate an excel file template. The image below shows the actual screenshot.

I modified the SAP standard program BDCRECX1 and saved it as ZBDCRECX1. I used this for my BDC upload program instead of the standard BDCRECX1 include. You may download the source code of ZBDCRECX1 on the link below. I also included a sample upload program utilizing the ZBDCRECX1 include.
zbdc_template.zip
Enjoy coding!
This tutorial will teach you how to export an ALV report to Microsoft Excel file. This is intended for abap programmers who already have a knowledge in ALV reporting as I will not show here how to create an ALV.
Assuming you already have an ABAP program with ALV report, what you need to do is add a button or menu that will trigger the function that will export the ALV data to Excel file. but before that let’s start first with the declaration of types and variables that we’re going to use.
TYPE-POOLS ole2. " we will use OLE objects
DATA: v_excel TYPE ole2_object, " Excel object
v_wrkbkl TYPE ole2_object, " list of workbooks
v_wrkbk TYPE ole2_object, " workbook
v_cell TYPE ole2_object, " cell
v_font TYPE ole2_object, " font
v_row TYPE i. " row
Now we’re done with the variable declaration, let’s proceed to the main program. We will create 3 forms: One is for the preparation of the Excel file, second is for the data export from alv cells to excel cells, and third is for error handling.
The code below is for the preparation of excel application object.
* it_main and wa_main is the tables used in your ALV
FORM export_to_excel TABLES p_it_main STRUCTURE wa_main.
* Create Excel object
CREATE OBJECT v_excel 'EXCEL.APPLICATION'.
* Call Error_handler form
PERFORM Error_Handler.
* Show excel window
SET PROPERTY OF v_excel 'Visible' = 1.
* get list of workbooks, initially empty
CALL METHOD OF v_excel 'Workbooks' = v_wrkbkl.
PERFORM Error_Handler.
* add a new workbook to workbook list
CALL METHOD OF v_wrkbkl 'Add' = v_wrkbk.
PERFORM Error_Handler.
* export ALV column header to Excel
* PERFORM export_data USING rows columns boldfont value
PERFORM export_data USING 1 1 1 'header_1'.
PERFORM export_data USING 1 2 1 'header_2'.
PERFORM export_data USING 1 3 1 'header_3'.
PERFORM export_data USING 1 4 1 'header_4'.
PERFORM export_data USING 1 5 1 'header_5'.
* Loop through ALV rows and fields and transfer data to Excel
LOOP AT p_it_main INTO wa_main.
v_row = sy-tabix + 1.
PERFORM export_data USING v_row 1 0 wa_bill-field1.
PERFORM export_data USING v_row 2 0 wa_bill-field2.
PERFORM export_data USING v_row 3 0 wa_bill-field3.
PERFORM export_data USING v_row 4 0 wa_bill-field4.
PERFORM export_data USING v_row 5 0 wa_bill-field5.
ENDLOOP.
FREE OBJECT v_excel.
PERFORM error_handler.
ENDFORM.
The next code is for the export_data form.
FORM export_data USING x y z val.
CALL METHOD OF v_excel 'Cells' = v_cell
exporting
#1 = x
#2 = y.
PERFORM error_handler.
SET PROPERTY OF v_cell 'Value' = val.
PERFORM error_handler.
GET PROPERTY OF v_cell 'Font' = v_font.
PERFORM error_handler.
SET PROPERTY OF v_font 'Bold' = z .
PERFORM error_handler.
ENDFORM.
And for the code of error_handler form.
FORM error_handler.
IF sy-subrc 0.
CALL METHOD OF v_excel 'QUIT'.
FREE OBJECT v_excel.
v_excel-handle = -1.
MESSAGE: 'Failed to export to Excel.' TYPE 'E'.
ENDIF.
ENDFORM.
Now that we’ve completed all the 3 forms, all you have to do now is call the export_to_excel form to initiate the export. In the example below, I call the export_to_excel form on user command ‘M_EXP’.
FORM f_user_command USING p_ucomm LIKE sy-ucomm.
CASE p_ucomm.
WHEN 'M_EXP'.
PERFORM export_to_excel TABLES it_main.
WHEN 'CANCEL' OR 'BACK' OR 'EXIT'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM.

Instead of going to transaction code SM30 to maintain your table, why not create your own t-code for that specific table maintenance screen. To do this, here’s the step by step procedure I stumbled upon on some SAP technical forums:
1. Go to t-code SE93.
2. Type in your customized t-code on the transaction code field.
3. Click on Create button.
4. Give it a short description and tick on the “Transaction with Parameters” radio button.
2. On the next screen, type “SM30″ in the transaction field.
3. Check mark the skip initial screen.
4. type “0″ on screen field
5. Under the Classification area, check mark on Inherit GUI attributes
6. Tick all GUI support checkboxes.
7. On the default value section, give this:
Name of Screen Field: VIEWNAME
Value: Your table name
Name of Screen Field: UPDATE
Value: X X

It is very easy to apply a progress indicator on your abap programs. This will enable the
user to determine how much long will he wait until the program finish its processing.
This is done by simply calling the function module SAPGUI_PROGRESS_INDICATOR.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
VALUE(PERCENTAGE) DEFAULT 0
VALUE(TEXT) DEFAULT SPACE
PERCENTAGE is where you indicate the percentage of processing time and the TEXT is
where you indicate the text to be displayed on the status bar. This parameters can be
set with static values. But if you want, you could also add a few line of codes to make your
progress indicator dynamic and based on the actual number of records being process. This tip
is applicable when you are querying and processing a record from a database.
First you have to declare three decimal variables, see example below.
DATA: v_percent TYPE p DECIMALS 4, "holds the actual percentage of process time
v_increment TYPE p DECIMALS 4, "holds the increment value per single loop
v_mod TYPE p DECIMALS 4. "used as indicator
Now refer to the lines below for the rest of the codes.
****Your select statement goes here******
* this will determine the increment value based on the result of the select statement
v_increment = 100 / sy-dbcnt.
LOOP AT it INTO wa.
*calculate the progress percentage on every single loop
v_percent = v_percent + v_increment.
*this codes indicates that I want to update my progress indicator every 5% increase
*in percentage. you can change this anytime you want.
v_mod = v_percent MOD 5.
IF v_mod < 1.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = v_percent
text = 'Processing, please wait.'.
ENDIF.

Adding a button inside an ALV fields is a very simple task to do which needs only a few line of codes. what I always do is I create a field on ALV and populate that field with an Icon of my choice and declare it as a Hotspot so it will react on a single click and it works perfectly just like a button.
First Thing to do is to specify a field in our internal table that we will use to hold the Icon(refer to code #1).
TYPES: BEGIN OF t_alvbutton,
icon TYPE string, "icon field
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
END OF t_alvbutton.
DATA: it_alvbutton TYPE STANDARD TABLE OF t_alvbutton,
wa_alvbutton TYPE t_alvbutton.
Proceed to the data retrieval and populate the it_alvbutton. I assume you know how to retrieve data from database so there’s no need to show you the select statement for our example. After that, loop on every records of it_alvbutton to specify the Icon that we want to display(refer to code #2).
LOOP AT it_alvbutton INTO wa_alvbutton.
wa_alvbutton-icon = '@0X@'.
MODIFY it_alvbutton FROM wa_alvbutton.
ENDLOOP.
@0X@ is the code for print icon. For the complete list of icons, check it out here.
Now the important part is to define a field in ALV that will hold the icon. To show you how simple it is to do that, please refer to code #3.
DATA: ls_fieldcat TYPE slis_fieldcat_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv.
DEFINE m_fieldcat.
add 1 to ls_fieldcat-col_pos.
ls_fieldcat-fieldname = &1.
ls_fieldcat-seltext_l = &2.
ls_fieldcat-outputlen = &3.
ls_fieldcat-hotspot = &4. "X to declare the field as a hotspot
ls_fieldcat-icon = &5. "X to declare the field as an icon
append ls_fieldcat to lt_fieldcat.
END-OF-DEFINITION.
m_fieldcat 'ICON' 'Print' '20' 'X' 'X'. "this specific field is a hotspot and an icon
m_fieldcat 'KUNNR' 'Customer No.' '10'.
m_fieldcat 'NAME1' 'Customer Name' '35'.
m_fieldcat . . .
m_fieldcat . . .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
. . .
. . .
The figure below shows an example of print icon as a button.

Now refer to code #4 to handle the command when a user clicks on the icon button.
FORM f_user_command USING ucomm LIKE sy-ucomm
v_selfld TYPE slis_selfield.
IF ucomm = '&IC1' AND v_selfld-fieldname = 'ICON'.
"code goes in here when user clicks on our print button
ENDIF.

Recent Comments