ABAP技巧代码汇总.doc

上传人:jian****018 文档编号:9038587 上传时间:2020-04-02 格式:DOC 页数:56 大小:287KB
返回 下载 相关 举报
ABAP技巧代码汇总.doc_第1页
第1页 / 共56页
ABAP技巧代码汇总.doc_第2页
第2页 / 共56页
ABAP技巧代码汇总.doc_第3页
第3页 / 共56页
点击查看更多>>
资源描述
都是从网上找到的编程技巧,汇总在一起。1、ABAP CHECKBOX 和LISTBOX使用指南1.什么是checkbox:就是一个复选框,可以用like或者type来定义,为1个字符型变量。它是parameter的一个选项,parameter xxx as checkbox就可以在选择屏幕上显示一个复选框。2.什么是listbox:就是一个下拉列表,你可以在这个列表中选择一条记录进行某种操作。也是parameter的一个选项,parameter xxx as listbox就可以在选择屏幕上显示一个下拉列表。3.如何使用:下面我们用一个程序来说明这两者的使用方法。REPORT 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 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 = 1111111111 . “这个就是变量P_LIST的值 VALUE-TEXT = 1111111111 . “这个是text APPEND VALUE TO LIST . VALUE-KEY = 2222222222 . VALUE-TEXT = 2222222222 . APPEND VALUE TO LIST . VALUE-KEY = 3333333333 . VALUE-TEXT = 3333333333 . APPEND VALUE TO LIST .*调用函数显示listbox里面的值 CALL FUNCTION VRM_SET_VALUES EXPORTING ID = P_LIST1 VALUES = LIST.*把第二个listbox的值清空,并且不能输入 CLEAR P_LIST2 . LOOP AT SCREEN . 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 = BBBBBBBBBBBBBBBBBBBB . 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 = 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 . ENDLOOP .*都选,执行 ELSEIF P_CB1 = X AND P_CB2 = X . REFRESH LIST . VALUE-KEY = 1111111111 . VALUE-TEXT = 1111111111 . APPEND VALUE TO LIST . VALUE-KEY = 2222222222 . VALUE-TEXT = 2222222222 . APPEND VALUE TO LIST . VALUE-KEY = 3333333333 . VALUE-TEXT = 3333333333 . APPEND VALUE TO LIST . CALL FUNCTION VRM_SET_VALUES EXPORTING ID = P_LIST1 VALUES = LIST. 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 . 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_barry_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 111111111 TO itab1.APPEND 222222222 TO itab1.str1 = sssssssssss.*如果是同名的对象,可以这么写:EXPORT itab1 TO MEMORY ID M1.FREE itab1.IMPORT itab1 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.PARAMETERS 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为最新的保存数据的记录,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_abap_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 = 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 function GUI_DOWNLOAD exporting filename = C:sf.zip filetype = BIN tables data_tab = binary_tab.5、ABAP程序打印Spool Request到PDF其实打印到pdf完全不需要程序,只要你装了pdf打印生成软件,打印的时候选择pdf也就行了。本文的程序非我所做,不过也不知道从哪里拿到的了。在不经意间看到了,于是在机器上测试下,发现有些地方需要更正。改好了,测试好了,放上来分享给大家。5 ( , P8 r k, Q; I# J6 b6 S3 z1 Q ; 8 Z1 , i程序源代码如下: *&-*& ReportZBOB_R2PDF *&0 e/ u! O: C4 E% V& 1 F*&-*, z; Y( P2 Qd( R& - w& M7 $ E: r*& *&*&-* 6 D, I4 F( P3 Q, lG& ?REPORTzbob_r2pdf. *- Enhancements: only allow to be run with variant.Then called *- program will be transparent to users* ! x5 K2 r/ L*- TABLES: R M4 t& g7 2 e; b. JTABLES:- 6 p1 S. / & Z& 3 Z6 Htsp01.# w4 % | q; L. P) z J d- E*- STRUCTURES DATA:# v# I; W) F0 o6 y6 m Rmstr_print_parms LIKE pri_params,8 z9 r; M$ n: A) 4 M1 V3 Lmc_valid(1) TYPE c,8 I$ 6 j; xv8 Z( o+ Tmi_bytecount TYPE i,8 C. W/ J- s: Mmi_length TYPE i, mi_rqident LIKE tsp01-rqident.6 G# g1 h: G3 U/ T8 7 i& m*- INTERNAL TABLES DATA:8 g5 z! P a9 G D& dmtab_pdf LIKE tline OCCURS 0 WITH HEADER LINE, mc_filename LIKE rlgrap-filename. *- SELECTION SCREEN PARAMETERS:1 O/ t9 a: H7 n1 6 p_repid LIKE sy-repid, Report to execute p_linsz LIKE sy-linsz DEFAULT 132, Line size# B2 T- K! D+ 8 K) a2 bp_paart LIKE sy-paart DEFAULT X_65_132. Paper Format& c. Q# Wa C; C0 t! C START-OF-SELECTION. CONCATENATE d: p_repid .pdf+ m* M6 l$ n2 Yr* o Z1 J) X% m8 / N INTO mc_filename. *- Setup the Print Parmaters CALL FUNCTION GET_PRINT_PARAMETERS EXPORTING+ a9 ?1 N W x copies = 1: S+ V; i3 j2 7 j& h0 t, B: k new_list_id = X no_dialog = X user = sy-uname6 U9 Y% |8 z e$ b3 m IMPORTING( + : 9 L7 J* l, T1 out_parameters = mstr_print_parms+ v- A# Q. W- t) ?* A valid = mc_valid( R3 6 _/ C! f) v. : 0 t, j EXCEPTIONS archive_info_not_found = 14 x |, T, q/ y t invalid_print_params = 2( C. R Z8 W F/ g+ j/ R# u j4 a invalid_archive_params = 33 m4 p+ ( e0 J- y1 w: w4 l. q OTHERS = 4. *- 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.4 k9 j( B F a5 p, |+ ; B; ?ENDIF.& Y- K& l% v) S3 r*- Explicitly set line width, and output format so that *- the PDF conversion comes out OK4 k* I. Z! # ?1 H3 h0 Dmstr_print_parms-linsz = p_linsz. mstr_print_parms-paart = p_paart. SUBMIT (p_repid) TO SAP-SPOOL WITHOUT SPOOL DYNPRO SPOOL PARAMETERS mstr_print_parms/ t, w$ * R- O n6 2 u VIA SELECTION-SCREEN. K I# K: - Z; i4 l4 k+ m* F4 ! u6 j7 i AND RETURN. *- Find out what the spool number is that was just created PERFORM get_spool_number USING sy-repid sy-uname) N0 t; e( g, P- CHANGING mi_rqident. *- Convert Spool to PDF7 z* t7 mo6 M7 f. d VCALL FUNCTION CONVERT_ABAPSPOOLJOB_2_PDF EXPORTING src_spoolid = mi_rqident% k; H, o7 T/ B4 b/ no_dialog = space9 O& E9 n% q dst_device = mstr_print_parms-pdest* x E* v_/ IMPORTING4 4 S* H0 U. y3 + |5 g pdf_bytecount = mi_bytecount5 w g3 o/ T2 L8 |) L/ B TABLES0 g3 x6 S2 I0 0 R- a8 m pdf = mtab_pdf EXCEPTIONS, m$ Z4 B2 H2 P2 . X err_no_abap_spooljob = 1 err_no_spooljob = 2$ _: |* 9 sq. C err_no_permission = 3 err_conv_not_possible = 4 err_bad_destdevice = 5 user_cancelled = 6 err_spoolerror = 7 err_temseerror = 8 i: X+ t* l1 y( y err_btcjob_open_failed = 90 R, X6 U$ y& a- v7 K/ J err_btcjob_submit_failed = 10 err_btcjob_close_failed= 11 OTHERS = 12. data: lf type string.|! H4 Z! a; I8 h4 ? S1 G: - llf = mc_filename. CALL FUNCTION GUI_DOWNLOAD EXPORTING/ r0 Y, A* KY* n! m* BIN_FILESIZE = filename = lf+ 7 k3 5 w3 z0 R; r2 t FILETYPE = BIN6 y. P& k1 _# J, i7 U1 _5 B* APPEND = * WRITE_FIELD_SEPARATOR = . d7 r2 g1 W# x7 N0 a4 w0 _* HEADER = 00* TRUNC_TRAILING_BLANKS = + i; T1 l9 n3 tv6 V( ?* WRITE_LF = X( _8 z$ Z& A6 m4 d9 ; u4 y4 p% Z* COL_SELECT = : F5 Ax% a7 yN& l* COL_SELECT_MASK = * DAT_MODE = - Y9 z( s o0 Z|* CONFIRM_OVERWRITE = * NO_AUTH_CHECK = * CODEPAGE = * IGNORE_CERR = ABAP_TRUE4 u: c# 6 $ B% E& y; I& O* REPLACEMENT = # * WRITE_BOM = 0 a V8 / R. r* TRUNC_TRAILING_BLANKS_EOL = X6 Q2 |& i$ ?7 K; V8 * WK1_N_FORMAT = * WK1_N_SIZE = * WK1_T_FORMAT = ! E6 W+ g( n2 k* WK1_T_SIZE = * WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE4 y& q- W- w8 m8 q* SHOW_TRANSFER_STATUS = ABAP_TRUE. U& B% R# ( A& y* IMPORTING* FILELENGTH = tables data_tab = mtab_pdf * FIELDNAMES = EXCEPTIONS6 i/ H8 G9 O+ ( O/ Y% D, n FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4/ r, t* U1 P( ?* f NO_AUTHORITY = 5 UNKNOWN_ERROR = 6 HEADER_NOT_ALLOWED = 7 SEPARATOR_NOT_ALLOWED = 86 G4 w% a $ f+ ( P9 c FILESIZE_NOT_ALLOWED = 9, d4 E9 O. NE) E: s$ T* 8 f p HEADER_TOO_LONG = 10 DP_ERROR_CREATE = 11 DP_ERROR_SEND = 12 DP_ERROR_WRITE = 13; f. G& h% t/ K( n% u0 I UNKNOWN_DP_ERROR = 14 ACCESS_DENIED = 15 DP_OUT_OF_MEMORY = 16- y0 w: |9 G4 I9 DISK_FULL = 172 J4 b2 ?* ( m9 r DP_TIMEOUT = 18 FILE_NOT_FOUND = 195 F- m 2 o3 m DATAPROVIDER_EXCEPTION = 20 CONTROL_FLUSH_ERROR = 214 R) a9 Z# K OTHERS = 224 M- : : C* P( . IF sy-subrc 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.2 z A4 d2 N( E6 x/ k! e0 SENDIF. ( N$ W6 n1 N/ U! / r1 u8 b*CALL FUNCTION DOWNLOAD% K2 X8 z) d3 G) B* EXPORTING* bin_filesize = mi_bytecount * filename = mc_filename5 U/ k3 C+ d0 Q8 a3 A* filetype = BIN+ 4 y# % b: : a1 W; F# d9 N* IMPORTING. d: A& H3 p- ?+ ; Y5 m* act_filename = mc_filename * TABLES * data_tab = mtab_pdf./ A( om. S/ c, K*-*) E4 F6 I4 m$ pi9 6 f2 , * FORM get_spool_number * m d m0 9 w d Z*-* Get the most recent spool created by user/report * *-*- w3 Z% G1 l0 b( % K. Q( S+ _- e*-F_REPID *8 B) x, l6 w9 JZ+ h% _*-F_UNAME *B6 |4 w. & j! xW*-F_RQIDENT * *-* FORM get_spool_number USING f_repid f_uname CHANGING f_rqident.$ X# x3 O0 G3 z( X 1 q5 FDATA: M+ E: ( x1 w$ Y# d ?, & Q lc_rq2name LIKE tsp01-rq2name. CONCATENATE f_repid+0(9) f_uname+0(3)% F/ - j: v# W3 # C7 ?7 K INTO lc_rq2name.8 Q$ h( H! V X# L+ ?6 o: S4 * SELECT * FROM tsp01 WHERErq2name = lc_rq2name ORDER BY rqcretime DESCENDING. f_rqident = tsp01-rqident.+ F3 x4 K0 Z4 O& S8 w EXIT. ENDSELECT. IF sy-subrc NE 0./ L8 N$ I c9 T7 x CLEAR f_rqident. ENDIF. M8 q0 T4 G/ ?ENDFORM. get_spool_number8 R 6 yQ! o H6 L4 N* G% * F8 D6 B W# t5 F$ . m$ f% b5 m/ u程序执行界面: / z) e2 b: p* c3 v% S! . P 2011-7-16 15:01:02 上传下载附件 (6.72 KB) : G s% l8 C3 b9 Q4 m8 g) k1 w8 f; s2 j0 0 _3 m: d O执行后结果:9 6 b- q G0 S( u# J+ r) z g 6、动态取得数据的方法ABAP动态查询的实现:可以完全实现动态查询,每个字段都可以动态。 (1) 利用宏 (2) 利用abap指针 (3) 利用FIELD-SYMBOL 具体实现: 1.结构的动态查询 DEFINE SELECT_DATA_TO_WA. SELECT &1 FROM &2 INTO CORRESPONDING FIELDS OF &3 WHERE (&4). EXIT. ENDSELECT. END-OF-DEFINITION. 2.变量的动态查询 DEFINE SELECT_DATA_TO_VARIANT. SELECT &1 FROM &2 INTO &3 WHERE (&4). EXIT. ENDSELECT. END-OF-DEFINITION. 3.内表的动态查询 DEFINE SELECT_DATA_TO_VARIANT. SELECT &1 FROM &2 INTO CORRESPONDING FIELDS OF TABLE &3 WHERE (&4). EXIT. ENDSELECT. END-OF-DEFINITION. 具体程序实现: CodeDATA: L_FIELD(100) TYPE C, L_TABLE(10) TYPE C, L_COND(100) TYPE C. DATA: I_COND TYPE TALBE OF L_COND. FIELD-SYMBOLS TYPE ANY. START-OF-SELECTION. CONCATENATE CARRID CONNID CITYFROM INTO L_S SEPARATE BY SPACE. CONCATENATE CONNID = 0123 INTO L_COND. APPEND COND TO I_COND. L_TABLE = SPFLI. IF IS ASSIGNED. UNASSIGN . ASSIGN SPFLI TO .ELSE. ASSIGN SPFLI TO.ENDIF. SELECT_DATA_TO_WA (L_S) (L_TABLE) I_COND.7、ABAP获得目录下符合条件的文件名*&-*& Report ZTEST*&*&-*&*&*&-*REPORT ZLALITEST.tables:vbak,lips,vttp,vttk.data:begin of itab occurs 0, f(256),end of itab.data:begin of file_list occurs 0, name(90),end of file_list.data:begin of itab_show occurs 0, tpbez like vttk-tpbez, tknum like vttp-tknum, vbeln like lips-vbeln, matnr like lips-matnr, lfimg like lips-lfimg,end of itab_show.data:begin of itab_out occurs 0, vbeln(20),end of itab_out.ranges r_vbeln for vbak-vbeln.data: t_list like epsfili occurs 0 with header line.data: w_dir like epsf-epsdirnam.data: len1 type i.data: len2 type i.data: len3 type i.data:str type string.parameters: p_path1 like rlgrap-filename obligatory default fs01templalidel, p_path2 like rlgrap-filename obligatory default fs01templalirmalist, p_format(5) default .txt.parameters: r_ship radiobutton group rad1 default X, r_deli radiobutton group rad1, r_get_b radiobutton group rad1.w_dir = p_path1.call function EPS_GET_DIRECTORY_LISTING exporting dir_name = w_dir* FILE_MASK = *.TXT* IMPORTING* DIR_NAME =* FILE_COUNTER =* ERROR_COUNTER = tables dir_list = t_list exceptions invalid_eps_subdir = 1 sapgparam_failed = 2 build_directory_failed = 3 no_authorization = 4 read_directory_failed = 5 too_many_read_errors = 6 empty_directory_list = 7 others = 8.len1 = strlen( p_format ).loop at t_list. len2 = strlen( t_list-name ). if len2 = len1. len2 = len2 - len1. endif.* len2 = len2 - 1. str = t_list-name+len2(len1). translate str to upper case. if str = p_format. file_list-name = t_list-name. append file_list. endif.endloop.data temp_str(256).loop at file_list. concatenate p_path1 file_list-name into temp_str.* open dataset temp_str for input in text mode encoding non-unicode with smart linefeed. open dataset temp_str for input in text mode encoding utf-8 with smart linefeed. do. read dataset temp_str into itab . if sy-subrc 0. exit. close dataset temp_str. endif. append itab. enddo. loop at itab. r_vbeln-sign = I. r_vbeln-option = EQ. r_vbeln-low = itab-f. append r_vbeln. endloop. if r_ship = X and not r_vbeln is initial . perform get_rma_number using SHIPMENT. elseif r_deli = X. perform get_rma_number using del. elseif r_get_b = X and not r_vbeln is initial. perform get_system_menge. endif. concatenate RMANO_LIST_ file_list-name into file_list-name. concatenate p_path2 file_list-name into temp_str.* open dataset temp_str for output in text mode encoding non-unicode with smart linefeed. open dataset temp_str for output in text mode encoding utf-8 with smart linefeed. loop at itab_out. transfer itab_out-vbeln to temp_str. endloop. close dataset temp_str.endlo
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!