ABAP动态生成内表_第1页
ABAP动态生成内表_第2页
ABAP动态生成内表_第3页
ABAP动态生成内表_第4页
ABAP动态生成内表_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ABAP动态生成内表的几种方法最近要写个程序,既有更新的,也有删除的,需要涉及到很多系统表,如果一个表一个表进行更新或者删除太慢了,于是就想通过创建动态内表来实现这些功能,在网上找了一些资料,经过多次尝试,终于测试成功了。网上讲述的创建动态内表的方法大致有两种。我做了一下测试,源代码附后。在这里提醒大家一点,在做动态更新程序的时候,要注意两点:1. 使用modify(p_tabname)from<dyn_wa>.的时候,一定要确定要更新的字段是不是系统表的关键字段,如果是关键字段的话,需要先删除这条记录,delete(p_tabname)from<dyn_wa>.再进行

2、modify,因为modify进行更新的时候如果不存在就新增,这点一定要注意。2. 如果使用UPDATE进行更新,对于非主键字段的改变还是可以的,但是对于主键字段,只能用MODIFY了。直接对SAP数据做UPDATE和MODIFY是很危险的,不到万不得已,最好不要做这些操作。如果万一出问题,会很严重的。这里就不用更新和删除程序作为测试程序了,直接做一个动态内表ALV显示的测试程序,道理和更新与删除差不多,希望对有这方面需求的朋友有所帮助!3. 最近从同事程序中发现另一种创建动态内表的简便方法,附3中为测试代码。觉得这个方法更简单些附1:REPORTZCL_TEST026.TYPE-POOLS:

3、abap.PARAMETERSp_nameTYPEtabname.DATAlt_tableTYPETABLEOFdfies."字段结构表DATAls_tableTYPEdfies.DATAlr_strucTYPEREFTOcl_abap_structdescr.DATAlr_tableTYPEREFTOcl_abap_tabledescr.DATAlr_typeTYPEREFTOcl_abap_typedescr.DATAlr_dataTYPEREFTOcl_abap_datadescr.DATAlt_compTYPEabap_component_tab.DATAls_compLIK

4、ELINEOFlt_comp.DATAdyn_waTYPEREFTOdata.DATAdyn_tableTYPEREFTOdata.DATAl_stringTYPEstring.FIELD-SYMBOLS:<dyn_table>TYPESTANDARDTABLE,<dyn_wa>TYPEANY.*1.获取表中的字段结构CALLFUNCTION'DDIFNAMETABGET'EXPORTINGtabname=p_nameTABLESdfies_tab=lt_tableEXCEPTIONSnot_found=1OTHERS=2.IFsy-subrc<&

5、gt;0.MESSAGEIDsy-msgidTYPEsy-msgtyNUMBERsy-msgnoWITHsy-msgv1sy-msgv2sy-msgv3sy-msgv4.ENDIF.LOOPATlt_tableINTOls_table.CONCATENATEls_table-tabname'-'ls_table-fieldnameINTOl_string.ls_comp-name=ls_table-fieldname.*读取字段类型CALLMETHODcl_abap_datadescr=>describe_by_nameEXPORTINGp_name=l_stringRE

6、CEIVINGp_descr_ref=lr_typeEXCEPTIONStype_not_found=1OTHERS=2.IFsy-subrc<>0.MESSAGEIDsy-msgidTYPEsy-msgtyNUMBERsy-msgnoWITHsy-msgv1sy-msgv2sy-msgv3sy-msgv4.ENDIF.ls_comp-type?=lr_type.APPENDls_compTOlt_comp.CLEARls_comp.ENDLOOP.*根据字段目录创建动态结构类型CALLMETHODcl_abap_structdescr=>createEXPORTINGp_c

