SAP ABAP|DOSYA İŞLEMLERİ| CALL FUNCTION ‘GUI_DOWNLOAD’

CALL FUNCTION ‘GUI_DOWNLOAD’ fonksyionu kullanarak internal bir tablodaki verileri bir txt dosyası olarak indirmeye çalışacağız.
- Internal tablomuzu oluşturmak için VBELN ve VBRP tablomuzun alanlarından ty_invoice tipini oluşturduk.

2) Bu tipten gt_invoice internal tablomuzu oluşturduk. Select atarken verilerimizi bu internal tablonun içine aktaracağız.

3) Kullanıcıdan fatura tarihi (VBRK-FKDAT) ve ödeyen (VBRK-KUNRG) parametrelerinin selection screen üzerinde alıyoruz.

4) Select İşlemi ile veri getirme:
SELECT
vbrk~vbeln,
vbrk~fkdat,
vbrk~kunrg,
vbrp~posnr,
vbrp~fkimg,
vbrp~vrkme,
vbrp~matnr,
vbrp~arktx,
vbrp~netwr,
vbrp~mwsbp
FROM vbrk INNER JOIN vbrp ON vbrp~vbeln = vbrp~vbeln
INTO CORRESPONDING FIELDS OF TABLE @gt_invoice
WHERE vbrk~fkdat IN @s_fkdat
AND vbrk~kunrg IN @s_kunrg.
5) GUI_DOWNLOAD fonksiyonu
Lv_path değişkeni, dosyamızın indirileceği adresi tutar, lv_file ise string tipinde olup yaratılacak dosyanın ismini tutar.
Lv_path’e dosyamızın indirilmesini istediğimiz lokasyonu verebilirsiniz.

Dinamik dosya ismi yaratma : Dosya ilk kez indirildiğinde, lv_file dosya ismi ilk kez oluşturulur ancak sonraki indirlme işlemlerinde eğer dosya ismi dinamik değilse aynı ismi kullacağından, veriler eski dosyanın üzerine yazılacaktır Bunu önelemek için her bir dosyaya benzersiz (unique) isimler vermek daha doğru olacaktır. Bunu da “Incoive_tarih_saat” formatında kolayca sağlayabiliriz.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = lv_file
filetype = 'ASC'
* APPEND = ' '
write_field_separator = 'X'
* 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 = ' '
* WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE
* SHOW_TRANSFER_STATUS = ABAP_TRUE
* VIRUS_SCAN_PROFILE = '/SCET/GUI_DOWNLOAD'
* IMPORTING
* FILELENGTH =
TABLES
data_tab = gt_invoice
* 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 i000(8i) WITH |Error while downloading the file!|.
ELSE.
MESSAGE i000(8i) WITH |The file downloaded successfully!|.
ENDIF.
NOT: GUI_DOWNLOAD fonksiyonunda EXPORTING-> filename ve TABLES->data_tab parametrelerini doldurmak zorunlu. Diğer
- Filename = lv_file => dosya ismimizi parametre olarak veriyoruz.
- Filetype = ‘ASC’ => Dosyanın türü ile ilgilidir. Dosyamızın ASCII formatında indirilmesini sağlar.
- Data_tab = gt_invoice => doldurduğumuz tabloyu veriyoruz, ve bu tablodaki veriler indirilir.
6) Programı çalıştıralım




Yukarıda da görüldüğü üzere her dosyanın kendine ait benzersiz ismi var.
KOD: Programı denemek ve kendi bilgisayarınızda çalıştırmak isterseniz için ZDYP15_R_FILE_OPERATIONS programıma göz atabilirsiniz.
- ZDYP15_R_FILE_OPERATIONS

ZDYP15_R_FILE_OPERATIONS_TOP

ZDYP15_R_FILE_OPERATIONS_CLS



