1、ABAP技巧代码汇总都是从网上找到的编程技巧,汇总在一起。1、ABAP CHECKBOX 和LISTBOX使用指南1.什么是checkbox:就是一个复选框,可以用like或者type来定义,为1个字符型变量。它是parameter的一个选项,parameter xxx as checkbox就可以在选择屏幕上显示一个复选框。2.什么是listbox:就是一个下拉列表,你可以在这个列表中选择一条记录进行某种操作。也是parameter的一个选项,parameter xxx as listbox就可以在选择屏幕上显示一个下拉列表。3.如何使用:下面我们用一个程序来说明这两者的使用方法。REPOR
2、T Z_TEXTTYPE-POOLS: VRM . “存放combobox内容的type poolDATA: NAME TYPE VRM_ID , “ list box的名称 LIST TYPE VRM_VALUES , “ list box的值 VALUE LIKE LINE OF LIST . “ list box的结构*定义checkbox,指定command,为了能够响应选择屏幕中值的改变PARAMETERS: P_CB1 TYPE C AS CHECKBOX DEFAULT X USER-COMMAND CHECK, P_CB2 TYPE C AS CHECKBOX DEFAULT
3、X USER-COMMAND CHECK.*定义listbox,必须指定visible lengthPARAMETERS: P_LIST1(10) TYPE C AS LISTBOX VISIBLE LENGTH 15 , P_LIST2(20) TYPE C AS LISTBOX VISIBLE LENGTH 25 .*开始执行AT SELECTION-SCREEN OUTPUT .*选择1而没有选择2 IF P_CB1 = X AND P_CB2 = ”.*向listbox里面添加值 REFRESH LIST . VALUE-KEY = 11 . “这个就是变量P_LIST的值 VALUE
4、-TEXT = 11 . “这个是text APPEND VALUE TO LIST . VALUE-KEY = 22 . VALUE-TEXT = 22 . APPEND VALUE TO LIST . VALUE-KEY = 33 . VALUE-TEXT = 33 . APPEND VALUE TO LIST .*调用函数显示listbox里面的值 CALL FUNCTION VRM_SET_VALUES EXPORTING ID = P_LIST1 VALUES = LIST.*把第二个listbox的值清空,并且不能输入 CLEAR P_LIST2 . LOOP AT SCREEN
5、. IF SCREEN-NAME = P_LIST2 . SCREEN-INPUT = 0 . MODIFY SCREEN . ENDIF . ENDLOOP .*选择2,没有选择1,同上 ELSEIF P_CB2 = X AND P_CB1 = ”. REFRESH LIST . VALUE-KEY = AAAAAAAAAAAAAAAAAAAA . VALUE-TEXT = AAAAAAAAAAAAAAAAAAAA . APPEND VALUE TO LIST . VALUE-KEY = BBBBBBBBBBBBBBBBBBBB . VALUE-TEXT = BBBBBBBBBBBBBBBB
6、BBBB . APPEND VALUE TO LIST . VALUE-KEY = CCCCCCCCCCCCCCCCCCCC . VALUE-TEXT = CCCCCCCCCCCCCCCCCCCC . APPEND VALUE TO LIST . APPEND VALUE TO LIST . CALL FUNCTION VRM_SET_VALUES EXPORTING ID = P_LIST2 VALUES = LIST.*清空listbox 1的值 CLEAR P_LIST1 . LOOP AT SCREEN . IF SCREEN-NAME = P_LIST1 . SCREEN-INPUT
7、 = 0 . MODIFY SCREEN . ENDIF . ENDLOOP .*都没有选择,都清空且不能输入 ELSEIF P_CB1 = ” AND P_CB2 = ” . CLEAR: P_LIST1,P_LIST2 . LOOP AT SCREEN . IF SCREEN-NAME = P_LIST1 . SCREEN-INPUT = 0 . MODIFY SCREEN . ENDIF . ENDLOOP . LOOP AT SCREEN . IF SCREEN-NAME = P_LIST2 . SCREEN-INPUT = 0 . MODIFY SCREEN . ENDIF . EN
8、DLOOP .*都选,执行 ELSEIF P_CB1 = X AND P_CB2 = X . REFRESH LIST . VALUE-KEY = 11 . VALUE-TEXT = 11 . APPEND VALUE TO LIST . VALUE-KEY = 22 . VALUE-TEXT = 22 . APPEND VALUE TO LIST . VALUE-KEY = 33 . VALUE-TEXT = 33 . APPEND VALUE TO LIST . CALL FUNCTION VRM_SET_VALUES EXPORTING ID = P_LIST1 VALUES = LIS
9、T. REFRESH LIST . VALUE-KEY = AAAAAAAAAAAAAAAAAAAA . VALUE-TEXT = AAAAAAAAAAAAAAAAAAAA . APPEND VALUE TO LIST . VALUE-KEY = BBBBBBBBBBBBBBBBBBBB . VALUE-TEXT = BBBBBBBBBBBBBBBBBBBB . APPEND VALUE TO LIST . VALUE-KEY = CCCCCCCCCCCCCCCCCCCC . VALUE-TEXT = CCCCCCCCCCCCCCCCCCCC . APPEND VALUE TO LIST .
10、CALL FUNCTION VRM_SET_VALUES EXPORTING ID = P_LIST2 VALUES = LIST. ENDIF .START-OF-SELECTION .*输出到第二屏幕看看 WRITE: P_LIST1 ,/ P_LIST2 .2、ABAP memory中的Export和Import可以用于SUBMIT方式调用其他ABAP程序后,数据只能通过某个透明表暂存,在由主程序查询透明表取得结果的情况,这样做的好处是不用在通过透明表转数据了,先把子程序中的数据EXPORT到一块命名的内存空间,然后在主程序里IMPORT命名的内存空间的值到内表中。REPORT z_ba
11、rry_export_import . DATA: BEGIN OF itab1 OCCURS 0 , ff(10) , END OF itab1. DATA: itab2 LIKE itab1 OCCURS 0 WITH HEADER LINE . DATA: str1 TYPE string , str2 TYPE string . APPEND 1 TO itab1. APPEND 2 TO itab1. str1 = sssssssssss. *如果是同名的对象,可以这么写: EXPORT itab1 TO MEMORY ID M1. FREE itab1. IMPORT itab1
12、FROM MEMORY ID M1. LOOP AT itab1. WRITE / itab1-ff. ENDLOOP. *如果不是同名的对象,需要加上一个对象名 EXPORT a = itab1 b = str1 TO MEMORY ID M2. IMPORT a = itab2 b = str2 FROM MEMORY ID M2. LOOP AT itab2. WRITE / itab2-ff. ENDLOOP.WRITE / str2.3、ABAP 获得程序的激活次数或者传输次数的方法REPOSRC :Report Source CodeDATA SUM TYPE I.PARAMETE
13、RS P_NAME TYPE STRING. SELECT COUNT(*) FROM E070 INNER JOIN E071 ON E071TRKORR = E070TRKORR INTO SUM WHERE E071OBJ_NAME = P_NAME AND E071LOCKFLAG AND E070TRSTATUS = R.REPOSRC 这个表很有意思,它包含任何一个程序的激活次数,即字段VERN(版本)其中的字段R3STATE 如果是A则表明是激活的版本。如果是I 表明是被修改的状态,如果最新的版本没有被激活,则会出现R3STATE字段 有A 和 I 的两组数据。其中I为最新的保存
14、数据的记录,VERN记录修改的次数。R3STATE字段为A的则是记录前一次被激活的版本数据,VERN对应的版本号。 表REPOSRC对应一个视图 这个视图是 PROGDIR.使用这个视图 对我们的 控制会更有帮助,其中 这个视图标签SELECITONS CONDITIONS中 进行限制如下:TABLE FIELDNAME 操作 COMPARISON VALUE AND/ORREPOSRC R3STATE EQ A ORREPOSRC R3STATE EQ I存放变式的表 VARI 这是一张数据簇表。4、ABAP 生成ZIP压缩文件的代码data: izip type ref to cl_aba
15、p_zip, cont type xstring , xzip_file type xstring, binary_tab type standard table of x255 .data: itab type standard table of sdokcntasc .start-of-selection. do 20 times. append ABAP开发 to itab. enddo. call function SCMS_TEXT_TO_XSTRING exporting mimetype = text/html;charset=gb2312 importing buffer =
16、cont tables text_tab = itab exceptions failed = 1 others = 2. create object izip. call method izip-add exporting name = ITAB.TXT content = cont. call method izip-save receiving zip = xzip_file. call function SCMS_XSTRING_TO_BINARY exporting buffer = xzip_file tables binary_tab = binary_tab. call fun
17、ction GUI_DOWNLOAD exporting filename = C:sf.zip filetype = BIN tables data_tab = binary_tab.5、ABAP程序打印Spool Request到PDF其实打印到pdf完全不需要程序,只要你装了pdf打印生成软件,打印的时候选择pdf也就行了。本文的程序非我所做,不过也不知道从哪里拿到的了。在不经意间看到了,于是在机器上测试下,发现有些地方需要更正。改好了,测试好了,放上来分享给大家。程序源代码如下: *&-*& ReportZBOB_R2PDF *&*&-*& *&*&-* REPORTzbob_r2pd
18、f. *- Enhancements: only allow to be run with variant.Then called *- program will be transparent to users*- TABLESTABLES:tsp01.*- STRUCTURES DATA:mstr_print_parms LIKE pri_params,mc_valid(1) TYPE c,mi_bytecount TYPE i,mi_length TYPE i, mi_rqident LIKE tsp01-rqident.*- INTERNAL TABLES DATA:mtab_pdf L
19、IKE tline OCCURS 0 WITH HEADER LINE, mc_filename LIKE rlgrap-filename. *- SELECTION SCREEN PARAMETERS:p_repid LIKE sy-repid, Report to execute p_linsz LIKE sy-linsz DEFAULT 132, Line sizep_paart LIKE sy-paart DEFAULT X_65_132. Paper Format START-OF-SELECTION. CONCATENATE d: p_repid .pdf INTO mc_file
20、name. *- Setup the Print Parmaters CALL FUNCTION GET_PRINT_PARAMETERS EXPORTING copies = 1 new_list_id = X no_dialog = X user = sy-uname IMPORTING out_parameters = mstr_print_parms valid = mc_valid EXCEPTIONS archive_info_not_found = 1 invalid_print_params = 2 invalid_archive_params = 3 OTHERS = 4.
21、*- Make sure that a printer destination has been set up *- If this is not done the PDF function module ABENDSIF mstr_print_parms-pdest = space. mstr_print_parms-pdest = LOCL.ENDIF.*- Explicitly set line width, and output format so that *- the PDF conversion comes out OKmstr_print_parms-linsz = p_lin
22、sz. mstr_print_parms-paart = p_paart. SUBMIT (p_repid) TO SAP-SPOOL WITHOUT SPOOL DYNPRO SPOOL PARAMETERS mstr_print_parms VIA SELECTION-SCREEN AND RETURN. *- Find out what the spool number is that was just created PERFORM get_spool_number USING sy-repid sy-uname CHANGING mi_rqident. *- Convert Spoo
23、l to PDFCALL FUNCTION CONVERT_ABAPSPOOLJOB_2_PDF EXPORTING src_spoolid = mi_rqident no_dialog = space dst_device = mstr_print_parms-pdest IMPORTING pdf_bytecount = mi_bytecount TABLES pdf = mtab_pdf EXCEPTIONS err_no_abap_spooljob = 1 err_no_spooljob = 2 err_no_permission = 3 err_conv_not_possible =
24、 4 err_bad_destdevice = 5 user_cancelled = 6 err_spoolerror = 7 err_temseerror = 8 err_btcjob_open_failed = 9 err_btcjob_submit_failed = 10 err_btcjob_close_failed= 11 OTHERS = 12. data: lf type string.lf = mc_filename. CALL FUNCTION GUI_DOWNLOAD EXPORTING* BIN_FILESIZE = filename = lf FILETYPE = BIN* APPEND = * WRITE_FIELD_SEPARATOR = * 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 =