Hi,
Pls look into below code
TYPE-POOLS: slis,vrm.
TABLES:vbak,vbrk,vbrp.
TYPES:BEGIN OF gty_vbakvbap,
vbeln TYPE vbak-vbeln,
vkorg TYPE vbak-vkorg,
audat TYPE vbak-audat,
auart TYPE vbak-auart,
kunnr TYPE vbak-kunnr,
posnr TYPE vbap-posnr,
matnr TYPE vbap-matnr,
matkl TYPE vbap-matkl,
kwmeng TYPE vbap-kwmeng,
END OF gty_vbakvbap,
gty_t_vbakvbap TYPE TABLE OF gty_vbakvbap.
TYPES:BEGIN OF gty_kna1,
kunnr TYPE kna1-kunnr,
land1 TYPE kna1-land1,
name1 TYPE kna1-name1,
ort01 TYPE kna1-ort01,
END OF gty_kna1,
gty_t_kna1 TYPE TABLE OF gty_kna1.
TYPES : BEGIN OF gty_vbrkvbrp,
vbeln TYPE vbrk-vbeln,
bukrs TYPE vbrk-bukrs,
vkorg TYPE vbrk-vkorg,
vtweg TYPE vbrk-vtweg,
fkdat TYPE vbrk-fkdat,
posnr TYPE vbrp-posnr,
werks TYPE vbrp-werks,
END OF gty_vbrkvbrp,
gty_t_vbrkvbrp TYPE TABLE OF gty_vbrkvbrp.
TYPES:BEGIN OF gty_final,
vbeln TYPE vbak-vbeln,
vkorg TYPE vbak-vkorg,
audat TYPE vbak-audat,
auart TYPE vbak-auart,
kunnr TYPE vbak-kunnr,
posnr TYPE vbap-posnr,
matnr TYPE vbap-matnr,
matkl TYPE vbap-matkl,
kwmeng TYPE vbap-kwmeng,
land1 TYPE kna1-land1,
name1 TYPE kna1-name1,
ort01 TYPE kna1-ort01,
bukrs TYPE vbrk-bukrs,
vtweg TYPE vbrk-vtweg,
werks TYPE vbrp-werks,
END OF gty_final,
gty_t_final TYPE TABLE OF gty_final.
TYPES:BEGIN OF gty_header,
vbeln(15) TYPE c,
vkorg(10) TYPE c,
audat(15) TYPE c,
auart(15) TYPE c,
kunnr(15) TYPE c,
posnr(10) TYPE c,
matnr(15) TYPE c,
matkl(10) TYPE c,
kwmeng(10) TYPE c,
land1(10) TYPE c,
name1(10) TYPE c,
ort01(10) TYPE c,
END OF gty_header,
gty_t_header TYPE TABLE OF gty_header.
TYPES : t_document_data TYPE sodocchgi1,
t_packing_list TYPE sopcklsti1,
t_attachment TYPE solisti1,
t_body_msg TYPE solisti1,
t_receivers TYPE somlreci1.
DATA: w_document_data TYPE t_document_data,
w_packing_list TYPE t_packing_list,
w_attachment TYPE t_attachment,
w_body_msg TYPE t_body_msg,
w_receivers TYPE t_receivers,
e(10) TYPE c.
DATA: i_document_data TYPE TABLE OF t_document_data,
i_packing_list TYPE TABLE OF t_packing_list,
i_attachment TYPE TABLE OF t_attachment,
i_body_msg TYPE TABLE OF t_body_msg,
i_receivers TYPE TABLE OF t_receivers.
DATA: e_mail TYPE somlreci1-receiver,
date(10) TYPE c,
time(8) TYPE c,
dd(2) TYPE c,
mm(2) TYPE c,
yy(4) TYPE c,
h(2) TYPE c,
m(2) TYPE c,
s(2) TYPE c,
orders(10) TYPE c VALUE 'C:\Orders',
gt_list TYPE vrm_values,
gw_list TYPE vrm_value,
gt_values TYPE TABLE OF dynpread,
gw_values TYPE dynpread,
gv_selected_value(10) TYPE c,
g_tab_lines TYPE i,
r_ucomm TYPE sy-ucomm,
* Sub total based on the header details Sales order no. vbeln = 5006.
gt_sort TYPE slis_t_sortinfo_alv,
gw_sort TYPE slis_sortinfo_alv.
DATA : gv_qty TYPE string.
DATA : gt_vbakvbap TYPE gty_t_vbakvbap,
gw_vbakvbap TYPE gty_vbakvbap,
gt_kna1 TYPE gty_t_kna1,
gw_kna1 TYPE gty_kna1,
gt_vbrkvbrp TYPE gty_t_vbrkvbrp,
gw_vbrkvbrp TYPE gty_vbrkvbrp,
gt_final TYPE gty_t_final,
gw_final TYPE gty_final,
gt_fcat TYPE slis_t_fieldcat_alv,
gw_fcat TYPE slis_fieldcat_alv,
tab TYPE TABLE OF gty_final.
data zbomrnd.
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE text-010.
SELECT-OPTIONS: s_fkdat FOR vbrk-fkdat,
s_bukrs FOR vbrk-bukrs,
s_vkorg FOR vbak-vkorg,
s_vtweg FOR vbak-vtweg,
s_werks FOR vbrp-werks,
s_vbeln FOR vbak-vbeln.
SELECTION-SCREEN END OF BLOCK blk.
SELECTION-SCREEN BEGIN OF BLOCK selscr WITH FRAME TITLE text-001.
PARAMETERS: p_rad1 RADIOBUTTON GROUP rad1 USER-COMMAND a ,
p_rad2 RADIOBUTTON GROUP rad1 .
*-- Selection Screen for radio button 2
SELECTION-SCREEN BEGIN OF BLOCK rad2 WITH FRAME TITLE text-001.
PARAMETERS:p_file TYPE ibipparms-path MODIF ID one ,
p_type(4) TYPE c AS LISTBOX VISIBLE LENGTH 20 MODIF ID one.
SELECTION-SCREEN END OF BLOCK rad2.
PARAMETERS: p_rad3 RADIOBUTTON GROUP rad1.
*-- Selection Screen for radio button 3
SELECTION-SCREEN BEGIN OF BLOCK rad3 WITH FRAME TITLE text-030.
SELECT-OPTIONS : mail_id FOR e_mail NO INTERVALS MODIF ID two .
SELECTION-SCREEN END OF BLOCK rad3.
PARAMETERS:p_rad4 RADIOBUTTON GROUP rad1.
*-- Selection Screen for radio button 4
SELECTION-SCREEN BEGIN OF BLOCK rad4 WITH FRAME TITLE text-004.
PARAMETERS: p_path TYPE rlgrap-filename MODIF ID tri.
SELECTION-SCREEN END OF BLOCK rad4.
SELECTION-SCREEN END OF BLOCK selscr.
INITIALIZATION.
LOOP AT SCREEN.
IF screen-group1 = 'TWO' OR
screen-group1 = 'TRI'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
date = sy-datum.
time = sy-uzeit.
yy = date+0(4).
mm = date+4(2).
dd = date+6(2).
h = time+0(2).
m = time+2(2).
s = time+4(2).
date+0(2) = dd.
date+2(1) = '-'.
date+3(2) = mm.
date+5(1) = '-'.
date+6(4) = yy.
time+0(2) = h.
time+2(1) = '.'.
time+3(2) = m.
time+5(1) = '.'.
time+6(2) = s.
CONCATENATE orders date time INTO p_file SEPARATED BY '_'.
LOOP AT SCREEN.
IF screen-group1 = 'ONE' OR
screen-group1 = 'TWO' OR
screen-group1 = 'TRI'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
gw_list-key = '.TXT'.
gw_list-text = 'TXT'.
APPEND gw_list TO gt_list.
gw_list-key = '.CSV'.
gw_list-text = 'CSV'.
APPEND gw_list TO gt_list.
gw_list-key = '.XLS'.
gw_list-text = 'XLS'.
APPEND gw_list TO gt_list.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'P_TYPE'
values = gt_list.
EXPORT tab TO MEMORY ID 'MESSAGE'.
**--------------------------
AT SELECTION-SCREEN OUTPUT.
*--------------------------
CASE 'X'.
WHEN p_rad1 .
LOOP AT SCREEN.
IF screen-group1 = 'ONE' OR
screen-group1 = 'TWO' OR
screen-group1 = 'TRI'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
WHEN p_rad2.
LOOP AT SCREEN.
IF screen-group1 = 'TWO' OR
screen-group1 = 'TRI'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
WHEN p_rad3.
LOOP AT SCREEN.
IF screen-group1 = 'ONE' OR
screen-group1 = 'TRI'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
WHEN p_rad4.
LOOP AT SCREEN.
IF screen-group1 = 'ONE' OR
screen-group1 = 'TWO'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDCASE.
AT SELECTION-SCREEN ON p_type.
CLEAR : gw_values,gt_values.
REFRESH gt_values.
gw_values-fieldname = 'P_TYPE'.
APPEND gw_values TO gt_values.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
translate_to_upper = 'X '
TABLES
dynpfields = gt_values.
READ TABLE gt_values INDEX 1 INTO gw_values.
IF sy-subrc = 0 AND gw_values-fieldvalue IS NOT INITIAL.
READ TABLE gt_list INTO gw_list WITH KEY key = gw_values-fieldvalue.
IF sy-subrc = 0.
gv_selected_value = gw_list-text.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_FILE '
IMPORTING
file_name = p_file.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_PATH'
IMPORTING
file_name = p_path.
START-OF-SELECTION.
CONCATENATE p_file p_type INTO p_file .
PERFORM f_fetch_vbakvbap.
PERFORM f_fetch_kna1.
PERFORM f_fetch_vbrk.
SORT BY gt_kna1.
PERFORM f_fill_final.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = sy-tabix
TEXT = 'Extracting Data From Tables'.
END-OF-SELECTION.
CASE 'X'.
WHEN p_rad1.
IF gt_final IS NOT INITIAL.
PERFORM f_fill_fcat.
PERFORM f_display_alv.
ELSE.
MESSAGE 'No records exists for the selection' TYPE 'I'.
ENDIF.
WHEN p_rad2.
IF p_type = ''.
MESSAGE 'Enter the File Type' TYPE 'I'.
EXPORT tab TO MEMORY ID 'MESSAGE'.
ELSE.
PERFORM f_gui_download.
ENDIF.
WHEN p_rad3.
IF mail_id = ''.
MESSAGE ' Enter the Email ID' TYPE 'I'.
ELSE.
PERFORM f_email.
ENDIF.
WHEN OTHERS.
IF p_path = ''.
MESSAGE 'Enter the Path' TYPE 'I'.
ENDIF.
ENDCASE.
*&---------------------------------------------------------------------*
*& Form f_fetch_vbakvbap
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_fetch_vbakvbap .
SELECT vbak~vbeln vbak~vkorg vbak~audat vbak~auart vbak~kunnr
vbap~posnr vbap~matnr vbap~matkl vbap~kwmeng
INTO TABLE gt_vbakvbap
FROM vbak
INNER JOIN vbap
ON vbak~vbeln = vbap~vbeln
WHERE vbak~vtweg IN s_vtweg
AND vbak~vkorg IN s_vkorg
AND vbak~vbeln IN s_vbeln.
ENDFORM. "f_fetch_vbakvbap
*&---------------------------------------------------------------------*
*& Form f_fetch_kna1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_fetch_kna1 .
IF NOT gt_vbakvbap[] IS INITIAL.
SELECT kunnr land1 name1 ort01
INTO TABLE gt_kna1
FROM kna1
FOR ALL ENTRIES IN gt_vbakvbap
WHERE kunnr = gt_vbakvbap-kunnr.
ENDIF.
ENDFORM. "f_fetch_kna1
*&---------------------------------------------------------------------*
*& Form f_fetch_vbrk
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_fetch_vbrk .
IF gt_vbakvbap[] IS NOT INITIAL.
SELECT vbrk~vbeln vbrk~bukrs vbrk~vkorg vbrk~vtweg vbrk~fkdat vbrp~posnr vbrp~werks
INTO TABLE gt_vbrkvbrp
FROM vbrk
INNER JOIN vbrp
ON vbrk~vbeln = vbrp~vbeln
WHERE fkdat IN s_fkdat
AND bukrs IN s_bukrs
AND werks IN s_werks
AND vtweg IN s_vtweg.
ENDIF.
ENDFORM. " f_fetch_vbrk
*&---------------------------------------------------------------------*
*& Form f_fetch_vbrp
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form f_fill_final
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_fill_final .
CLEAR :gv_qty.
LOOP AT gt_vbakvbap INTO gw_vbakvbap.
MOVE : gw_vbakvbap-vbeln TO gw_final-vbeln,
gw_vbakvbap-vkorg TO gw_final-vkorg,
gw_vbakvbap-audat TO gw_final-audat,
gw_vbakvbap-auart TO gw_final-auart,
gw_vbakvbap-kunnr TO gw_final-kunnr,
gw_vbakvbap-posnr TO gw_final-posnr,
gw_vbakvbap-matnr TO gw_final-matnr,
gw_vbakvbap-matkl TO gw_final-matkl,
gw_vbakvbap-kwmeng TO gw_final-kwmeng.
gv_qty = gv_qty + gw_final-kwmeng.
READ TABLE gt_kna1 INTO gw_kna1 WITH KEY kunnr = gw_vbakvbap-kunnr BINARY SEARCH.
IF sy-subrc = 0.
MOVE: gw_kna1-name1 TO gw_final-name1,
gw_kna1-land1 TO gw_final-land1,
gw_kna1-ort01 TO gw_final-ort01.
ENDIF.
READ TABLE gt_vbrkvbrp INTO gw_vbrkvbrp WITH KEY vkorg = gw_vbakvbap-vkorg.
IF sy-subrc = 0.
MOVE: gw_vbrkvbrp-fkdat TO gw_final-fkdat,
gw_vbrkvbrp-bukrs TO gw_final-bukrs,
gw_vbrkvbrp-vtweg TO gw_final-vtweg,
gw_vbrkvbrp-werks TO gw_final-werks.
ENDIF.
APPEND gw_final TO gt_final.
CLEAR gw_final.
ENDLOOP.
ENDFORM. "f_fill_final
*&---------------------------------------------------------------------*
*& Form f_fill_fcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_fill_fcat .
gw_fcat-fieldname = 'VBELN'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Sales Order'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'VKORG'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Sales Org.'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'VTWEG'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Distribution Channel'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'AUDAT'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Document Date'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'AUART'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Document Type'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'KUNNR'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Customer Number'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'POSNR'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Item No'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'MATNR'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Material No.'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'MATKL'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Material group'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'KWMENG'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Quantity'.
gw_fcat-do_sum = 'X'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'LAND1'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Country'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'NAME1'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Name'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'ORT01'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'City'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'FKDAT'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Billing Date'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'WERKS'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Plant'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
gw_fcat-fieldname = 'BUKRS'.
gw_fcat-tabname = 'GT_FINAL'.
gw_fcat-seltext_m = 'Company Code'.
APPEND gw_fcat TO gt_fcat.
CLEAR gw_fcat.
ENDFORM. "f_fill_fcat
*&---------------------------------------------------------------------*
*& Form f_display_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_display_alv .
DATA:lv_repid TYPE sy-repid.
lv_repid = sy-cprog.
DATA: w_layout TYPE slis_layout_alv.
w_layout-colwidth_optimize = 'X'.
w_layout-zebra = 'X'.
gw_sort-fieldname = 'VBELN'.
gw_sort-tabname = 'GW_FINAL'.
gw_sort-subtot = 'X'.
APPEND gw_sort TO gt_sort.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = w_layout
it_fieldcat = gt_fcat
it_sort = gt_sort
TABLES
t_outtab = gt_final.
ENDFORM. "f_display_alv
*&---------------------------------------------------------------------*
*& Form f_gui_download
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_gui_download .
DATA: var TYPE string,
ver TYPE string,
gt_header TYPE gty_t_header,
gw_header TYPE gty_header.
var = p_file.
ver = p_file.
DATA:p_type TYPE string.
gw_header-vbeln = 'Sales Order'.
gw_header-vkorg = 'Sales Org.'.
gw_header-audat = 'Document Date'.
gw_header-auart = 'Document Type'.
gw_header-kunnr = 'Customer No.'.
gw_header-posnr = 'Item No.'.
gw_header-matnr = 'Material No.'.
gw_header-matkl = 'Material Group'.
gw_header-kwmeng = 'Quantity'.
gw_header-land1 = 'Country'.
gw_header-name1 = 'Name'.
gw_header-ort01 = 'City'.
APPEND gw_header TO gt_header.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = ver
filetype = 'ASC'
* APPEND = ' '
write_field_separator = 'X'
* HEADER = '00'
TABLES
data_tab = gt_header.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
* BIN_FILESIZE =
filename = var
filetype = 'ASC'
append = 'X'
write_field_separator = 'X'
CHANGING
data_tab = gt_final.
ENDFORM. " f_gui_download