ABAP技巧代码汇总.docx
- 文档编号:73578
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:72
- 大小:77.12KB
ABAP技巧代码汇总.docx
《ABAP技巧代码汇总.docx》由会员分享,可在线阅读,更多相关《ABAP技巧代码汇总.docx(72页珍藏版)》请在冰点文库上搜索。
ABAP技巧代码汇总
都是从网上找到的编程技巧,汇总在一起。
1、ABAPCHECKBOX和LISTBOX使用指南
1.什么是checkbox:
就是一个复选框,可以用like或者type来定义,为1个字符型变量。
它是parameter的一个选项,parameterxxxascheckbox就可以在选择屏幕上显示一个复选框。
2.什么是listbox:
就是一个下拉列表,你可以在这个列表中选择一条记录进行某种操作。
也是parameter的一个选项,parameterxxxaslistbox就可以在选择屏幕上显示一个下拉列表。
3.如何使用:
下面我们用一个程序来说明这两者的使用方法。
REPORTZ_TEXT
TYPE-POOLS:
VRM. “存放combobox内容的typepool
DATA:
NAMETYPEVRM_ID, “listbox的名称
LISTTYPEVRM_VALUES, “listbox的值
VALUELIKELINEOFLIST.“listbox的结构
*定义checkbox,指定command,为了能够响应选择屏幕中值的改变
PARAMETERS:
P_CB1TYPECASCHECKBOXDEFAULT‘X’USER-COMMANDCHECK,
P_CB2TYPECASCHECKBOXDEFAULT‘X’USER-COMMANDCHECK.
*定义listbox,必须指定visiblelength
PARAMETERS:
P_LIST1(10)TYPECASLISTBOX
VISIBLELENGTH15,
P_LIST2(20)TYPEC ASLISTBOX
VISIBLELENGTH25.
*开始执行
ATSELECTION-SCREENOUTPUT.
*–〉选择1而没有选择2
IFP_CB1=‘X’ANDP_CB2=”.
*—〉向listbox里面添加值
REFRESHLIST.
VALUE-KEY=’11′. “这个就是变量P_LIST的值
VALUE-TEXT=’11′. “这个是text
APPENDVALUETOLIST.
VALUE-KEY=’22′.
VALUE-TEXT=’22′.
APPENDVALUETOLIST.
VALUE-KEY=’33′.
VALUE-TEXT=’33′.
APPENDVALUETOLIST.
*—〉调用函数显示listbox里面的值
CALLFUNCTION‘VRM_SET_VALUES’
EXPORTING
ID =‘P_LIST1′
VALUES=LIST.
*—〉把第二个listbox的值清空,并且不能输入
CLEARP_LIST2.
LOOPATSCREEN.
IFSCREEN-NAME=‘P_LIST2′.
SCREEN-INPUT=0.
MODIFYSCREEN.
ENDIF.
ENDLOOP.
*–〉选择2,没有选择1,同上
ELSEIFP_CB2=‘X’ANDP_CB1=”.
REFRESHLIST.
VALUE-KEY=‘AAAAAAAAAAAAAAAAAAAA’.
VALUE-TEXT=‘AAAAAAAAAAAAAAAAAAAA’.
APPENDVALUETOLIST.
VALUE-KEY=‘BBBBBBBBBBBBBBBBBBBB’.
VALUE-TEXT=‘BBBBBBBBBBBBBBBBBBBB’.
APPENDVALUETOLIST.
VALUE-KEY=‘CCCCCCCCCCCCCCCCCCCC’.
VALUE-TEXT=‘CCCCCCCCCCCCCCCCCCCC’.
APPENDVALUETOLIST.
APPENDVALUETOLIST.
CALLFUNCTION‘VRM_SET_VALUES’
EXPORTING
ID =‘P_LIST2′
VALUES=LIST.
*—〉清空listbox1的值
CLEARP_LIST1.
LOOPATSCREEN.
IFSCREEN-NAME=‘P_LIST1′.
SCREEN-INPUT=0.
MODIFYSCREEN.
ENDIF.
ENDLOOP.
*–〉都没有选择,都清空且不能输入
ELSEIFP_CB1=”ANDP_CB2=”.
CLEAR:
P_LIST1,P_LIST2.
LOOPATSCREEN.
IFSCREEN-NAME=‘P_LIST1′.
SCREEN-INPUT=0.
MODIFYSCREEN.
ENDIF.
ENDLOOP.
LOOPATSCREEN.
IFSCREEN-NAME=‘P_LIST2′.
SCREEN-INPUT=0.
MODIFYSCREEN.
ENDIF.
ENDLOOP.
*–〉都选,执行
ELSEIFP_CB1=‘X’ANDP_CB2=‘X’.
REFRESHLIST.
VALUE-KEY=’11′.
VALUE-TEXT=’11′.
APPENDVALUETOLIST.
VALUE-KEY=’22′.
VALUE-TEXT=’22′.
APPENDVALUETOLIST.
VALUE-KEY=’33′.
VALUE-TEXT=’33′.
APPENDVALUETOLIST.
CALLFUNCTION‘VRM_SET_VALUES’
EXPORTING
ID =‘P_LIST1′
VALUES=LIST.
REFRESHLIST.
VALUE-KEY=‘AAAAAAAAAAAAAAAAAAAA’.
VALUE-TEXT=‘AAAAAAAAAAAAAAAAAAAA’.
APPENDVALUETOLIST.
VALUE-KEY=‘BBBBBBBBBBBBBBBBBBBB’.
VALUE-TEXT=‘BBBBBBBBBBBBBBBBBBBB’.
APPENDVALUETOLIST.
VALUE-KEY=‘CCCCCCCCCCCCCCCCCCCC’.
VALUE-TEXT=‘CCCCCCCCCCCCCCCCCCCC’.
APPENDVALUETOLIST.
CALLFUNCTION‘VRM_SET_VALUES’
EXPORTING
ID =‘P_LIST2′
VALUES=LIST.
ENDIF.
START-OF-SELECTION.
*–〉输出到第二屏幕看看
WRITE:
P_LIST1,/P_LIST2.
2、ABAPmemory中的Export和Import
可以用于SUBMIT方式调用其他ABAP程序后,数据只能通过某个透明表暂存,在由主程序查询透明表取得结果的情况,
这样做的好处是不用在通过透明表转数据了,先把子程序中的数据EXPORT到一块命名的内存空间,然后在主程序里
IMPORT命名的内存空间的值到内表中。
。
REPORTz_barry_export_import.
DATA:
BEGINOFitab1OCCURS0,
ff(10),
ENDOFitab1.
DATA:
itab2LIKEitab1OCCURS0WITHHEADERLINE.
DATA:
str1TYPEstring,
str2TYPEstring.
APPEND'1'TOitab1.
APPEND'2'TOitab1.
str1='sssssssssss'.
***如果是同名的对象,可以这么写:
EXPORTitab1TOMEMORYID'M1'.
FREEitab1.
IMPORTitab1FROMMEMORYID'M1'.
LOOPATitab1.
WRITE/itab1-ff.
ENDLOOP.
***如果不是同名的对象,需要加上一个对象名
EXPORTa=itab1b=str1TOMEMORYID'M2'.
IMPORTa=itab2b=str2FROMMEMORYID'M2'.
LOOPATitab2.
WRITE/itab2-ff.
ENDLOOP.WRITE/str2.
3、ABAP获得程序的激活次数或者传输次数的方法
REPOSRC:
ReportSourceCode
DATASUMTYPEI.
PARAMETERSP_NAMETYPESTRING.
SELECTCOUNT(*)
FROME070
INNERJOINE071ONE071~TRKORR=E070~TRKORR
INTOSUM
WHEREE071~OBJ_NAME=P_NAME
ANDE071~LOCKFLAG<>''
ANDE070~TRSTATUS='R'.
REPOSRC这个表很有意思,它包含任何一个程序的激活次数,即字段VERN(版本)
其中的字段R3STATE如果是A则表明是激活的版本。
如果是I表明是被修改的状态,如果最新的版本没有被激活,则会出现R3STATE字段有A和I的两
组数据。
其中I为最新的保存数据的记录,VERN记录修改的次数。
R3STATE字段为A的则是记录前一次被激活的版本数据,VERN对应的版本号。
表REPOSRC对应一个视图这个视图是PROGDIR.
使用这个视图对我们的控制会更有帮助,其中这个视图标签SELECITONSCONDITIONS中进行限制如下:
TABLEFIELDNAME操作COMPARISONVALUEAND/OR
REPOSRCR3STATEEQ'A'OR
REPOSRCR3STATEEQ'I'
存放变式的表VARI这是一张数据簇表。
4、ABAP生成ZIP压缩文件的代码
data:
iziptypereftocl_abap_zip,
conttypexstring,
xzip_filetypexstring,
binary_tabtypestandardtableofx255.
data:
itabtypestandardtableofsdokcntasc.
start-of-selection.
do20times.
append'ABAP开发'toitab.
enddo.
callfunction'SCMS_TEXT_TO_XSTRING'
exporting
mimetype='text/html;charset=gb2312'
importing
buffer=cont
tables
text_tab=itab
exceptions
failed=1
others=2.
createobjectizip.
callmethodizip->add
exporting
name='ITAB.TXT'
content=cont.
callmethodizip->save
receiving
zip=xzip_file.
callfunction'SCMS_XSTRING_TO_BINARY'
exporting
buffer=xzip_file
tables
binary_tab=binary_tab.
callfunction'GUI_DOWNLOAD'
exporting
filename='C:
\sf.zip'
filetype='BIN'
tables
data_tab=binary_tab.
5、ABAP程序打印SpoolRequest到PDF
其实打印到pdf完全不需要程序,只要你装了pdf打印生成软件,打印的时候选择pdf也就行了。
本文的程序非我所做,不过也不知道从哪里拿到的了。
在不经意间看到了,于是在机器上测试下,发现有些地方需要更正。
改好了,测试好了,放上来分享给大家。
程序源代码如下:
*&------------------------------------------------------------------*
*&Report ZBOB_R2PDF
*&
*&------------------------------------------------------------------*
*&
*&
*&------------------------------------------------------------------*
REPORT zbob_r2pdf.
*--Enhancements:
onlyallowtoberunwithvariant. Thencalled
*--programwillbetransparenttousers
*--TABLES
TABLES:
tsp01.
*--STRUCTURES
DATA:
mstr_print_parmsLIKEpri_params,
mc_valid
(1) TYPEc,
mi_bytecount TYPEi,
mi_length TYPEi,
mi_rqident LIKEtsp01-rqident.
*--INTERNALTABLES
DATA:
mtab_pdf LIKEtlineOCCURS0WITHHEADERLINE,
mc_filenameLIKErlgrap-filename.
*--SELECTIONSCREEN
PARAMETERS:
p_repidLIKEsy-repid,"Reporttoexecute
p_linszLIKEsy-linszDEFAULT132,"Linesize
p_paartLIKEsy-paartDEFAULT'X_65_132'. "PaperFormat
START-OF-SELECTION.
CONCATENATE'd:
\'
p_repid
'.pdf'
INTOmc_filename.
*--SetupthePrintParmaters
CALLFUNCTION'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.
*--Makesurethataprinterdestinationhasbeensetup
*--IfthisisnotdonethePDFfunctionmoduleABENDS
IFmstr_print_parms-pdest=space.
mstr_print_parms-pdest='LOCL'.
ENDIF.
*--Explicitlysetlinewidth,andoutputformatsothat
*--thePDFconversioncomesoutOK
mstr_print_parms-linsz=p_linsz.
mstr_print_parms-paart=p_paart.
SUBMIT(p_repid)TOSAP-SPOOLWITHOUTSPOOLDYNPRO
SPOOLPARAMETERSmstr_print_parms
VIASELECTION-SCREEN
ANDRETURN.
*--Findoutwhatthespoolnumberisthatwasjustcreated
PERFORMget_spool_numberUSINGsy-repid
sy-uname
CHANGINGmi_rqident.
*--ConvertSpooltoPDF
CALLFUNCTION'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 =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:
lftypestring.
lf=mc_filename.
CALLFUNCTION'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 =''
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ABAP 技巧 代码 汇总