7. KODLAR
ZDYP15_R_FILE_OPERATIONS
*&---------------------------------------------------------------------*
*& Report ZDYP15_R_FILE_OPERATIONS
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zdyp15_r_file_operations.
INCLUDE zdyp15_r_file_operations_top.
INCLUDE zdyp15_r_file_operations_cls.
START-OF-SELECTION.
go_lcl_main = NEW #( ).
go_lcl_main->get_data( ).
go_lcl_main->download_data( ).
ZDYP15_R_FILE_OPERATIONS_TOP
*&---------------------------------------------------------------------*
*& Include ZDYP15_R_FILE_OPERATIONS_TOP
*&---------------------------------------------------------------------*
TABLES: vbrk, vbrp.
CLASS lcl_main DEFINITION DEFERRED.
DATA go_lcl_main TYPE REF TO lcl_main.
TYPES: BEGIN OF ty_invoice,
vbeln TYPE vbrk-vbeln,
fkdat TYPE vbrk-fkdat,
kunrg TYPE vbrk-kunrg,
"vbrp
posnr TYPE vbrp-posnr,
fkimg TYPE vbrp-fkimg,
vrkme TYPE vbrp-vrkme,
matnr TYPE vbrp-matnr,
arktx TYPE vbrp-arktx,
netwr TYPE vbrp-netwr,
mwsbp TYPE vbrp-mwsbp,
END OF ty_invoice.
DATA: gt_invoice TYPE STANDARD TABLE OF ty_invoice.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_fkdat FOR vbrk-fkdat,
s_kunrg FOR vbrk-kunrg.
SELECTION-SCREEN END OF BLOCK b1.
ZDYP15_R_FILE_OPERATIONS_CLS
*&---------------------------------------------------------------------*
*& Include ZDYP15_R_FILE_OPERATIONS_CLS
*&---------------------------------------------------------------------*
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
METHODS: get_data,
download_data.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD get_data.
"select invoice header and line items data select
SELECT
vbrk~vbeln,
vbrk~fkdat,
vbrk~kunrg,
vbrp~posnr,
vbrp~fkimg,
vbrp~vrkme,
vbrp~matnr,
vbrp~arktx,
vbrp~netwr,
vbrp~mwsbp
FROM vbrk INNER JOIN vbrp ON vbrp~vbeln = vbrp~vbeln
INTO CORRESPONDING FIELDS OF TABLE @gt_invoice
WHERE vbrk~fkdat IN @s_fkdat
AND vbrk~kunrg IN @s_kunrg.
"alternatif select
* SELECT
* a~vbeln,
* a~fkdat,
* a~kunrg,
* b~posnr,
* b~fkimg,
* b~vrkme,
* b~matnr,
* b~arktx,
* b~netwr,
* b~mwsbp
* FROM vbrk AS a INNER JOIN vbrp AS b ON a~vbeln = b~vbeln
* INTO CORRESPONDING FIELDS OF TABLE @gt_invoice
* WHERE a~fkdat IN @s_fkdat
* AND a~kunrg IN @s_kunrg.
ENDMETHOD.
METHOD download_data.
DATA: lv_path(100) VALUE 'İndirilenler',
lv_file TYPE string.
CONCATENATE 'Invoice' sy-datum sy-uzeit '.txt'
INTO lv_file
SEPARATED BY '_'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = lv_file
filetype = 'ASC'
* APPEND = ' '
write_field_separator = 'X' "OTHERWİSE WE CAN NOT READ THE FILE PROPERLY
* 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 = ' '
* WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE
* SHOW_TRANSFER_STATUS = ABAP_TRUE
* VIRUS_SCAN_PROFILE = '/SCET/GUI_DOWNLOAD'
* IMPORTING
* FILELENGTH =
TABLES
data_tab = gt_invoice
* 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 i000(8i) WITH |Error while downloading the file!|.
ELSE.
MESSAGE i000(8i) WITH |The file downloaded successfully!|.
ENDIF.
ENDMETHOD.
ENDCLASS.
Yazımızın sonuna geldik. Umarım faydalı bir içerik olmuştur. Sorularınız varsa sormaktan çekinmeyin. Kolay gelsin.