7、omponents=lt_compRECEIVINGp_result=lr_struc.*根据动态结构创建动态内表类型CALLMETHODcl_abap_tabledescr=>createEXPORTINGp_line_type=lr_strucRECEIVINGp_result=lr_table.*参照动态结构类型和动态内表类型创建内表与工作区CREATEDATAdyn_waTYPEHANDLElr_struc.CREATEDATAdyn_tableTYPEHANDLElr_table.*指定内表与工作区到字段符号ASSIGNdyn_wa->*TO<dyn_wa>.

8、ASSIGNdyn_table->*TO<dyn_table>.*从动态表中取数到动态内表中SELECT*INTOCORRESPONDINGFIELDSOFTABLE<dyn_table>UPTO100ROWSFROM(p_name).*显示内表中的数据CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTINGstructure_name=p_nameTABLESt_outtab=<dyn_table>EXCEPTIONSprogram_error=1OTHERS=2.IFsy-subrc<>

9、0.MESSAGEIDsy-msgidTYPEsy-msgtyNUMBERsy-msgnoWITHsy-msgv1sy-msgv2sy-msgv3sy-msgv4.ENDIF.附2:REPORTZCL_TEST027.TYPE-POOLS:abap.PARAMETERSp_nameTYPEtabname.DATA:d_refTYPEREFTOdata,lt_alv_catTYPETABLEOFlvc_s_fcat,ls_alv_catLIKELINEOFlt_alv_cat.DATA:lt_tableLIKETABLEOFdntab.DATA:ls_tableTYPEdntab.FIELD-S

10、YMBOLS:<dyn_table>TYPEtable,<dyn_wa>TYPEANY,<dyn_field>TYPEANY.*取出表结构的字段目录CALLFUNCTION'NAMETAB_GET'EXPORTINGlangu=sy-langutabname=p_nameTABLESnametab=lt_tableEXCEPTIONSno_texts_found=1.*根据取出的字段目录生成参考字段目录LOOPATlt_tableINTOls_table.ls_alv_cat-fieldname=ls_table-fieldname.ls_a

11、lv_cat-ref_table=p_name.ls_alv_cat-ref_field=ls_table-fieldname.APPENDls_alv_catTOlt_alv_cat.CLEARls_alv_cat.ENDLOOP.*内表创建CALLMETHODcl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog=lt_alv_catIMPORTINGep_table=d_ref.*指定生成的内表到字段符号ASSIGNd_ref->*TO<dyn_table>.*从动态表中取数到动态内表中S

12、ELECT*INTOCORRESPONDINGFIELDSOFTABLE<dyn_table>UPTO100ROWSFROM(p_name).*显示内表中的数据CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTINGstructure_name=p_nameTABLESt_outtab=<dyn_table>EXCEPTIONSprogram_error=1OTHERS=2.IFsy-subrc<>0.MESSAGEIDsy-msgidTYPEsy-msgtyNUMBERsy-msgnoWITHsy-msgv

13、1sy-msgv2sy-msgv3sy-msgv4.ENDIF.附3:REPORTZCL_TEST028.PARAMETERSp_nameTYPEtabname.DATA:dyn_tableTYPEREFTOdata.DATA:dyn_waTYPEREFTOdata.FIELD-SYMBOLS:<dyn_table>TYPEtable,<dyn_wa>TYPEANY.*创建动态表结构CREATEDATAdyn_tableTYPETABLEOF(p_name).*创建动态内表ASSIGNdyn_table->*TO<dyn_table>.*创建动态工作区结构CREATEDATAdyn_waLIKELINEOF<dyn_table>.*创建动态工作区ASSIGNdyn_wa->*TO<dyn_wa>.*从动态表中取数到动态内表中SELECT*INTOCORRESPONDINGFIELDSOFTABLE<dyn_table>UPTO100ROWSFROM(p_name).*对取出数据进行处理LOOPAT<dyn_table>assigning<dyn_wa>."内表数据处理ENDLOOP.*显示内表中的数据CALLFUNCTION'REUSE_ALV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论