ABAP ALV Grid Control (BC-SRV-ALV) eBook
ABAP Tips No Comments »Below eBook is for ALV Grid Control (BC-SRV-ALV). If you need it, you can download it.
Download ALV Grid Control eBook
Below eBook is for ALV Grid Control (BC-SRV-ALV). If you need it, you can download it.
Download ALV Grid Control eBook
If you want to create Excel download button at selection screen, you can check below method.
TABLES: sscrfields.
INITIALIZATION.
PERFORM init_data.
PERFORM file_download.
*&———————————————————————*
*& Form INIT_DATA
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM INIT_DATA .
sscrfields-functxt_01 = text-f01.
ENDFORM. ” INIT_DATA
*&———————————————————————*
*& Form FILE_DOWNLOAD
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM FILE_DOWNLOAD .
DATA : t_dfname TYPE rlgrap-filename VALUE ‘C:\’,
t_filename TYPE string.
* download file name
CALL FUNCTION ‘F4_FILENAME’
EXPORTING
program_name = sy-repid
dynpro_number = sy-dynnr
IMPORTING
file_name = t_dfname.
* file name
t_filename = t_dfname.
IF t_filename IS INITIAL OR
t_filename = ‘C:\’.
MESSAGE ‘파일 경로를 입력해 주세요.’ TYPE ‘I’.
STOP.
ENDIF.
* download template
CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
filename = t_filename
filetype = ‘DAT’
TABLES
data_tab = <gt_table>.
CALL FUNCTION ‘MS_EXCEL_OLE_STANDARD_DAT’
EXPORTING
file_name = t_dfname
TABLES
data_tab = <gt_table>
fieldnames = it_head
EXCEPTIONS
file_not_exist = 1
filename_expected = 2
communication_error = 3
ole_object_method_error = 4
ole_object_property_error = 5
invalid_pivot_fields = 6
download_problem = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE ‘Excel Open Error’ TYPE ‘I’. “#EC NOTEXT
STOP.
ENDIF.
ENDFORM. ” FILE_DOWNLOAD
无论是upload还是download,首先要确定文件的路径和名字。下面介绍几种使用文件选择框的方法:
-、使用FM F4_FILENAME
call function ‘F4_FILENAME’
importing
file_name = filename.
二、使用FM KD_GET_FILENAME_ON_F4
call function ‘KD_GET_FILENAME_ON_F4′
changing
file_name = p_pcfile.
三、使用FM TB_LIMIT_WS_FILENAME_GET
此FM可以指定默认选择路径,默认文件名,文件的打开目的(MODE,O为读,S为写)以及文件类型等,返回值FILENAME为文件的全路径。
四、使用FM WS_FILENAME_GET
功能同上。例子:
call function ‘WS_FILENAME_GET’
exporting
def_filename = ‘invoice.txt’
def_path = ‘c:\windata\’
mask = ‘,*.TXT.’
mode = ‘0′
title = ‘Find the input file’
importing
filename = t_filename
exceptions
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
others = 5.
五、使用Class cl_gui_frontend_services的静态方法file_open_dialog.
此方法功能强大,可以修饰文件选择框,指定默认选择路径,设置文件类型过滤,同时打开多个文件,返回用户操作等,例子:
call method cl_gui_frontend_services=>file_open_dialog
exporting
window_title = ‘Select File’
default_extension = ‘xls’
file_filter = cl_gui_frontend_services=>filetype_excel
multiselection = ‘ ‘
changing
file_table = it_tab
rc = gd_subrc.
文件UPLOAD方法(转成内表):
一、最常用FM的是:GUI_UPLOAD
有同等作用的是CLASS cl_gui_frontend_services的静态方法gui_upload,文件可以按二进制或文本格式上传,数值和日期等依赖于用户的设置。
上传二进制文件时,内表通常定义为只含一个数据类型为X的field,如:
data:begin of itab occurs 0,
raw(255) type X,
end fo itab.
CALL FUNCTION ‘GUI_UPLOAD’
exporting
filetype = ‘BIN’
filename = ‘C:\DOWNLOAD.BIN’
tables
data_tab = itab.
主要参数:输入有filename 要上传文件的完成路径, filetype 包括’BIN’ ‘DAT’ ‘ASC’等,codepage 以数字编号的字符集,如8400是简体中文
输出有data_tab 储存文件中数据的内表
二、对上传excel数据可用FM TEXT_CONVERT_XLS_TO_SAP
因为输出的I_TAB_CONVERTED_DATA类型为任意的standard table,所以此FM能方便的把excel中内容转化成格式相同的内表中。
field-symbols: <s_table> type standard table.
call function ‘TEXT_CONVERT_XLS_TO_SAP’
exporting
* I_FIELD_SEPERATOR =
* I_LINE_HEADER =
i_tab_raw_data = raw_data
i_filename = excel_file
tables
i_tab_converted_data = <s_table>
exceptions
conversion_failed = 1
others = 2.
参数i_tab_raw_data虽为改办field,但好像没什么作用,传入一个空数据也可正常使用。
三、以另外途径上传excel文件:ALSM_EXCEL_TO_INTERNAL_TABLE
call function ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
exporting
filename = p_file
i_begin_col = p_scol
i_begin_row = p_srow
i_end_col = p_ecol
i_end_row = p_erow
tables
intern = i_intern
exceptions
inconsistent_parameters = 1
upload_ole = 2
others = 3.
此FM可以限制从excel文件中第几行第几列开始,一次上传多少行多少列,但一次上传的最大行数为9999,是由接收数据的内表intern的定义来限制的。
所以如果要上传多于9999行的数据,要编码分批上传实现的。而intern不是直接与excel数据格式相符的内表,是系统定义好的,包含了行号、列号、数据值等,具体的
请参照系统定义,因此要想转成自己定义符合格式的内表,可用下面代码实现:
field-symbols : <$fs>.
data exception type ref to cx_root.
sort i_intern by row col.
try.
loop at i_intern.
move i_intern-col to index.
assign component index of structure i_table to <$fs>.
move i_intern-value to <$fs>.
at end of row.
append i_table. “user defined internal table to store excel data
clear i_table.
endat.
endloop.
catch cx_root into exception.
message ‘Excel data format is wrong,please check’ type ‘E’.
endtry.
文件DOWNLOAD方法(内表转成文件):
一、最常用FM的是:GUI_UPLOAD
CLASS cl_gui_frontend_services的静态方法gui_upload与此功效相同。重要参数有BIN_FILESIZE FILENAME FILETYPE APPEND CODEPAGE DATA_TAB等,正确传入这些参数即可满足大多常见的需求。
参数简述:BIN_FILESIZE 当要创建二进制的文件进,必须指定文件长度,但要下载成文本文件时,传入此参数会报 FILESIZE_NIT_ALLOWED 错误的。
FILENAME 要存放文件的完整路径,要保证路径有效并且如果文件存在的话没有被打开,否则会报错。
FILETYPE ‘ASC’ ASCII格式文件,此参数会受到CODEPAGE, TRUNC_TRAILING_BLANKS, 和 TRUNC_TRAILING_BLANKS_EOL等参数的影响。
‘IBM’ ASCII文件,但只能包含IBM字符集的字符(CODEPAGE = ‘1103′),这种格式的文件通常用在软盘上。
‘DAT’ 具有单元格形式的文本文件,但直接用excel打开的话,文本内容会受单元格格式影响(如自动会去前导零等)。这种文件可直接再用gui_upload上传到SAP程序中。
‘DBF’ dBase格式,对于要用excel打开的数据,此种格式更能保持数据原型,不受excel单元格格式的影响。
‘WK1′ Lotus 1-2-3格式。
‘BIN’ 二进制格式文件,没有格式和字体集的限制。
APPEND ’X'以追加模式写文件,SPACE 当文件已存在时,以覆盖模式写文件。
CODEPAGE 指定写文件时用的字符集
DATA_TAB 内表,包含要下载成文件的数据
…
另注:当要上传在excel中存放的数据时,要注意sap系统中前导0的问题,解决方法可在excel文件中把0补全(调整单元格格式),或者在使用此类数据前,程序做alpha转换,
使用FM: CONVERSION_EXIT_ALPHA_INPUT, 相反作用的FM: CONVERSION_EXIT_ALPHA_OUTPUT
Via csdn
Today, my customer ask me to add a function that when he double click order colum, he wants to see CO03.
Below is the ABAP code.
*&———————————————————————*
*& Form LINE_SELECTION
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CHECK r_ucomm EQ ‘&IC1′ AND NOT rs_selfield-value IS INITIAL.
CASE rs_selfield-fieldname.
WHEN ‘AUFNR’.
SET PARAMETER ID ‘ANR’ FIELD rs_selfield-value.
CALL TRANSACTION ‘CO03′ AND SKIP FIRST SCREEN.
ENDCASE.
ENDFORM. ” LINE_SELECTION
REPORT zgrd_sd_flow_alv_001 .
TYPE-POOLS: slis.
TABLES: vbak,vbap, knvv, kna1, mara ,lips, vbrp.
TYPES: BEGIN OF record,
sdoc LIKE vbak-vbeln,
sitem LIKE vbap-posnr,
mcode LIKE mara-matnr,
mname LIKE vbap-arktx,
oquanti LIKE vbap-kwmeng,
ovalue LIKE vbap-netwr,
ocurrency LIKE vbap-waerk,
ddoc LIKE lips-vbeln,
ditem LIKE lips-posnr,
idoc LIKE vbrp-vbeln,
iitem LIKE vbrp-posnr,
END OF record.
DATA: itab TYPE STANDARD TABLE OF record WITH HEADER LINE.
DATA: name1 LIKE kna1-name1,
name2 LIKE kna1-name2.
DATA: i_fieldcat_alv TYPE slis_t_fieldcat_alv WITH HEADER LINE,
it_events TYPE slis_alv_event OCCURS 1 WITH HEADER LINE,
alv_event TYPE slis_t_event,
I_layout TYPE slis_layout_alv,
i_fieldcat TYPE slis_fieldcat_alv,
pos TYPE i VALUE 1,
w_repid LIKE sy-repid.
*———————————————————————-*
* Selection-screen design *
*———————————————————————-*
SELECT-OPTIONS: o_date FOR vbak-erdat OBLIGATORY. “sales docu date
PARAMETERS: customer LIKE vbak-kunnr OBLIGATORY
DEFAULT ‘GCN00010′, “customer code
material LIKE mara-matnr OBLIGATORY
DEFAULT ‘000000000280012001′. “material number
*———————————————————————-*
* Start of selection event *
*———————————————————————-*
*START-OF-SELECTION.
PERFORM data_selection.
perform layout_build.
PERFORM fields.
PERFORM append_alv_event CHANGING alv_event.
PERFORM display_data.
*———————————————————————-*
*form data_selection
**
*———————————————————————-*
FORM data_selection.
SELECT a~vbeln b~posnr c~matnr b~arktx b~kwmeng b~netwr b~waerk
c~vbeln c~posnr d~vbeln d~posnr
INTO (itab-sdoc, itab-sitem, itab-mcode, itab-mname,
itab-oquanti,itab-ovalue,itab-ocurrency, itab-ddoc,
itab-ditem, itab-idoc, itab-iitem)
FROM ( ( lips AS c
INNER JOIN vbrp AS d ON c~vbeln = d~vgbel
AND c~posnr = d~vgpos
INNER JOIN vbap AS b ON c~vgbel = b~vbeln
AND c~vgpos = b~posnr )
INNER JOIN vbak AS a ON a~vbeln = b~vbeln )
WHERE a~erdat IN o_date AND a~kunnr = customer AND b~matnr = material.
APPEND itab.
ENDSELECT.
IF sy-subrc NE 0.
MESSAGE ‘No Corresponding Record!’ TYPE ‘I’.
ENDIF.
ENDFORM. “data_selection
*———————————————————————-*
*form fields
**
*———————————————————————-*
FORM fields.
REFRESH i_fieldcat_alv.
pos = 1.
CLEAR i_fieldcat.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘SDOC’.
i_fieldcat-seltext_l = ‘주문번호’.
APPEND i_fieldcat TO i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘SITEM’.
i_fieldcat-seltext_l = ‘아이템번호’.
APPEND i_fieldcat TO i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘MCODE’.
i_fieldcat-seltext_l = ‘제품코드’.
APPEND i_fieldcat TO i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘MNAME’.
i_fieldcat-seltext_l = ‘제품명’.
APPEND i_fieldcat TO i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘OQUANTI’.
i_fieldcat-seltext_l = ‘주문수량’.
APPEND i_fieldcat TO i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘OVALUE’.
i_fieldcat-seltext_l = ‘주문실적’.
APPEND i_fieldcat TO i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘OCURRENCY’.
i_fieldcat-seltext_l = ‘단위’.
APPEND i_fieldcat TO i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘DDOC’.
i_fieldcat-seltext_l = ‘납품문서번호’.
APPEND i_fieldcat TO i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘DITEM’.
i_fieldcat-seltext_l = ‘아이템’.
APPEND i_fieldcat TO i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘IDOC’.
i_fieldcat-seltext_l = ‘대금청구번호’.
APPEND i_fieldcat TO i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = ‘IITEM’.
i_fieldcat-seltext_l = ‘아이템번호’.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
ENDFORM. “fields
*———————————————————————-*
*form display_data
**
*———————————————————————-*
FORM display_data.
w_repid = sy-repid.
CALL FUNCTION ‘REUSE_ALV_LIST_DISPLAY’
EXPORTING
i_callback_program = w_repid
i_callback_user_command = ‘USER_COMMAND’
is_layout = i_layout
it_events = alv_event[]
* i_save = ‘ ‘
it_fieldcat = i_fieldcat_alv[]
TABLES
t_outtab = itab.
ENDFORM. “display_data
*———————————————————————-*
*form layout_build
**
*———————————————————————-*
Form layout_build.
* I_layout-detail_popup = ‘X’. ” Display row in popup
I_layout-get_selinfos = ‘X’. ” Read selection screen in
i_layout-colwidth_optimize = ‘X’.
* layout-zebra = ‘X’. “striped pattern
* I_layout-f2code = ‘&ETA’.
endform. ” BUILD_LAYOUT
*———————————————————————-*
* <–P_ALV_EVENT text
*———————————————————————-*
FORM append_alv_event CHANGING p_alv_event TYPE slis_t_event.
DATA ls_events TYPE slis_alv_event.
ls_events-name = ‘USER_COMMAND’.
ls_events-form = ‘USER_COMMAND’.
APPEND ls_events TO p_alv_event.
* ls_events-name = ‘TOP_OF_PAGE’.
* ls_events-form = ‘TOP_OF_PAGE’.
* APPEND ls_events TO p_alv_event.
ENDFORM. ” append_alv_event
*&———————————————————————*
*& Form LINE_SELECTION
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CHECK r_ucomm EQ ‘&IC1′ AND NOT rs_selfield-value IS INITIAL.
CASE rs_selfield-fieldname.
WHEN ‘ITAB-SDOC’.
SET PARAMETER ID ‘AUN’ FIELD rs_selfield-valuE.
CALL TRANSACTION ‘VA03′ AND SKIP FIRST SCREEN.
WHEN ‘ITAB-DDOC’.
SET PARAMETER ID ‘VL’ FIELD rs_selfield-value.
CALL TRANSACTION ‘VL03N’ AND SKIP FIRST SCREEN.
WHEN ‘ITAB-IDOC’.
SET PARAMETER ID ‘VF’ FIELD rs_selfield-value.
CALL TRANSACTION ‘VF03′ AND SKIP FIRST SCREEN.
ENDCASE.
ENDFORM. ” LINE_SELECTION
Recent Comments