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

alv_control_ebook

ABAP Create Excel Download button at Selection Screen

ABAP Tips No Comments »

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

SAP中本地文件的upload和download的方法

ABAP Tips No Comments »

无论是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

ABAP ALV Double Click CO03

ABAP Tips No Comments »

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

ABAP ALV Program

Program No Comments »

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

Download ALV Program

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in